diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + 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/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7bfef59 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..b26a87e --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,191 @@ +apply plugin: 'com.android.application' +apply plugin: 'com.google.gms.google-services' +apply plugin: 'jacoco-android' + +// load our keystore configuration +def keystore = new Properties() +keystore.load(new FileInputStream(rootProject.file("keystore.properties"))) + +android { + compileSdkVersion 29 + buildToolsVersion '29.0.3' + + defaultConfig { + applicationId "com.riseuplabs.ureport_rv" + minSdkVersion 21 + targetSdkVersion 29 + versionCode 1 + versionName "1.0.0" + multiDexEnabled = true + + buildConfigField "String", "BUILD_DISTRIBUTION", "\"RV\"" + + testInstrumentationRunner "io.rapidpro.surveyor.test.TestRunner" + testInstrumentationRunnerArgument 'notAnnotation', 'androidx.test.filters.FlakyTest' + } + signingConfigs { + release { + storeFile file(keystore['storeFile']) + storePassword keystore['storePassword'] + keyAlias keystore['keyAlias'] + keyPassword keystore['keyPassword'] + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.release + + } + debug { + testCoverageEnabled true + resValue("string", "PORT_NUMBER", "8081") + } + } + flavorDimensions 'version' + productFlavors { + rapidpro { + dimension 'version' + } + "$thirdparty.applicationId" { + dimension 'version' + applicationId thirdparty.applicationId + } + } + packagingOptions { + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/NOTICE.txt' + } + dexOptions { + javaMaxHeapSize "4g" + } + lintOptions { + abortOnError false + } + testOptions { + unitTests.returnDefaultValues = true + } +} + +repositories { + mavenLocal() + mavenCentral() + maven { url "https://jitpack.io" } + google() +} +android { + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } +} + +dependencies { + implementation project(':goflow') + + // google services + //noinspection issues with 1.1.1 https://issuetracker.google.com/issues/141132133 + //implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.appcompat:appcompat:1.2.0-beta01' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.exifinterface:exifinterface:1.2.0' + + // u-report and stories + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.preference:preference:1.1.1' + implementation 'com.google.android.material:material:1.1.0' + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + implementation 'com.akexorcist:RoundCornerProgressBar:2.0.3' + implementation 'com.github.florent37:viewanimator:1.1.0' + implementation 'de.hdodenhof:circleimageview:3.1.0' + implementation 'androidx.room:room-runtime:2.2.5' + implementation 'com.android.support:appcompat-v7:29.+' + annotationProcessor 'androidx.room:room-compiler:2.2.5' + implementation 'com.github.bumptech.glide:glide:4.10.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' + implementation 'com.github.traex.rippleeffect:library:1.3' + implementation 'com.github.skydoves:powermenu:2.1.2' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' + implementation 'com.yarolegovich:discrete-scrollview:1.4.9' + implementation 'com.airbnb.android:lottie:3.3.1' + implementation "com.andkulikov:transitionseverywhere:2.1.0" + implementation 'com.github.Cutta:GifView:1.4' + implementation 'com.github.ybq:Android-SpinKit:1.4.0' + implementation 'com.google.android.material:material:1.1.0' + implementation 'myatminsoe.mdetect.android:mdetect-android:3.2' + + + // rest api + implementation 'com.squareup.okhttp3:okhttp:3.12.1' + implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1' + implementation 'com.squareup.retrofit2:retrofit:2.5.0' + implementation 'com.squareup.retrofit2:converter-gson:2.5.0' + + // for location services + implementation 'com.google.android.gms:play-services-gcm:17.0.0' + implementation 'com.google.android.gms:play-services-location:17.0.0' + + // internationalization, language iso codes + implementation 'com.neovisionaries:nv-i18n:1.11' + + // apache commons + implementation 'org.apache.commons:commons-lang3:3.8.1' + //noinspection GradleDependency newer versions use java.nio methods not supported on older Android versions + implementation 'commons-io:commons-io:2.4' + + implementation 'com.vdurmont:semver4j:2.2.0' + + // Android M permissions + implementation 'com.greysonparrelli.permiso:permiso:0.3.0' + + // unit tests + testImplementation 'junit:junit:4.12' + + // instrumented tests + androidTestImplementation 'androidx.test:core:1.2.0' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-web:3.2.0' + androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' + androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.10.0' + //implementation 'com.android.support.constraint:constraint-layout:1.1.3' + + + implementation 'com.google.android.exoplayer:exoplayer-core:2.10.5' + implementation 'com.google.android.exoplayer:exoplayer-dash:2.10.5' + implementation 'com.google.android.exoplayer:exoplayer-ui:2.10.5' + + // database debug + debugImplementation 'com.amitshekhar.android:debug-db:1.0.6' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + + // Firebase Analytics + implementation 'com.google.firebase:firebase-analytics:17.4.3' +} + +task jacocoMergedReport(type: JacocoReport, dependsOn: ['testRapidproDebugUnitTest', 'createRapidproDebugCoverageReport']) { + + reports { + xml.enabled = true + html.enabled = true + } + + def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*'] + def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter) + def mainSrc = "${project.projectDir}/src/main/java" + + sourceDirectories = files([mainSrc]) + classDirectories = files([debugTree]) + executionData = fileTree(dir: "$buildDir", includes: [ + "jacoco/testRapidproDebugUnitTest.exec", + "outputs/code_coverage/rapidproDebugAndroidTest/connected/*coverage.ec" + ]) +} diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..a37d0df --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,40 @@ +{ + "project_info": { + "project_number": "259113623349", + "firebase_url": "https://ureport-app.firebaseio.com", + "project_id": "ureport-app", + "storage_bucket": "ureport-app.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:259113623349:android:acc195b3b16f92512e367c", + "android_client_info": { + "package_name": "com.riseuplabs.ureport_rv" + } + }, + "oauth_client": [ + { + "client_id": "259113623349-k92nt8hgenqja5koftu3otmi47srnkvr.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCKbLIwGmL-_QEv7IWvdto0cwaPx84qFcg" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "259113623349-k92nt8hgenqja5koftu3otmi47srnkvr.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/gradle/wrapper/gradle-wrapper.jar b/app/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/app/gradle/wrapper/gradle-wrapper.jar differ diff --git a/app/gradle/wrapper/gradle-wrapper.properties b/app/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..fc8ef5a --- /dev/null +++ b/app/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Dec 19 12:22:47 BDT 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/app/gradlew b/app/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/app/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/app/gradlew.bat b/app/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/app/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/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..bff88fe --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/android/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 *; +#} + +-keep class io.realm.annotations.RealmModule +-keep @io.realm.annotations.RealmModule class * +-dontwarn javax.** +-dontwarn io.realm.** + +# avoid crashes for 4.2.2 TECNO devices +-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;} \ No newline at end of file diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/SurveyorApplicationTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/SurveyorApplicationTest.java new file mode 100644 index 0000000..1760ea2 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/SurveyorApplicationTest.java @@ -0,0 +1,23 @@ +package io.rapidpro.surveyor; + +import org.junit.Test; + +import java.io.File; +import java.io.IOException; + +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +public class SurveyorApplicationTest extends BaseApplicationTest { + + @Test + public void getUriFromFile() throws IOException { + SurveyorApplication app = getSurveyor(); + + assertThat(getSurveyor().getUriForFile(new File(app.getUserDirectory(), "test.x")).toString(), is("content://io.rapidpro.surveyor.provider/shared/test.x")); + assertThat(getSurveyor().getUriForFile(new File(app.getSubmissionsDirectory(), "test.x")).toString(), is("content://io.rapidpro.surveyor.provider/shared/test_submissions/test.x")); + assertThat(getSurveyor().getUriForFile(new File(app.getExternalCacheDir(), "test.x")).toString(), is("content://io.rapidpro.surveyor.provider/cache/test.x")); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureAudioActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureAudioActivityTest.java new file mode 100644 index 0000000..afc87d1 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureAudioActivityTest.java @@ -0,0 +1,53 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Activity; +import android.app.Instrumentation; +import android.content.Intent; + +import org.junit.Rule; +import org.junit.Test; + +import java.io.File; + +import androidx.test.filters.FlakyTest; +import androidx.test.rule.ActivityTestRule; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.assertThat; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static org.hamcrest.CoreMatchers.is; + +public class CaptureAudioActivityTest extends BaseApplicationTest { + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(CaptureAudioActivity.class, true, false); + + @FlakyTest(detail = "Only works on newer emulators with microphone emulation") + @Test + public void capture() { + File output = new File(getSurveyor().getExternalCacheDir(), "audio.m4a"); + + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_MEDIA_FILE, output.getAbsolutePath()); + rule.launchActivity(intent); + + // start recording + onView(withId(R.id.button_capture)) + .check(matches(isDisplayed())) + .perform(click()); + + pause(); + + // stop recording + onView(withId(R.id.button_capture)).perform(click()); + + Instrumentation.ActivityResult result = rule.getActivityResult(); + + assertThat(result.getResultCode(), is(Activity.RESULT_OK)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureLocationActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureLocationActivityTest.java new file mode 100644 index 0000000..f448880 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CaptureLocationActivityTest.java @@ -0,0 +1,42 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Instrumentation; + +import org.junit.Rule; +import org.junit.Test; + +import androidx.test.filters.FlakyTest; +import androidx.test.rule.ActivityTestRule; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.junit.Assert.assertThat; + +public class CaptureLocationActivityTest extends BaseApplicationTest { + + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(CaptureLocationActivity.class); + + @FlakyTest(detail = "This test can only work after the Maps app has been opened and the T&C accepted") + @Test + public void capture() { + onView(withId(R.id.button_capture)) + .check(matches(isDisplayed())) + .perform(click()); + + Instrumentation.ActivityResult result = rule.getActivityResult(); + assertThat(result.getResultData(), is(not(nullValue()))); + + // emulators always return Google HQ + assertThat(result.getResultData().getDoubleExtra("latitude", 0.0d), is(37.4219983)); + assertThat(result.getResultData().getDoubleExtra("longitude", 0.0d), is(-122.084000)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/CreateAccountActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CreateAccountActivityTest.java new file mode 100644 index 0000000..8ee0bcc --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/CreateAccountActivityTest.java @@ -0,0 +1,202 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Activity; +import android.app.Instrumentation; +import android.content.Intent; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import java.io.IOException; + +import androidx.test.espresso.intent.Intents; +import androidx.test.espresso.intent.rule.IntentsTestRule; +import androidx.test.espresso.web.webdriver.Locator; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import okhttp3.mockwebserver.RecordedRequest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.intent.Intents.intended; +import static androidx.test.espresso.intent.Intents.intending; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent; +import static androidx.test.espresso.matcher.ViewMatchers.assertThat; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.web.assertion.WebViewAssertions.webContent; +import static androidx.test.espresso.web.assertion.WebViewAssertions.webMatches; +import static androidx.test.espresso.web.matcher.DomMatchers.hasElementWithId; +import static androidx.test.espresso.web.sugar.Web.onWebView; +import static androidx.test.espresso.web.webdriver.DriverAtoms.findElement; +import static androidx.test.espresso.web.webdriver.DriverAtoms.getText; +import static androidx.test.espresso.web.webdriver.DriverAtoms.webClick; +import static androidx.test.espresso.web.webdriver.DriverAtoms.webKeys; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; + + +public class CreateAccountActivityTest extends BaseApplicationTest { + + @Rule + public IntentsTestRule rule = new IntentsTestRule(CreateAccountActivity.class, true, false) { + @Override + protected void afterActivityLaunched() { + // expresso-web tests require a webview with Javascript enabled + onWebView(withId(R.id.webview)).forceJavascriptEnabled(); + } + }; + + @Before + public void startTrackingIntents() { + Intents.init(); + } + + @After + public void stopTrackingIntents() { + Intents.release(); + } + + @Test + public void showWebView() throws IOException, InterruptedException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + + rule.launchActivity(null); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/org/surveyor/")); + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getPath(), is("/favicon.ico")); // mockserver automatically stubs this + + onWebView().check(webContent(hasElementWithId("id_surveyor_password"))); + } + + @Test + public void showErrorOnIncorrectPassword() throws IOException, InterruptedException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_post_wrong_password, "text/html", 200); + + rule.launchActivity(null); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/org/surveyor/")); + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getPath(), is("/favicon.ico")); // mockserver automatically stubs this + + onWebView().withElement(findElement(Locator.ID, "id_surveyor_password")) + .perform(webClick()) + .perform(webKeys("wrong")); + onWebView().withElement(findElement(Locator.CLASS_NAME, "btn")) + .perform(webClick()); + + RecordedRequest request3 = mockServer.takeRequest(); + assertThat(request3.getPath(), is("/org/surveyor/")); + + onWebView().withElement(findElement(Locator.CSS_SELECTOR, ".errorlist li")) + .check(webMatches(getText(), containsString("Invalid surveyor password, please check with your project leader and try again."))); + } + + @Test + public void showStep2OnCorrectPassword() throws IOException, InterruptedException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_post_correct_password, "text/html", 200); + + rule.launchActivity(null); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/org/surveyor/")); + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getPath(), is("/favicon.ico")); // mockserver automatically stubs this + + onWebView().withElement(findElement(Locator.ID, "id_surveyor_password")) + .perform(webClick()) + .perform(webKeys("surv3ys")); + onWebView().withElement(findElement(Locator.CLASS_NAME, "btn")) + .perform(webClick()); + + RecordedRequest request3 = mockServer.takeRequest(); + assertThat(request3.getPath(), is("/org/surveyor/")); + + onWebView().check(webContent(hasElementWithId("id_first_name"))); + onWebView().check(webContent(hasElementWithId("id_last_name"))); + } + + @Test + public void loginIfStep2Successful() throws IOException, InterruptedException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_post_correct_password, "text/html", 200); + + rule.launchActivity(null); + + // step 1 + + onWebView().withElement(findElement(Locator.ID, "id_surveyor_password")) + .perform(webClick()) + .perform(webKeys("surv3ys")); + onWebView().withElement(findElement(Locator.CLASS_NAME, "btn")) + .perform(webClick()); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/org/surveyor/")); + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getPath(), is("/favicon.ico")); + RecordedRequest request3 = mockServer.takeRequest(); + assertThat(request3.getPath(), is("/org/surveyor/")); + + // step 2 + + mockServerRedirect("/org/surveyor/?org=Nyaruka&token=abc123&user=bob@nyaruka.com&uuid=dc8123a1-168c-4962-ab9e-f784f3d804a2"); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_org_get, "text/html", 200); + + onWebView().withElement(findElement(Locator.ID, "id_first_name")) + .perform(webClick()) + .perform(webKeys("Bob")); + onWebView().withElement(findElement(Locator.ID, "id_last_name")) + .perform(webClick()) + .perform(webKeys("Smith")); + onWebView().withElement(findElement(Locator.ID, "id_email")) + .perform(webClick()) + .perform(webKeys("bob@nyaruka.com")); + onWebView().withElement(findElement(Locator.ID, "id_password")) + .perform(webClick()) + .perform(webKeys("Qwerty123")); + + onWebView().withElement(findElement(Locator.CLASS_NAME, "btn")) + .perform(webClick()); + + RecordedRequest request4 = mockServer.takeRequest(); + assertThat(request4.getPath(), is("/org/surveyor/")); + RecordedRequest request5 = mockServer.takeRequest(); + assertThat(request5.getPath(), is("/org/surveyor/?org=Nyaruka&token=abc123&user=bob@nyaruka.com&uuid=dc8123a1-168c-4962-ab9e-f784f3d804a2")); + RecordedRequest request6 = mockServer.takeRequest(); + assertThat(request6.getPath(), is("/api/v2/org.json")); + + intended(hasComponent(OrgActivity.class.getName())); + } + + /** + * @see BaseActivity#sendBugReport() + *

+ * tested here because we need a IntentsTestRule based test + */ + @Test + public void sendBugReport() throws IOException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.org_surveyor_get, "text/html", 200); + + // mock the intent to pick an app to send the bug report too + intending(hasAction(Intent.ACTION_CHOOSER)).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); + + rule.launchActivity(null); + + openOptionsMenu(); + onView(withText("Bug Report")) + .perform(click()); + + // check intent was launched + intended(hasAction(Intent.ACTION_CHOOSER)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/FlowActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/FlowActivityTest.java new file mode 100644 index 0000000..a0b7073 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/FlowActivityTest.java @@ -0,0 +1,65 @@ +package io.rapidpro.surveyor.activity; + +import android.content.Intent; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import java.io.IOException; +import java.util.Collections; + +import androidx.test.espresso.intent.rule.IntentsTestRule; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.intent.Intents.intended; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.CoreMatchers.allOf; + +public class FlowActivityTest extends BaseApplicationTest { + + private static final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + private static final String FLOW_UUID = "bdd61538-5f50-4836-a8fb-acaafd64ddb1"; + + @Rule + public IntentsTestRule rule = new IntentsTestRule<>(FlowActivity.class, true, false); + + @Before + public void ensureLoggedIn() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + login("bob@nyaruka.com", Collections.singleton(ORG_UUID)); + } + + @Test + public void showFlowDetails() { + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, FLOW_UUID); + + rule.launchActivity(intent); + + onView(withId(R.id.text_flow_name)).check(matches(withText("Two Questions"))); + onView(withId(R.id.text_flow_revision)).check(matches(withText("(v24)"))); + onView(withId(R.id.text_flow_questions)).check(matches(withText("2 Questions"))); + + // check that clicking start launches the run activity + onView(withText("Start Flow")).perform(click()); + + intended( + allOf( + hasComponent(RunActivity.class.getName()), + hasExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID), + hasExtra(SurveyorIntent.EXTRA_FLOW_UUID, FLOW_UUID) + ) + ); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/LoginActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/LoginActivityTest.java new file mode 100644 index 0000000..227c625 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/LoginActivityTest.java @@ -0,0 +1,93 @@ +package io.rapidpro.surveyor.activity; + +import android.content.Intent; + +import org.junit.Rule; +import org.junit.Test; + +import androidx.test.rule.ActivityTestRule; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; +import static androidx.test.espresso.action.ViewActions.typeText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.CoreMatchers.not; + +public class LoginActivityTest extends BaseApplicationTest { + + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(LoginActivity.class, true, false); + + @Test + public void showLoginForm() { + rule.launchActivity(null); + + onView(withId(R.id.text_error_message)).check(matches(not(isDisplayed()))); + onView(withId(R.id.email)).check(matches(isDisplayed())); + onView(withId(R.id.password)).check(matches(isDisplayed())); + } + + @Test + public void showErrorIfAuthenticationFails() { + rule.launchActivity(null); + + mockServerResponse("", "text/html", 502); + mockServerResponse("", "text/html", 500); + mockServerResponse("", "text/html", 404); + mockServerResponse("", "text/html", 403); + + onView(withId(R.id.email)).perform(click(), typeText("bob@nyaruka.com"), closeSoftKeyboard()); + onView(withId(R.id.password)).perform(click(), typeText("Qwerty123"), closeSoftKeyboard()); + onView(withId(R.id.email_sign_in_button)).perform(click()); + + pause(); + + onView(withId(R.id.text_error_message)) + .check(matches(isDisplayed())) + .check(matches(withText("Could not contact server. Check your network connection and try again."))); + + onView(withId(R.id.email_sign_in_button)).perform(click()); + + onView(withId(R.id.text_error_message)) + .check(matches(withText("Server error, please try again later."))); + + onView(withId(R.id.email_sign_in_button)).perform(click()); + + onView(withId(R.id.text_error_message)) + .check(matches(withText("Server is unavailable. Please check your settings or try again later."))); + + onView(withId(R.id.email_sign_in_button)).perform(click()); + + onView(withId(R.id.text_error_message)) + .check(matches(withText("Invalid login. Check your username and password and try again."))); + } + + @Test + public void showPrevUsernameIfSet() { + getSurveyor().setPreference(SurveyorPreferences.PREV_USERNAME, "bob@nyaruka.com"); + + rule.launchActivity(null); + + onView(withId(R.id.email)).check(matches(withText("bob@nyaruka.com"))); + } + + @Test + public void showErrorIfInIntent() { + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ERROR, "I'm an error!"); + + rule.launchActivity(intent); + + onView(withId(R.id.text_error_message)) + .check(matches(isDisplayed())) + .check(matches(withText("I'm an error!"))); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/OrgActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/OrgActivityTest.java new file mode 100644 index 0000000..0adcbfe --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/OrgActivityTest.java @@ -0,0 +1,143 @@ +package io.rapidpro.surveyor.activity; + +import android.content.Intent; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import java.io.IOException; +import java.util.Collections; + +import androidx.test.espresso.intent.rule.IntentsTestRule; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.data.SubmissionService; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.intent.Intents.intended; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.not; + +public class OrgActivityTest extends BaseApplicationTest { + + private static final String ORG_UUID = "dc8123a1-168c-4962-ab9e-f784f3d804a2"; + + @Rule + public IntentsTestRule rule = new IntentsTestRule<>(OrgActivity.class, true, false); + + @Before + public void ensureLoggedIn() { + login("bob@nyaruka.com", Collections.singleton(ORG_UUID)); + } + + @Test + public void showDownloadConfirmationIfAssetsNotDownloaded() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, 0, 0); + + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + + rule.launchActivity(intent); + + onView(withText(R.string.confirm_org_download)).check(matches(isDisplayed())); + + onView(withText("No")) + .check(matches(isDisplayed())) + .perform(click()); + + /* + + TODO test refresh and list update, maybe https://medium.com/azimolabs/wait-for-it-idlingresource-and-conditionwatcher-602055f32356 + + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_org_get, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_fields_get_page_1, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_fields_get_page_2, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_groups_get, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_flows_get, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_definitions_get, "application/json", 200); + + onView(withText("Yes")) + .check(matches(isDisplayed())) + .perform(click()); + */ + } + + @Test + public void showRefreshConfirmationIfAssetsOutOfDate() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows_v12, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + + rule.launchActivity(intent); + + onView(withText(R.string.confirm_org_refresh_old)).check(matches(isDisplayed())); + } + + @Test + public void dontShowDownloadConfirmationIfAssetsDownloaded() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + + rule.launchActivity(intent); + + onView(withText(R.string.confirm_org_download)).check(doesNotExist()); + + // check the flows are already listed + onView(withText("Contact Details")).check(matches(isDisplayed())); + onView(withText("Two Questions")).check(matches(isDisplayed())); + onView(withText("Multimedia")).check(matches(isDisplayed())); + + // we have no pending submissions at this point so no submit button + onView(withId(R.id.button_pending)).check(matches(not(isDisplayed()))); + + // check that clicking a flow launches the flow activity + onView(withText("Two Questions")).perform(click()); + + intended( + allOf( + hasComponent(FlowActivity.class.getName()), + hasExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID), + hasExtra(SurveyorIntent.EXTRA_FLOW_UUID, "bdd61538-5f50-4836-a8fb-acaafd64ddb1") + ) + ); + } + + @Test + public void showSubmitIfHasSubmissions() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Org org = getSurveyor().getOrgService().get(ORG_UUID); + Flow flow1 = org.getFlow("bdd61538-5f50-4836-a8fb-acaafd64ddb1"); + + SubmissionService svc = getSurveyor().getSubmissionService(); + Submission sub1 = svc.newSubmission(org, flow1); + sub1.complete(); + Submission sub2 = svc.newSubmission(org, flow1); + sub2.complete(); + svc.newSubmission(org, flow1); + + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + + rule.launchActivity(intent); + + onView(withId(R.id.pending_submission)).check(matches(isDisplayed())); + onView(withId(R.id.button_pending)).check(matches(withText("2"))); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/RunActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/RunActivityTest.java new file mode 100644 index 0000000..2fb4f99 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/RunActivityTest.java @@ -0,0 +1,309 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Activity; +import android.app.Instrumentation; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import androidx.test.espresso.intent.ActivityResultFunction; +import androidx.test.espresso.intent.rule.IntentsTestRule; +import androidx.test.filters.FlakyTest; + +import org.apache.commons.io.FileUtils; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.utils.SurveyUtils; +import io.rapidpro.surveyor.widget.ChatBubbleView; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; +import static androidx.test.espresso.action.ViewActions.pressBack; +import static androidx.test.espresso.action.ViewActions.typeText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.intent.Intents.intending; +import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent; +import static androidx.test.espresso.intent.matcher.IntentMatchers.toPackage; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isRoot; +import static androidx.test.espresso.matcher.ViewMatchers.withClassName; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withParent; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; +import static org.hamcrest.CoreMatchers.endsWith; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize; +import static org.hamcrest.core.AllOf.allOf; +import static org.junit.Assert.assertThat; + + +@FlakyTest(detail = "need to get screencaptures working to see why these tests often fail on Travis") +public class RunActivityTest extends BaseApplicationTest { + + private static final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + + @Rule + public IntentsTestRule rule = new IntentsTestRule<>(RunActivity.class, true, false); + + @Before + public void ensureLoggedIn() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + login("bob@nyaruka.com", Collections.singleton(ORG_UUID)); + } + + @Test + public void twoQuestions() throws IOException { + launchForFlow("bdd61538-5f50-4836-a8fb-acaafd64ddb1"); + + onView(allOf(withParent(withId(R.id.chat_history)), withClassName(is(ChatBubbleView.class.getName())))) + .check(matches(isDisplayed())); + onView(allOf(withParent(withClassName(is(ChatBubbleView.class.getName()))), withId(R.id.text_message))) + .check(matches(withText("What is your favorite beer?"))); + + sendTextReply("club"); + + onView(allOf(withId(R.id.text_message), withText("club"))) + .check(matches(isDisplayed())); + onView(allOf(withId(R.id.text_message), withText("Club is a great beer! What is your favorite color?"))) + .check(matches(isDisplayed())); + + // press back but cancel rather than lose this submission + onView(withId(R.id.chat_compose)).perform(closeSoftKeyboard()); + onView(isRoot()).perform(pressBack()); + onView(withText("No")).perform(click()); + + // do same from options menu + openOptionsMenu(); + onView(withText(R.string.action_cancel)).perform(click()); + onView(withText("No")).perform(click()); + + sendTextReply("red"); + + onView(allOf(withId(R.id.text_message), withText("red"))) + .check(matches(isDisplayed())); + onView(allOf(withId(R.id.text_message), withText("Ok let's go get some Red Club!"))) + .check(matches(isDisplayed())); + + // check session is now complete + onView(withText("Flow complete")).check(matches(isDisplayed())); + onView(withText("Save")).check(matches(isDisplayed())); + onView(withText("Discard")).check(matches(isDisplayed())); + + // we should have a incomplete submission + Org org = getSurveyor().getOrgService().get(ORG_UUID); + assertThat(getSurveyor().getSubmissionService().getCompletedCount(org), is(0)); + + // unless we save it + onView(withText("Save")).perform(click()); + + assertThat(getSurveyor().getSubmissionService().getCompletedCount(org), is(1)); + } + + @Test + public void multimedia() throws IOException { + launchForFlow("e54809ba-2f28-439b-b90b-c623eafa05ae"); + + mockMediaCapturing(); + + onView(allOf(withId(R.id.text_message), withText("Hi there, please send a selfie"))) + .check(matches(isDisplayed())); + + onView(withId(R.id.container_request_media)) + .check(matches(isDisplayed())) + .perform(click()); + + // should have a single incomplete submission + File flowDir = SurveyUtils.mkdir(getSurveyor().getUserDirectory(), "test_submissions", ORG_UUID, "e54809ba-2f28-439b-b90b-c623eafa05ae"); + File[] submissionDirs = flowDir.listFiles(); + assertThat(submissionDirs, arrayWithSize(1)); + + // with a single media file + File mediaDir = new File(submissionDirs[0], "media"); + assertThat(mediaDir.listFiles(), arrayWithSize(1)); + + File capturedImage = mediaDir.listFiles()[0]; + assertThat(capturedImage.getAbsolutePath(), endsWith(".jpg")); + + // check that image was scaled and rotated + Bitmap capturedBitmap = BitmapFactory.decodeFile(capturedImage.getAbsolutePath()); + assertThat(capturedBitmap.getWidth(), is(1024)); + assertThat(capturedBitmap.getHeight(), is(682)); + + onView(allOf(withId(R.id.text_message), withText("Now send a video"))) + .check(matches(isDisplayed())); + + onView(withId(R.id.container_request_media)) + .check(matches(isDisplayed())) + .perform(click()); + + onView(allOf(withId(R.id.text_message), withText("Now send an audio recording"))) + .check(matches(isDisplayed())); + + onView(withId(R.id.container_request_media)) + .check(matches(isDisplayed())) + .perform(click()); + + onView(allOf(withId(R.id.text_message), withText("Finally please send your location"))) + .check(matches(isDisplayed())); + + onView(withId(R.id.container_request_media)) + .check(matches(isDisplayed())) + .perform(click()); + + onView(withText("Save")).check(matches(isDisplayed())).perform(click()); + } + + @Test + public void contactDetails() { + launchForFlow("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec"); + + onView(allOf(withId(R.id.text_message), withText("Hi there. What's your name?"))) + .check(matches(isDisplayed())); + + sendTextReply("Bob"); + + onView(allOf(withId(R.id.text_message), withText("Thanks Bob. What's your phone number?"))) + .check(matches(isDisplayed())); + + sendTextReply("+593979123456"); + + onView(allOf(withId(R.id.text_message), withText("Finally, what is your age?"))) + .check(matches(isDisplayed())); + + sendTextReply("37"); + + onView(withText("Save")).check(matches(isDisplayed())).perform(click()); + } + + private void launchForFlow(String flowUuid) { + Intent intent = new Intent(); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, ORG_UUID); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, flowUuid); + + BaseActivity activity = rule.launchActivity(intent); + + assertThat(activity, is(notNullValue())); + } + + private void sendTextReply(String text) { + onView(withId(R.id.chat_compose)).perform(closeSoftKeyboard()); + + pause(); + + onView(withId(R.id.chat_compose)).perform(click(), typeText(text), closeSoftKeyboard()); + + pause(); + + onView(withId(R.id.button_send)).perform(click()); + } + + private void mockMediaCapturing() { + final int imageResId = io.rapidpro.surveyor.test.R.raw.capture_image; + final int videoResId = io.rapidpro.surveyor.test.R.raw.capture_video; + final int audioResId = io.rapidpro.surveyor.test.R.raw.capture_audio; + final Context context = getInstrumentation().getContext(); + + ActivityResultFunction mockCamera = new ActivityResultFunction() { + @Override + public Instrumentation.ActivityResult apply(Intent intent) { + Logger.d("Handling mocked image capture intent"); + + // copy JPEG file over directly (want to preserve EXIF data) + InputStream input = context.getResources().openRawResource(imageResId); + try { + File output = new File(getSurveyor().getExternalCacheDir(), "camera.jpg"); + FileUtils.copyInputStreamToFile(input, output); + } catch (IOException e) { + e.printStackTrace(); + } + + // but also decode bitmap data + Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), imageResId); + + // create an activity result to look like the camera returning an image + Intent resultData = new Intent(); + resultData.putExtra("data", bmp); + return new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); + } + }; + + intending(toPackage("com.android.camera")).respondWithFunction(mockCamera); + intending(toPackage("com.android.camera2")).respondWithFunction(mockCamera); + + intending(hasComponent(CaptureVideoActivity.class.getName())).respondWithFunction(new ActivityResultFunction() { + @Override + public Instrumentation.ActivityResult apply(Intent intent) { + Logger.d("Handling mocked video capture intent"); + + InputStream input = context.getResources().openRawResource(videoResId); + + try { + File output = new File(getSurveyor().getExternalCacheDir(), "video.mp4"); + FileUtils.copyInputStreamToFile(input, output); + } catch (IOException e) { + e.printStackTrace(); + } + + Intent resultData = new Intent(); + return new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); + } + }); + + intending(hasComponent(CaptureAudioActivity.class.getName())).respondWithFunction(new ActivityResultFunction() { + @Override + public Instrumentation.ActivityResult apply(Intent intent) { + Logger.d("Handling mocked audio capture intent"); + + InputStream input = context.getResources().openRawResource(audioResId); + + try { + File output = new File(getSurveyor().getExternalCacheDir(), "audio.m4a"); + FileUtils.copyInputStreamToFile(input, output); + } catch (IOException e) { + e.printStackTrace(); + } + + Intent resultData = new Intent(); + return new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); + } + }); + + intending(hasComponent(CaptureLocationActivity.class.getName())).respondWithFunction(new ActivityResultFunction() { + @Override + public Instrumentation.ActivityResult apply(Intent intent) { + Logger.d("Handling mocked location capture intent"); + + InputStream input = context.getResources().openRawResource(audioResId); + + try { + File output = new File(getSurveyor().getExternalCacheDir(), "audio.m4a"); + FileUtils.copyInputStreamToFile(input, output); + } catch (IOException e) { + e.printStackTrace(); + } + + Intent resultData = new Intent(); + resultData.putExtra("latitude", 37.4219983); + resultData.putExtra("longitude", -122.084000); + return new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData); + } + }); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/activity/SettingsActivityTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/activity/SettingsActivityTest.java new file mode 100644 index 0000000..c8b1d12 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/activity/SettingsActivityTest.java @@ -0,0 +1,55 @@ +package io.rapidpro.surveyor.activity; + +import androidx.test.rule.ActivityTestRule; + +import org.junit.Rule; +import org.junit.Test; + +import java.util.Collections; + +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard; +import static androidx.test.espresso.action.ViewActions.replaceText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.PreferenceMatchers.withKey; +import static androidx.test.espresso.matcher.ViewMatchers.assertThat; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withClassName; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.CoreMatchers.endsWith; +import static org.hamcrest.CoreMatchers.is; + +public class SettingsActivityTest extends BaseApplicationTest { + + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(SettingsActivity.class, true, false); + + @Test + public void showHost() { + rule.launchActivity(null); + + onData(withKey("host")) + .check(matches(isDisplayed())) + .perform(click()); + + onView(withClassName(endsWith("EditText"))) + .perform(replaceText("http://test.com")) + .perform(closeSoftKeyboard()); + onView(withText("OK")).perform(click()); + + pause(); + + // host should have been updated + assertThat(getSurveyor().getTembaHost(), is("http://test.com")); + + // and user logged out + assertThat(getSurveyor().getPreferences().getString(SurveyorPreferences.AUTH_USERNAME, ""), is("")); + assertThat(getSurveyor().getPreferences().getStringSet(SurveyorPreferences.AUTH_ORGS, Collections.emptySet()), is(Collections.emptySet())); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/data/OrgServiceTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/data/OrgServiceTest.java new file mode 100644 index 0000000..c88ff17 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/data/OrgServiceTest.java @@ -0,0 +1,76 @@ +package io.rapidpro.surveyor.data; + +import org.junit.Test; + +import java.io.IOException; +import java.util.Collections; + +import io.rapidpro.surveyor.net.TembaException; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.collection.IsArrayContainingInOrder.arrayContaining; +import static org.junit.Assert.assertThat; + +public class OrgServiceTest extends BaseApplicationTest { + private static final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + + @Test(expected = RuntimeException.class) + public void get_throwsExceptionIfOrgNotExist() throws IOException { + OrgService svc = getSurveyor().getOrgService(); + svc.get("b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"); + } + + @Test + public void get() throws IOException { + // install an org without downloaded assets + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, 0, 0); + + OrgService svc = getSurveyor().getOrgService(); + + // load single org by UUID + Org org = svc.get(ORG_UUID); + assertThat(org.getUuid(), is("b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06")); + assertThat(org.getName(), is("Nyaruka")); + assertThat(org.getCountry(), is("RW")); + assertThat(org.getLanguages(), is(arrayContaining("eng", "fra"))); + assertThat(org.getPrimaryLanguage(), is("eng")); + assertThat(org.getTimezone(), is("Africa/Kigali")); + assertThat(org.getDateStyle(), is("day_first")); + assertThat(org.isAnon(), is(false)); + assertThat(org.getToken(), is("797d44ef78f7845de0f4dbb42d5174505563dd77")); + assertThat(org.getFlows(), is(Collections.emptyList())); + assertThat(org.hasAssets(), is(false)); + + // install same org with downloaded assets + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + svc.clearCache(); + org = svc.get(ORG_UUID); + + assertThat(org.getFlows(), hasSize(3)); + assertThat(org.getFlow("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec").getName(), is("Contact Details")); + assertThat(org.getFlow("???"), is(nullValue())); + + assertThat(org.hasAssets(), is(true)); + assertThat(org.getAssets(), not(isEmptyString())); + } + + @Test + public void getOrFetch() throws IOException, TembaException { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_org_get, "application/json", 200); + + OrgService svc = getSurveyor().getOrgService(); + + Org org = svc.getOrFetch(ORG_UUID, "Nyaruka", "797d44ef78f7845de0f4dbb42d5174505563dd77"); + assertThat(org.getUuid(), is("b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06")); + assertThat(org.getName(), is("Nyaruka")); + assertThat(org.getCountry(), is("RW")); + assertThat(org.getFlows(), is(Collections.emptyList())); + assertThat(org.hasAssets(), is(false)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionServiceTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionServiceTest.java new file mode 100644 index 0000000..bcd4ae2 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionServiceTest.java @@ -0,0 +1,74 @@ +package io.rapidpro.surveyor.data; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.test.BaseApplicationTest; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; + +public class SubmissionServiceTest extends BaseApplicationTest { + private static final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + + @Test + public void getCompleted() throws IOException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Org org = getSurveyor().getOrgService().get(ORG_UUID); + Flow flow1 = org.getFlow("bdd61538-5f50-4836-a8fb-acaafd64ddb1"); + Flow flow2 = org.getFlow("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec"); + Flow flow3 = org.getFlow("e54809ba-2f28-439b-b90b-c623eafa05ae"); + + SubmissionService svc = getSurveyor().getSubmissionService(); + + Submission sub1 = svc.newSubmission(org, flow1); + sub1.complete(); + + assertThat(sub1.isCompleted(), is(true)); + + Submission sub2 = svc.newSubmission(org, flow1); + sub2.complete(); + Submission sub3 = svc.newSubmission(org, flow2); + sub3.complete(); + Submission sub4 = svc.newSubmission(org, flow2); + + assertThat(sub1.getOrg(), is(org)); + assertThat(sub2.getOrg(), is(org)); + assertThat(sub3.getOrg(), is(org)); + assertThat(sub4.getOrg(), is(org)); + + File submissionsDir = new File(getSurveyor().getUserDirectory(), "test_submissions"); + assertThat(submissionsDir.exists(), is(true)); + + File orgDir = new File(submissionsDir, ORG_UUID); + assertThat(orgDir.exists(), is(true)); + + File flow1Dir = new File(orgDir, "bdd61538-5f50-4836-a8fb-acaafd64ddb1"); + assertThat(flow1Dir.exists(), is(true)); + + File sub1Dir = new File(flow1Dir, sub1.getUuid()); + + Logger.d("Checking " + sub1Dir.getAbsolutePath() + " ...."); + + assertThat(sub1Dir.exists(), is(true)); + + assertThat(sub1.getDirectory(), is(sub1Dir)); + + assertThat(svc.getCompletedCount(org), is(3)); + assertThat(svc.getCompletedCount(org, flow1), is(2)); + assertThat(svc.getCompletedCount(org, flow2), is(1)); + assertThat(svc.getCompletedCount(org, flow3), is(0)); + + List pending = svc.getCompleted(org); + assertThat(pending, is(hasSize(3))); + + assertThat(pending.get(0).getDirectory(), is(sub1Dir)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionTest.java new file mode 100644 index 0000000..5010cf4 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/data/SubmissionTest.java @@ -0,0 +1,106 @@ +package io.rapidpro.surveyor.data; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import io.rapidpro.surveyor.net.TembaException; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.test.R; +import io.rapidpro.surveyor.utils.SurveyUtils; +import okhttp3.mockwebserver.RecordedRequest; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.junit.Assert.assertThat; + +public class SubmissionTest extends BaseApplicationTest { + private static final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + + @Test + public void multimedia() throws IOException, TembaException, InterruptedException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Org org = getSurveyor().getOrgService().get(ORG_UUID); + Flow flow = org.getFlow("e54809ba-2f28-439b-b90b-c623eafa05ae"); + + // make a submission that looks like a complete submission of the Multimedia flow + File directory = SurveyUtils.mkdir(getSurveyor().getUserDirectory(), "test_submissions", org.getUuid(), flow.getUuid(), "e878865e-c1d1-45a5-9216-b0303ed23c7e"); + Submission sub = new Submission(org, directory); + + copyResource(R.raw.submission2_events, new File(directory, "events.jsonl")); + copyResource(R.raw.submission2_modifiers, new File(directory, "modifiers.jsonl")); + copyResource(R.raw.submission2_session, new File(directory, "session.json")); + copyResource(R.raw.capture_image, new File(sub.getMediaDirectory(), "2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg")); + copyResource(R.raw.capture_video, new File(sub.getMediaDirectory(), "93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4")); + copyResource(R.raw.capture_audio, new File(sub.getMediaDirectory(), "ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a")); + + sub.complete(); + assertThat(sub.isCompleted(), is(true)); + + mockServerResponse("{\"location\":\"http://uploads.rapidpro.io/0cce52d1.jpg\"}", "application/json", 200); + mockServerResponse("{\"location\":\"http://uploads.rapidpro.io/6c519989.mp4\"}", "application/json", 200); + mockServerResponse("{\"location\":\"http://uploads.rapidpro.io/fce55c47.m4a\"}", "application/json", 200); + mockServerResponse("{\"msg\":\"thanks\"}", "application/json", 200); + + sub.submit(); + + assertThat(sub.getDirectory(), is(nullValue())); + assertThat(directory.exists(), is(false)); + + // we have 3 posts to upload media + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getRequestLine(), is("POST /api/v2/media.json HTTP/1.1")); + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getRequestLine(), is("POST /api/v2/media.json HTTP/1.1")); + RecordedRequest request3 = mockServer.takeRequest(); + assertThat(request3.getRequestLine(), is("POST /api/v2/media.json HTTP/1.1")); + + RecordedRequest request4 = mockServer.takeRequest(); + assertThat(request4.getRequestLine(), is("POST /mr/surveyor/submit HTTP/1.1")); + + // check that the submission payload doesn't contain the old local media paths, but does include the uploaded URLs + String body = request4.getBody().readString(StandardCharsets.UTF_8); + + assertThat(body, not(containsString("2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg"))); + assertThat(body, not(containsString("93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4"))); + assertThat(body, not(containsString("ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a"))); + + assertThat(body, containsString("image/jpeg:http://uploads.rapidpro.io/0cce52d1.jpg")); + assertThat(body, containsString("video/mp4:http://uploads.rapidpro.io/6c519989.mp4")); + assertThat(body, containsString("audio/mp4:http://uploads.rapidpro.io/fce55c47.m4a")); + } + + @Test + public void contactDetails() throws IOException, TembaException, InterruptedException { + installOrg(ORG_UUID, io.rapidpro.surveyor.test.R.raw.org1_details, io.rapidpro.surveyor.test.R.raw.org1_flows, io.rapidpro.surveyor.test.R.raw.org1_assets); + + Org org = getSurveyor().getOrgService().get(ORG_UUID); + Flow flow1 = org.getFlow("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec"); + + SubmissionService svc = getSurveyor().getSubmissionService(); + + Submission sub = svc.newSubmission(org, flow1); + File directory = sub.getDirectory(); + + copyResource(R.raw.submission3_events, new File(directory, "events.jsonl")); + copyResource(R.raw.submission3_modifiers, new File(directory, "modifiers.jsonl")); + copyResource(R.raw.submission3_session, new File(directory, "session.json")); + FileUtils.write(new File(directory, ".status"), "completed"); + + mockServerResponse("{\"msg\":\"thanks\"}", "application/json", 200); + + sub.submit(); + + assertThat(sub.getDirectory(), is(nullValue())); + assertThat(directory.exists(), is(false)); + + RecordedRequest request = mockServer.takeRequest(); + assertThat(request.getRequestLine(), is("POST /mr/surveyor/submit HTTP/1.1")); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/engine/EngineTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/engine/EngineTest.java new file mode 100644 index 0000000..2090eff --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/engine/EngineTest.java @@ -0,0 +1,234 @@ +package io.rapidpro.surveyor.engine; + +import com.nyaruka.goflow.mobile.AssetsSource; +import com.nyaruka.goflow.mobile.Environment; +import com.nyaruka.goflow.mobile.MsgIn; +import com.nyaruka.goflow.mobile.Resume; +import com.nyaruka.goflow.mobile.SessionAssets; +import com.nyaruka.goflow.mobile.StringSlice; +import com.nyaruka.goflow.mobile.Trigger; +import com.vdurmont.semver4j.Semver; + +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Test; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.OrgService; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.test.R; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; + +public class EngineTest extends BaseApplicationTest { + + @Test + public void currentSpecVersion() { + assertThat(Engine.currentSpecVersion(), is(new Semver("13.0.0"))); + } + + @Test + public void isSpecVersionSupported() { + assertThat(Engine.isSpecVersionSupported("12.0"), is(false)); + assertThat(Engine.isSpecVersionSupported("13.0"), is(true)); + assertThat(Engine.isSpecVersionSupported("13.5"), is(true)); + assertThat(Engine.isSpecVersionSupported("14.0"), is(false)); + } + + @Test + public void migrateLegacyDefinition() { + String legacyFlow = "{\"action_sets\":[],\"rule_sets\":[],\"base_language\":\"eng\",\"metadata\":{\"uuid\":\"061be894-4507-470c-a20b-34273bf915be\",\"name\":\"Survey\"}}"; + String migrated = Engine.migrateLegacyDefinition(legacyFlow); + + assertThat(migrated, is("{\"uuid\":\"061be894-4507-470c-a20b-34273bf915be\",\"name\":\"Survey\",\"spec_version\":\"13.0.0\",\"language\":\"eng\",\"type\":\"messaging\",\"revision\":0,\"expire_after_minutes\":0,\"localization\":{},\"nodes\":[],\"_ui\":{\"nodes\":{},\"stickies\":{}}}")); + } + + @Test(expected = EngineException.class) + public void loadAssetsThrowsExceptionIfJsonInvalid() throws EngineException { + Engine.loadAssets("{"); + } + + @Test + public void twoQuestions() throws IOException, EngineException { + final String FLOW_UUID = "bdd61538-5f50-4836-a8fb-acaafd64ddb1"; + + Pair result = startSession(FLOW_UUID); + Session session = result.getLeft(); + Sprint sprint = result.getRight(); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(2)); + assertThat(sprint.getEvents().get(0).type(), is("msg_created")); + assertThat(sprint.getEvents().get(1).type(), is("msg_wait")); + + MsgIn msg1 = Engine.createMsgIn("I like club"); + Resume resume1 = Engine.createMsgResume(null, null, msg1); + + sprint = session.resume(resume1); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(4)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(0).payload(), containsString("I like club")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("msg_created")); + assertThat(sprint.getEvents().get(3).type(), is("msg_wait")); + + MsgIn msg2 = Engine.createMsgIn("RED"); + Resume resume2 = Engine.createMsgResume(null, null, msg2); + sprint = session.resume(resume2); + + assertThat(session.getStatus(), is("completed")); + assertThat(session.isWaiting(), is(false)); + assertThat(sprint.getEvents(), hasSize(3)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("msg_created")); + + // try to marshal to JSON + String marshaled = session.toJSON(); + assertThat(marshaled.substring(0, 9), is("{\"uuid\":\"")); + + // and unmarshal back + Session session2 = Engine.getInstance().readSession(session.getAssets(), marshaled); + assertThat(session2.getStatus(), is("completed")); + } + + @Test + public void multimedia() throws IOException, EngineException { + final String FLOW_UUID = "e54809ba-2f28-439b-b90b-c623eafa05ae"; + + Pair result = startSession(FLOW_UUID); + Session session = result.getLeft(); + Sprint sprint = result.getRight(); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(session.getWait().hint(), is(notNullValue())); + assertThat(session.getWait().hint().type(), is("image")); + assertThat(sprint.getEvents(), hasSize(2)); + assertThat(sprint.getEvents().get(0).type(), is("msg_created")); + assertThat(sprint.getEvents().get(1).type(), is("msg_wait")); + + MsgIn msg1 = Engine.createMsgIn("", "content://io.rapidpro.surveyor/files/selfie.jpg"); + Resume resume1 = Engine.createMsgResume(null, null, msg1); + sprint = session.resume(resume1); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(4)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(0).payload(), containsString("content://io.rapidpro.surveyor/files/selfie.jpg")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("msg_created")); + assertThat(sprint.getEvents().get(3).type(), is("msg_wait")); + } + + @Test + public void contactDetails() throws IOException, EngineException { + final String FLOW_UUID = "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec"; + + Pair result = startSession(FLOW_UUID); + Session session = result.getLeft(); + Sprint sprint = result.getRight(); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(2)); + assertThat(sprint.getEvents().get(0).type(), is("msg_created")); + assertThat(sprint.getEvents().get(1).type(), is("msg_wait")); + + MsgIn msg1 = Engine.createMsgIn("Bob"); + Resume resume1 = Engine.createMsgResume(null, null, msg1); + sprint = session.resume(resume1); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(5)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("contact_name_changed")); + assertThat(sprint.getEvents().get(3).type(), is("msg_created")); + assertThat(sprint.getEvents().get(4).type(), is("msg_wait")); + + assertThat(sprint.getModifiers(), hasSize(1)); + assertThat(sprint.getModifiers().get(0).type(), is("name")); + assertThat(sprint.getModifiers().get(0).payload(), is("{\"type\":\"name\",\"name\":\"Bob\"}")); + + MsgIn msg2 = Engine.createMsgIn("+593979123456"); + Resume resume2 = Engine.createMsgResume(null, null, msg2); + sprint = session.resume(resume2); + + assertThat(session.getStatus(), is("waiting")); + assertThat(session.isWaiting(), is(true)); + assertThat(sprint.getEvents(), hasSize(6)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("contact_urns_changed")); + assertThat(sprint.getEvents().get(3).type(), is("contact_groups_changed")); + assertThat(sprint.getEvents().get(4).type(), is("msg_created")); + assertThat(sprint.getEvents().get(5).type(), is("msg_wait")); + + assertThat(sprint.getModifiers(), hasSize(2)); + assertThat(sprint.getModifiers().get(0).type(), is("urn")); + assertThat(sprint.getModifiers().get(0).payload(), is("{\"type\":\"urn\",\"urn\":\"tel:+593979123456\",\"modification\":\"append\"}")); + assertThat(sprint.getModifiers().get(1).type(), is("groups")); + assertThat(sprint.getModifiers().get(1).payload(), is("{\"type\":\"groups\",\"groups\":[{\"uuid\":\"6696cabf-eb5e-42bf-bcc6-f0c8be9b1316\",\"name\":\"Testers\"}],\"modification\":\"add\"}")); + + MsgIn msg3 = Engine.createMsgIn("37"); + Resume resume3 = Engine.createMsgResume(null, null, msg3); + sprint = session.resume(resume3); + + assertThat(session.getStatus(), is("completed")); + assertThat(session.isWaiting(), is(false)); + assertThat(sprint.getEvents(), hasSize(4)); + assertThat(sprint.getEvents().get(0).type(), is("msg_received")); + assertThat(sprint.getEvents().get(1).type(), is("run_result_changed")); + assertThat(sprint.getEvents().get(2).type(), is("contact_field_changed")); + assertThat(sprint.getEvents().get(3).type(), is("msg_created")); + + assertThat(sprint.getModifiers(), hasSize(1)); + assertThat(sprint.getModifiers().get(0).type(), is("field")); + assertThat(sprint.getModifiers().get(0).payload(), is("{\"type\":\"field\",\"field\":{\"key\":\"age\",\"name\":\"Age\"},\"value\":{\"text\":\"37\",\"number\":37}}")); + } + + @Test + public void listToSlice() { + List vals = Arrays.asList("Foo", "bar"); + StringSlice slice = Engine.listToSlice(vals); + + assertThat(slice.length(), is(2L)); + assertThat(slice.get(0L), is("Foo")); + assertThat(slice.get(1L), is("bar")); + } + + private Pair startSession(String flowUUID) throws IOException, EngineException { + final String ORG_UUID = "b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06"; + + installOrg(ORG_UUID, R.raw.org1_details, R.raw.org1_flows, R.raw.org1_assets); + OrgService svc = getSurveyor().getOrgService(); + Org org = svc.get(ORG_UUID); + Flow flow = org.getFlow(flowUUID); + + String assetsJson = readResourceAsString(R.raw.org1_assets); + + AssetsSource source = Engine.loadAssets(assetsJson); + SessionAssets assets = Engine.createSessionAssets(source); + + Environment env = Engine.createEnvironment(org); + Contact contact = Contact.createEmpty(assets); + Trigger trigger = Engine.createManualTrigger(env, contact, flow.toReference()); + + return Engine.getInstance().newSession(assets, trigger); + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/engine/LocationAssetTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/engine/LocationAssetTest.java new file mode 100644 index 0000000..05f4de5 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/engine/LocationAssetTest.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.engine; + +import com.google.gson.reflect.TypeToken; + +import org.junit.Test; + +import java.io.IOException; +import java.util.List; + +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.PaginatedResults; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.utils.JsonUtils; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.arrayContaining; +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; + +public class LocationAssetTest extends BaseApplicationTest { + @Test + public void fromTemba() throws IOException { + // load the sample api/v2/boundaries.json response as a list of boundaries + String boundaryResponse = readResourceAsString(io.rapidpro.surveyor.test.R.raw.api_v2_boundaries_get); + TypeToken type = new TypeToken>() { + }; + PaginatedResults boundaryResults = JsonUtils.unmarshal(boundaryResponse, type); + List boundaries = boundaryResults.getResults(); + + assertThat(boundaries, hasSize(4)); + + LocationAsset nigeria = LocationAsset.fromTemba(boundaries); + + assertThat(nigeria.getName(), is("Nigeria")); + assertThat(nigeria.getAliases(), is(emptyArray())); + assertThat(nigeria.getChildren(), hasSize(1)); + + LocationAsset yobe = nigeria.getChildren().get(0); + + assertThat(yobe.getName(), is("Yobe")); + assertThat(yobe.getAliases(), is(arrayContaining("Iobe"))); + assertThat(yobe.getChildren(), hasSize(2)); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/net/TembaServiceTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/net/TembaServiceTest.java new file mode 100644 index 0000000..a1ae4aa --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/net/TembaServiceTest.java @@ -0,0 +1,230 @@ +package io.rapidpro.surveyor.net; + +import android.net.Uri; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.Field; +import io.rapidpro.surveyor.net.responses.Flow; +import io.rapidpro.surveyor.net.responses.Group; +import io.rapidpro.surveyor.net.responses.Org; +import io.rapidpro.surveyor.net.responses.Token; +import io.rapidpro.surveyor.net.responses.TokenResults; +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.utils.RawJson; +import okhttp3.mockwebserver.RecordedRequest; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.Matchers.arrayContaining; +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + +public class TembaServiceTest extends BaseApplicationTest { + + /** + * @see TembaService#authenticate(String, String, Callback) + */ + @Test + public void authenticate() throws IOException, InterruptedException { + // needed to ensure test waits for async request + final CountDownLatch latch = new CountDownLatch(1); + + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_authenticate_post, "application/json", 200); + + getSurveyor().getTembaService().authenticate("bob@nyaruka.com", "Qwerty123", new Callback() { + @Override + public void onResponse(Call call, Response response) { + List tokens = response.body().getTokens(); + assertThat(tokens, hasSize(2)); + assertThat(tokens.get(0).getToken(), is("23453fwf33fw35g3222f67778")); + assertThat(tokens.get(0).getOrg().getUuid(), is("9f578940-215c-4e58-b399-e65d74041dc8")); + assertThat(tokens.get(0).getOrg().getName(), is("UNICEF")); + + latch.countDown(); + } + + @Override + public void onFailure(Call call, Throwable t) { + fail(); + + latch.countDown(); + } + }); + + latch.await(30, TimeUnit.SECONDS); + } + + /** + * @see TembaService#getBoundaries(String) + */ + @Test + public void getBoundaries() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_boundaries_get, "application/json", 200); + + List boundaries = getSurveyor().getTembaService().getBoundaries("abc123"); + assertThat(boundaries, hasSize(4)); + assertThat(boundaries.get(0).getOsmID(), is("192787")); + assertThat(boundaries.get(0).getName(), is("Nigeria")); + assertThat(boundaries.get(0).getParent(), is(nullValue())); + assertThat(boundaries.get(0).getLevel(), is(0)); + assertThat(boundaries.get(0).getAliases(), is(emptyArray())); + assertThat(boundaries.get(1).getOsmID(), is("3698564")); + assertThat(boundaries.get(1).getName(), is("Yobe")); + assertThat(boundaries.get(1).getParent().getOsmID(), is("192787")); + assertThat(boundaries.get(1).getParent().getName(), is("Nigeria")); + assertThat(boundaries.get(1).getAliases(), is(arrayContaining("Iobe"))); + } + + /** + * @see TembaService#getOrg(String) + */ + @Test + public void getOrg() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_org_get, "application/json", 200); + + Org org = getSurveyor().getTembaService().getOrg("abc123"); + assertThat(org.getUuid(), is("dc8123a1-168c-4962-ab9e-f784f3d804a2")); + assertThat(org.getName(), is("Nyaruka")); + assertThat(org.getPrimaryLanguage(), is("eng")); + assertThat(org.getLanguages(), arrayContaining("eng", "fra")); + assertThat(org.getTimezone(), is("Africa/Kigali")); + assertThat(org.getDateStyle(), is("day_first")); + assertThat(org.getCountry(), is("RW")); + assertThat(org.isAnon(), is(false)); + } + + /** + * @see TembaService#getFields(String) + */ + @Test + public void getFields() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_fields_get_page_1, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_fields_get_page_2, "application/json", 200); + + List fields = getSurveyor().getTembaService().getFields("abc123"); + assertThat(fields, hasSize(3)); + assertThat(fields.get(0).getKey(), is("gender")); + assertThat(fields.get(0).getLabel(), is("Gender")); + assertThat(fields.get(0).getValueType(), is("text")); + assertThat(fields.get(1).getKey(), is("age")); + assertThat(fields.get(1).getLabel(), is("Age")); + assertThat(fields.get(1).getValueType(), is("numeric")); + assertThat(fields.get(2).getKey(), is("join_date")); + assertThat(fields.get(2).getLabel(), is("Join Date")); + assertThat(fields.get(2).getValueType(), is("datetime")); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/api/v2/fields.json")); + assertThat(request1.getHeader("Authorization"), is("Token abc123")); + + RecordedRequest request2 = mockServer.takeRequest(); + assertThat(request2.getPath(), is("/api/v2/fields.json?cursor=123456789")); + } + + /** + * @see TembaService#getFlows(String) + */ + @Test + public void getFlows() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_flows_get, "application/json", 200); + + List flows = getSurveyor().getTembaService().getFlows("abc123"); + assertThat(flows, hasSize(3)); + assertThat(flows.get(0).getUuid(), is("bdd61538-5f50-4836-a8fb-acaafd64ddb1")); + assertThat(flows.get(0).getName(), is("Two Questions")); + assertThat(flows.get(0).getType(), is("survey")); + assertThat(flows.get(0).isArchived(), is(false)); + assertThat(flows.get(0).getExpires(), is(10080)); + assertThat(flows.get(1).getUuid(), is("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec")); + assertThat(flows.get(1).getName(), is("Contact Details")); + assertThat(flows.get(2).getUuid(), is("e54809ba-2f28-439b-b90b-c623eafa05ae")); + assertThat(flows.get(2).getName(), is("Multimedia")); + } + + /** + * @see TembaService#getGroups(String) + */ + @Test + public void getGroups() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_groups_get, "application/json", 200); + + List groups = getSurveyor().getTembaService().getGroups("abc123"); + assertThat(groups, hasSize(3)); + assertThat(groups.get(0).getUuid(), is("6696cabf-eb5e-42bf-bcc6-f0c8be9b1316")); + assertThat(groups.get(0).getName(), is("Testers")); + assertThat(groups.get(0).getQuery(), is("")); + assertThat(groups.get(1).getUuid(), is("372aba66-16e2-44ee-8486-fb5cedfe51d9")); + assertThat(groups.get(1).getName(), is("Customers")); + assertThat(groups.get(1).getQuery(), is("")); + assertThat(groups.get(2).getUuid(), is("63867d07-c033-4ef1-957c-85fa9708c19c")); + assertThat(groups.get(2).getName(), is("Youth")); + assertThat(groups.get(2).getQuery(), is("age <= 18")); + } + + /** + * @see TembaService#getDefinitions(String, List) + */ + @Test + public void getDefinitions_inLegacyFormat() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_flows_get, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_definitions_get_v11, "application/json", 200); + + List flows = getSurveyor().getTembaService().getFlows("abc123"); + List definitions = getSurveyor().getTembaService().getDefinitions("abc123", flows); + + // check flow definitions have been migrated + assertThat(definitions, hasSize(3)); + assertThat(definitions.get(0).toString(), startsWith("{\"uuid\":\"ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec\",\"name\":\"Contact Details\"")); + } + + /** + * @see TembaService#getDefinitions(String, List) + */ + @Test + public void getDefinitions() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_flows_get, "application/json", 200); + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_definitions_get_v13, "application/json", 200); + + List flows = getSurveyor().getTembaService().getFlows("abc123"); + List definitions = getSurveyor().getTembaService().getDefinitions("abc123", flows); + + assertThat(definitions, hasSize(3)); + assertThat(definitions.get(0).toString(), startsWith("{\"uuid\":\"ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec\",\"name\":\"Contact Details\"")); + } + + /** + * @see TembaService#uploadMedia(String, Uri) + */ + @Test + public void uploadMedia() throws Exception { + mockServerResponse(io.rapidpro.surveyor.test.R.raw.api_v2_media_post, "application/json", 200); + + File upload = new File(getSurveyor().getExternalCacheDir(), "test.jpg"); + FileUtils.write(upload, "I'm an image!"); + Uri uri = getSurveyor().getUriForFile(upload); + + String newUrl = getSurveyor().getTembaService().uploadMedia("abc123", uri); + + assertThat(newUrl, is("https://uploads.rapidpro.io/1224626264215.jpg")); + + RecordedRequest request1 = mockServer.takeRequest(); + assertThat(request1.getPath(), is("/api/v2/media.json")); + assertThat(request1.getHeader("Authorization"), is("Token abc123")); + assertThat(request1.getMethod(), is("POST")); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/test/BaseApplicationTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/test/BaseApplicationTest.java new file mode 100644 index 0000000..861d60b --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/test/BaseApplicationTest.java @@ -0,0 +1,240 @@ +package io.rapidpro.surveyor.test; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.test.platform.app.InstrumentationRegistry; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; + +import static androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu; +import static androidx.test.espresso.Espresso.openContextualActionModeOverflowMenu; +import static java.net.HttpURLConnection.HTTP_MOVED_TEMP; + +/** + * Base for all the instrumented tests + */ +public abstract class BaseApplicationTest { + + @Rule + public TestRule logger = new TestWatcher() { + protected void starting(Description description) { + Logger.d("========= Starting test: " + description.getClassName() + "#" + description.getMethodName() + " ========="); + } + }; + protected MockWebServer mockServer; + + @Before + public void startMockServer() throws IOException { + mockServer = new MockWebServer(); + mockServer.start(); + + String mockServerURL = mockServer.url("/").toString(); + Logger.d("Mock server started at " + mockServerURL); + + getSurveyor().setPreference(SurveyorPreferences.HOST, mockServerURL); + getSurveyor().onTembaHostChanged(); + } + + @After + public void stopMockServer() throws IOException { + mockServer.shutdown(); + + Logger.d("Mock server stopped after " + mockServer.getRequestCount() + " requests"); + } + + /** + * Clears the preferences and file system after each test + */ + @After + public void clearData() throws IOException { + SharedPreferences.Editor editor = getSurveyor().getPreferences().edit(); + editor.clear(); + editor.apply(); + + FileUtils.deleteQuietly(getSurveyor().getOrgsDirectory()); + FileUtils.deleteQuietly(getSurveyor().getUserDirectory()); + + getSurveyor().getOrgService().clearCache(); + } + + protected SurveyorApplication getSurveyor() { + return SurveyorApplication.get(); + } + + /** + * Utility to appear logged in as the given user + * + * @param email the email + * @param orgUUIDs the set of accessible org UUIDs + */ + protected void login(String email, Set orgUUIDs) { + getSurveyor().setPreference(SurveyorPreferences.AUTH_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.PREV_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.AUTH_ORGS, orgUUIDs); + } + + /** + * Utility to create an org directory + * + * @param uuid the org UUID + * @param detailsResId the resource ID of the details file + */ + protected void installOrg(String uuid, int detailsResId, int flowsResId, int assetsResId) throws IOException { + // create org directory + File dir = new File(getSurveyor().getOrgsDirectory(), uuid); + dir.mkdirs(); + + // install details.json + String detailsJSON = readResourceAsString(detailsResId); + FileUtils.writeStringToFile(new File(dir, "details.json"), detailsJSON); + + if (flowsResId > 0) { + // install flows.json + String flowsJSON = readResourceAsString(flowsResId); + FileUtils.writeStringToFile(new File(dir, "flows.json"), flowsJSON); + } else { + // a valid org must have details.json and flows.json + FileUtils.writeStringToFile(new File(dir, "flows.json"), "[]"); + } + + if (assetsResId > 0) { + // install assets.json + String assetsJSON = readResourceAsString(assetsResId); + FileUtils.writeStringToFile(new File(dir, "assets.json"), assetsJSON); + } + } + + protected void openOptionsMenu() { + //openContextualActionModeOverflowMenu(); + + Context context = InstrumentationRegistry.getInstrumentation().getContext(); + openActionBarOverflowOrOptionsMenu(context); + + // especially on Travis, we need to give the emulator a bit of time to actually open the menu + pause(); + } + + /** + * Enqueues a response on the mock HTTP server from the given body, MIME type and status code + */ + protected void mockServerResponse(String body, String mimeType, int code) { + MockResponse response = new MockResponse() + .setBody(body) + .setResponseCode(code) + .addHeader("Content-Type", mimeType + "; charset=utf-8") + .addHeader("Cache-Control", "no-cache"); + + mockServer.enqueue(response); + } + + /** + * Enqueues a response on the mock HTTP server from the given resource file and MIME type and status code + */ + protected void mockServerResponse(int rawResId, String mimeType, int code) throws IOException { + mockServerResponse(readResourceAsString(rawResId), mimeType, code); + } + + /** + * Enqueues a redirect response on the mock HTTP server + */ + protected void mockServerRedirect(String location) { + MockResponse response = new MockResponse() + .setResponseCode(HTTP_MOVED_TEMP) + .setHeader("Location", location); + + mockServer.enqueue(response); + } + + /** + * Copies a raw test resource to the given file (more efficient than loading into memory first) + */ + protected void copyResource(int rawResId, File dest) throws IOException { + Context context = InstrumentationRegistry.getInstrumentation().getContext(); + InputStream input = context.getResources().openRawResource(rawResId); + FileUtils.copyInputStreamToFile(input, dest); + } + + protected String readResourceAsString(int rawResId) throws IOException { + return IOUtils.toString(readResource(rawResId), "UTF-8"); + } + + protected byte[] readResource(int rawResId) throws IOException { + Context context = InstrumentationRegistry.getInstrumentation().getContext(); + InputStream input = context.getResources().openRawResource(rawResId); + return IOUtils.toByteArray(input); + } + + /** + * Utility to unzip a raw test resource into the given target directory + */ + protected void unzipResource(int rawResId, File targetDirectory) throws IOException { + Context context = InstrumentationRegistry.getInstrumentation().getContext(); + InputStream input = context.getResources().openRawResource(rawResId); + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(input)); + + // see https://stackoverflow.com/a/27050680 + try { + ZipEntry ze; + int count; + byte[] buffer = new byte[8192]; + while ((ze = zis.getNextEntry()) != null) { + File file = new File(targetDirectory, ze.getName()); + File dir = ze.isDirectory() ? file : file.getParentFile(); + if (!dir.isDirectory() && !dir.mkdirs()) { + throw new FileNotFoundException("Failed to ensure directory: " + dir.getAbsolutePath()); + } + if (ze.isDirectory()) { + continue; + } + FileOutputStream fout = new FileOutputStream(file); + try { + while ((count = zis.read(buffer)) != -1) { + fout.write(buffer, 0, count); + } + } finally { + fout.close(); + } + } + } finally { + zis.close(); + } + } + + /** + * Pauses the testing thread for a configurable amount of time to allow UI changes in a different + * thread to complete. + */ + protected void pause() { + Logger.d("Pausing test for " + TestRunner.PAUSE_MILLIS + " milliseconds..."); + + try { + Thread.sleep(TestRunner.PAUSE_MILLIS); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/test/TestApplication.java b/app/src/androidTest/java/io/rapidpro/surveyor/test/TestApplication.java new file mode 100644 index 0000000..d030482 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/test/TestApplication.java @@ -0,0 +1,38 @@ +package io.rapidpro.surveyor.test; + +import java.io.File; +import java.io.IOException; + +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.utils.SurveyUtils; + +/** + * Custom application class for tests which overrides some stuff to avoid clashing will real + * application use. + */ +public class TestApplication extends SurveyorApplication { + + /** + * @see SurveyorApplication#getPreferencesName() + */ + @Override + public String getPreferencesName() { + return "tests"; + } + + /** + * @see SurveyorApplication#getOrgsDirectory() + */ + @Override + public File getOrgsDirectory() throws IOException { + return SurveyUtils.mkdir(getFilesDir(), "test_orgs"); + } + + /** + * @see SurveyorApplication#getSubmissionsDirectory() + */ + @Override + protected File getSubmissionsDirectory() throws IOException { + return SurveyUtils.mkdir(getUserDirectory(), "test_submissions"); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/test/TestRunner.java b/app/src/androidTest/java/io/rapidpro/surveyor/test/TestRunner.java new file mode 100644 index 0000000..896a1f3 --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/test/TestRunner.java @@ -0,0 +1,37 @@ +package io.rapidpro.surveyor.test; + + +import android.app.Application; +import android.content.Context; +import android.os.Bundle; + +import androidx.test.runner.AndroidJUnitRunner; + +import io.rapidpro.surveyor.Logger; + +/** + * Custom test runner class which will use a subclass of the regular Surveyor application + */ +public class TestRunner extends AndroidJUnitRunner { + + public static int PAUSE_MILLIS = 1000; + + public void onCreate(Bundle arguments) { + Logger.d("Creating test runner with arguments: "); + for (String arg : arguments.keySet()) { + Logger.d(" - " + arg + ": " + arguments.get(arg)); + } + + String pauseArg = arguments.getString("pause"); + if (pauseArg != null) { + PAUSE_MILLIS = Integer.parseInt(pauseArg); + } + + super.onCreate(arguments); + } + + @Override + public Application newApplication(ClassLoader cl, String className, Context context) throws IllegalAccessException, ClassNotFoundException, InstantiationException { + return super.newApplication(cl, TestApplication.class.getName(), context); + } +} diff --git a/app/src/androidTest/java/io/rapidpro/surveyor/utils/ImageUtilsTest.java b/app/src/androidTest/java/io/rapidpro/surveyor/utils/ImageUtilsTest.java new file mode 100644 index 0000000..ae669aa --- /dev/null +++ b/app/src/androidTest/java/io/rapidpro/surveyor/utils/ImageUtilsTest.java @@ -0,0 +1,28 @@ +package io.rapidpro.surveyor.utils; + +import android.graphics.Bitmap; + +import org.junit.Test; + +import java.io.File; +import java.io.IOException; + +import io.rapidpro.surveyor.test.BaseApplicationTest; +import io.rapidpro.surveyor.test.R; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.lessThan; +import static org.junit.Assert.assertThat; + +public class ImageUtilsTest extends BaseApplicationTest { + @Test + public void thumbnailFromVideo() throws IOException { + File temp = File.createTempFile("video", "", getSurveyor().getCacheDir()); + copyResource(R.raw.capture_video, temp); + + Bitmap thumbnail = ImageUtils.thumbnailFromVideo(temp); + + assertThat(thumbnail.getWidth(), is(512)); + assertThat(thumbnail.getHeight(), lessThan(384)); + } +} diff --git a/app/src/androidTest/res/raw/api_v2_authenticate_post.json b/app/src/androidTest/res/raw/api_v2_authenticate_post.json new file mode 100644 index 0000000..a2850dc --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_authenticate_post.json @@ -0,0 +1,20 @@ +{ + "tokens": [ + { + "token": "23453fwf33fw35g3222f67778", + "org": { + "uuid": "9f578940-215c-4e58-b399-e65d74041dc8", + "name": "UNICEF", + "id": 123 + } + }, + { + "token": "797d44ef78f7845de0f4dbb42d5174505563dd77", + "org": { + "uuid": "dc8123a1-168c-4962-ab9e-f784f3d804a2", + "name": "Nyaruka", + "id": 45 + } + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_boundaries_get.json b/app/src/androidTest/res/raw/api_v2_boundaries_get.json new file mode 100644 index 0000000..5ebc008 --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_boundaries_get.json @@ -0,0 +1,47 @@ +{ + "next": null, + "previous": null, + "results": [ + { + "osm_id": "192787", + "name": "Nigeria", + "parent": null, + "level": 0, + "aliases": [], + "geometry": null + }, + { + "osm_id": "3698564", + "name": "Yobe", + "parent": { + "osm_id": "192787", + "name": "Nigeria" + }, + "level": 1, + "aliases": ["Iobe"], + "geometry": null + }, + { + "osm_id": "3698565", + "name": "Barde", + "parent": { + "osm_id": "3698564", + "name": "Yobe" + }, + "level": 2, + "aliases": [], + "geometry": null + }, + { + "osm_id": "3698566", + "name": "Borsari", + "parent": { + "osm_id": "3698564", + "name": "Yobe" + }, + "level": 2, + "aliases": [], + "geometry": null + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_definitions_get_v11.json b/app/src/androidTest/res/raw/api_v2_definitions_get_v11.json new file mode 100644 index 0000000..7ac97ef --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_definitions_get_v11.json @@ -0,0 +1,737 @@ +{ + "version": "11.6", + "site": "https://app.rapidpro.io", + "flows": [ + { + "entry": "036901e0-abb8-4979-92cb-f0d43aeb5b68", + "action_sets": [ + { + "uuid": "036901e0-abb8-4979-92cb-f0d43aeb5b68", + "x": 100, + "y": 0, + "destination": "39fe1ce0-7dee-445e-9945-48c72a05cef5", + "actions": [ + { + "type": "reply", + "uuid": "67aafaf6-b375-461c-8357-fd760423f96c", + "msg": { + "base": "Hi there. What's your name?" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "706853c2-831b-4dd8-8073-cd51b21d94d6" + }, + { + "uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "x": 100, + "y": 175, + "destination": "1a7612b5-777d-4af3-a657-077c46f242d9", + "actions": [ + { + "type": "save", + "uuid": "fac97ece-b9ab-4480-a6dd-9968cb5ebe79", + "label": "Contact Name", + "field": "name", + "value": "@flow.name" + }, + { + "type": "reply", + "uuid": "a5141d43-14a1-4e40-914c-f2b33b3645de", + "msg": { + "base": "Thanks @contact.name. What's your phone number?" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "5e7a398e-eebe-4b32-8600-374659f56d9e" + }, + { + "uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "x": 102, + "y": 464, + "destination": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "actions": [ + { + "type": "save", + "uuid": "a3bea28b-b1b0-4db1-af75-090973f9eb63", + "label": "Phone Number", + "field": "tel_e164", + "value": "@flow.phone" + }, + { + "type": "add_group", + "uuid": "5126bb19-6ca1-4a9c-a9ef-30f4dd3761f4", + "groups": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers" + } + ] + }, + { + "type": "reply", + "uuid": "7e198e6b-4640-4123-b3a9-0a44a06bd919", + "msg": { + "base": "Finally, what is your age?" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "4e483159-af9f-48a4-907f-c875fde66c70" + }, + { + "uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "x": 542, + "y": 281, + "destination": "1a7612b5-777d-4af3-a657-077c46f242d9", + "actions": [ + { + "type": "reply", + "uuid": "bde2299b-7f35-4ad9-98c3-7e8db18c34ac", + "msg": { + "base": "Sorry that doesn't look like a phone number. Try again." + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "edf187b4-d9c1-4aa1-b26e-5c8c5f481a39" + }, + { + "uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "x": 108, + "y": 875, + "destination": null, + "actions": [ + { + "type": "save", + "uuid": "76abbb4a-ab65-4e82-8b6a-7222fa14eb8a", + "label": "Age", + "field": "age", + "value": "@flow.age" + }, + { + "type": "reply", + "uuid": "40790c5a-4afc-4c80-856d-7414e53d5de8", + "msg": { + "base": "Thanks @contact.name. You are @contact.age and your phone number is @contact.tel" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "6bab242d-85d5-4afe-b6e7-5fe7c98f187e" + }, + { + "uuid": "a500d367-e944-4ba4-ab21-216b702f41c4", + "x": 522, + "y": 638, + "destination": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "actions": [ + { + "type": "reply", + "uuid": "2f39296b-37ed-4d16-b5bc-f3bfeb6b7691", + "msg": { + "base": "Sorry that doesn't look like an age value. Try again." + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "27ffbd14-4345-4588-a41f-683b08ba14e7" + } + ], + "rule_sets": [ + { + "uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5", + "x": 237, + "y": 93, + "label": "Name", + "rules": [ + { + "uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca", + "category": { + "base": "All Responses" + }, + "destination": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_message", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "1a7612b5-777d-4af3-a657-077c46f242d9", + "x": 237, + "y": 361, + "label": "Phone", + "rules": [ + { + "uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b", + "category": { + "base": "phone" + }, + "destination": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "destination_type": "A", + "test": { + "type": "phone" + }, + "label": null + }, + { + "uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff", + "category": { + "base": "Other" + }, + "destination": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_message", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "x": 228, + "y": 712, + "label": "Age", + "rules": [ + { + "uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8", + "category": { + "base": "numeric" + }, + "destination": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "destination_type": "A", + "test": { + "type": "number" + }, + "label": null + }, + { + "uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185", + "category": { + "base": "Other" + }, + "destination": "a500d367-e944-4ba4-ab21-216b702f41c4", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_message", + "response_type": "", + "operand": "@step.value", + "config": {} + } + ], + "base_language": "base", + "flow_type": "S", + "version": "11.7", + "metadata": { + "name": "Contact Details", + "saved_on": "2018-12-18T14:47:55.302852Z", + "revision": 16, + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "expires": 10080, + "contact_creation": "run", + "ivr_retry_failed_events": null + } + }, + { + "entry": "6f26e808-c1a2-4e52-b6f3-4d2dd79ffb24", + "action_sets": [ + { + "uuid": "6f26e808-c1a2-4e52-b6f3-4d2dd79ffb24", + "x": 100, + "y": 0, + "destination": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "actions": [ + { + "type": "reply", + "uuid": "450d2c77-a2d2-4cec-8a97-a96c5d7bf126", + "msg": { + "base": "What is your favorite beer?" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "bf56b8cc-3801-4a15-a307-73d277694896" + }, + { + "uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "x": 118, + "y": 205, + "destination": "7854b048-038c-44fe-88c5-f62fd599b556", + "actions": [ + { + "type": "reply", + "uuid": "4c3be4d2-c994-4e28-946c-5ea9ee33659a", + "msg": { + "base": "@flow.beer.category is a great beer! What is your favorite color?" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "99ac70fb-2d81-4d24-94a3-d031123e137b" + }, + { + "uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "x": 689, + "y": 144, + "destination": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "actions": [ + { + "type": "reply", + "uuid": "5e5b8b5a-b638-4a58-94a6-bb79814f4712", + "msg": { + "base": "I didn't recognize that beer. Please try again." + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "9257e3e9-ff08-4707-ad86-398e8e34bb7c" + }, + { + "uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "x": 161, + "y": 459, + "destination": null, + "actions": [ + { + "type": "reply", + "uuid": "a3ad6679-a32c-4af0-babc-2def65adc185", + "msg": { + "base": "Ok let's go get some @flow.color.category @flow.beer.category!" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "7b4ede52-3fa2-451c-955e-f5b0cb4c7030" + }, + { + "uuid": "504f5813-b500-431f-b7db-244606c9696b", + "x": 721, + "y": 369, + "destination": "7854b048-038c-44fe-88c5-f62fd599b556", + "actions": [ + { + "type": "reply", + "uuid": "5ed80e3b-d6ec-4b25-bbbf-39ae8935ab00", + "msg": { + "base": "@flow.color.text isn't a color I know. Please try again." + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "91e8b04d-8412-419e-9062-1877a23e377a" + } + ], + "rule_sets": [ + { + "uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "x": 228, + "y": 78, + "label": "Beer", + "rules": [ + { + "uuid": "9f484724-9adb-40da-9da3-d99973591e27", + "category": { + "base": "Club" + }, + "destination": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "Club" + } + }, + "label": null + }, + { + "uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3", + "category": { + "base": "Pilsner" + }, + "destination": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "Pilsner" + } + }, + "label": null + }, + { + "uuid": "447b17a3-9f22-4267-b9bc-754036f842ce", + "category": { + "base": "Mutzig" + }, + "destination": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "Mutzig" + } + }, + "label": null + }, + { + "uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274", + "category": { + "base": "Other" + }, + "destination": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_message", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "7854b048-038c-44fe-88c5-f62fd599b556", + "x": 293, + "y": 330, + "label": "Color", + "rules": [ + { + "uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217", + "category": { + "base": "Red" + }, + "destination": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "red" + } + }, + "label": null + }, + { + "uuid": "26d3ec68-245c-49d9-b33f-35d590041827", + "category": { + "base": "Blue" + }, + "destination": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "blue" + } + }, + "label": null + }, + { + "uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac", + "category": { + "base": "Green" + }, + "destination": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "destination_type": "A", + "test": { + "type": "contains_any", + "test": { + "base": "green" + } + }, + "label": null + }, + { + "uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20", + "category": { + "base": "Other" + }, + "destination": "504f5813-b500-431f-b7db-244606c9696b", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_message", + "response_type": "", + "operand": "@step.value", + "config": {} + } + ], + "base_language": "base", + "flow_type": "S", + "version": "11.6", + "metadata": { + "name": "Two Questions", + "saved_on": "2018-11-14T21:18:03.053214Z", + "revision": 24, + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "expires": 10080, + "contact_creation": "run", + "ivr_retry_failed_events": null + } + }, + { + "entry": "3d02c74d-e5c2-4590-b679-03f988592013", + "action_sets": [ + { + "uuid": "3d02c74d-e5c2-4590-b679-03f988592013", + "x": 100, + "y": 0, + "destination": "6ab79191-da91-4096-a589-6f3c7f5ecf0c", + "actions": [ + { + "type": "reply", + "uuid": "58f8384d-92b3-41d2-804f-8c4c6240924e", + "msg": { + "base": "Hi there, please send a selfie" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "d7de8701-2c58-4108-89a9-ec74e9ea619b" + }, + { + "uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "x": 103, + "y": 164, + "destination": "f5ba9174-ed8c-41cd-898a-d7449f72b916", + "actions": [ + { + "type": "reply", + "uuid": "dce3e627-65f5-4396-b5d3-67ed6f0b95ef", + "msg": { + "base": "Now send a video" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "7ec846f0-a0f1-48c5-bf8f-5f941558c673" + }, + { + "uuid": "8de09049-f474-4fed-a079-b0e559a8ac59", + "x": 101, + "y": 334, + "destination": "1250d717-bcef-45ed-b63e-e2e8eae953b1", + "actions": [ + { + "type": "reply", + "uuid": "6c21c268-759e-4156-b074-e4a3fed0dda3", + "msg": { + "base": "Now send an audio recording" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "1b3972b7-e926-46c5-ae30-017038be36c4" + }, + { + "uuid": "68829693-c442-4c16-9b77-ed384fd607b5", + "x": 101, + "y": 516, + "destination": "78d1b543-e774-4040-b6dc-53139b5edb60", + "actions": [ + { + "type": "reply", + "uuid": "f210c97b-9020-43d6-99e2-631e2e62e97b", + "msg": { + "base": "Finally please send your location" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "ad0699ae-d489-4a63-96eb-716c42669321" + }, + { + "uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "x": 102, + "y": 709, + "destination": null, + "actions": [ + { + "type": "reply", + "uuid": "1f30ac69-69d6-41bb-8e53-56d380704e37", + "msg": { + "base": "Thanks!" + }, + "media": {}, + "quick_replies": [], + "send_all": false + } + ], + "exit_uuid": "68ab09e3-3522-4411-87af-f444e00f033d" + } + ], + "rule_sets": [ + { + "uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c", + "x": 231, + "y": 88, + "label": "Selfie", + "rules": [ + { + "uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d", + "category": { + "base": "All Responses" + }, + "destination": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_photo", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916", + "x": 234, + "y": 255, + "label": "Vlog", + "rules": [ + { + "uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23", + "category": { + "base": "All Responses" + }, + "destination": "8de09049-f474-4fed-a079-b0e559a8ac59", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_video", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1", + "x": 232, + "y": 436, + "label": "Recording", + "rules": [ + { + "uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949", + "category": { + "base": "All Responses" + }, + "destination": "68829693-c442-4c16-9b77-ed384fd607b5", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_audio", + "response_type": "", + "operand": "@step.value", + "config": {} + }, + { + "uuid": "78d1b543-e774-4040-b6dc-53139b5edb60", + "x": 226, + "y": 626, + "label": "Location", + "rules": [ + { + "uuid": "88836f88-82f0-405c-a2f7-dac7b950e198", + "category": { + "base": "All Responses" + }, + "destination": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "destination_type": "A", + "test": { + "type": "true" + }, + "label": null + } + ], + "finished_key": null, + "ruleset_type": "wait_gps", + "response_type": "", + "operand": "@step.value", + "config": {} + } + ], + "base_language": "base", + "flow_type": "S", + "version": "11.6", + "metadata": { + "name": "Multimedia", + "saved_on": "2018-11-21T16:32:02.741357Z", + "revision": 24, + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "expires": 10080 + } + } + ], + "campaigns": [], + "triggers": [] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_definitions_get_v12.json b/app/src/androidTest/res/raw/api_v2_definitions_get_v12.json new file mode 100644 index 0000000..978a66a --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_definitions_get_v12.json @@ -0,0 +1,621 @@ +{ + "version": "12.0", + "site": "https://app.rapidpro.io", + "flows": [ + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "spec_version": "12.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 16, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "036901e0-abb8-4979-92cb-f0d43aeb5b68", + "actions": [ + { + "type": "send_msg", + "uuid": "67aafaf6-b375-461c-8357-fd760423f96c", + "text": "Hi there. What's your name?" + } + ], + "exits": [ + { + "uuid": "706853c2-831b-4dd8-8073-cd51b21d94d6", + "destination_node_uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5" + } + ] + }, + { + "uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "actions": [ + { + "type": "set_contact_name", + "uuid": "fac97ece-b9ab-4480-a6dd-9968cb5ebe79", + "name": "@results.name" + }, + { + "type": "send_msg", + "uuid": "a5141d43-14a1-4e40-914c-f2b33b3645de", + "text": "Thanks @contact.name. What's your phone number?" + } + ], + "exits": [ + { + "uuid": "5e7a398e-eebe-4b32-8600-374659f56d9e", + "destination_node_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "actions": [ + { + "type": "add_contact_urn", + "uuid": "a3bea28b-b1b0-4db1-af75-090973f9eb63", + "scheme": "tel", + "path": "@results.phone" + }, + { + "type": "add_contact_groups", + "uuid": "5126bb19-6ca1-4a9c-a9ef-30f4dd3761f4", + "groups": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers" + } + ] + }, + { + "type": "send_msg", + "uuid": "7e198e6b-4640-4123-b3a9-0a44a06bd919", + "text": "Finally, what is your age?" + } + ], + "exits": [ + { + "uuid": "4e483159-af9f-48a4-907f-c875fde66c70", + "destination_node_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "actions": [ + { + "type": "send_msg", + "uuid": "bde2299b-7f35-4ad9-98c3-7e8db18c34ac", + "text": "Sorry that doesn't look like a phone number. Try again." + } + ], + "exits": [ + { + "uuid": "edf187b4-d9c1-4aa1-b26e-5c8c5f481a39", + "destination_node_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "actions": [ + { + "type": "set_contact_field", + "uuid": "76abbb4a-ab65-4e82-8b6a-7222fa14eb8a", + "field": { + "key": "age", + "name": "Age" + }, + "value": "@results.age" + }, + { + "type": "send_msg", + "uuid": "40790c5a-4afc-4c80-856d-7414e53d5de8", + "text": "Thanks @contact.name. You are @contact.fields.age and your phone number is @(contact.urns.tel[0].display)" + } + ], + "exits": [ + { + "uuid": "6bab242d-85d5-4afe-b6e7-5fe7c98f187e" + } + ] + }, + { + "uuid": "a500d367-e944-4ba4-ab21-216b702f41c4", + "actions": [ + { + "type": "send_msg", + "uuid": "2f39296b-37ed-4d16-b5bc-f3bfeb6b7691", + "text": "Sorry that doesn't look like an age value. Try again." + } + ], + "exits": [ + { + "uuid": "27ffbd14-4345-4588-a41f-683b08ba14e7", + "destination_node_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5", + "wait": { + "type": "msg" + }, + "router": { + "type": "switch", + "result_name": "Name", + "default_exit_uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca", + "operand": "@input", + "cases": [] + }, + "exits": [ + { + "uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca", + "destination_node_uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "name": "All Responses" + } + ] + }, + { + "uuid": "1a7612b5-777d-4af3-a657-077c46f242d9", + "wait": { + "type": "msg" + }, + "router": { + "type": "switch", + "result_name": "Phone", + "default_exit_uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff", + "operand": "@input", + "cases": [ + { + "uuid": "5427f31a-da24-432d-83cd-53173241c0a1", + "type": "has_phone", + "exit_uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b" + } + ] + }, + "exits": [ + { + "uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b", + "destination_node_uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "name": "phone" + }, + { + "uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff", + "destination_node_uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "name": "Other" + } + ] + }, + { + "uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "wait": { + "type": "msg" + }, + "router": { + "type": "switch", + "result_name": "Age", + "default_exit_uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185", + "operand": "@input", + "cases": [ + { + "uuid": "eaca5550-e00f-4fb6-947a-6fa1c6f4eab8", + "type": "has_number", + "exit_uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8" + } + ] + }, + "exits": [ + { + "uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8", + "destination_node_uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "name": "numeric" + }, + { + "uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185", + "destination_node_uuid": "a500d367-e944-4ba4-ab21-216b702f41c4", + "name": "Other" + } + ] + } + ] + }, + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "spec_version": "12.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "6f26e808-c1a2-4e52-b6f3-4d2dd79ffb24", + "actions": [ + { + "type": "send_msg", + "uuid": "450d2c77-a2d2-4cec-8a97-a96c5d7bf126", + "text": "What is your favorite beer?" + } + ], + "exits": [ + { + "uuid": "bf56b8cc-3801-4a15-a307-73d277694896", + "destination_node_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "actions": [ + { + "type": "send_msg", + "uuid": "4c3be4d2-c994-4e28-946c-5ea9ee33659a", + "text": "@results.beer.category_localized is a great beer! What is your favorite color?" + } + ], + "exits": [ + { + "uuid": "99ac70fb-2d81-4d24-94a3-d031123e137b", + "destination_node_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "actions": [ + { + "type": "send_msg", + "uuid": "5e5b8b5a-b638-4a58-94a6-bb79814f4712", + "text": "I didn't recognize that beer. Please try again." + } + ], + "exits": [ + { + "uuid": "9257e3e9-ff08-4707-ad86-398e8e34bb7c", + "destination_node_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "actions": [ + { + "type": "send_msg", + "uuid": "a3ad6679-a32c-4af0-babc-2def65adc185", + "text": "Ok let's go get some @results.color.category_localized @results.beer.category_localized!" + } + ], + "exits": [ + { + "uuid": "7b4ede52-3fa2-451c-955e-f5b0cb4c7030" + } + ] + }, + { + "uuid": "504f5813-b500-431f-b7db-244606c9696b", + "actions": [ + { + "type": "send_msg", + "uuid": "5ed80e3b-d6ec-4b25-bbbf-39ae8935ab00", + "text": "@results.color.input isn't a color I know. Please try again." + } + ], + "exits": [ + { + "uuid": "91e8b04d-8412-419e-9062-1877a23e377a", + "destination_node_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "wait": { + "type": "msg" + }, + "router": { + "type": "switch", + "result_name": "Beer", + "default_exit_uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274", + "operand": "@input", + "cases": [ + { + "uuid": "05168173-e339-4c95-add3-5bdccef5cc46", + "type": "has_any_word", + "arguments": [ + "Club" + ], + "exit_uuid": "9f484724-9adb-40da-9da3-d99973591e27" + }, + { + "uuid": "c62b1c1e-0334-4a73-b130-b8a3cade476a", + "type": "has_any_word", + "arguments": [ + "Pilsner" + ], + "exit_uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3" + }, + { + "uuid": "0e103c76-445c-4023-825c-d9452d5769bb", + "type": "has_any_word", + "arguments": [ + "Mutzig" + ], + "exit_uuid": "447b17a3-9f22-4267-b9bc-754036f842ce" + } + ] + }, + "exits": [ + { + "uuid": "9f484724-9adb-40da-9da3-d99973591e27", + "destination_node_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "name": "Club" + }, + { + "uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3", + "destination_node_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "name": "Pilsner" + }, + { + "uuid": "447b17a3-9f22-4267-b9bc-754036f842ce", + "destination_node_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "name": "Mutzig" + }, + { + "uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274", + "destination_node_uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "name": "Other" + } + ] + }, + { + "uuid": "7854b048-038c-44fe-88c5-f62fd599b556", + "wait": { + "type": "msg" + }, + "router": { + "type": "switch", + "result_name": "Color", + "default_exit_uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20", + "operand": "@input", + "cases": [ + { + "uuid": "15b650be-ab0b-45c8-83c8-5c6f8b3ccbf7", + "type": "has_any_word", + "arguments": [ + "red" + ], + "exit_uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217" + }, + { + "uuid": "0f887221-6253-462a-aeb5-6db237dc2e59", + "type": "has_any_word", + "arguments": [ + "blue" + ], + "exit_uuid": "26d3ec68-245c-49d9-b33f-35d590041827" + }, + { + "uuid": "16fa9f92-28a7-4d44-b62a-d80c3b0ab62b", + "type": "has_any_word", + "arguments": [ + "green" + ], + "exit_uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac" + } + ] + }, + "exits": [ + { + "uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217", + "destination_node_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "name": "Red" + }, + { + "uuid": "26d3ec68-245c-49d9-b33f-35d590041827", + "destination_node_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "name": "Blue" + }, + { + "uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac", + "destination_node_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "name": "Green" + }, + { + "uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20", + "destination_node_uuid": "504f5813-b500-431f-b7db-244606c9696b", + "name": "Other" + } + ] + } + ] + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "spec_version": "12.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "3d02c74d-e5c2-4590-b679-03f988592013", + "actions": [ + { + "type": "send_msg", + "uuid": "58f8384d-92b3-41d2-804f-8c4c6240924e", + "text": "Hi there, please send a selfie" + } + ], + "exits": [ + { + "uuid": "d7de8701-2c58-4108-89a9-ec74e9ea619b", + "destination_node_uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c" + } + ] + }, + { + "uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "actions": [ + { + "type": "send_msg", + "uuid": "dce3e627-65f5-4396-b5d3-67ed6f0b95ef", + "text": "Now send a video" + } + ], + "exits": [ + { + "uuid": "7ec846f0-a0f1-48c5-bf8f-5f941558c673", + "destination_node_uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916" + } + ] + }, + { + "uuid": "8de09049-f474-4fed-a079-b0e559a8ac59", + "actions": [ + { + "type": "send_msg", + "uuid": "6c21c268-759e-4156-b074-e4a3fed0dda3", + "text": "Now send an audio recording" + } + ], + "exits": [ + { + "uuid": "1b3972b7-e926-46c5-ae30-017038be36c4", + "destination_node_uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1" + } + ] + }, + { + "uuid": "68829693-c442-4c16-9b77-ed384fd607b5", + "actions": [ + { + "type": "send_msg", + "uuid": "f210c97b-9020-43d6-99e2-631e2e62e97b", + "text": "Finally please send your location" + } + ], + "exits": [ + { + "uuid": "ad0699ae-d489-4a63-96eb-716c42669321", + "destination_node_uuid": "78d1b543-e774-4040-b6dc-53139b5edb60" + } + ] + }, + { + "uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "actions": [ + { + "type": "send_msg", + "uuid": "1f30ac69-69d6-41bb-8e53-56d380704e37", + "text": "Thanks!" + } + ], + "exits": [ + { + "uuid": "68ab09e3-3522-4411-87af-f444e00f033d" + } + ] + }, + { + "uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c", + "wait": { + "type": "msg", + "hint": { + "type": "image" + } + }, + "router": { + "type": "switch", + "result_name": "Selfie", + "default_exit_uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d", + "operand": "@input", + "cases": [] + }, + "exits": [ + { + "uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d", + "destination_node_uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "name": "All Responses" + } + ] + }, + { + "uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916", + "wait": { + "type": "msg", + "hint": { + "type": "video" + } + }, + "router": { + "type": "switch", + "result_name": "Vlog", + "default_exit_uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23", + "operand": "@input", + "cases": [] + }, + "exits": [ + { + "uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23", + "destination_node_uuid": "8de09049-f474-4fed-a079-b0e559a8ac59", + "name": "All Responses" + } + ] + }, + { + "uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1", + "wait": { + "type": "msg", + "hint": { + "type": "audio" + } + }, + "router": { + "type": "switch", + "result_name": "Recording", + "default_exit_uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949", + "operand": "@input", + "cases": [] + }, + "exits": [ + { + "uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949", + "destination_node_uuid": "68829693-c442-4c16-9b77-ed384fd607b5", + "name": "All Responses" + } + ] + }, + { + "uuid": "78d1b543-e774-4040-b6dc-53139b5edb60", + "wait": { + "type": "msg", + "hint": { + "type": "location" + } + }, + "router": { + "type": "switch", + "result_name": "Location", + "default_exit_uuid": "88836f88-82f0-405c-a2f7-dac7b950e198", + "operand": "@input", + "cases": [] + }, + "exits": [ + { + "uuid": "88836f88-82f0-405c-a2f7-dac7b950e198", + "destination_node_uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "name": "All Responses" + } + ] + } + ] + } + ], + "campaigns": [], + "triggers": [] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_definitions_get_v13.json b/app/src/androidTest/res/raw/api_v2_definitions_get_v13.json new file mode 100644 index 0000000..54152a3 --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_definitions_get_v13.json @@ -0,0 +1,707 @@ +{ + "version": "11.12", + "site": "https://app.rapidpro.io", + "flows": [ + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "spec_version": "13.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 16, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "036901e0-abb8-4979-92cb-f0d43aeb5b68", + "actions": [ + { + "type": "send_msg", + "uuid": "67aafaf6-b375-461c-8357-fd760423f96c", + "text": "Hi there. What's your name?" + } + ], + "exits": [ + { + "uuid": "706853c2-831b-4dd8-8073-cd51b21d94d6", + "destination_uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5" + } + ] + }, + { + "uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "actions": [ + { + "type": "set_contact_name", + "uuid": "fac97ece-b9ab-4480-a6dd-9968cb5ebe79", + "name": "@results.name" + }, + { + "type": "send_msg", + "uuid": "a5141d43-14a1-4e40-914c-f2b33b3645de", + "text": "Thanks @contact.name. What's your phone number?" + } + ], + "exits": [ + { + "uuid": "5e7a398e-eebe-4b32-8600-374659f56d9e", + "destination_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "actions": [ + { + "type": "add_contact_urn", + "uuid": "a3bea28b-b1b0-4db1-af75-090973f9eb63", + "scheme": "tel", + "path": "@results.phone" + }, + { + "type": "add_contact_groups", + "uuid": "5126bb19-6ca1-4a9c-a9ef-30f4dd3761f4", + "groups": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers" + } + ] + }, + { + "type": "send_msg", + "uuid": "7e198e6b-4640-4123-b3a9-0a44a06bd919", + "text": "Finally, what is your age?" + } + ], + "exits": [ + { + "uuid": "4e483159-af9f-48a4-907f-c875fde66c70", + "destination_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "actions": [ + { + "type": "send_msg", + "uuid": "bde2299b-7f35-4ad9-98c3-7e8db18c34ac", + "text": "Sorry that doesn't look like a phone number. Try again." + } + ], + "exits": [ + { + "uuid": "edf187b4-d9c1-4aa1-b26e-5c8c5f481a39", + "destination_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "actions": [ + { + "type": "set_contact_field", + "uuid": "76abbb4a-ab65-4e82-8b6a-7222fa14eb8a", + "field": { + "key": "age", + "name": "Age" + }, + "value": "@results.age" + }, + { + "type": "send_msg", + "uuid": "40790c5a-4afc-4c80-856d-7414e53d5de8", + "text": "Thanks @contact.name. You are @fields.age and your phone number is @(format_urn(urns.tel))" + } + ], + "exits": [ + { + "uuid": "6bab242d-85d5-4afe-b6e7-5fe7c98f187e" + } + ] + }, + { + "uuid": "a500d367-e944-4ba4-ab21-216b702f41c4", + "actions": [ + { + "type": "send_msg", + "uuid": "2f39296b-37ed-4d16-b5bc-f3bfeb6b7691", + "text": "Sorry that doesn't look like an age value. Try again." + } + ], + "exits": [ + { + "uuid": "27ffbd14-4345-4588-a41f-683b08ba14e7", + "destination_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Name", + "categories": [ + { + "uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca", + "exit_uuid": "d92a1d6d-dce8-4fda-96c4-64cfa739ce29", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca" + }, + "exits": [ + { + "uuid": "d92a1d6d-dce8-4fda-96c4-64cfa739ce29", + "destination_uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db" + } + ] + }, + { + "uuid": "1a7612b5-777d-4af3-a657-077c46f242d9", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Phone", + "categories": [ + { + "uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b", + "exit_uuid": "6ef238c2-4b8e-46a2-b39d-8010247f3f46", + "name": "phone" + }, + { + "uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff", + "exit_uuid": "47dfcfa5-d667-4908-9b69-0f4badd9a245", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "5427f31a-da24-432d-83cd-53173241c0a1", + "type": "has_phone", + "category_uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b" + } + ], + "default_category_uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff" + }, + "exits": [ + { + "uuid": "6ef238c2-4b8e-46a2-b39d-8010247f3f46", + "destination_uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9" + }, + { + "uuid": "47dfcfa5-d667-4908-9b69-0f4badd9a245", + "destination_uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709" + } + ] + }, + { + "uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Age", + "categories": [ + { + "uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8", + "exit_uuid": "47de528d-8c03-457e-9474-8d5c85feee78", + "name": "numeric" + }, + { + "uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185", + "exit_uuid": "e814adf0-565b-4f95-8d57-4f1b65e8f5ef", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "eaca5550-e00f-4fb6-947a-6fa1c6f4eab8", + "type": "has_number", + "category_uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8" + } + ], + "default_category_uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185" + }, + "exits": [ + { + "uuid": "47de528d-8c03-457e-9474-8d5c85feee78", + "destination_uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095" + }, + { + "uuid": "e814adf0-565b-4f95-8d57-4f1b65e8f5ef", + "destination_uuid": "a500d367-e944-4ba4-ab21-216b702f41c4" + } + ] + } + ] + }, + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "spec_version": "13.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "6f26e808-c1a2-4e52-b6f3-4d2dd79ffb24", + "actions": [ + { + "type": "send_msg", + "uuid": "450d2c77-a2d2-4cec-8a97-a96c5d7bf126", + "text": "What is your favorite beer?" + } + ], + "exits": [ + { + "uuid": "bf56b8cc-3801-4a15-a307-73d277694896", + "destination_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "actions": [ + { + "type": "send_msg", + "uuid": "4c3be4d2-c994-4e28-946c-5ea9ee33659a", + "text": "@results.beer.category_localized is a great beer! What is your favorite color?" + } + ], + "exits": [ + { + "uuid": "99ac70fb-2d81-4d24-94a3-d031123e137b", + "destination_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "actions": [ + { + "type": "send_msg", + "uuid": "5e5b8b5a-b638-4a58-94a6-bb79814f4712", + "text": "I didn't recognize that beer. Please try again." + } + ], + "exits": [ + { + "uuid": "9257e3e9-ff08-4707-ad86-398e8e34bb7c", + "destination_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "actions": [ + { + "type": "send_msg", + "uuid": "a3ad6679-a32c-4af0-babc-2def65adc185", + "text": "Ok let's go get some @results.color.category_localized @results.beer.category_localized!" + } + ], + "exits": [ + { + "uuid": "7b4ede52-3fa2-451c-955e-f5b0cb4c7030" + } + ] + }, + { + "uuid": "504f5813-b500-431f-b7db-244606c9696b", + "actions": [ + { + "type": "send_msg", + "uuid": "5ed80e3b-d6ec-4b25-bbbf-39ae8935ab00", + "text": "@results.color.input isn't a color I know. Please try again." + } + ], + "exits": [ + { + "uuid": "91e8b04d-8412-419e-9062-1877a23e377a", + "destination_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Beer", + "categories": [ + { + "uuid": "9f484724-9adb-40da-9da3-d99973591e27", + "exit_uuid": "6c9c4dd8-ea82-44c7-9a17-54eec3667134", + "name": "Club" + }, + { + "uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3", + "exit_uuid": "b54f32a0-863a-4e71-82f7-4208e1453967", + "name": "Pilsner" + }, + { + "uuid": "447b17a3-9f22-4267-b9bc-754036f842ce", + "exit_uuid": "a995efea-79d8-4fcd-a88f-2bada7a028d5", + "name": "Mutzig" + }, + { + "uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274", + "exit_uuid": "354a2c60-a994-47cc-9117-50b131eff2e7", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "c46a301e-f4b7-4650-8e2a-05f92f9f929f", + "type": "has_any_word", + "arguments": [ + "Club" + ], + "category_uuid": "9f484724-9adb-40da-9da3-d99973591e27" + }, + { + "uuid": "f740f2ee-56e2-4a2f-8cfb-73e20a4bb5f2", + "type": "has_any_word", + "arguments": [ + "Pilsner" + ], + "category_uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3" + }, + { + "uuid": "5d8b09f9-67ed-42c7-9e5e-2e4607ebd76f", + "type": "has_any_word", + "arguments": [ + "Mutzig" + ], + "category_uuid": "447b17a3-9f22-4267-b9bc-754036f842ce" + } + ], + "default_category_uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274" + }, + "exits": [ + { + "uuid": "6c9c4dd8-ea82-44c7-9a17-54eec3667134", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "b54f32a0-863a-4e71-82f7-4208e1453967", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "a995efea-79d8-4fcd-a88f-2bada7a028d5", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "354a2c60-a994-47cc-9117-50b131eff2e7", + "destination_uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9" + } + ] + }, + { + "uuid": "7854b048-038c-44fe-88c5-f62fd599b556", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Color", + "categories": [ + { + "uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217", + "exit_uuid": "58999a5a-277e-4dd5-aa18-3069eecb1bd0", + "name": "Red" + }, + { + "uuid": "26d3ec68-245c-49d9-b33f-35d590041827", + "exit_uuid": "f259e489-5295-41c6-8ee2-888d83c9495c", + "name": "Blue" + }, + { + "uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac", + "exit_uuid": "2867ccb6-97b3-484c-8af2-52bc62f79dc4", + "name": "Green" + }, + { + "uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20", + "exit_uuid": "9c43c990-4f92-43e7-a0f8-330b0ba30def", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "c6285f5d-a0ee-4c6c-80d0-aaedf6f24c33", + "type": "has_any_word", + "arguments": [ + "red" + ], + "category_uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217" + }, + { + "uuid": "15b1b6f1-2c4f-4e3f-aef0-79eb19c5a59f", + "type": "has_any_word", + "arguments": [ + "blue" + ], + "category_uuid": "26d3ec68-245c-49d9-b33f-35d590041827" + }, + { + "uuid": "0802ebe3-6a39-413d-b3dd-1b6e232f3c24", + "type": "has_any_word", + "arguments": [ + "green" + ], + "category_uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac" + } + ], + "default_category_uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20" + }, + "exits": [ + { + "uuid": "58999a5a-277e-4dd5-aa18-3069eecb1bd0", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "f259e489-5295-41c6-8ee2-888d83c9495c", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "2867ccb6-97b3-484c-8af2-52bc62f79dc4", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "9c43c990-4f92-43e7-a0f8-330b0ba30def", + "destination_uuid": "504f5813-b500-431f-b7db-244606c9696b" + } + ] + } + ] + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "spec_version": "13.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "3d02c74d-e5c2-4590-b679-03f988592013", + "actions": [ + { + "type": "send_msg", + "uuid": "58f8384d-92b3-41d2-804f-8c4c6240924e", + "text": "Hi there, please send a selfie" + } + ], + "exits": [ + { + "uuid": "d7de8701-2c58-4108-89a9-ec74e9ea619b", + "destination_uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c" + } + ] + }, + { + "uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "actions": [ + { + "type": "send_msg", + "uuid": "dce3e627-65f5-4396-b5d3-67ed6f0b95ef", + "text": "Now send a video" + } + ], + "exits": [ + { + "uuid": "7ec846f0-a0f1-48c5-bf8f-5f941558c673", + "destination_uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916" + } + ] + }, + { + "uuid": "8de09049-f474-4fed-a079-b0e559a8ac59", + "actions": [ + { + "type": "send_msg", + "uuid": "6c21c268-759e-4156-b074-e4a3fed0dda3", + "text": "Now send an audio recording" + } + ], + "exits": [ + { + "uuid": "1b3972b7-e926-46c5-ae30-017038be36c4", + "destination_uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1" + } + ] + }, + { + "uuid": "68829693-c442-4c16-9b77-ed384fd607b5", + "actions": [ + { + "type": "send_msg", + "uuid": "f210c97b-9020-43d6-99e2-631e2e62e97b", + "text": "Finally please send your location" + } + ], + "exits": [ + { + "uuid": "ad0699ae-d489-4a63-96eb-716c42669321", + "destination_uuid": "78d1b543-e774-4040-b6dc-53139b5edb60" + } + ] + }, + { + "uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "actions": [ + { + "type": "send_msg", + "uuid": "1f30ac69-69d6-41bb-8e53-56d380704e37", + "text": "Thanks!" + } + ], + "exits": [ + { + "uuid": "68ab09e3-3522-4411-87af-f444e00f033d" + } + ] + }, + { + "uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "image" + } + }, + "result_name": "Selfie", + "categories": [ + { + "uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d", + "exit_uuid": "40feee41-f61e-4195-bb28-b7c7ebd7c2ff", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d" + }, + "exits": [ + { + "uuid": "40feee41-f61e-4195-bb28-b7c7ebd7c2ff", + "destination_uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9" + } + ] + }, + { + "uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "video" + } + }, + "result_name": "Vlog", + "categories": [ + { + "uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23", + "exit_uuid": "f7943b85-3f1b-459a-940e-460a63c25f5a", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23" + }, + "exits": [ + { + "uuid": "f7943b85-3f1b-459a-940e-460a63c25f5a", + "destination_uuid": "8de09049-f474-4fed-a079-b0e559a8ac59" + } + ] + }, + { + "uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "audio" + } + }, + "result_name": "Recording", + "categories": [ + { + "uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949", + "exit_uuid": "cc6e5a51-fee5-4965-b2b1-671d18d111d4", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949" + }, + "exits": [ + { + "uuid": "cc6e5a51-fee5-4965-b2b1-671d18d111d4", + "destination_uuid": "68829693-c442-4c16-9b77-ed384fd607b5" + } + ] + }, + { + "uuid": "78d1b543-e774-4040-b6dc-53139b5edb60", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "location" + } + }, + "result_name": "Location", + "categories": [ + { + "uuid": "88836f88-82f0-405c-a2f7-dac7b950e198", + "exit_uuid": "98facd56-cf1a-41d4-82a9-73afc8d327e5", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "88836f88-82f0-405c-a2f7-dac7b950e198" + }, + "exits": [ + { + "uuid": "98facd56-cf1a-41d4-82a9-73afc8d327e5", + "destination_uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405" + } + ] + } + ] + } + ], + "campaigns": [], + "triggers": [] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_fields_get_page_1.json b/app/src/androidTest/res/raw/api_v2_fields_get_page_1.json new file mode 100644 index 0000000..9be0127 --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_fields_get_page_1.json @@ -0,0 +1,16 @@ +{ + "next": "https://app.rapidpro.io/api/v2/fields.json?cursor=123456789", + "previous": null, + "results": [ + { + "key": "gender", + "label": "Gender", + "value_type": "text" + }, + { + "key": "age", + "label": "Age", + "value_type": "numeric" + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_fields_get_page_2.json b/app/src/androidTest/res/raw/api_v2_fields_get_page_2.json new file mode 100644 index 0000000..ded7876 --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_fields_get_page_2.json @@ -0,0 +1,11 @@ +{ + "next": null, + "previous": "https://app.rapidpro.io/api/v2/fields/json?cursor=987654321", + "results": [ + { + "key": "join_date", + "label": "Join Date", + "value_type": "datetime" + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_flows_get.json b/app/src/androidTest/res/raw/api_v2_flows_get.json new file mode 100644 index 0000000..6053a2d --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_flows_get.json @@ -0,0 +1,54 @@ +{ + "next": null, + "previous": null, + "results": [ + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "type": "survey", + "archived": false, + "labels": [], + "expires": 10080, + "runs": { + "active": 0, + "completed": 0, + "interrupted": 0, + "expired": 0 + }, + "created_on": "2018-11-14T21:15:08.816870Z", + "modified_on": "2018-11-14T21:18:17.006546Z" + }, + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "type": "survey", + "archived": false, + "labels": [], + "expires": 10080, + "runs": { + "active": 0, + "completed": 3, + "interrupted": 0, + "expired": 0 + }, + "created_on": "2018-10-25T19:56:36.626539Z", + "modified_on": "2018-11-14T21:12:10.148865Z" + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "type": "survey", + "archived": false, + "labels": [], + "expires": 10080, + "runs": { + "active": 1, + "completed": 2, + "interrupted": 0, + "expired": 0 + }, + "created_on": "2018-10-25T19:56:36.626539Z", + "modified_on": "2018-11-14T21:12:10.148865Z" + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_groups_get.json b/app/src/androidTest/res/raw/api_v2_groups_get.json new file mode 100644 index 0000000..9eea3ac --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_groups_get.json @@ -0,0 +1,21 @@ +{ + "next": null, + "previous": null, + "results": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers", + "query": "" + }, + { + "uuid": "372aba66-16e2-44ee-8486-fb5cedfe51d9", + "name": "Customers", + "query": "" + }, + { + "uuid": "63867d07-c033-4ef1-957c-85fa9708c19c", + "name": "Youth", + "query": "age <= 18" + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_media_post.json b/app/src/androidTest/res/raw/api_v2_media_post.json new file mode 100644 index 0000000..02ec0ed --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_media_post.json @@ -0,0 +1,3 @@ +{ + "location": "https://uploads.rapidpro.io/1224626264215.jpg" +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/api_v2_org_get.json b/app/src/androidTest/res/raw/api_v2_org_get.json new file mode 100644 index 0000000..f46652c --- /dev/null +++ b/app/src/androidTest/res/raw/api_v2_org_get.json @@ -0,0 +1,11 @@ +{ + "uuid": "dc8123a1-168c-4962-ab9e-f784f3d804a2", + "name": "Nyaruka", + "country": "RW", + "languages": ["eng", "fra"], + "primary_language": "eng", + "timezone": "Africa/Kigali", + "date_style": "day_first", + "credits": {"used": 121433, "remaining": 3452}, + "anon": false +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/capture_audio.m4a b/app/src/androidTest/res/raw/capture_audio.m4a new file mode 100644 index 0000000..801e84b Binary files /dev/null and b/app/src/androidTest/res/raw/capture_audio.m4a differ diff --git a/app/src/androidTest/res/raw/capture_image.jpg b/app/src/androidTest/res/raw/capture_image.jpg new file mode 100644 index 0000000..b579b7f Binary files /dev/null and b/app/src/androidTest/res/raw/capture_image.jpg differ diff --git a/app/src/androidTest/res/raw/capture_video.mp4 b/app/src/androidTest/res/raw/capture_video.mp4 new file mode 100644 index 0000000..1fc4788 Binary files /dev/null and b/app/src/androidTest/res/raw/capture_video.mp4 differ diff --git a/app/src/androidTest/res/raw/legacy_files.zip b/app/src/androidTest/res/raw/legacy_files.zip new file mode 100644 index 0000000..dfc91eb Binary files /dev/null and b/app/src/androidTest/res/raw/legacy_files.zip differ diff --git a/app/src/androidTest/res/raw/legacy_submissions.zip b/app/src/androidTest/res/raw/legacy_submissions.zip new file mode 100644 index 0000000..bda0f1a Binary files /dev/null and b/app/src/androidTest/res/raw/legacy_submissions.zip differ diff --git a/app/src/androidTest/res/raw/org1_assets.json b/app/src/androidTest/res/raw/org1_assets.json new file mode 100644 index 0000000..956c9b2 --- /dev/null +++ b/app/src/androidTest/res/raw/org1_assets.json @@ -0,0 +1,737 @@ +{ + "fields": [ + { + "key": "gender", + "name": "Gender", + "type": "text" + }, + { + "key": "age", + "name": "Age", + "type": "number" + }, + { + "key": "join_date", + "name": "Join Date", + "type": "datetime" + } + ], + "groups": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers", + "query": "" + }, + { + "uuid": "372aba66-16e2-44ee-8486-fb5cedfe51d9", + "name": "Customers", + "query": "" + }, + { + "uuid": "63867d07-c033-4ef1-957c-85fa9708c19c", + "name": "Youth", + "query": "age <= 18" + } + ], + "flows": [ + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "spec_version": "13.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 16, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "036901e0-abb8-4979-92cb-f0d43aeb5b68", + "actions": [ + { + "type": "send_msg", + "uuid": "67aafaf6-b375-461c-8357-fd760423f96c", + "text": "Hi there. What's your name?" + } + ], + "exits": [ + { + "uuid": "706853c2-831b-4dd8-8073-cd51b21d94d6", + "destination_uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5" + } + ] + }, + { + "uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db", + "actions": [ + { + "type": "set_contact_name", + "uuid": "fac97ece-b9ab-4480-a6dd-9968cb5ebe79", + "name": "@results.name" + }, + { + "type": "send_msg", + "uuid": "a5141d43-14a1-4e40-914c-f2b33b3645de", + "text": "Thanks @contact.name. What's your phone number?" + } + ], + "exits": [ + { + "uuid": "5e7a398e-eebe-4b32-8600-374659f56d9e", + "destination_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9", + "actions": [ + { + "type": "add_contact_urn", + "uuid": "a3bea28b-b1b0-4db1-af75-090973f9eb63", + "scheme": "tel", + "path": "@results.phone" + }, + { + "type": "add_contact_groups", + "uuid": "5126bb19-6ca1-4a9c-a9ef-30f4dd3761f4", + "groups": [ + { + "uuid": "6696cabf-eb5e-42bf-bcc6-f0c8be9b1316", + "name": "Testers" + } + ] + }, + { + "type": "send_msg", + "uuid": "7e198e6b-4640-4123-b3a9-0a44a06bd919", + "text": "Finally, what is your age?" + } + ], + "exits": [ + { + "uuid": "4e483159-af9f-48a4-907f-c875fde66c70", + "destination_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709", + "actions": [ + { + "type": "send_msg", + "uuid": "bde2299b-7f35-4ad9-98c3-7e8db18c34ac", + "text": "Sorry that doesn't look like a phone number. Try again." + } + ], + "exits": [ + { + "uuid": "edf187b4-d9c1-4aa1-b26e-5c8c5f481a39", + "destination_uuid": "1a7612b5-777d-4af3-a657-077c46f242d9" + } + ] + }, + { + "uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095", + "actions": [ + { + "type": "set_contact_field", + "uuid": "76abbb4a-ab65-4e82-8b6a-7222fa14eb8a", + "field": { + "key": "age", + "name": "Age" + }, + "value": "@results.age" + }, + { + "type": "send_msg", + "uuid": "40790c5a-4afc-4c80-856d-7414e53d5de8", + "text": "Thanks @contact.name. You are @fields.age and your phone number is @(format_urn(urns.tel))" + } + ], + "exits": [ + { + "uuid": "6bab242d-85d5-4afe-b6e7-5fe7c98f187e" + } + ] + }, + { + "uuid": "a500d367-e944-4ba4-ab21-216b702f41c4", + "actions": [ + { + "type": "send_msg", + "uuid": "2f39296b-37ed-4d16-b5bc-f3bfeb6b7691", + "text": "Sorry that doesn't look like an age value. Try again." + } + ], + "exits": [ + { + "uuid": "27ffbd14-4345-4588-a41f-683b08ba14e7", + "destination_uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb" + } + ] + }, + { + "uuid": "39fe1ce0-7dee-445e-9945-48c72a05cef5", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Name", + "categories": [ + { + "uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca", + "exit_uuid": "d92a1d6d-dce8-4fda-96c4-64cfa739ce29", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "bb999ff8-5eb3-45f6-bec6-a0430105b0ca" + }, + "exits": [ + { + "uuid": "d92a1d6d-dce8-4fda-96c4-64cfa739ce29", + "destination_uuid": "73dda1a7-9152-45f1-993a-e7d01eb028db" + } + ] + }, + { + "uuid": "1a7612b5-777d-4af3-a657-077c46f242d9", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Phone", + "categories": [ + { + "uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b", + "exit_uuid": "6ef238c2-4b8e-46a2-b39d-8010247f3f46", + "name": "phone" + }, + { + "uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff", + "exit_uuid": "47dfcfa5-d667-4908-9b69-0f4badd9a245", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "5427f31a-da24-432d-83cd-53173241c0a1", + "type": "has_phone", + "category_uuid": "0c047d03-3b61-4ff2-8bc8-43a89cf1087b" + } + ], + "default_category_uuid": "6d614e50-ee98-412c-aee6-0916d10ed0ff" + }, + "exits": [ + { + "uuid": "6ef238c2-4b8e-46a2-b39d-8010247f3f46", + "destination_uuid": "2d55c61f-384c-4a07-a17e-1e42fc543dd9" + }, + { + "uuid": "47dfcfa5-d667-4908-9b69-0f4badd9a245", + "destination_uuid": "8a2e088e-3657-4fa6-86fb-8d788db03709" + } + ] + }, + { + "uuid": "52a6784b-f51f-42c7-8c6a-3e5ec42603bb", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Age", + "categories": [ + { + "uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8", + "exit_uuid": "47de528d-8c03-457e-9474-8d5c85feee78", + "name": "numeric" + }, + { + "uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185", + "exit_uuid": "e814adf0-565b-4f95-8d57-4f1b65e8f5ef", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "eaca5550-e00f-4fb6-947a-6fa1c6f4eab8", + "type": "has_number", + "category_uuid": "34d09b52-ac85-44a4-b4f4-c7a3b489fcf8" + } + ], + "default_category_uuid": "65e0c7b2-ea5f-48ad-a42c-411789155185" + }, + "exits": [ + { + "uuid": "47de528d-8c03-457e-9474-8d5c85feee78", + "destination_uuid": "6d5703f9-938c-4c2f-9cc7-7d1bbe328095" + }, + { + "uuid": "e814adf0-565b-4f95-8d57-4f1b65e8f5ef", + "destination_uuid": "a500d367-e944-4ba4-ab21-216b702f41c4" + } + ] + } + ] + }, + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "spec_version": "13.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "6f26e808-c1a2-4e52-b6f3-4d2dd79ffb24", + "actions": [ + { + "type": "send_msg", + "uuid": "450d2c77-a2d2-4cec-8a97-a96c5d7bf126", + "text": "What is your favorite beer?" + } + ], + "exits": [ + { + "uuid": "bf56b8cc-3801-4a15-a307-73d277694896", + "destination_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57", + "actions": [ + { + "type": "send_msg", + "uuid": "4c3be4d2-c994-4e28-946c-5ea9ee33659a", + "text": "@results.beer.category_localized is a great beer! What is your favorite color?" + } + ], + "exits": [ + { + "uuid": "99ac70fb-2d81-4d24-94a3-d031123e137b", + "destination_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9", + "actions": [ + { + "type": "send_msg", + "uuid": "5e5b8b5a-b638-4a58-94a6-bb79814f4712", + "text": "I didn't recognize that beer. Please try again." + } + ], + "exits": [ + { + "uuid": "9257e3e9-ff08-4707-ad86-398e8e34bb7c", + "destination_uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0" + } + ] + }, + { + "uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a", + "actions": [ + { + "type": "send_msg", + "uuid": "a3ad6679-a32c-4af0-babc-2def65adc185", + "text": "Ok let's go get some @results.color.category_localized @results.beer.category_localized!" + } + ], + "exits": [ + { + "uuid": "7b4ede52-3fa2-451c-955e-f5b0cb4c7030" + } + ] + }, + { + "uuid": "504f5813-b500-431f-b7db-244606c9696b", + "actions": [ + { + "type": "send_msg", + "uuid": "5ed80e3b-d6ec-4b25-bbbf-39ae8935ab00", + "text": "@results.color.input isn't a color I know. Please try again." + } + ], + "exits": [ + { + "uuid": "91e8b04d-8412-419e-9062-1877a23e377a", + "destination_uuid": "7854b048-038c-44fe-88c5-f62fd599b556" + } + ] + }, + { + "uuid": "e1dbee2c-17df-471d-9768-eec94a3343c0", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Beer", + "categories": [ + { + "uuid": "9f484724-9adb-40da-9da3-d99973591e27", + "exit_uuid": "6c9c4dd8-ea82-44c7-9a17-54eec3667134", + "name": "Club" + }, + { + "uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3", + "exit_uuid": "b54f32a0-863a-4e71-82f7-4208e1453967", + "name": "Pilsner" + }, + { + "uuid": "447b17a3-9f22-4267-b9bc-754036f842ce", + "exit_uuid": "a995efea-79d8-4fcd-a88f-2bada7a028d5", + "name": "Mutzig" + }, + { + "uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274", + "exit_uuid": "354a2c60-a994-47cc-9117-50b131eff2e7", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "c46a301e-f4b7-4650-8e2a-05f92f9f929f", + "type": "has_any_word", + "arguments": [ + "Club" + ], + "category_uuid": "9f484724-9adb-40da-9da3-d99973591e27" + }, + { + "uuid": "f740f2ee-56e2-4a2f-8cfb-73e20a4bb5f2", + "type": "has_any_word", + "arguments": [ + "Pilsner" + ], + "category_uuid": "7993051a-a2d9-4387-9cdb-bd0f48c288a3" + }, + { + "uuid": "5d8b09f9-67ed-42c7-9e5e-2e4607ebd76f", + "type": "has_any_word", + "arguments": [ + "Mutzig" + ], + "category_uuid": "447b17a3-9f22-4267-b9bc-754036f842ce" + } + ], + "default_category_uuid": "c0d4fdd1-ec6c-4b6d-927d-c7f532989274" + }, + "exits": [ + { + "uuid": "6c9c4dd8-ea82-44c7-9a17-54eec3667134", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "b54f32a0-863a-4e71-82f7-4208e1453967", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "a995efea-79d8-4fcd-a88f-2bada7a028d5", + "destination_uuid": "b12ed7f7-2d2c-4c59-8c2e-2cccee06ce57" + }, + { + "uuid": "354a2c60-a994-47cc-9117-50b131eff2e7", + "destination_uuid": "6980dc8d-7787-4a83-a603-5b84fd8e87f9" + } + ] + }, + { + "uuid": "7854b048-038c-44fe-88c5-f62fd599b556", + "router": { + "type": "switch", + "wait": { + "type": "msg" + }, + "result_name": "Color", + "categories": [ + { + "uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217", + "exit_uuid": "58999a5a-277e-4dd5-aa18-3069eecb1bd0", + "name": "Red" + }, + { + "uuid": "26d3ec68-245c-49d9-b33f-35d590041827", + "exit_uuid": "f259e489-5295-41c6-8ee2-888d83c9495c", + "name": "Blue" + }, + { + "uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac", + "exit_uuid": "2867ccb6-97b3-484c-8af2-52bc62f79dc4", + "name": "Green" + }, + { + "uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20", + "exit_uuid": "9c43c990-4f92-43e7-a0f8-330b0ba30def", + "name": "Other" + } + ], + "operand": "@input", + "cases": [ + { + "uuid": "c6285f5d-a0ee-4c6c-80d0-aaedf6f24c33", + "type": "has_any_word", + "arguments": [ + "red" + ], + "category_uuid": "46f73b0a-5845-4392-b5bf-f74c07bb1217" + }, + { + "uuid": "15b1b6f1-2c4f-4e3f-aef0-79eb19c5a59f", + "type": "has_any_word", + "arguments": [ + "blue" + ], + "category_uuid": "26d3ec68-245c-49d9-b33f-35d590041827" + }, + { + "uuid": "0802ebe3-6a39-413d-b3dd-1b6e232f3c24", + "type": "has_any_word", + "arguments": [ + "green" + ], + "category_uuid": "646d954d-9e6e-4e38-9a78-0df08b38b7ac" + } + ], + "default_category_uuid": "a45d84cc-725b-4626-98fd-54c64eff0e20" + }, + "exits": [ + { + "uuid": "58999a5a-277e-4dd5-aa18-3069eecb1bd0", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "f259e489-5295-41c6-8ee2-888d83c9495c", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "2867ccb6-97b3-484c-8af2-52bc62f79dc4", + "destination_uuid": "f4bb2acf-7ba0-448f-93ff-c4192b95169a" + }, + { + "uuid": "9c43c990-4f92-43e7-a0f8-330b0ba30def", + "destination_uuid": "504f5813-b500-431f-b7db-244606c9696b" + } + ] + } + ] + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "spec_version": "13.0.0", + "language": "base", + "type": "messaging_offline", + "revision": 24, + "expire_after_minutes": 10080, + "localization": {}, + "nodes": [ + { + "uuid": "3d02c74d-e5c2-4590-b679-03f988592013", + "actions": [ + { + "type": "send_msg", + "uuid": "58f8384d-92b3-41d2-804f-8c4c6240924e", + "text": "Hi there, please send a selfie" + } + ], + "exits": [ + { + "uuid": "d7de8701-2c58-4108-89a9-ec74e9ea619b", + "destination_uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c" + } + ] + }, + { + "uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9", + "actions": [ + { + "type": "send_msg", + "uuid": "dce3e627-65f5-4396-b5d3-67ed6f0b95ef", + "text": "Now send a video" + } + ], + "exits": [ + { + "uuid": "7ec846f0-a0f1-48c5-bf8f-5f941558c673", + "destination_uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916" + } + ] + }, + { + "uuid": "8de09049-f474-4fed-a079-b0e559a8ac59", + "actions": [ + { + "type": "send_msg", + "uuid": "6c21c268-759e-4156-b074-e4a3fed0dda3", + "text": "Now send an audio recording" + } + ], + "exits": [ + { + "uuid": "1b3972b7-e926-46c5-ae30-017038be36c4", + "destination_uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1" + } + ] + }, + { + "uuid": "68829693-c442-4c16-9b77-ed384fd607b5", + "actions": [ + { + "type": "send_msg", + "uuid": "f210c97b-9020-43d6-99e2-631e2e62e97b", + "text": "Finally please send your location" + } + ], + "exits": [ + { + "uuid": "ad0699ae-d489-4a63-96eb-716c42669321", + "destination_uuid": "78d1b543-e774-4040-b6dc-53139b5edb60" + } + ] + }, + { + "uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405", + "actions": [ + { + "type": "send_msg", + "uuid": "1f30ac69-69d6-41bb-8e53-56d380704e37", + "text": "Thanks!" + } + ], + "exits": [ + { + "uuid": "68ab09e3-3522-4411-87af-f444e00f033d" + } + ] + }, + { + "uuid": "6ab79191-da91-4096-a589-6f3c7f5ecf0c", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "image" + } + }, + "result_name": "Selfie", + "categories": [ + { + "uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d", + "exit_uuid": "40feee41-f61e-4195-bb28-b7c7ebd7c2ff", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "5736d5b0-8ded-4755-a6a3-83bf593af87d" + }, + "exits": [ + { + "uuid": "40feee41-f61e-4195-bb28-b7c7ebd7c2ff", + "destination_uuid": "8befaab2-63cb-4fdc-b44b-62d4a00a40e9" + } + ] + }, + { + "uuid": "f5ba9174-ed8c-41cd-898a-d7449f72b916", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "video" + } + }, + "result_name": "Vlog", + "categories": [ + { + "uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23", + "exit_uuid": "f7943b85-3f1b-459a-940e-460a63c25f5a", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23" + }, + "exits": [ + { + "uuid": "f7943b85-3f1b-459a-940e-460a63c25f5a", + "destination_uuid": "8de09049-f474-4fed-a079-b0e559a8ac59" + } + ] + }, + { + "uuid": "1250d717-bcef-45ed-b63e-e2e8eae953b1", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "audio" + } + }, + "result_name": "Recording", + "categories": [ + { + "uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949", + "exit_uuid": "cc6e5a51-fee5-4965-b2b1-671d18d111d4", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "07662cfe-1270-40ee-b593-c93b4e0a2949" + }, + "exits": [ + { + "uuid": "cc6e5a51-fee5-4965-b2b1-671d18d111d4", + "destination_uuid": "68829693-c442-4c16-9b77-ed384fd607b5" + } + ] + }, + { + "uuid": "78d1b543-e774-4040-b6dc-53139b5edb60", + "router": { + "type": "switch", + "wait": { + "type": "msg", + "hint": { + "type": "location" + } + }, + "result_name": "Location", + "categories": [ + { + "uuid": "88836f88-82f0-405c-a2f7-dac7b950e198", + "exit_uuid": "98facd56-cf1a-41d4-82a9-73afc8d327e5", + "name": "All Responses" + } + ], + "operand": "@input", + "cases": [], + "default_category_uuid": "88836f88-82f0-405c-a2f7-dac7b950e198" + }, + "exits": [ + { + "uuid": "98facd56-cf1a-41d4-82a9-73afc8d327e5", + "destination_uuid": "a2d7e973-4499-48d2-852a-cf46f6c69405" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/org1_details.json b/app/src/androidTest/res/raw/org1_details.json new file mode 100644 index 0000000..91b0977 --- /dev/null +++ b/app/src/androidTest/res/raw/org1_details.json @@ -0,0 +1,11 @@ +{ + "uuid": "dc8123a1-168c-4962-ab9e-f784f3d804a2", + "name": "Nyaruka", + "country": "RW", + "languages": ["eng", "fra"], + "primary_language": "eng", + "timezone": "Africa/Kigali", + "date_style": "day_first", + "anon": false, + "token": "797d44ef78f7845de0f4dbb42d5174505563dd77" +} diff --git a/app/src/androidTest/res/raw/org1_flows.json b/app/src/androidTest/res/raw/org1_flows.json new file mode 100644 index 0000000..406a7eb --- /dev/null +++ b/app/src/androidTest/res/raw/org1_flows.json @@ -0,0 +1,23 @@ +[ + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "spec_version": "13.0.0", + "revision": 24, + "question_count": 2 + }, + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "spec_version": "13.0.0", + "revision": 7, + "question_count": 1 + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "spec_version": "13.0.0", + "revision": 22, + "question_count": 4 + } +] diff --git a/app/src/androidTest/res/raw/org1_flows_v12.json b/app/src/androidTest/res/raw/org1_flows_v12.json new file mode 100644 index 0000000..55a312d --- /dev/null +++ b/app/src/androidTest/res/raw/org1_flows_v12.json @@ -0,0 +1,23 @@ +[ + { + "uuid": "bdd61538-5f50-4836-a8fb-acaafd64ddb1", + "name": "Two Questions", + "spec_version": "12.0", + "revision": 24, + "question_count": 2 + }, + { + "uuid": "ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec", + "name": "Contact Details", + "spec_version": "12.0", + "revision": 7, + "question_count": 1 + }, + { + "uuid": "e54809ba-2f28-439b-b90b-c623eafa05ae", + "name": "Multimedia", + "spec_version": "12.0", + "revision": 22, + "question_count": 4 + } +] diff --git a/app/src/androidTest/res/raw/org_surveyor_get.html b/app/src/androidTest/res/raw/org_surveyor_get.html new file mode 100644 index 0000000..d63b1f9 --- /dev/null +++ b/app/src/androidTest/res/raw/org_surveyor_get.html @@ -0,0 +1,24 @@ + + +

+ \ No newline at end of file diff --git a/app/src/androidTest/res/raw/org_surveyor_post_correct_password.html b/app/src/androidTest/res/raw/org_surveyor_post_correct_password.html new file mode 100644 index 0000000..bba50d3 --- /dev/null +++ b/app/src/androidTest/res/raw/org_surveyor_post_correct_password.html @@ -0,0 +1,48 @@ + + + + \ No newline at end of file diff --git a/app/src/androidTest/res/raw/org_surveyor_post_wrong_password.html b/app/src/androidTest/res/raw/org_surveyor_post_wrong_password.html new file mode 100644 index 0000000..908d8b6 --- /dev/null +++ b/app/src/androidTest/res/raw/org_surveyor_post_wrong_password.html @@ -0,0 +1,29 @@ + + + + \ No newline at end of file diff --git a/app/src/androidTest/res/raw/submission2_events.jsonl b/app/src/androidTest/res/raw/submission2_events.jsonl new file mode 100644 index 0000000..a1b204c --- /dev/null +++ b/app/src/androidTest/res/raw/submission2_events.jsonl @@ -0,0 +1,17 @@ +{"type":"msg_created","created_on":"2018-12-19T21:15:17.666764Z","step_uuid":"f4b22275-ea34-4d6a-b4ec-f6cefab6fc7e","msg":{"uuid":"068d7130-f973-4611-bb31-2f29e38cf01f","text":"Hi there, please send a selfie"}} +{"type":"msg_wait","created_on":"2018-12-19T21:15:17.666958Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee"} +{"type":"msg_received","created_on":"2018-12-19T21:15:18.331207Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee","msg":{"uuid":"dd4a2062-e138-4e2e-8c7e-c394fee6bb3e","text":"","attachments":["image/jpeg:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg"]}} +{"type":"run_result_changed","created_on":"2018-12-19T21:15:18.332142Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee","name":"Selfie","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg"} +{"type":"msg_created","created_on":"2018-12-19T21:15:18.332384Z","step_uuid":"ee49eb48-47cc-4ed5-a588-67c4344e36f9","msg":{"uuid":"f87349ab-0a2c-4ebc-b12f-6241b0de81d3","text":"Now send a video"}} +{"type":"msg_wait","created_on":"2018-12-19T21:15:18.332656Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7"} +{"type":"msg_received","created_on":"2018-12-19T21:15:19.021483Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7","msg":{"uuid":"945d9fab-50d6-455f-9ffe-2babee8742fc","text":"","attachments":["video/mp4:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4"]}} +{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.022009Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7","name":"Vlog","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4"} +{"type":"msg_created","created_on":"2018-12-19T21:15:19.022202Z","step_uuid":"5136f391-dfce-40e5-8ffc-aacda4d35748","msg":{"uuid":"532f8c10-17e9-4af9-a0ca-8335b6ce08d4","text":"Now send an audio recording"}} +{"type":"msg_wait","created_on":"2018-12-19T21:15:19.022323Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf"} +{"type":"msg_received","created_on":"2018-12-19T21:15:19.368704Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf","msg":{"uuid":"c25d9f84-e283-4376-a13b-d722c915c15a","text":"","attachments":["audio/mp4:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a"]}} +{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.368841Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf","name":"Recording","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a"} +{"type":"msg_created","created_on":"2018-12-19T21:15:19.368981Z","step_uuid":"34b01ebb-991a-42ff-bf6f-47aa194bce6a","msg":{"uuid":"5782fbde-ac37-4205-bccf-4cabb051d16e","text":"Finally please send your location"}} +{"type":"msg_wait","created_on":"2018-12-19T21:15:19.369098Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c"} +{"type":"msg_received","created_on":"2018-12-19T21:15:19.70094Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c","msg":{"uuid":"db67095b-b81a-4448-8c43-093581edd07f","text":"","attachments":["geo:37.4219983,-122.084"]}} +{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.701096Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c","name":"Location","value":"37.4219983,-122.084","category":"All Responses","input":"37.4219983,-122.084"} +{"type":"msg_created","created_on":"2018-12-19T21:15:19.701255Z","step_uuid":"f567f1a1-0d19-469b-afc5-88b61aa9cc0f","msg":{"uuid":"a8eee7da-f37f-43dc-bd16-8dbed1ef87f9","text":"Thanks!"}} diff --git a/app/src/androidTest/res/raw/submission2_modifiers.jsonl b/app/src/androidTest/res/raw/submission2_modifiers.jsonl new file mode 100644 index 0000000..e69de29 diff --git a/app/src/androidTest/res/raw/submission2_session.json b/app/src/androidTest/res/raw/submission2_session.json new file mode 100644 index 0000000..dd31455 --- /dev/null +++ b/app/src/androidTest/res/raw/submission2_session.json @@ -0,0 +1 @@ +{"environment":{"date_format":"DD-MM-YYYY","time_format":"tt:mm","timezone":"Africa/Kigali","default_language":"eng","allowed_languages":["eng","fra"],"redaction_policy":"none"},"trigger":{"type":"manual","environment":{"date_format":"DD-MM-YYYY","time_format":"tt:mm","timezone":"Africa/Kigali","default_language":"eng","allowed_languages":["eng","fra"],"redaction_policy":"none"},"flow":{"uuid":"e54809ba-2f28-439b-b90b-c623eafa05ae","name":"Multimedia"},"contact":{"uuid":"fbfe0039-f824-4684-a566-7d95d6f9209e","created_on":"2018-12-19T21:15:17.65894Z"},"triggered_on":"2018-12-19T21:15:17.659126Z"},"contact":{"uuid":"fbfe0039-f824-4684-a566-7d95d6f9209e","created_on":"2018-12-19T21:15:17.65894Z"},"runs":[{"uuid":"e3ffc867-dce0-416c-802c-facd378672e4","flow":{"uuid":"e54809ba-2f28-439b-b90b-c623eafa05ae","name":"Multimedia"},"path":[{"uuid":"f4b22275-ea34-4d6a-b4ec-f6cefab6fc7e","node_uuid":"3d02c74d-e5c2-4590-b679-03f988592013","exit_uuid":"d7de8701-2c58-4108-89a9-ec74e9ea619b","arrived_on":"2018-12-19T21:15:17.666285Z"},{"uuid":"5a8c3292-d632-437e-a954-1854a32d6cee","node_uuid":"6ab79191-da91-4096-a589-6f3c7f5ecf0c","exit_uuid":"5736d5b0-8ded-4755-a6a3-83bf593af87d","arrived_on":"2018-12-19T21:15:17.666874Z"},{"uuid":"ee49eb48-47cc-4ed5-a588-67c4344e36f9","node_uuid":"8befaab2-63cb-4fdc-b44b-62d4a00a40e9","exit_uuid":"7ec846f0-a0f1-48c5-bf8f-5f941558c673","arrived_on":"2018-12-19T21:15:18.332264Z"},{"uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7","node_uuid":"f5ba9174-ed8c-41cd-898a-d7449f72b916","exit_uuid":"79ab9eb5-1d5d-4c8b-9e7d-7b02f624fa23","arrived_on":"2018-12-19T21:15:18.332551Z"},{"uuid":"5136f391-dfce-40e5-8ffc-aacda4d35748","node_uuid":"8de09049-f474-4fed-a079-b0e559a8ac59","exit_uuid":"1b3972b7-e926-46c5-ae30-017038be36c4","arrived_on":"2018-12-19T21:15:19.022146Z"},{"uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf","node_uuid":"1250d717-bcef-45ed-b63e-e2e8eae953b1","exit_uuid":"07662cfe-1270-40ee-b593-c93b4e0a2949","arrived_on":"2018-12-19T21:15:19.022277Z"},{"uuid":"34b01ebb-991a-42ff-bf6f-47aa194bce6a","node_uuid":"68829693-c442-4c16-9b77-ed384fd607b5","exit_uuid":"ad0699ae-d489-4a63-96eb-716c42669321","arrived_on":"2018-12-19T21:15:19.368889Z"},{"uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c","node_uuid":"78d1b543-e774-4040-b6dc-53139b5edb60","exit_uuid":"88836f88-82f0-405c-a2f7-dac7b950e198","arrived_on":"2018-12-19T21:15:19.369027Z"},{"uuid":"f567f1a1-0d19-469b-afc5-88b61aa9cc0f","node_uuid":"a2d7e973-4499-48d2-852a-cf46f6c69405","exit_uuid":"68ab09e3-3522-4411-87af-f444e00f033d","arrived_on":"2018-12-19T21:15:19.70115Z"}],"events":[{"type":"msg_created","created_on":"2018-12-19T21:15:17.666764Z","step_uuid":"f4b22275-ea34-4d6a-b4ec-f6cefab6fc7e","msg":{"uuid":"068d7130-f973-4611-bb31-2f29e38cf01f","text":"Hi there, please send a selfie"}},{"type":"msg_wait","created_on":"2018-12-19T21:15:17.666958Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee"},{"type":"msg_received","created_on":"2018-12-19T21:15:18.331207Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee","msg":{"uuid":"dd4a2062-e138-4e2e-8c7e-c394fee6bb3e","text":"","attachments":["image/jpeg:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg"]}},{"type":"run_result_changed","created_on":"2018-12-19T21:15:18.332142Z","step_uuid":"5a8c3292-d632-437e-a954-1854a32d6cee","name":"Selfie","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg"},{"type":"msg_created","created_on":"2018-12-19T21:15:18.332384Z","step_uuid":"ee49eb48-47cc-4ed5-a588-67c4344e36f9","msg":{"uuid":"f87349ab-0a2c-4ebc-b12f-6241b0de81d3","text":"Now send a video"}},{"type":"msg_wait","created_on":"2018-12-19T21:15:18.332656Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7"},{"type":"msg_received","created_on":"2018-12-19T21:15:19.021483Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7","msg":{"uuid":"945d9fab-50d6-455f-9ffe-2babee8742fc","text":"","attachments":["video/mp4:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4"]}},{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.022009Z","step_uuid":"4295dc0f-3a44-44ac-ba16-45525a38d2f7","name":"Vlog","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4"},{"type":"msg_created","created_on":"2018-12-19T21:15:19.022202Z","step_uuid":"5136f391-dfce-40e5-8ffc-aacda4d35748","msg":{"uuid":"532f8c10-17e9-4af9-a0ca-8335b6ce08d4","text":"Now send an audio recording"}},{"type":"msg_wait","created_on":"2018-12-19T21:15:19.022323Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf"},{"type":"msg_received","created_on":"2018-12-19T21:15:19.368704Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf","msg":{"uuid":"c25d9f84-e283-4376-a13b-d722c915c15a","text":"","attachments":["audio/m4a:content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a"]}},{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.368841Z","step_uuid":"e9585068-1ff5-4d24-aec8-5f728a4f51bf","name":"Recording","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a","category":"All Responses","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a"},{"type":"msg_created","created_on":"2018-12-19T21:15:19.368981Z","step_uuid":"34b01ebb-991a-42ff-bf6f-47aa194bce6a","msg":{"uuid":"5782fbde-ac37-4205-bccf-4cabb051d16e","text":"Finally please send your location"}},{"type":"msg_wait","created_on":"2018-12-19T21:15:19.369098Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c"},{"type":"msg_received","created_on":"2018-12-19T21:15:19.70094Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c","msg":{"uuid":"db67095b-b81a-4448-8c43-093581edd07f","text":"","attachments":["geo:37.4219983,-122.084"]}},{"type":"run_result_changed","created_on":"2018-12-19T21:15:19.701096Z","step_uuid":"dee41ffb-2308-468a-9f5a-0ae56582917c","name":"Location","value":"37.4219983,-122.084","category":"All Responses","input":"37.4219983,-122.084"},{"type":"msg_created","created_on":"2018-12-19T21:15:19.701255Z","step_uuid":"f567f1a1-0d19-469b-afc5-88b61aa9cc0f","msg":{"uuid":"a8eee7da-f37f-43dc-bd16-8dbed1ef87f9","text":"Thanks!"}}],"results":{"location":{"name":"Location","value":"37.4219983,-122.084","category":"All Responses","node_uuid":"78d1b543-e774-4040-b6dc-53139b5edb60","input":"37.4219983,-122.084","created_on":"2018-12-19T21:15:19.701038Z"},"recording":{"name":"Recording","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a","category":"All Responses","node_uuid":"1250d717-bcef-45ed-b63e-e2e8eae953b1","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/ed8f2572-ed00-47f4-9011-3bbb8a6cc70f.m4a","created_on":"2018-12-19T21:15:19.368789Z"},"selfie":{"name":"Selfie","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg","category":"All Responses","node_uuid":"6ab79191-da91-4096-a589-6f3c7f5ecf0c","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/2e4fe2fc-470d-4009-9b51-f93ae5b59199.jpg","created_on":"2018-12-19T21:15:18.331784Z"},"vlog":{"name":"Vlog","value":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4","category":"All Responses","node_uuid":"f5ba9174-ed8c-41cd-898a-d7449f72b916","input":"content://io.rapidpro.surveyor.provider/shared/test_submissions/b2ad9e4d-71f1-4d54-8dd6-f7a94b685d06/e54809ba-2f28-439b-b90b-c623eafa05ae/e878865e-c1d1-45a5-9216-b0303ed23c7e/media/93c0cde7-3330-400b-9f3d-c9922ba11aa3.mp4","created_on":"2018-12-19T21:15:19.021745Z"}},"status":"completed","created_on":"2018-12-19T21:15:17.665883Z","modified_on":"2018-12-19T21:15:19.701355Z","expires_on":"2018-12-26T21:15:19.700888Z","exited_on":"2018-12-19T21:15:19.701355Z"}],"status":"completed","input":{"type":"msg","uuid":"db67095b-b81a-4448-8c43-093581edd07f","created_on":"2018-12-19T21:15:19.700808Z","urn":"","text":"","attachments":["geo:37.4219983,-122.084"]}} \ No newline at end of file diff --git a/app/src/androidTest/res/raw/submission3_events.jsonl b/app/src/androidTest/res/raw/submission3_events.jsonl new file mode 100644 index 0000000..c7e20b4 --- /dev/null +++ b/app/src/androidTest/res/raw/submission3_events.jsonl @@ -0,0 +1,17 @@ +{"type":"msg_created","created_on":"2018-12-18T19:14:53.711924Z","step_uuid":"a6c7ff4d-b23f-450a-ac16-da870f6f73be","msg":{"uuid":"c7c3e345-dcb9-487d-9102-b1cbc7deacf1","text":"Hi there. What's your name?"}} +{"type":"msg_wait","created_on":"2018-12-18T19:14:53.712575Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f"} +{"type":"msg_received","created_on":"2018-12-18T19:14:55.288681Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f","msg":{"uuid":"2dcb9bbc-46f7-4bc6-afe9-3887209402cc","text":"Bob"}} +{"type":"run_result_changed","created_on":"2018-12-18T19:14:55.289221Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f","name":"Name","value":"Bob","category":"All Responses","input":"Bob"} +{"type":"contact_name_changed","created_on":"2018-12-18T19:14:55.289471Z","step_uuid":"1d0cc3ea-f5c6-409f-af1f-a9bd26c1a367","name":"Bob"} +{"type":"msg_created","created_on":"2018-12-18T19:14:55.289645Z","step_uuid":"1d0cc3ea-f5c6-409f-af1f-a9bd26c1a367","msg":{"uuid":"b6fbd0e6-35ce-495a-b3f0-8c5f9852452f","text":"Thanks Bob. What's your phone number?"}} +{"type":"msg_wait","created_on":"2018-12-18T19:14:55.290128Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0"} +{"type":"msg_received","created_on":"2018-12-18T19:14:56.720739Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0","msg":{"uuid":"ca87bcce-f113-4ad2-9c5b-96efbc0d6248","text":"+593979123456"}} +{"type":"run_result_changed","created_on":"2018-12-18T19:14:56.721229Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0","name":"Phone","value":"+593979123456","category":"phone","input":"+593979123456"} +{"type":"contact_urns_changed","created_on":"2018-12-18T19:14:56.730115Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","urns":["tel:+593979123456"]} +{"type":"contact_groups_changed","created_on":"2018-12-18T19:14:56.730233Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","groups_added":[{"uuid":"11f83067-7c40-49e8-8a35-a1a4e8dd3b69","name":"Testers"}]} +{"type":"msg_created","created_on":"2018-12-18T19:14:56.730535Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","msg":{"uuid":"0c578642-8236-4b71-94a8-5f1db5bd3764","text":"Finally, what is your age?"}} +{"type":"msg_wait","created_on":"2018-12-18T19:14:56.73068Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0"} +{"type":"msg_received","created_on":"2018-12-18T19:14:57.97173Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0","msg":{"uuid":"fc7f9830-ec40-4a43-b92e-6eb04750c119","text":"37"}} +{"type":"run_result_changed","created_on":"2018-12-18T19:14:57.973844Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0","name":"Age","value":"37","category":"numeric","input":"37"} +{"type":"contact_field_changed","created_on":"2018-12-18T19:14:57.974455Z","step_uuid":"94106b99-9e4d-4bfa-9feb-dcd780d7bf89","field":{"key":"age","name":"Age"},"value":{"text":"37","number":37}} +{"type":"msg_created","created_on":"2018-12-18T19:14:57.975302Z","step_uuid":"94106b99-9e4d-4bfa-9feb-dcd780d7bf89","msg":{"uuid":"388e5968-57c8-4795-b4bf-d73916aa5f45","text":"Thanks Bob. You are 37 and your phone number is 097 912 3456"}} diff --git a/app/src/androidTest/res/raw/submission3_modifiers.jsonl b/app/src/androidTest/res/raw/submission3_modifiers.jsonl new file mode 100644 index 0000000..b6a4ac5 --- /dev/null +++ b/app/src/androidTest/res/raw/submission3_modifiers.jsonl @@ -0,0 +1,4 @@ +{"type":"name","name":"Bob"} +{"type":"urn","urn":"tel:+593979123456","modification":"append"} +{"type":"groups","groups":[{"uuid":"11f83067-7c40-49e8-8a35-a1a4e8dd3b69","name":"Testers"}],"modification":"add"} +{"type":"field","field":{"key":"age","name":"Age"},"value":{"text":"37","number":37}} diff --git a/app/src/androidTest/res/raw/submission3_session.jsonl b/app/src/androidTest/res/raw/submission3_session.jsonl new file mode 100644 index 0000000..effa86e --- /dev/null +++ b/app/src/androidTest/res/raw/submission3_session.jsonl @@ -0,0 +1 @@ +{"environment":{"date_format":"DD-MM-YYYY","time_format":"tt:mm","timezone":"Africa/Kigali","default_language":"eng","allowed_languages":["eng","fra"],"redaction_policy":"none"},"trigger":{"type":"manual","environment":{"date_format":"DD-MM-YYYY","time_format":"tt:mm","timezone":"Africa/Kigali","default_language":"eng","allowed_languages":["eng","fra"],"redaction_policy":"none"},"flow":{"uuid":"ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec","name":"Contact Details"},"contact":{"uuid":"bdfe862c-84f8-422e-8fdc-ebfaaae0697a","created_on":"2018-12-18T19:14:53.707395Z"},"triggered_on":"2018-12-18T19:14:53.70753Z"},"contact":{"uuid":"bdfe862c-84f8-422e-8fdc-ebfaaae0697a","name":"Bob","created_on":"2018-12-18T19:14:53.707395Z","urns":["tel:+593979123456"],"groups":[{"uuid":"11f83067-7c40-49e8-8a35-a1a4e8dd3b69","name":"Testers"}],"fields":{"age":{"text":"37","number":37}}},"runs":[{"uuid":"1d4f5427-a7fa-4d4c-9c70-93a73fca59da","flow":{"uuid":"ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec","name":"Contact Details"},"path":[{"uuid":"a6c7ff4d-b23f-450a-ac16-da870f6f73be","node_uuid":"036901e0-abb8-4979-92cb-f0d43aeb5b68","exit_uuid":"706853c2-831b-4dd8-8073-cd51b21d94d6","arrived_on":"2018-12-18T19:14:53.711805Z"},{"uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f","node_uuid":"39fe1ce0-7dee-445e-9945-48c72a05cef5","exit_uuid":"bb999ff8-5eb3-45f6-bec6-a0430105b0ca","arrived_on":"2018-12-18T19:14:53.712041Z"},{"uuid":"1d0cc3ea-f5c6-409f-af1f-a9bd26c1a367","node_uuid":"73dda1a7-9152-45f1-993a-e7d01eb028db","exit_uuid":"5e7a398e-eebe-4b32-8600-374659f56d9e","arrived_on":"2018-12-18T19:14:55.289318Z"},{"uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0","node_uuid":"1a7612b5-777d-4af3-a657-077c46f242d9","exit_uuid":"0c047d03-3b61-4ff2-8bc8-43a89cf1087b","arrived_on":"2018-12-18T19:14:55.289954Z"},{"uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","node_uuid":"2d55c61f-384c-4a07-a17e-1e42fc543dd9","exit_uuid":"4e483159-af9f-48a4-907f-c875fde66c70","arrived_on":"2018-12-18T19:14:56.721324Z"},{"uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0","node_uuid":"52a6784b-f51f-42c7-8c6a-3e5ec42603bb","exit_uuid":"34d09b52-ac85-44a4-b4f4-c7a3b489fcf8","arrived_on":"2018-12-18T19:14:56.730637Z"},{"uuid":"94106b99-9e4d-4bfa-9feb-dcd780d7bf89","node_uuid":"6d5703f9-938c-4c2f-9cc7-7d1bbe328095","exit_uuid":"6bab242d-85d5-4afe-b6e7-5fe7c98f187e","arrived_on":"2018-12-18T19:14:57.973998Z"}],"events":[{"type":"msg_created","created_on":"2018-12-18T19:14:53.711924Z","step_uuid":"a6c7ff4d-b23f-450a-ac16-da870f6f73be","msg":{"uuid":"c7c3e345-dcb9-487d-9102-b1cbc7deacf1","text":"Hi there. What's your name?"}},{"type":"msg_wait","created_on":"2018-12-18T19:14:53.712575Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f"},{"type":"msg_received","created_on":"2018-12-18T19:14:55.288681Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f","msg":{"uuid":"2dcb9bbc-46f7-4bc6-afe9-3887209402cc","text":"Bob"}},{"type":"run_result_changed","created_on":"2018-12-18T19:14:55.289221Z","step_uuid":"dd2c2662-437f-480c-93e5-a5150ca67d1f","name":"Name","value":"Bob","category":"All Responses","input":"Bob"},{"type":"contact_name_changed","created_on":"2018-12-18T19:14:55.289471Z","step_uuid":"1d0cc3ea-f5c6-409f-af1f-a9bd26c1a367","name":"Bob"},{"type":"msg_created","created_on":"2018-12-18T19:14:55.289645Z","step_uuid":"1d0cc3ea-f5c6-409f-af1f-a9bd26c1a367","msg":{"uuid":"b6fbd0e6-35ce-495a-b3f0-8c5f9852452f","text":"Thanks Bob. What's your phone number?"}},{"type":"msg_wait","created_on":"2018-12-18T19:14:55.290128Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0"},{"type":"msg_received","created_on":"2018-12-18T19:14:56.720739Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0","msg":{"uuid":"ca87bcce-f113-4ad2-9c5b-96efbc0d6248","text":"+593979123456"}},{"type":"run_result_changed","created_on":"2018-12-18T19:14:56.721229Z","step_uuid":"16c63d0d-2eaa-4a60-bc9c-b9358b8739f0","name":"Phone","value":"+593979123456","category":"phone","input":"+593979123456"},{"type":"contact_urns_changed","created_on":"2018-12-18T19:14:56.730115Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","urns":["tel:+593979123456"]},{"type":"contact_groups_changed","created_on":"2018-12-18T19:14:56.730233Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","groups_added":[{"uuid":"11f83067-7c40-49e8-8a35-a1a4e8dd3b69","name":"Testers"}]},{"type":"msg_created","created_on":"2018-12-18T19:14:56.730535Z","step_uuid":"dac7fb6e-5e9d-4793-be36-b5e8756a6f6b","msg":{"uuid":"0c578642-8236-4b71-94a8-5f1db5bd3764","text":"Finally, what is your age?"}},{"type":"msg_wait","created_on":"2018-12-18T19:14:56.73068Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0"},{"type":"msg_received","created_on":"2018-12-18T19:14:57.97173Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0","msg":{"uuid":"fc7f9830-ec40-4a43-b92e-6eb04750c119","text":"37"}},{"type":"run_result_changed","created_on":"2018-12-18T19:14:57.973844Z","step_uuid":"a034eccc-581a-4b84-8a6f-37ed513b53d0","name":"Age","value":"37","category":"numeric","input":"37"},{"type":"contact_field_changed","created_on":"2018-12-18T19:14:57.974455Z","step_uuid":"94106b99-9e4d-4bfa-9feb-dcd780d7bf89","field":{"key":"age","name":"Age"},"value":{"text":"37","number":37}},{"type":"msg_created","created_on":"2018-12-18T19:14:57.975302Z","step_uuid":"94106b99-9e4d-4bfa-9feb-dcd780d7bf89","msg":{"uuid":"388e5968-57c8-4795-b4bf-d73916aa5f45","text":"Thanks Bob. You are 37 and your phone number is 097 912 3456"}}],"results":{"age":{"name":"Age","value":"37","category":"numeric","node_uuid":"52a6784b-f51f-42c7-8c6a-3e5ec42603bb","input":"37","created_on":"2018-12-18T19:14:57.972203Z"},"name":{"name":"Name","value":"Bob","category":"All Responses","node_uuid":"39fe1ce0-7dee-445e-9945-48c72a05cef5","input":"Bob","created_on":"2018-12-18T19:14:55.288827Z"},"phone":{"name":"Phone","value":"+593979123456","category":"phone","node_uuid":"1a7612b5-777d-4af3-a657-077c46f242d9","input":"+593979123456","created_on":"2018-12-18T19:14:56.721077Z"}},"status":"completed","created_on":"2018-12-18T19:14:53.711676Z","modified_on":"2018-12-18T19:14:57.975537Z","expires_on":"2018-12-25T19:14:57.97142Z","exited_on":"2018-12-18T19:14:57.975537Z"}],"status":"completed","input":{"type":"msg","uuid":"fc7f9830-ec40-4a43-b92e-6eb04750c119","created_on":"2018-12-18T19:14:57.971277Z","urn":"","text":"37"}} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f46f4f9 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/animation/_stories/img_0.png b/app/src/main/assets/animation/_stories/img_0.png new file mode 100644 index 0000000..b2341d8 Binary files /dev/null and b/app/src/main/assets/animation/_stories/img_0.png differ diff --git a/app/src/main/assets/animation/_stories/img_1.png b/app/src/main/assets/animation/_stories/img_1.png new file mode 100644 index 0000000..7ec98de Binary files /dev/null and b/app/src/main/assets/animation/_stories/img_1.png differ diff --git a/app/src/main/assets/animation/_stories/img_2.png b/app/src/main/assets/animation/_stories/img_2.png new file mode 100644 index 0000000..b20e443 Binary files /dev/null and b/app/src/main/assets/animation/_stories/img_2.png differ diff --git a/app/src/main/assets/animation/_stories/img_3.png b/app/src/main/assets/animation/_stories/img_3.png new file mode 100644 index 0000000..05dd483 Binary files /dev/null and b/app/src/main/assets/animation/_stories/img_3.png differ diff --git a/app/src/main/assets/animation/_stories/stories.json b/app/src/main/assets/animation/_stories/stories.json new file mode 100644 index 0000000..6e12c51 --- /dev/null +++ b/app/src/main/assets/animation/_stories/stories.json @@ -0,0 +1 @@ +{"v":"5.6.1","fr":50,"ip":0,"op":101,"w":160,"h":200,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":39,"h":19,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":160,"h":200,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":53,"h":203,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":80,"h":150,"u":"images/","p":"img_3.png","e":0},{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":2,"nm":"storie_img_4","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[26.75,101,0],"to":[0,-11,0],"ti":[0.083,4.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34.314,"s":[26.75,35,0],"to":[-0.083,-4.833,0],"ti":[0.083,-6.167,0]},{"t":68.6274509803922,"s":[26.25,72,0]}],"ix":2},"a":{"a":0,"k":[26.5,101.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"storie_img_2","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120.313,21.313,0],"ix":2},"a":{"a":0,"k":[19.5,9.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"storie_img_3","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[80,100,0],"ix":2},"a":{"a":0,"k":[80,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"stories-image2.png Comp 1","cl":"png","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[118.125,78,0],"ix":2},"a":{"a":0,"k":[26.5,65,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[56,20],[1.125,0.75],[1.375,107.604],[53.625,126.104]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":53,"h":130,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"storie_img_1","refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120.5,76.5,0],"ix":2},"a":{"a":0,"k":[40,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[80,100,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[161,197],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,-0.5],"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":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1050,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/massage/img_0.png b/app/src/main/assets/animation/massage/img_0.png new file mode 100644 index 0000000..8059e00 Binary files /dev/null and b/app/src/main/assets/animation/massage/img_0.png differ diff --git a/app/src/main/assets/animation/massage/massage.json b/app/src/main/assets/animation/massage/massage.json new file mode 100644 index 0000000..b232520 --- /dev/null +++ b/app/src/main/assets/animation/massage/massage.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":15,"ip":0,"op":25,"w":300,"h":400,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":300,"h":400,"u":"images/","p":"img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[62.49,63.415,0],"to":[0,-0.833,0],"ti":[0,1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[62.49,58.415,0],"to":[0,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[62.49,53.415,0],"to":[0,0,0],"ti":[-0.083,-1.598,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":20,"s":[62.49,58.415,0],"to":[0.083,1.598,0],"ti":[-0.083,-0.764,0]},{"t":23,"s":[62.99,63,0]}],"ix":2},"a":{"a":0,"k":[-114.75,-131.75,0],"ix":1},"s":{"a":0,"k":[85.146,84.359,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.383,0],[0,-3.383],[-3.383,0],[0,3.383]],"o":[[-3.383,0],[0,3.383],[3.383,0],[0,-3.383]],"v":[[0,-6.125],[-6.125,0],[0,6.125],[6.125,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-114.75,-131.75],"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":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":315,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[46.365,63.29,0],"to":[0,-0.417,0],"ti":[0,1.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[46.365,60.79,0],"to":[0,-1.25,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[46.365,55.79,0],"to":[0,0,0],"ti":[0,-1.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":14,"s":[46.365,60.79,0],"to":[0,1.25,0],"ti":[0,-0.417,0]},{"t":17,"s":[46.365,63.29,0]}],"ix":2},"a":{"a":0,"k":[-114.75,-131.75,0],"ix":1},"s":{"a":0,"k":[85.146,84.359,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.383,0],[0,-3.383],[-3.383,0],[0,3.383]],"o":[[-3.383,0],[0,3.383],[3.383,0],[0,-3.383]],"v":[[0,-6.125],[-6.125,0],[0,6.125],[6.125,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-114.75,-131.75],"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":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":315,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[30.49,63.415,0],"to":[0,-0.561,0],"ti":[0,1.448,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[30.49,60.005,0],"to":[0,-1.779,0],"ti":[0,0.459,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[30.49,55.915,0],"to":[0,-0.833,0],"ti":[0,-1.25,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":8,"s":[30.49,58.415,0],"to":[0,1.25,0],"ti":[0,-0.833,0]},{"t":11,"s":[30.49,63.415,0]}],"ix":2},"a":{"a":0,"k":[-114.75,-131.75,0],"ix":1},"s":{"a":0,"k":[85.146,84.359,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.383,0],[0,-3.383],[-3.383,0],[0,3.383]],"o":[[-3.383,0],[0,3.383],[3.383,0],[0,-3.383]],"v":[[0,-6.125],[-6.125,0],[0,6.125],[6.125,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-114.75,-131.75],"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":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":315,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"massage.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,200,0],"ix":2},"a":{"a":0,"k":[150,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":315,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/settings/img_0.png b/app/src/main/assets/animation/settings/img_0.png new file mode 100644 index 0000000..4c3f4ba Binary files /dev/null and b/app/src/main/assets/animation/settings/img_0.png differ diff --git a/app/src/main/assets/animation/settings/img_1.png b/app/src/main/assets/animation/settings/img_1.png new file mode 100644 index 0000000..3811ff7 Binary files /dev/null and b/app/src/main/assets/animation/settings/img_1.png differ diff --git a/app/src/main/assets/animation/settings/img_2.png b/app/src/main/assets/animation/settings/img_2.png new file mode 100644 index 0000000..c1c2d3e Binary files /dev/null and b/app/src/main/assets/animation/settings/img_2.png differ diff --git a/app/src/main/assets/animation/settings/settings.json b/app/src/main/assets/animation/settings/settings.json new file mode 100644 index 0000000..b9e49cf --- /dev/null +++ b/app/src/main/assets/animation/settings/settings.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":124,"ip":0,"op":370,"w":320,"h":300,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":320,"h":300,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":50,"h":50,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":60,"h":60,"u":"images/","p":"img_2.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"settings.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[160,150,0],"ix":2},"a":{"a":0,"k":[160,150,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":2604,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"settings_1.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":367.8671875,"s":[360]}],"ix":10},"p":{"a":0,"k":[250,38,0],"ix":2},"a":{"a":0,"k":[25,25,0],"ix":1},"s":{"a":0,"k":[90,90,100],"ix":6}},"ao":0,"ip":0,"op":2604,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"settings_2.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":367.8671875,"s":[-360]}],"ix":10},"p":{"a":0,"k":[232.25,75.5,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":2604,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/stories/img_0.png b/app/src/main/assets/animation/stories/img_0.png new file mode 100644 index 0000000..12aa947 Binary files /dev/null and b/app/src/main/assets/animation/stories/img_0.png differ diff --git a/app/src/main/assets/animation/stories/img_1.png b/app/src/main/assets/animation/stories/img_1.png new file mode 100644 index 0000000..7e6f81f Binary files /dev/null and b/app/src/main/assets/animation/stories/img_1.png differ diff --git a/app/src/main/assets/animation/stories/img_2.png b/app/src/main/assets/animation/stories/img_2.png new file mode 100644 index 0000000..e35ab1b Binary files /dev/null and b/app/src/main/assets/animation/stories/img_2.png differ diff --git a/app/src/main/assets/animation/stories/img_3.png b/app/src/main/assets/animation/stories/img_3.png new file mode 100644 index 0000000..89b2c51 Binary files /dev/null and b/app/src/main/assets/animation/stories/img_3.png differ diff --git a/app/src/main/assets/animation/stories/stories.json b/app/src/main/assets/animation/stories/stories.json new file mode 100644 index 0000000..216aac1 --- /dev/null +++ b/app/src/main/assets/animation/stories/stories.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":50,"ip":0,"op":101,"w":300,"h":400,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":77,"h":40,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":300,"h":400,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":120,"h":411,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":167,"h":300,"u":"images/","p":"img_3.png","e":0},{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":2,"nm":"stories-image2.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[58.25,205,0],"to":[0,-18.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.098,"s":[58.25,95,0],"to":[0,0,0],"ti":[0,-18.333,0]},{"t":97.0588235294118,"s":[58.25,205,0]}],"ix":2},"a":{"a":0,"k":[60,205.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"moblie-nos.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[217.313,39.063,0],"ix":2},"a":{"a":0,"k":[38.5,20,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"stories-image.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,200,0],"ix":2},"a":{"a":0,"k":[150,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"stories-image2.png Comp 1","cl":"png","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[221.125,228,0],"ix":2},"a":{"a":0,"k":[60,205,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[113.224,34.038],[5.118,-4.346],[4.113,209.453],[112.861,249.213]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":120,"h":410,"ip":0,"op":1050,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"mobile.png","cl":"png","refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[223.5,143.5,0],"ix":2},"a":{"a":0,"k":[83.5,150,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":1050,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/survey/img_0.png b/app/src/main/assets/animation/survey/img_0.png new file mode 100644 index 0000000..7736a18 Binary files /dev/null and b/app/src/main/assets/animation/survey/img_0.png differ diff --git a/app/src/main/assets/animation/survey/img_1.png b/app/src/main/assets/animation/survey/img_1.png new file mode 100644 index 0000000..a6e5b48 Binary files /dev/null and b/app/src/main/assets/animation/survey/img_1.png differ diff --git a/app/src/main/assets/animation/survey/img_2.png b/app/src/main/assets/animation/survey/img_2.png new file mode 100644 index 0000000..965e5c9 Binary files /dev/null and b/app/src/main/assets/animation/survey/img_2.png differ diff --git a/app/src/main/assets/animation/survey/survey.json b/app/src/main/assets/animation/survey/survey.json new file mode 100644 index 0000000..82e529e --- /dev/null +++ b/app/src/main/assets/animation/survey/survey.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":30,"ip":0,"op":89,"w":300,"h":320,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":150,"h":270,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":178,"h":362,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":300,"h":320,"u":"images/","p":"img_2.png","e":0},{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":2,"nm":"image_3.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[89,181,0],"to":[0,-18.333,0],"ti":[0,18.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[89,71,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[89,71,0],"to":[0,8.667,0],"ti":[0,-8.667,0]},{"t":73,"s":[89,123,0]}],"ix":2},"a":{"a":0,"k":[89,181,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":630,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"image_2.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[231,184,0],"ix":2},"a":{"a":0,"k":[75,135,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":630,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"image_3 _Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[136.5,241,0],"ix":2},"a":{"a":0,"k":[89,181,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[170,-10],[18.5,-10],[18.5,198.5],[170,198.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":178,"h":362,"ip":0,"op":630,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"image_1.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,160,0],"ix":2},"a":{"a":0,"k":[150,160,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":630,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/test/test.json b/app/src/main/assets/animation/test/test.json new file mode 100644 index 0000000..d577d58 --- /dev/null +++ b/app/src/main/assets/animation/test/test.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":60,"ip":0,"op":208,"w":720,"h":360,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,180,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-14,-10],[-98,24],[-152,-16],[-154,66]],"o":[[14,10],[98,-24],[152,16],[154,-66]],"v":[[-266,-48],[-140,24],[26,-36],[248,38]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[0]},{"t":172,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":140,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"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":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":2400,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/animation/tts_anim/img_0.png b/app/src/main/assets/animation/tts_anim/img_0.png new file mode 100644 index 0000000..8e08efe Binary files /dev/null and b/app/src/main/assets/animation/tts_anim/img_0.png differ diff --git a/app/src/main/assets/animation/tts_anim/sound.json b/app/src/main/assets/animation/tts_anim/sound.json new file mode 100644 index 0000000..c7011af --- /dev/null +++ b/app/src/main/assets/animation/tts_anim/sound.json @@ -0,0 +1 @@ +{"v":"5.6.3","fr":30,"ip":0,"op":32,"w":200,"h":200,"nm":"Comp 1","ddd":0,"assets":[{"id":"image_0","w":162,"h":162,"u":"images/","p":"img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"Group 3287.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,99,0],"ix":2},"a":{"a":0,"k":[81,81,0],"ix":1},"s":{"a":0,"k":[60,60,100],"ix":6}},"ao":0,"ip":0,"op":157,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":27,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[99,100,0],"ix":2},"a":{"a":0,"k":[0,-3.571,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.273]},"t":0,"s":[72,72,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[93,93,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":11,"s":[76,76,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":15,"s":[103,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":18,"s":[96,96,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":21,"s":[87,87,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":23,"s":[103,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":26,"s":[98,98,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":28,"s":[98,98,100]},{"t":32,"s":[72,72,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[36.865,0],[0,-36.865],[-36.865,0],[0,36.865]],"o":[[-36.865,0],[0,36.865],[36.865,0],[0,-36.865]],"v":[[0,-66.75],[-66.75,0],[0,66.75],[66.75,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392156863,0.053825449476,0.053825449476,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.274509774002,0.274509774002,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1.75,-4.75],"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":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":157,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/css/lc_switch.css b/app/src/main/assets/css/lc_switch.css new file mode 100644 index 0000000..6902fc8 --- /dev/null +++ b/app/src/main/assets/css/lc_switch.css @@ -0,0 +1,112 @@ +.lcs_wrap { + display: inline-block; + direction: ltr; + height: 28px; + vertical-align: middle; +} +.lcs_wrap input { + display: none; +} + +.lcs_switch { + display: inline-block; + position: relative; + width: 123px; + height: 28px; + border-radius: 30px; + /* background: #ddd; */ + overflow: hidden; + cursor: pointer; + + -webkit-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.lcs_cursor { + display: inline-block; + position: absolute; + top: 3px; + width: 22px; + height: 22px; + border-radius: 100%; + background: #fff; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2), 0 3px 4px 0 rgba(0, 0, 0, 0.1); + z-index: 10; + + -webkit-transition: all .2s linear; + -ms-transition: all .2s linear; + transition: all .2s linear; +} +.lcs_on .lcs_cursor { + background-image: linear-gradient(#21F619, #218F00); +} +.lcs_off .lcs_cursor { + background-image: linear-gradient(#656565, #232323); +} + + + +.lcs_label { + font-family: "Trebuchet MS", Helvetica, sans-serif; + font-size: 12px; + letter-spacing: 1px; + line-height: 18px; + color: #000; + font-weight: bold; + position: absolute; + width: 90px; + top: 5px; + overflow: hidden; + text-align: center; + opacity: 0; + + -webkit-transition: all .2s ease-in-out .1s; + -ms-transition: all .2s ease-in-out .1s; + transition: all .2s ease-in-out .1s; +} +.lcs_label.lcs_label_on { + left: -120px; + z-index: 6; +} +.lcs_label.lcs_label_off { + right: -120px; + z-index: 5; +} + + +/* on */ + +.lcs_switch.lcs_on { + /* background: #75b936; */ + box-shadow: 0 0 2px #4d4d4d inset; +} + +.lcs_switch.lcs_on .lcs_cursor { + left: 98px; +} +.lcs_switch.lcs_on .lcs_label_on { + left: 10px; + opacity: 1; +} + + +/* off */ +.lcs_switch.lcs_off { + /* background: #b2b2b2; */ + box-shadow: 0px 0px 2px #a4a4a4 inset; +} +.lcs_switch.lcs_off .lcs_cursor { + left: 3px; +} +.lcs_switch.lcs_off .lcs_label_off { + right: 10px; + opacity: 1; +} + + +/* disabled */ +.lcs_switch.lcs_disabled { + opacity: 0.65; + filter: alpha(opacity=65); + cursor: default; +} diff --git a/app/src/main/assets/css/story.css b/app/src/main/assets/css/story.css new file mode 100644 index 0000000..b55fccc --- /dev/null +++ b/app/src/main/assets/css/story.css @@ -0,0 +1,33 @@ +.container { + width: 90%; + margin-left: 5%; +} + +.image_box img { + width: 90%; + margin-left: 5%; +} + +.title { + font-size: 20px; + font-weight: bold; +} + +.date_box { + font-size: small; + padding-bottom: 10px; +} + +.textbox { + text-align: left; + padding-top: 10px; +} + +.tbox { + background-color: white; + -webkit-transition: background 0.5s linear; + -moz-transition: background 0.5s linear; + -ms-transition: background 0.5s linear; + -o-transition: background 0.5s linear; + transition: background 0.5s linear; +} \ No newline at end of file diff --git a/app/src/main/assets/data/deleted.json b/app/src/main/assets/data/deleted.json new file mode 100644 index 0000000..2fdcb60 --- /dev/null +++ b/app/src/main/assets/data/deleted.json @@ -0,0 +1 @@ +{"data":[{"story_id":42},{"story_id":43},{"story_id":48},{"story_id":47},{"story_id":50},{"story_id":51},{"story_id":52},{"story_id":54},{"story_id":59},{"story_id":58},{"story_id":53},{"story_id":63},{"story_id":57},{"story_id":61},{"story_id":66},{"story_id":65},{"story_id":69},{"story_id":60},{"story_id":56},{"story_id":55},{"story_id":72},{"story_id":73},{"story_id":71},{"story_id":40},{"story_id":39},{"story_id":38},{"story_id":37},{"story_id":36},{"story_id":35},{"story_id":34},{"story_id":33},{"story_id":32},{"story_id":31},{"story_id":30},{"story_id":29},{"story_id":28},{"story_id":27},{"story_id":26},{"story_id":25},{"story_id":24},{"story_id":23},{"story_id":22},{"story_id":21},{"story_id":20},{"story_id":74},{"story_id":76},{"story_id":75},{"story_id":70},{"story_id":77},{"story_id":18},{"story_id":15},{"story_id":13},{"story_id":78},{"story_id":68}],"last_updated":"2020-06-24 11:15:20"} \ No newline at end of file diff --git a/app/src/main/assets/data/story.json b/app/src/main/assets/data/story.json new file mode 100644 index 0000000..a4bfc62 --- /dev/null +++ b/app/src/main/assets/data/story.json @@ -0,0 +1 @@ +{"data":[{"id":12,"title_bn":"\u09ac\u09be\u09b2\u09cd\u09af\u09ac\u09bf\u09df\u09c7 \u09a5\u09be\u09ae\u099b\u09c7 \u0995\u09bf?","title_en":"Is child marriage stopping?","title_my":"\u1000\u101c\u1031\u1038\u1018\u101d\u1000\u102d\u102f\u1018\u102c\u1010\u102c\u1038\u1006\u102e\u1038\u1014\u1031\u1010\u102c\u101c\u1032","subtitle_bn":"\u09ac\u09be\u09b2\u09cd\u09af\u09ac\u09bf\u09df\u09c7 \u09b6\u09b9\u09b0 \u0985\u099e\u09cd\u099a\u09b2\u09c7 \u0995\u09ae\u09b2 \u09b9\u09b2\u09c7\u0993 \u0997\u09cd\u09b0\u09be\u09ae\u09c7 \u098f\u0996\u09a8\u0993 \u09b0\u09df\u09c7 \u0997\u09c7\u099b\u09c7\u0964 \u098f\u0996\u09a8\u0993 \u09b2\u09c1\u0995\u09bf\u09df\u09c7 \u09a8\u09be\u09a8\u09be \u099c\u09be\u09df\u0997\u09be\u09df \u09ac\u09be\u09b2\u09cd\u09af\u09ac\u09bf\u09df\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964","subtitle_en":"Although childhood was a lotus in the city, the village still remained. Still hiding in different places.","subtitle_my":"\u1019\u103c\u102d\u102f\u1037in\u101b\u102d\u101a\u102c\u1010\u103d\u1004\u103a\u1000\u101c\u1031\u1038\u1018\u101d\u101e\u100a\u103a\u1000\u103c\u102c\u1015\u1014\u103a\u1038\u1016\u103c\u1005\u103a\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u101b\u103d\u102c\u1019\u103e\u102c\u1019\u1030\u1006\u1000\u103a\u101c\u1000\u103a\u1010\u100a\u103a\u101b\u103e\u102d\u1014\u1031\u1006\u1032\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1014\u1031\u1006\u1032\u1000\u103d\u1032\u1015\u103c\u102c\u1038\u1001\u103c\u102c\u1038\u1014\u102c\u1038\u101e\u1031\u102c\u1014\u1031\u101b\u102c\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1015\u102f\u1014\u103a\u1038\u1021\u1031\u102c\u1004\u103a\u1038\u104b","body_bn":"\u09a4\u09c7\u09ae\u09a8\u09bf \u098f\u0995\u099f\u09bf \u0985\u09ad\u09bf\u099c\u09cd\u099e\u09a4\u09be\u09b0 \u0995\u09a5\u09be \u09b2\u09bf\u0996\u09a4\u09c7 \u09ac\u09b8\u09c7\u099b\u09bf\u0964 \u0988\u09a6\u09c7\u09b0 \u099b\u09c1\u099f\u09bf\u09a4\u09c7 \u0997\u09cd\u09b0\u09be\u09ae\u09c7 \u09af\u09be\u0993\u09df\u09be\u09b0 \u09aa\u09b0 \u09a5\u09c7\u0995\u09c7 \u09b6\u09c1\u09a8\u099b\u09bf \u09a8\u09be\u09a8\u09be\u09a8 \u099c\u09be\u09df\u0997\u09be\u09df \u09ac\u09bf\u09df\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0995\u09bf\u09a8\u09cd\u09a4\u09c1 \u0995\u09cb\u09a8\u09cb \u0997\u09be\u09a8 \u09ac\u09be\u099c\u09a8\u09be \u09a8\u09c7\u0987\u0964 \u0997\u09be\u09a8 \u09ac\u09be\u099c\u09a8\u09be\u09ac\u09bf\u09b9\u09c0\u09a8 \u09b0\u09be\u09a4\u09c7\u09b0 \u0985\u09a8\u09cd\u09a7\u0995\u09be\u09b0\u09c7 \u09ac\u09bf\u09df\u09c7\u0964 \u09ac\u09bf\u09df\u09c7 \u09ae\u09be\u09a8\u09c7 \u0997\u09be\u09a8 \u09ac\u09be\u099c\u09a8\u09be \u0986\u09a8\u09a8\u09cd\u09a6 \u0989\u09b2\u09cd\u09b2\u09be\u09b8\u09c7 \u098f\u09b2\u09be\u0995\u09be\u09ac\u09be\u09b8\u09c0\u09b0 \u0986\u09b0\u09be\u09ae\u09c7\u09b0 \u0998\u09c1\u09ae \u09b9\u09be\u09b0\u09be\u09ae \u0995\u09b0\u09c7 \u09a6\u09c7\u0993\u09df\u09be\u0964 \u0995\u09bf\u09a8\u09cd\u09a4\u09c1 \u098f\u09ae\u09a8 \u09ae\u09cd\u09af\u09be\u09dc\u09ae\u09cd\u09af\u09be\u09dc\u09c7 \u09ac\u09bf\u09df\u09c7 \u09a6\u09c7\u0996\u09c7 \u0986\u09ae\u09be\u09b0 \u0995\u09c7\u09ae\u09a8 \u098f\u0995\u099f\u09c1 \u09b8\u09a8\u09cd\u09a6\u09c7\u09b9 \u09b9\u09b2\u09cb\u0964\n\n\u098f\u09b0\u0987 \u09ae\u09a7\u09cd\u09af\u09c7 \u0986\u09ae\u09bf \u09ae\u09be\u09ae\u09be\u09b0 \u09b8\u09be\u09a5\u09c7 \u09ac\u09bf\u09df\u09c7\u09b0 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09be\u09a8\u09c7 \u09af\u09be\u0993\u09df\u09be\u09b0 \u09a6\u09be\u0993\u09df\u09be\u09a4 \u09aa\u09be\u0987\u0964 \u0989\u09aa\u09b9\u09be\u09b0\u09b8\u09b9 \u09b9\u09be\u099c\u09bf\u09b0 \u09b9\u09df\u09c7 \u09af\u09be\u0987 \u09ac\u09bf\u09df\u09c7\u09b0 \u09a6\u09bf\u09a8\u0964 \u09ac\u09bf\u09df\u09c7 \u09ac\u09be\u09dc\u09bf\u09a4\u09c7 \u09af\u09c7\u09df\u09c7 \u09a6\u09c7\u0996\u09bf \u0985\u09a4\u09bf\u09a5\u09bf\u09b0\u09be \u0996\u09be\u099a\u09cd\u099b\u09c7\u09a8, \u0989\u09aa\u09b9\u09be\u09b0 \u09a6\u09bf\u099a\u09cd\u099b\u09c7\u09a8, \u099a\u09b2\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7\u09a8\u0964 \u09ac\u09b0 \u0995\u09bf\u0982\u09ac\u09be \u0995\u09a8\u09c7\u09b0 \u0995\u09cb\u09a8 \u0996\u09cb\u0981\u099c \u09a8\u09c7\u0987\u0964 \u0985\u09a4\u09bf\u09a5\u09bf\u0993 \u0996\u09c1\u09ac \u09ac\u09c7\u09b6\u09bf \u09a8\u09df\u0964\n\n\u0995\u09be\u099c\u09bf, \u09ac\u09bf\u09df\u09c7\u09b0 \u0997\u09c7\u099f \u098f\u0997\u09c1\u09b2\u09cb \u09a8\u09be \u09a5\u09be\u0995\u09be\u09df \u0995\u09c7\u09ae\u09a8 \u099c\u09be\u09a8\u09bf \u09ac\u09bf\u09df\u09c7 \u09ac\u09bf\u09df\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7 \u09a8\u09be\u0964 \u09ac\u09bf\u09b7\u09df\u099f\u09bf \u09ae\u09a8\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0996\u09cb\u0981\u099a\u09be \u09a6\u09bf\u099a\u09cd\u099b\u09bf\u09b2\u0964 \u09a4\u09be\u0987 \u09aa\u09b0\u09bf\u099a\u09bf\u09a4 \u098f\u0995 \u09ad\u09be\u0987\u0995\u09c7 \u099c\u09bf\u099c\u09cd\u099e\u09c7\u09b8 \u0995\u09b0\u09b2\u09be\u09ae, \u09ac\u09b0 \u0995\u09a8\u09c7 \u0995\u09cb\u09a5\u09be\u09df? \u09ac\u09bf\u09df\u09c7 \u09b9\u09ac\u09c7 \u09a8\u09be \u09a8\u09be\u0995\u09bf?\n\n\u09ad\u09be\u0987 \u099c\u09be\u09a8\u09be\u09b2\u09c7\u09a8 \u09ac\u09bf\u09df\u09c7 \u098f\u0995 \u09b8\u09aa\u09cd\u09a4\u09be\u09b9 \u0986\u0997\u09c7 \u09b9\u09df\u09c7 \u0997\u09c7\u099b\u09c7\u0964 \u09ae\u09c7\u09df\u09c7\u09b0 \u09ac\u09df\u09b8 \u0995\u09ae \u09a4\u09be\u0987 \u09b0\u09be\u09a4\u09c7 \u09ac\u09bf\u09df\u09c7 \u09b9\u09df\u09c7\u099b\u09c7 \u098f\u09ac\u0982 \u098f\u0995 \u09b8\u09aa\u09cd\u09a4\u09be\u09b9 \u09aa\u09b0 \u0986\u099c \u0986\u09a8\u09c1\u09b7\u09cd\u09a0\u09be\u09a8\u09bf\u0995\u09a4\u09be \u09aa\u09be\u09b2\u09a8 \u0995\u09b0\u09c7 \u0996\u09be\u0993\u09df\u09be \u09a6\u09be\u0993\u09df\u09be \u09b9\u099a\u09cd\u099b\u09c7\u0964\n\n\u0986\u09ae\u09be\u09b0 \u0996\u09be\u09b0\u09be\u09aa \u09b2\u09be\u0997\u09be\u09a4\u09c7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09b2 \u098f\u09ac\u0982 \u0995\u09c7\u09a8 \u0985\u09b2\u09cd\u09aa \u09ac\u09df\u09b8\u09c7 \u09ac\u09bf\u09df\u09c7 \u09a6\u09bf\u099a\u09cd\u099b\u09c7 \u09a4\u09be \u099c\u09be\u09a8\u09a4\u09c7 \u0987\u099a\u09cd\u099b\u09c7 \u09b9\u09b2\u0964 \u098f\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u09ac\u0989\u0995\u09c7 \u09a6\u09c7\u0996\u09a4\u09c7 \u09aa\u09c7\u09b2\u09be\u09ae\u0964 \u09a6\u09c7\u0996\u09c7 \u0986\u09ae\u09bf \u09b9\u09a4\u09ad\u09ae\u09cd\u09ac \u09b9\u09df\u09c7 \u0997\u09c7\u09b2\u09be\u09ae\u0964 \u09ae\u09c7\u09df\u09c7\u099f\u09bf\u0995\u09c7 \u0986\u09ae\u09bf \u099a\u09bf\u09a8\u09bf\u0964 \u0993\u09b0 \u0986\u09ae\u09be\u09b0 \u099a\u09c7\u09df\u09c7 \u0995\u09ae\u09aa\u0995\u09cd\u09b7\u09c7 \u09a4\u09bf\u09a8 \u09ac\u09be \u099a\u09be\u09b0 \u09ac\u099b\u09b0\u09c7\u09b0 \u099b\u09cb\u099f \u09b9\u09ac\u09c7\u0964 \u09aa\u09dc\u09c7 \u09b8\u09aa\u09cd\u09a4\u09ae \u09b6\u09cd\u09b0\u09c7\u09a3\u09bf\u09a4\u09c7\u0964\n\n\u0996\u09be\u0993\u09df\u09be \u09a6\u09be\u0993\u09df\u09be \u09b6\u09c7\u09b7 \u0995\u09b0\u09c7 \u09ac\u09be\u09dc\u09bf\u09a4\u09c7 \u0986\u09b8\u09b2\u09c7\u0993 \u09ac\u09bf\u09b7\u09df\u099f\u09be \u09ac\u09be\u09b0\u09ac\u09be\u09b0 \u09ae\u09a8\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u09a8\u09be\u09dc\u09be \u09a6\u09bf\u099a\u09cd\u099b\u09bf\u09b2\u0964 \u0986\u09ae\u09be\u09b0 \u09ae\u09be\u09df\u09c7\u09b0 \u0995\u09be\u099b\u09c7 \u09b0\u09be\u09a4\u09c7\u09b0 \u0985\u09a8\u09cd\u09a7\u0995\u09be\u09b0\u09c7\u09b0 \u09ac\u09bf\u09df\u09c7 \u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7 \u099c\u09be\u09a8\u09a4\u09c7 \u099a\u09be\u0987\u09b2\u09c7 \u09ac\u09b2\u09c7\u09a8 \u09aa\u09b0\u09bf\u09ac\u09be\u09b0\u09c7\u09b0 \u09b8\u09ae\u09cd\u09ae\u09a4\u09bf\u09a4\u09c7 \u0997\u09cd\u09b0\u09be\u09ae\u09ac\u09be\u09b8\u09c0\u09b0 \u0985\u099c\u09be\u09a8\u09cd\u09a4\u09c7 \u09b0\u09be\u09a4\u09c7 \u09ac\u09bf\u09df\u09c7 \u09b9\u09df\u0964 \u09a4\u09be\u09b0 \u0995\u09df\u09c7\u0995 \u09a6\u09bf\u09a8 \u09aa\u09b0 \u0986\u09a8\u09c1\u09ae\u09be\u09a8\u09bf\u0995 \u098f\u0995 \u09b8\u09aa\u09cd\u09a4\u09be\u09b9 \u09aa\u09b0 \u0997\u09cd\u09b0\u09be\u09ae\u09c7\u09b0 \u09ae\u09be\u09a8\u09c1\u09b7\u09a6\u09c7\u09b0 \u09a8\u09bf\u09df\u09c7 \u0986\u09a8\u09c1\u09b7\u09cd\u09a0\u09be\u09a8\u09bf\u0995\u09a4\u09be \u09b8\u09ae\u09cd\u09aa\u09a8\u09cd\u09a8 \u0995\u09b0\u09c7\u0964 \u098f\u09ad\u09be\u09ac\u09c7\u0987 \u09a8\u09be\u0995\u09bf \u098f\u0996\u09a8 \u0997\u09cd\u09b0\u09be\u09ae\u0997\u09c1\u09b2\u09cb\u09a4\u09c7 \u09ac\u09be\u09b2\u09cd\u09af\u09ac\u09bf\u09df\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964\n\n\u099c\u09a8\u09cd\u09ae\u09a8\u09bf\u09ac\u09a8\u09cd\u09a7\u09a8 \u0995\u09be\u09b0\u09cd\u09a1\u09c7 \u09ac\u09df\u09b8 \u09ac\u09c7\u09b6\u09bf \u0995\u09b0\u09c7 \u09a6\u09bf\u09df\u09c7 \u0995\u0996\u09a8\u0993 \u09ac\u09bf\u09df\u09c7 \u09b9\u09df \u0986\u09ac\u09be\u09b0 \u0995\u09be\u099c\u09c0 \u0985\u09a8\u09c1\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf\u09a4\u09c7 \u098f\u09b2\u09be\u0995\u09be\u09b0 \u09ae\u09be\u0993\u09b2\u09be\u09a8\u09be \u09ac\u09be \u0987\u09ae\u09be\u09ae \u09a6\u09bf\u09df\u09c7\u0993 \u09ac\u09bf\u09df\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0997\u09a4 \u0995\u09df\u09c7\u0995 \u09ae\u09be\u09b8\u09c7 \u09a8\u09be\u0995\u09bf \u098f\u09ae\u09a8 \u0985\u09a8\u09c7\u0995 \u09ac\u09bf\u09df\u09c7 \u09b9\u09df\u09c7\u099b\u09c7\u0964\n\n\u098f\u0987 \u09ac\u09bf\u09df\u09c7 \u09a6\u09c7\u0993\u09df\u09be\u09b0 \u09a6\u09c1\u0987\u099f\u09bf \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u0995\u09be\u09b0\u09a3 \u0985\u09b0\u09cd\u09a5\u09a8\u09c8\u09a4\u09bf\u0995 \u0985\u09b8\u099a\u09cd\u099b\u09b2\u09a4\u09be \u0993 \u0985\u09ad\u09bf\u09ad\u09be\u09ac\u0995\u09a6\u09c7\u09b0 \u0985\u09b8\u099a\u09c7\u09a4\u09a8\u09a4\u09be\u0964 \u09a6\u09c1\u099f\u09cb \u09ae\u09bf\u09b2\u09c7 \u098f\u0995 \u098f\u0995\u099f\u09be \u09ae\u09c7\u09df\u09c7\u09b0 \u099c\u09c0\u09ac\u09a8 \u09a8\u09b0\u0995\u09c7 \u09aa\u09b0\u09bf\u09a3\u09a4 \u09b9\u099a\u09cd\u099b\u09c7\u0964\n\n\u0997\u09cd\u09b0\u09be\u09ae\u09c7\u09b0 \u0985\u09a7\u09bf\u0995\u09be\u0982\u09b6 \u09ae\u09be\u09a8\u09c1\u09b7 \u09ae\u09c7\u09df\u09c7\u0995\u09c7 \u09aa\u09b0\u09bf\u09ac\u09be\u09b0\u09c7\u09b0 \u09ac\u09cb\u099d\u09be \u09ad\u09be\u09ac\u09c7\u09a8\u0964 \u09af\u09be\u09b0 \u09ab\u09b2\u09c7 \u0985\u09b2\u09cd\u09aa \u09ac\u09df\u09b8\u09c7 \u09ac\u09bf\u09df\u09c7 \u09a6\u09bf\u09df\u09c7 \u09a6\u09c7\u09a8\u0964 \u09ac\u09bf\u09df\u09c7\u09b0 \u09aa\u09b0 \u09aa\u09b0\u0987 \u09b8\u09a8\u09cd\u09a4\u09be\u09a8 \u099c\u09a8\u09cd\u09ae \u09a6\u09bf\u09df\u09c7 \u09b6\u09be\u09b0\u09c0\u09b0\u09bf\u0995 \u0993 \u09ae\u09be\u09a8\u09b8\u09bf\u0995\u09ad\u09be\u09ac\u09c7 \u0986\u09b0\u0993 \u0985\u09b8\u09b9\u09be\u09df \u09b9\u09df\u09c7 \u09af\u09be\u09df \u09ae\u09c7\u09df\u09c7\u09b0\u09be\u0964\n\n\u098f\u0987 \u0985\u09ad\u09bf\u09a8\u09ac \u0995\u09be\u09df\u09a6\u09be\u09df \u09ac\u09bf\u09df\u09c7 \u09b9\u0993\u09df\u09be\u09b0 \u0995\u09a5\u09be \u09b6\u09c1\u09a8\u09c7 \u0998\u09be\u09ac\u09dc\u09c7 \u0997\u09c7\u09b2\u09be\u09ae\u0964 \u09b8\u09b0\u0995\u09be\u09b0 \u09af\u0996\u09a8 \u09ac\u09be\u09b2\u09cd\u09af\u09ac\u09bf\u09df\u09c7 \u09a0\u09c7\u0995\u09be\u09a4\u09c7 \u0995\u09a0\u09cb\u09b0 \u09b9\u099a\u09cd\u099b\u09c7 \u09a0\u09bf\u0995 \u09a4\u09be\u09b0 \u09ac\u09bf\u09aa\u09b0\u09c0\u09a4\u09c7 \u0997\u09cd\u09b0\u09be\u09ae\u09c7\u09b0 \u09ae\u09be\u09a8\u09c1\u09b7 \u09a0\u09bf\u0995\u0987 \u0989\u09aa\u09be\u09df \u09ac\u09c7\u09b0 \u0995\u09b0\u09c7 \u09ab\u09c7\u09b2\u099b\u09c7\u0964 \u098f\u099c\u09a8\u09cd\u09af \u0995\u09a0\u09cb\u09b0 \u09ae\u09a8\u09bf\u099f\u09b0\u09bf\u0982 \u09a6\u09b0\u0995\u09be\u09b0 \u09ac\u09b2\u09c7 \u0986\u09ae\u09bf \u09ae\u09a8\u09c7 \u0995\u09b0\u09bf\u0964 \u09aa\u09cd\u09b0\u09b6\u09be\u09b8\u09a8\u0995\u09c7 \u09a8\u099c\u09b0\u09a6\u09be\u09b0\u09bf \u09ac\u09be\u09dc\u09be\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964 \u09a8\u09df\u09a4 \u098f\u09ad\u09be\u09ac\u09c7 \u099a\u09b2\u09a4\u09c7 \u09a5\u09be\u0995\u09b2\u09c7 \u0997\u09cd\u09b0\u09be\u09ae\u09c7\u09b0 \u0985\u09ac\u09b8\u09cd\u09a5\u09be, \u09b8\u09ae\u09be\u099c\u09c7\u09b0 \u0985\u09ac\u09b8\u09cd\u09a5\u09be, \u09a6\u09c7\u09b6\u09c7\u09b0 \u0985\u09ac\u09b8\u09cd\u09a5\u09be \u09ad\u09df\u09be\u09ac\u09b9 \u0986\u0995\u09be\u09b0 \u09a7\u09be\u09b0\u09a8 \u0995\u09b0\u09ac\u09c7\u0964","body_en":"I sat down to write about an experience. Ever since moving to the village on Eid holidays, I have been hearing about marriage in various places. But there is no music playing. Marriage in the dark of night without playing music. Marriage means that the joy of playing music is forbidden in the comfort of the locals. But I was a little skeptical about seeing such a crazy marriage. \n \n In the meantime, I was invited to go to a wedding with my uncle. On the day of the wedding we appeared with the gift. At the wedding, I see the guests eating, giving presents, leaving. There is no search for the bride or the groom. Not even a guest. \n \n Kazi, the wedding gate doesn't have these, how do I know the wedding doesn't look like a wedding. The subject was drenched in his mind. So I asked a brother, where is the bride? Will you get married or not? \n \n Brother said the wedding was a week ago. My daughter is married at night, and after a week, I am being formally fed and eaten. I wish. In between, I could see the wife. I was shocked to see this. The girl i know He'll be at least three or four years younger than me. In the seventh grade. [[::::]] \n After eating and drinking, the house was still stirring in the mind again and again. When asked about my night marriage to my mother, she said that the villagers were unknowingly married at night with the consent of the family. A few days after that, about a week later, the people of the village completed the formalities. This is how children are now growing up in the villages. There have been many such marriages in the last few months or so. The life of one daughter is going to hell in the combination of the two. As a result, he married at an early age. Soon after marriage, children become more physically and emotionally helpless. \n \n I was nervous to hear about this wonderful marriage. The people of the village are finding ways to do the opposite when the government is trying to prevent childhood. This is why I think it needs strict monitoring. The administration has to increase surveillance. Otherwise, the condition of the village, the condition of the society, the condition of the country will be in dire shape.","body_my":"\u1004\u102b\u1021\u1010\u103d\u1031\u1037\u1021\u1000\u103c\u102f\u1036\u1014\u103e\u1004\u1037\u103a\u1015\u1010\u103a\u101e\u1000\u103a\u104b \u101b\u1031\u1038\u101e\u102c\u1038\u1016\u102d\u102f\u1037\u1011\u102d\u102f\u1004\u103a\u1010\u1031\u102c\u103a\u1019\u1030\u104f\u104b \u1004\u102b Eid \u1021\u102c\u1038\u101c\u1015\u103a\u101b\u1000\u103a\u1019\u103b\u102c\u1038\u104c\u101b\u103d\u102c\u1000\u102d\u102f\u101e\u103d\u102c\u1038\u1000\u1010\u100a\u103a\u1038\u1000\u1004\u102b\u1000\u103d\u1032\u1015\u103c\u102c\u1038\u1001\u103c\u102c\u1038\u1014\u102c\u1038\u101e\u1031\u102c\u1014\u1031\u101b\u102c\u1019\u103b\u102c\u1038\u1019\u103e\u1014\u102c\u1038\u1011\u1031\u102c\u1004\u103a\u1001\u1032\u1037\u1000\u103c\u101e\u100a\u103a\u104b \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1002\u102e\u1010\u1016\u103d\u1004\u1037\u103a\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u1015\u102b\u104b \u1010\u1031\u1038\u1002\u102e\u1010\u1019\u1016\u103d\u1004\u1037\u103a\u1018\u1032\u100a\u1021\u1019\u103e\u1031\u102c\u1004\u103a\u1011\u1032\u1010\u103d\u1004\u103a\u101c\u1000\u103a\u1011\u1015\u103a\u1001\u103c\u1004\u103a\u1038\u104b \u101c\u1000\u103a\u1011\u1015\u103a\u1011\u102d\u1019\u103a\u1038\u1019\u103c\u102c\u1038\u1006\u102d\u102f\u101e\u100a\u103a\u1019\u103e\u102c\u1012\u1031\u101e\u1001\u1036\u1019\u103b\u102c\u1038\u1014\u103e\u1005\u103a\u101e\u102d\u1019\u1037\u103a\u1019\u103e\u102f\u1015\u1031\u1038\u101e\u1031\u102c\u1010\u1031\u1038\u101e\u102e\u1001\u103b\u1004\u103a\u1038\u1016\u103d\u1004\u1037\u103a\u1001\u103c\u1004\u103a\u1038\u1021\u102c\u1038\u1010\u102c\u1038\u1019\u103c\u1005\u103a\u101e\u100a\u103a\u101f\u102f\u1006\u102d\u102f\u101c\u102d\u102f\u101e\u100a\u103a\u104b \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1011\u102d\u102f\u101e\u102d\u102f\u1037\u101e\u1031\u102c\u1021\u101b\u1030\u1038\u1011\u102d\u1019\u103a\u1038\u1019\u103c\u102c\u1038\u101c\u1000\u103a\u1011\u1015\u103a\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f\u1010\u103d\u1031\u1037\u1019\u103c\u1004\u103a\u101b\u1014\u103a\u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a\u101e\u1036\u101e\u101a\u1016\u103c\u1005\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u1011\u102d\u102f\u1021\u1010\u1031\u102c\u1021\u1010\u103d\u1004\u103a\u1038\u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u104f \u1026\u1038 \u101c\u1031\u1038\u1014\u103e\u1004\u1037\u103a\u1019\u1004\u103a\u1039\u1002\u101c\u102c\u1006\u1031\u102c\u1004\u103a\u101b\u1014\u103a\u1016\u102d\u1010\u103a\u1000\u103c\u102c\u1038\u1001\u1036\u1001\u1032\u1037\u101b\u101e\u100a\u103a\u104b \u1019\u1004\u103a\u1039\u1002\u101c\u102c\u1006\u1031\u102c\u1004\u103a\u101e\u1031\u102c\u1014\u1031\u1037\u104c\u1004\u102b\u1010\u102d\u102f\u1037\u101e\u100a\u103a\u101c\u1000\u103a\u1006\u1031\u102c\u1004\u103a\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u1011\u1004\u103a\u101b\u103e\u102c\u1038\u104f\u104b \u1021\u102d\u1019\u103a\u1015\u103c\u1014\u103a\u101b\u1031\u102c\u1000\u103a\u1010\u1032\u1037\u1021\u1001\u102b eating \u100a\u1037\u103a\u101e\u100a\u103a\u1010\u103d\u1031\u1005\u102c\u1038\u1014\u1031\u1010\u102c\u104a \u101c\u1000\u103a\u1006\u1031\u102c\u1004\u103a\u1015\u1031\u1038\u1010\u102c\u104a \u1011\u103d\u1000\u103a\u1010\u102c\u1010\u103d\u1031\u1019\u103c\u1004\u103a\u1014\u1031\u101b\u1010\u101a\u103a\u104b \u101e\u1010\u102d\u102f\u1037\u101e\u1019\u102e\u1038\u101e\u102d\u102f\u1037\u1019\u101f\u102f\u1010\u103a\u101e\u1010\u102d\u102f\u1037\u101e\u102c\u1038\u1000\u102d\u102f\u101b\u103e\u102c\u1016\u103d\u1031\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u1015\u102b\u104b a \u100a\u1037\u103a\u101e\u100a\u103a\u1010\u1031\u102c\u1004\u103a\u1010\u1031\u102c\u1004\u103a\u1019\u103e\u1019\u101b\u103e\u102d\u104b \u1012\u102e\u1018\u102c\u101e\u102c\u101b\u1015\u103a\u101f\u102c\u101e\u1030\u1037\u1005\u102d\u1010\u103a\u1011\u1032\u1019\u103e\u102c\u101a\u102d\u102f\u101a\u103d\u1004\u103a\u1038\u1014\u1031\u1010\u101a\u103a\u104b \u1012\u102b\u1014\u1032\u1037\u1000\u103b\u103d\u1014\u103a\u1010\u1031\u102c\u103a\u1000\u100a\u102e\u1000\u102d\u102f\u1019\u1031\u1038\u1010\u101a\u103a\u104b \u101e\u1010\u102d\u102f\u1037\u101e\u1019\u102e\u1038\u1000\u1018\u101a\u103a\u1019\u103e\u102c\u101c\u1032\u104b \u1019\u1004\u103a\u1038\u101c\u1000\u103a\u1011\u1015\u103a\u1019\u103e\u102c\u101c\u102c\u1038\u1019\u1014\u1031\u101b\u1018\u1030\u1038\u101c\u102c\u1038? \n \n Brother \u1000\u1019\u1004\u103a\u1039\u1002\u101c\u102c\u1006\u1031\u102c\u1004\u103a\u1000\u102d\u102f\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c\u1010\u1005\u103a\u1015\u1010\u103a\u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1004\u102b\u1037\u101e\u1019\u102e\u1038\u1000\u100a\u1019\u103e\u102c\u101c\u1000\u103a\u1011\u1015\u103a\u1010\u101a\u103a\u104a \u1010\u1005\u103a\u1015\u1010\u103a\u1021\u1000\u103c\u102c\u1019\u103e\u102c\u1000\u103b\u103d\u1014\u103a\u1019\u101f\u102c\u1015\u102f\u1036\u1019\u103e\u1014\u103a\u1014\u102d\u102f\u1037\u1010\u102d\u102f\u1000\u103a\u1000\u103b\u103d\u1031\u1038\u1015\u103c\u102e\u1038\u1005\u102c\u1038\u1014\u1031\u1010\u101a\u103a\u104b \u1004\u102b\u101c\u102d\u102f\u1001\u103b\u1004\u103a\u1010\u101a\u103a \u1000\u103c\u102c\u1038\u1011\u1032\u1019\u103e\u102c\u1007\u1014\u102e\u1038\u1000\u102d\u102f\u1000\u103b\u103d\u1014\u103a\u1010\u1031\u102c\u103a\u1010\u103d\u1031\u1037\u1014\u102d\u102f\u1004\u103a\u1010\u101a\u103a\u104b \u1004\u102b\u1012\u102e\u1000\u103c\u100a\u1037\u103a\u1016\u102d\u102f\u1037\u1010\u102f\u1014\u103a\u101c\u103e\u102f\u1015\u103a\u101e\u103d\u102c\u1038\u1010\u101a\u103a\u104b \u1004\u102b\u101e\u102d\u1010\u1032\u1037\u1019\u102d\u1014\u103a\u1038\u1000\u101c\u1031\u1038 \u101e\u1030\u1000\u1000\u103b\u103d\u1014\u103a\u1019\u1011\u1000\u103a\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038\u101e\u102f\u1036\u1038\u101c\u1031\u1038\u1014\u103e\u1005\u103a\u1004\u101a\u103a\u101c\u102d\u1019\u1037\u103a\u1019\u101a\u103a\u104b \u101e\u1010\u1039\u1010\u1019\u1010\u1014\u103a\u1038\u1010\u103d\u1004\u103a\u104b [[::::]] \n \u1005\u102c\u1038\u101e\u1031\u102c\u1000\u103a\u1015\u103c\u102e\u1038\u101e\u1031\u102c\u1021\u1001\u102b\u1021\u102d\u1019\u103a\u101e\u100a\u103a\u1005\u102d\u1010\u103a\u1010\u103d\u1004\u103a\u1021\u1000\u103c\u102d\u1019\u103a\u1000\u103c\u102d\u1019\u103a\u101c\u103e\u102f\u1015\u103a\u1001\u102b\u1014\u1031\u1006\u1032\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1021\u1019\u1031\u1014\u1032\u1037\u1004\u102b\u1037\u101b\u1032\u1037\u101c\u1000\u103a\u1011\u1015\u103a\u1011\u102d\u1019\u103a\u1038\u1019\u103c\u102c\u1038\u1019\u103e\u102f\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1019\u1031\u1038\u1019\u103c\u1014\u103a\u1038\u1010\u1032\u1037\u1021\u1001\u102b\u101b\u103d\u102c\u101e\u102c\u1038\u1010\u103d\u1031\u1000\u100a\u1018\u1000\u103a\u1019\u103e\u102c\u1019\u102d\u101e\u102c\u1038\u1005\u102f\u101b\u1032\u1037\u1001\u103d\u1004\u1037\u103a\u1015\u103c\u102f\u1001\u103b\u1000\u103a\u1014\u1032\u1037\u1019\u101e\u102d\u1018\u1032\u101c\u1000\u103a\u1011\u1015\u103a\u1001\u1032\u1037\u1000\u103c\u1010\u101a\u103a\u101c\u102d\u102f\u1037\u101e\u1030\u1000\u1015\u103c\u1031\u102c\u1015\u102b\u1010\u101a\u103a\u104b \u1014\u1031\u102c\u1000\u103a\u101b\u1000\u103a\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a\u1021\u1000\u103c\u102c\u1010\u103d\u1004\u103a\u1010\u1005\u103a\u1015\u1010\u103a\u1001\u1014\u1037\u103a\u1021\u1000\u103c\u102c\u1010\u103d\u1004\u103a\u101b\u103d\u102c\u101e\u1030\u101b\u103d\u102c\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1010\u101b\u102c\u1038 \u1040 \u1004\u103a\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1015\u103c\u102e\u1038\u1005\u102e\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u101b\u103d\u102c\u1010\u103d\u1031\u1019\u103e\u102c\u1012\u102e\u101c\u102d\u102f\u1016\u103c\u1005\u103a\u1014\u1031\u1010\u101a\u103a\u104b \u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u100a\u1037\u103a\u101c\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1004\u103a\u1038\u1011\u102d\u102f\u101e\u102d\u102f\u1037\u101e\u1031\u102c\u101c\u1000\u103a\u1011\u1015\u103a\u1011\u102d\u1019\u103a\u1038\u1019\u103c\u102c\u1038\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1005\u103d\u102c\u101b\u103e\u102d\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u1024\u101c\u1000\u103a\u1011\u1015\u103a\u1011\u102d\u1019\u103a\u1038\u1019\u103c\u102c\u1038\u1019\u103e\u102f\u104f\u1021\u1013\u102d\u1000\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u101b\u1004\u103a\u1038\u1014\u103e\u1005\u103a\u1001\u102f\u1019\u103e\u102c\u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u1019\u1004\u103c\u102d\u1019\u103a\u1019\u101e\u1000\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u1019\u102d\u1018\u101e\u1010\u102d\u1019\u1032\u1037\u1019\u103e\u102f\u1010\u102d\u102f\u1037\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1014\u103e\u1005\u103a\u1001\u102f\u1015\u1031\u102b\u1004\u103a\u1038\u1005\u1015\u103a\u1015\u103c\u102e\u1038\u1019\u102d\u1014\u103a\u1038\u1000\u101c\u1031\u1038\u1010\u1005\u103a \u1026\u1038 \u104f\u1018\u101d\u101e\u100a\u103a\u1004\u101b\u1032\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101e\u100a\u103a\u104b \n \n \u101b\u103d\u102c\u101b\u103e\u102d\u101c\u1030\u1021\u1019\u103b\u102c\u1038\u1005\u102f\u1000\u1019\u102d\u1014\u103a\u1038\u1000\u101c\u1031\u1038\u1021\u102c\u1038\u1019\u102d\u101e\u102c\u1038\u1005\u102f\u101d\u1014\u103a\u1011\u102f\u1015\u103a\u101d\u1014\u103a\u1015\u102d\u102f\u1038\u1021\u1016\u103c\u1005\u103a\u101a\u1030\u1019\u103e\u1010\u103a\u1000\u103c\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1014\u103e\u1004\u1037\u103a\u101e\u1030\u101e\u100a\u103a\u1004\u101a\u103a\u1004\u101a\u103a\u1000\u1010\u100a\u103a\u1038\u1000\u101c\u1000\u103a\u1011\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u101c\u1000\u103a\u1011\u1015\u103a\u1015\u103c\u102e\u1038\u1019\u1000\u103c\u102c\u1019\u102e\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1000\u102c\u101a\u1015\u102d\u102f\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1005\u102d\u1010\u103a\u1015\u102d\u102f\u1004\u103a\u1038\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1015\u102d\u102f\u1019\u102d\u102f\u1021\u102c\u1038\u1014\u100a\u103a\u1038\u101c\u102c\u101e\u100a\u103a\u104b \n \n \u1024\u1000\u1031\u102c\u1004\u103a\u1038\u1019\u103d\u1014\u103a\u101e\u1031\u102c\u1021\u102d\u1019\u103a\u1011\u1031\u102c\u1004\u103a\u101b\u1031\u1038\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1000\u103c\u102c\u1038\u101e\u102d\u101b\u1014\u103a\u1005\u102d\u1010\u103a\u101c\u103e\u102f\u1015\u103a\u101b\u103e\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1021\u1005\u102d\u102f\u1038\u101b\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1000\u101c\u1031\u1038\u1018\u101d\u1000\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u101b\u1014\u103a\u1000\u103c\u102d\u102f\u1038\u1005\u102c\u1038\u1014\u1031\u1005\u1009\u103a\u101b\u103d\u102c\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1006\u1014\u1037\u103a\u1000\u103b\u1004\u103a\u1018\u1000\u103a\u1015\u103c\u102f\u101b\u1014\u103a\u1014\u100a\u103a\u1038\u101c\u1019\u103a\u1038\u1019\u103b\u102c\u1038\u101b\u103e\u102c\u1016\u103d\u1031\u1014\u1031\u1000\u103c\u101e\u100a\u103a\u104b \u1012\u102b\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1004\u102b\u1000\u1010\u1004\u103a\u1038\u1000\u103b\u1015\u103a\u1010\u1032\u1037\u1005\u1031\u102c\u1004\u1037\u103a\u1000\u103c\u1015\u103a\u1000\u103c\u100a\u1037\u103a\u101b\u103e\u102f\u101b\u1014\u103a\u101c\u102d\u102f\u1021\u1015\u103a\u101e\u100a\u103a\u1011\u1004\u103a\u1012\u102b\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1016\u103c\u1005\u103a\u1015\u102b\u101e\u100a\u103a\u104b \u1021\u102f\u1015\u103a\u1001\u103b\u102f\u1015\u103a\u101b\u1031\u1038\u1000\u1005\u1031\u102c\u1004\u1037\u103a\u1000\u103c\u100a\u1037\u103a\u1019\u103e\u102f\u1010\u102d\u102f\u1038\u1019\u103c\u103e\u1004\u1037\u103a\u1016\u102d\u102f\u1037\u101b\u103e\u102d\u101e\u100a\u103a\u104b \u1012\u102e\u101c\u102d\u102f\u1019\u103e\u1019\u101f\u102f\u1010\u103a\u101b\u1004\u103a\u101b\u103d\u102c\u101b\u1032\u1037\u1021\u1001\u103c\u1031\u1021\u1014\u1031\u104a \u101c\u1030\u1037\u1021\u1016\u103d\u1032\u1037\u1021\u1005\u100a\u103a\u1038\u101b\u1032\u1037\u1021\u1001\u103c\u1031\u1021\u1014\u1031\u104a \u1010\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u100a\u103a\u101b\u1032\u1037\u1021\u1001\u103c\u1031\u1021\u1014\u1031\u101f\u102c\u1006\u102d\u102f\u1038\u101b\u103d\u102c\u1038\u101c\u103e\u1010\u1032\u1037\u1015\u102f\u1036\u101e\u100f\u1039\u100c\u102c\u1014\u103a\u101b\u103e\u102d\u101c\u102d\u1019\u1037\u103a\u1019\u101a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/Q4wLL9VNEhWr6NINaiEjE5WupdDrCWTICCP23fsw.jpeg","story_video":"","author":null,"author_image":"","status":1,"created_at":"Jan 14, 2020","updated_at":"Apr 22, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/12"},{"id":14,"title_bn":"\u099d\u09b0\u09c7\u09aa\u09dc\u09be\u09a6\u09c7\u09b0 \u09b9\u09be\u09b0 \u0995\u09ae\u099b\u09c7 \u09a8\u09be","title_en":"The rate of droplets is not decreasing","title_my":"\u1019\u103b\u1000\u103a\u101b\u100a\u103a\u1005\u1000\u103a\u101c\u1031\u1038\u1010\u103d\u1031\u101b\u1032\u1037\u1014\u103e\u102f\u1014\u103a\u1038\u1000\u1019\u1000\u103b\u1006\u1004\u103a\u1038\u1018\u1030\u1038","subtitle_bn":"\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u09cd\u09b0\u09be\u09df \u09aa\u09cd\u09b0\u09a4\u09cd\u09af\u09c7\u0995\u099f\u09bf \u0997\u09cd\u09b0\u09be\u09ae\u09c7\u0987 \u0985\u09a8\u09cd\u09a4\u09a4 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09b8\u09cd\u0995\u09c1\u09b2 \u0986\u099b\u09c7\u0964 \u09af\u09be\u09b0 \u09ab\u09b2\u09c7 \u0995\u09ae\u09ac\u09c7\u09b6\u09bf \u09b8\u09ac \u09b6\u09bf\u09b6\u09c1\u0987 \u0989\u099a\u09cd\u099a\u09b6\u09bf\u0995\u09cd\u09b7\u09bf\u09a4 \u09b9\u09a4\u09c7 \u09a8\u09be \u09aa\u09be\u09b0\u09b2\u09c7\u0993 \u09aa\u09cd\u09b0\u09a5\u09ae\u09bf\u0995 \u09b6\u09bf\u0995\u09cd\u09b7\u09be \u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u099b\u09c7\u0964","subtitle_en":"Currently, almost every village in Bangladesh has at least one elementary school. As a result, almost all the children are not able to get higher education but are still able to get elementary education.","subtitle_my":"\u101c\u1000\u103a\u101b\u103e\u102d\u1010\u103d\u1004\u103a\u1018\u1004\u103a\u1039\u1002\u101c\u102c\u1038\u1012\u1031\u1037\u101b\u103a\u103e\u101b\u103e\u102d\u1000\u103b\u1031\u1038\u101b\u103d\u102c\u1010\u102d\u102f\u1004\u103a\u1038\u104c\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1010\u1005\u103a\u1001\u102f\u101b\u103e\u102d\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1014\u103e\u1004\u1037\u103a\u1000\u101c\u1031\u1038\u1021\u102c\u1038\u101c\u102f\u1036\u1038\u1014\u102e\u1038\u1015\u102b\u1038\u101e\u100a\u103a\u1021\u1006\u1004\u1037\u103a\u1019\u103c\u1004\u1037\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1000\u102d\u102f\u1019\u101b\u101b\u103e\u102d\u1014\u102d\u102f\u1004\u103a\u1000\u103c\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1015\u100a\u102c\u101b\u1031\u1038\u1000\u102d\u102f\u101e\u1004\u103a\u101a\u1030\u1014\u102d\u102f\u1004\u103a\u1000\u103c\u101e\u100a\u103a\u104b","body_bn":"\u098f\u0995\u099f\u09be \u09b8\u09ae\u09df \u09b8\u09b0\u0995\u09be\u09b0\u09bf \u09b8\u09cd\u0995\u09c1\u09b2, \u0995\u09b2\u09c7\u099c \u098f\u09ac\u0982 \u09ac\u09bf\u09b6\u09cd\u09ac\u09ac\u09bf\u09a6\u09cd\u09af\u09be\u09b2\u09df\u0995\u09c7\u0987 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b0\u09cd\u099c\u09a8\u09c7\u09b0 \u0989\u09aa\u09af\u09c1\u0995\u09cd\u09a4 \u09ae\u09be\u09a7\u09cd\u09af\u09ae \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0997\u09a3\u09cd\u09af \u0995\u09b0\u09be \u09b9\u09a4\u09cb\u0964 \u0995\u09bf\u09a8\u09cd\u09a4\u09c1 \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09b6\u09c1\u09a7\u09c1 \u09b8\u09b0\u0995\u09be\u09b0\u09bf \u09b6\u09bf\u0995\u09cd\u09b7\u09be \u09aa\u09cd\u09b0\u09a4\u09bf\u09b7\u09cd\u09a0\u09be\u09a8\u0987 \u09a8\u09df, \u09aa\u09be\u09b6\u09be\u09aa\u09be\u09b6\u09bf \u0997\u09dc\u09c7 \u0989\u09a0\u099b\u09c7 \u09ac\u09c7\u09b8\u09b0\u0995\u09be\u09b0\u09bf \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09aa\u09cd\u09b0\u09a4\u09bf\u09b7\u09cd\u09a0\u09be\u09a8\u0993\u0964 \u09ab\u09b2\u09c7 \u09b8\u09be\u09ae\u09b0\u09cd\u09a5\u09cd\u09af \u09a5\u09be\u0995\u09b2\u09c7\u0987 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b0 \u09b8\u09c1\u09af\u09cb\u0997 \u09aa\u09be\u0993\u09df\u09be \u09af\u09be\u09df\u0964\r\n\r\n\u09a6\u09c7\u09b6\u09c7\u09b0 \u09b8\u0982\u09ac\u09bf\u09a7\u09be\u09a8\u09c7 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u0995\u09c7 \u0985\u09a8\u09c7\u0995 \u0997\u09c1\u09b0\u09c1\u09a4\u09cd\u09ac \u09a6\u09c7\u0993\u09df\u09be \u09b9\u09df\u09c7\u099b\u09c7\u0964 \u09b8\u0982\u09ac\u09bf\u09a7\u09be\u09a8\u09c7\u09b0 \u09e7\u09ed \u09a8\u09ae\u09cd\u09ac\u09b0 \u0985\u09a8\u09c1\u099a\u09cd\u099b\u09c7\u09a6\u09c7 \u09ac\u09b2\u09be \u0986\u099b\u09c7, \u2018\u0986\u0987\u09a8\u09c7\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u09a8\u09bf\u09b0\u09cd\u09a7\u09be\u09b0\u09bf\u09a4 \u09b8\u09ae\u09df\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u09a8\u09bf\u09b0\u0995\u09cd\u09b7\u09b0\u09a4\u09be \u09a6\u09c2\u09b0 \u0995\u09b0\u09bf\u09ac\u09be\u09b0 \u099c\u09a8\u09cd\u09af \u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0 \u0995\u09be\u09b0\u09cd\u09af\u0995\u09b0 \u09ac\u09cd\u09af\u09ac\u09b8\u09cd\u09a5\u09be \u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09ac\u09c7\u0964 \u09a8\u09bf\u09b0\u0995\u09cd\u09b7\u09b0\u09a4\u09be\u09ae\u09c1\u0995\u09cd\u09a4 \u098f\u0995\u099f\u09bf \u09b8\u09ae\u09be\u099c \u0993 \u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0 \u0986\u099c \u09b8\u09ae\u09df\u09c7\u09b0 \u09a6\u09be\u09ac\u09bf\u0964 \u09af\u09c7 \u09a6\u09c7\u09b6 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09df \u09af\u09a4 \u0989\u09a8\u09cd\u09a8\u09a4 \u09a4\u09be\u09b0 \u0985\u09b0\u09cd\u09a5\u09a8\u09c0\u09a4\u09bf\u0993 \u09a4\u09a4\u09cb \u09ae\u099c\u09ac\u09c1\u09a4 \u0993 \u09a6\u09c3\u09dd\u0964\u2019\r\n\r\n\u09b8\u0982\u09ac\u09bf\u09a7\u09be\u09a8\u09c7 \u09b6\u09bf\u0995\u09cd\u09b7\u09be \u09b6\u09c1\u09a7\u09c1 \u0985\u09a7\u09bf\u0995\u09be\u09b0 \u09a8\u09df, \u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u0985\u09ac\u09b6\u09cd\u09af \u0995\u09b0\u09cd\u09a4\u09ac\u09cd\u09af \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u09ac\u09bf\u09ac\u09c7\u099a\u09bf\u09a4\u0964\u0986\u09b0\u09cd\u09a5-\u09b8\u09be\u09ae\u09be\u099c\u09bf\u0995 \u0989\u09a8\u09cd\u09a8\u09df\u09a8\u09c7 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b0 \u09ad\u09c2\u09ae\u09bf\u0995\u09be \u0985\u09a4\u09c1\u09b2\u09a8\u09c0\u09df\u0964 \u098f\u09a4 \u09b8\u09c1\u09ac\u09bf\u09a7\u09be \u09b8\u09a4\u09cd\u09ac\u09c7\u0993 \u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09bf\u0995 \u09b6\u09bf\u09b6\u09c1\u09b0\u09be \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995\u09c7\u09b0 \u0997\u09a3\u09cd\u09a1\u09bf\u0993 \u09aa\u09be\u09b0 \u09b9\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7 \u09a8\u09be\u0964 \r\n\r\n\u09b6\u09bf\u0995\u09cd\u09b7\u09be\u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7 \u0986\u09ae\u09be\u09a6\u09c7\u09b0 \u0989\u09a8\u09cd\u09a8\u09a4\u09bf \u0993 \u0986\u0997\u09cd\u09b0\u0997\u09a4\u09bf \u09b9\u09b2\u09c7\u0993, \u0986\u09b0\u09cd\u09a5-\u09b8\u09be\u09ae\u09be\u099c\u09bf\u0995 \u0995\u09be\u09b0\u09a3\u09c7 \u0985\u09a8\u09c7\u0995 \u09ac\u09be\u09ac\u09be \u09ae\u09be \u09b8\u09a8\u09cd\u09a4\u09be\u09a8\u0995\u09c7 \u09b8\u09cd\u0995\u09c1\u09b2\u09c7 \u09aa\u09be\u09a0\u09be\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u09a8 \u09a8\u09be\u0964 \u09aa\u09dc\u09a4\u09c7 \u0997\u09c7\u09b2\u09c7 \u09ad\u09be\u09a4\u09c7\u09b0 \u09af\u09cb\u0997\u09be\u09a8 \u09ac\u09a8\u09cd\u09a7 \u09b9\u09df\u09c7 \u09af\u09be\u09df\u0964 \u09b8\u09cd\u0995\u09c1\u09b2 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c7\u0993 \u099d\u09b0\u09c7 \u09aa\u09dc\u09c7 \u0985\u09ad\u09be\u09ac\u09c7\u09b0 \u0995\u09be\u09b0\u09a3\u09c7\u0964\r\n\r\n\u09ae\u09be\u09a7\u09cd\u09af\u09ae\u09bf\u0995 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b8\u09cd\u09a4\u09b0 \u09aa\u09b0\u09cd\u09af\u09a8\u09cd\u09a4 \u09ac\u09bf\u09a8\u09be\u09ae\u09c2\u09b2\u09cd\u09af\u09c7 \u09ac\u0987 \u09ac\u09bf\u09a4\u09b0\u09a3 \u0995\u09b0\u09be \u09b9\u09b2\u09c7\u0993 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09aa\u09c7\u09b0\u09cb\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u09a8\u09bf \u09af\u09be\u09b0\u09be \u09a4\u09be\u09a6\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09ac\u0987\u0997\u09c1\u09b2\u09bf \u0995\u09cb\u09a8\u09cb \u0995\u09be\u099c\u09c7 \u0986\u09b8\u09c7 \u09a8\u09be\u0964 \u09a4\u09be\u0987 \u09b8\u09ae\u09be\u099c\u09c7\u09b0 \u098f\u0995\u099f\u09bf \u09b6\u09cd\u09b0\u09c7\u09a3\u09bf\u09b0 \u09ae\u09be\u09a8\u09c1\u09b7 \u09a4\u09be\u09a6\u09c7\u09b0 \u09b8\u09a8\u09cd\u09a4\u09be\u09a8\u09a6\u09c7\u09b0 \u0989\u099a\u09cd\u099a \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09df \u09b6\u09bf\u0995\u09cd\u09b7\u09bf\u09a4 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09b2\u09c7\u0993 \u099d\u09b0\u09c7\u09aa\u09dc\u09be \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b0\u09cd\u09a5\u09c0\u09a6\u09c7\u09b0 \u09b9\u09be\u09b0 \u0995\u09ae\u099b\u09c7 \u09a8\u09be\u0964 \r\n\r\n\u0987\u09a6\u09be\u09a8\u09c0\u0982 \u09b6\u09c1\u09b0\u09c1 \u09b9\u09df\u09c7\u099b\u09c7 \u09b8\u09c3\u099c\u09a8\u09b6\u09c0\u09b2 \u09aa\u09a6\u09cd\u09a7\u09a4\u09bf\u09a4\u09c7 \u09aa\u09be\u09a0\u09a6\u09be\u09a8\u0964 \u098f\u099f\u09bf \u09a8\u09bf\u09df\u09c7 \u0997\u09cb\u09dc\u09be\u09df \u0996\u09be\u09a8\u09bf\u0995 \u099c\u099f\u09bf\u09b2\u09a4\u09be \u09a5\u09be\u0995\u09b2\u09c7\u0993 \u098f\u0996\u09a8 \u09b8\u09dc\u0997\u09dc \u09b9\u09df\u09c7 \u0989\u09a0\u09c7\u099b\u09c7 \u098f \u09aa\u09a6\u09cd\u09a7\u09a4\u09bf\u09a4\u09c7 \u09aa\u09dc\u09be\u09b2\u09c7\u0996\u09be \u0995\u09b0\u09be\u0964\r\n\r\n\u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6 \u09b8\u09b0\u0995\u09be\u09b0\u09c7\u09b0 \u098f\u0995\u099f\u09be \u09ac\u09dc \u0985\u09b0\u09cd\u099c\u09a8, \u09ac\u09be\u09a7\u09cd\u09af\u09a4\u09be\u09ae\u09c2\u09b2\u0995 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09b6\u09bf\u0995\u09cd\u09b7\u09be \u0997\u09cd\u09b0\u09b9\u09a3\u0964 \u09af\u09be\u09b0 \u09ab\u09b2\u09c7 \u098f\u0995\u099f\u09c1 \u098f\u0995\u099f\u09c1 \u0995\u09b0\u09c7 \u09a8\u09bf\u09b0\u0995\u09cd\u09b7\u09a4\u09be\u09b0 \u09b9\u09be\u09b0 \u0995\u09ae\u099b\u09c7\u0964 \u098f\u099b\u09be\u09dc\u09be\u0993 \u09ac\u099b\u09b0\u09c7\u09b0 \u09aa\u09cd\u09b0\u09a5\u09ae \u09a6\u09bf\u09a8\u09c7\u0987 \u09ac\u09bf\u09a8\u09be\u09ae\u09c2\u09b2\u09cd\u09af\u09c7 \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09b0\u09cd\u09a5\u09c0\u09b0\u09be \u09ac\u0987 \u09b9\u09be\u09a4\u09c7 \u09aa\u09c7\u09df\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7\u0964 \u09ad\u09be\u09b2\u09c7\u09be\u09ad\u09be\u09ac\u09c7 \u09b2\u09c7\u0996\u09be\u09aa\u09dc\u09be \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u099b\u09c7\u0964","body_en":"At one time government schools, colleges and universities were regarded as suitable mediums for education. But now not only the government educational institutions, but also the private educational institutions are emerging. As a result, education is available only if afforded. \r\n \r\n The Constitution of the country has given great importance to education. Article 1 of the Constitution states, \u201cThe State shall take effective measures to eliminate illiteracy within the time prescribed by law. A society and state without illiteracy are the demands of today. The economy of the country, which is as advanced as it is in education, is also strong and strong. ' . Despite such benefits, the marginalized children of the country cannot even cross primary boundaries. \r\n \r\n Despite our progress and progress in education, many parents cannot send their children to school for socio-economic reasons. After reading, the rice supply is stopped. Due to lack of starting school but lack of free books. So even though people from one class of society can educate their children in higher education, the rate of dropout students is not decreasing. \r\n \r\n Recently, teaching began in a creative way. Although there is some complexity at the beginning, it has become difficult to study in this way. As a result, the rate of illiteracy is decreasing slightly. Also on the first day of the year, free students are getting books. Can study well","body_my":"\u1010\u1005\u103a\u1001\u103b\u102d\u1014\u103a\u1000\u1021\u1005\u102d\u102f\u1038\u101b\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u104a \u1000\u1031\u102c\u101c\u102d\u1015\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1015\u100a\u102c\u101b\u1031\u1038\u1021\u1010\u103d\u1000\u103a\u101e\u1004\u1037\u103a\u1010\u1031\u102c\u103a\u101e\u1031\u102c\u1014\u1031\u101b\u102c\u1010\u1005\u103a\u1001\u102f\u1021\u1016\u103c\u1005\u103a\u1019\u103e\u1010\u103a\u101a\u1030\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u101a\u1001\u102f\u1021\u1001\u102b\u1021\u1005\u102d\u102f\u1038\u101b\u1015\u100a\u102c\u101b\u1031\u1038\u100c\u102c\u1014\u1019\u103b\u102c\u1038\u101e\u102c\u1019\u1000\u1015\u102f\u1002\u1039\u1002\u101c\u102d\u1000\u1015\u100a\u102c\u101b\u1031\u1038\u1021\u1016\u103d\u1032\u1037\u1021\u1005\u100a\u103a\u1038\u1019\u103b\u102c\u1038\u101c\u100a\u103a\u1038\u1015\u1031\u102b\u103a\u1011\u103d\u1000\u103a\u101c\u102c\u1014\u1031\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1000\u102d\u102f\u1010\u1010\u103a\u1014\u102d\u102f\u1004\u103a\u1019\u103e\u101e\u102c\u101b\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u104b \r\n \r\n \u1010\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u100a\u103a\u104f\u1016\u103d\u1032\u1037\u1005\u100a\u103a\u1038\u1015\u102f\u1036\u1021\u1001\u103c\u1031\u1001\u1036\u1025\u1015\u1012\u1031\u101e\u100a\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1021\u1010\u103d\u1000\u103a\u1021\u101c\u103d\u1014\u103a\u1021\u101b\u1031\u1038\u1000\u103c\u102e\u1038\u101e\u100a\u103a\u104b \u1016\u103d\u1032\u1037\u1005\u100a\u103a\u1038\u1015\u102f\u1036\u1021\u1001\u103c\u1031\u1001\u1036\u1025\u1015\u1012\u1031\u1015\u102f\u1012\u103a\u1019 \u1041 \u1000\u201c \u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1010\u1031\u102c\u103a\u101e\u100a\u103a\u1005\u102c\u1019\u1010\u1010\u103a\u101e\u1030\u1000\u102d\u102f\u1025\u1015\u1012\u1031\u1021\u101b\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1011\u102c\u1038\u101e\u1031\u102c\u1021\u1001\u103b\u102d\u1014\u103a\u1021\u1010\u103d\u1004\u103a\u1038\u1011\u102d\u101b\u1031\u102c\u1000\u103a\u1005\u103d\u102c\u1021\u101b\u1031\u1038\u101a\u1030\u101b\u1019\u100a\u103a\u104b \u1005\u102c\u1019\u1010\u1010\u103a\u101e\u100a\u1037\u103a\u101c\u1030\u1037\u1018\u1031\u102c\u1004\u103a\u1014\u103e\u1004\u1037\u103a\u1015\u103c\u100a\u103a\u1014\u101a\u103a\u1010\u102d\u102f\u1037\u101e\u100a\u103a\u101a\u1014\u1031\u1037\u104f\u1010\u1031\u102c\u1004\u103a\u1038\u1006\u102d\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1010\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u100a\u103a\u104f\u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u101e\u100a\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1010\u103d\u1004\u103a\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u101e\u1000\u1032\u1037\u101e\u102d\u102f\u1037\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u101c\u102c\u101e\u1031\u102c\u101c\u100a\u103a\u1038\u1021\u1004\u103a\u1021\u102c\u1038\u1000\u103c\u102e\u1038\u1019\u102c\u1038\u101e\u100a\u103a\u104b \u104b \u1011\u102d\u102f\u1000\u1032\u1037\u101e\u102d\u102f\u1037\u101e\u1031\u102c\u1021\u1000\u103b\u102d\u102f\u1038\u1001\u1036\u1005\u102c\u1038\u1001\u103d\u1004\u1037\u103a\u1019\u103b\u102c\u1038\u101b\u103e\u102d\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1010\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u100a\u103a\u104f\u1018\u1031\u1038\u1016\u101a\u103a\u1011\u102c\u1038\u101e\u100a\u1037\u103a\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1014\u101a\u103a\u1014\u102d\u1019\u102d\u1010\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1015\u1004\u103a\u1016\u103c\u1010\u103a\u1000\u103b\u1031\u102c\u103a\u104b \u1019\u101b\u1014\u102d\u102f\u1004\u103a\u1015\u102b\u104b \r\n \r\n \u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1010\u102d\u102f\u1037\u104f\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u101b\u103e\u102d\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1019\u102d\u1018\u1019\u103b\u102c\u1038\u1005\u103d\u102c\u101e\u100a\u103a\u101c\u1030\u1019\u103e\u102f\u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u1019\u1015\u102d\u102f\u1037\u1014\u102d\u102f\u1004\u103a\u1015\u102b\u104b \u1005\u102c\u1016\u1010\u103a\u1015\u103c\u102e\u1038\u1014\u1031\u102c\u1000\u103a\u1006\u1014\u103a\u1011\u1031\u102c\u1000\u103a\u1015\u1036\u1037\u1019\u103e\u102f\u1000\u102d\u102f\u101b\u1015\u103a\u101c\u102d\u102f\u1000\u103a\u101e\u100a\u103a\u104b \u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1005\u1016\u103d\u1004\u1037\u103a\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1021\u1001\u1019\u1032\u1037\u1005\u102c\u1021\u102f\u1015\u103a\u1019\u103b\u102c\u1038\u1019\u101b\u103e\u102d\u1001\u103c\u1004\u103a\u1038\u1010\u102d\u102f\u1037\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1011\u102d\u102f\u1037\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u101c\u1030\u1037\u1021\u1016\u103d\u1032\u1037\u1021\u1005\u100a\u103a\u1038\u1010\u1005\u103a\u1001\u102f\u1019\u103e\u101c\u1030\u1010\u1014\u103a\u1038\u1005\u102c\u1038\u1019\u103e\u101c\u1030\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1019\u102d\u1019\u102d\u1010\u102d\u102f\u1037\u104f\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1021\u1006\u1004\u1037\u103a\u1019\u103c\u1004\u1037\u103a\u1015\u100a\u102c\u101b\u1031\u1038\u1016\u103c\u1004\u1037\u103a\u101e\u1004\u103a\u1000\u103c\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1011\u103d\u1000\u103a\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u1019\u103e\u102c\u1019\u1030\u1000\u103b\u1006\u1004\u103a\u1038\u1014\u1031\u101e\u100a\u103a\u1019\u101f\u102f\u1010\u103a\u1015\u102b\u104b \r\n \r\n \u1019\u1000\u103c\u102c\u101e\u1031\u1038\u1019\u102e\u1000\u101e\u1004\u103a\u1000\u103c\u102c\u1038\u1019\u103e\u102f\u101e\u100a\u103a\u1016\u1014\u103a\u1010\u102e\u1038\u1019\u103e\u102f\u1014\u100a\u103a\u1038\u1016\u103c\u1004\u1037\u103a\u1005\u1010\u1004\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1021\u1005\u1010\u103d\u1004\u103a\u101b\u103e\u102f\u1015\u103a\u1011\u103d\u1031\u1038\u1019\u103e\u102f\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a\u101b\u103e\u102d\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1024\u1014\u100a\u103a\u1038\u1016\u103c\u1004\u1037\u103a\u101c\u1031\u1037\u101c\u102c\u101b\u1014\u103a\u1001\u1000\u103a\u1001\u1032\u101c\u102c\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1005\u102c\u1019\u1010\u1010\u103a\u1019\u103e\u102f\u1014\u103e\u102f\u1014\u103a\u1038\u1000\u103b\u1006\u1004\u103a\u1038\u101c\u102c\u101e\u100a\u103a\u104b \u101a\u1001\u102f\u1014\u103e\u1005\u103a\u1015\u1011\u1019\u1014\u1031\u1037\u1010\u103d\u1004\u103a\u101c\u100a\u103a\u1038\u1021\u1001\u1019\u1032\u1037\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1005\u102c\u1021\u102f\u1015\u103a\u1019\u103b\u102c\u1038\u101b\u101b\u103e\u102d\u1014\u1031\u1000\u103c\u101e\u100a\u103a\u104b \u1000\u1031\u102c\u1004\u103a\u1038\u1005\u103d\u102c\u101c\u1031\u1037\u101c\u102c\u1014\u102d\u102f\u1004\u103a\u1010\u101a\u103a","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/GQAgCGgzY5LBvU8fef03ZOJAnDaHhGvPiK4KiOyz.jpeg","story_video":"","author":null,"author_image":"","status":1,"created_at":"Jan 14, 2020","updated_at":"Jun 19, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/14"},{"id":81,"title_bn":null,"title_en":"Decades-old Soviet studies hint at coronavirus strategy","title_my":"\u1006\u101a\u103a\u1005\u102f\u1014\u103e\u1005\u103a\u1019\u103b\u102c\u1038\u1005\u103d\u102c\u1006\u102d\u102f\u1017\u102e\u101a\u1000\u103a\u101c\u1031\u1037\u101c\u102c\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u101e\u100a\u103a coronavirus \u1017\u103b\u1030\u101f\u102c\u1000\u102d\u102f\u1021\u101b\u102d\u1015\u103a\u1021\u1019\u103c\u103d\u1000\u103a\u1016\u1031\u102c\u103a\u1015\u103c\u101e\u100a\u103a","subtitle_bn":null,"subtitle_en":"To the boys, it was just a sugary treat. To their parents, prominent medical researchers, what happened in their Moscow apartment that day in 1959 was a vital experiment with countless lives at stake \u2014 and their own children as guinea pigs.","subtitle_my":"\u101a\u1031\u102c\u1000\u103a\u103b\u102c\u1038\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u1021\u1016\u102d\u102f\u1037\u104e\u1004\u103a\u1038\u101e\u100a\u103a\u101e\u1000\u103c\u102c\u1038\u1013\u102c\u1010\u103a\u1019\u103b\u103e\u101e\u102c\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1041\u1049\u1045\u1049 \u1001\u102f\u1014\u103e\u1005\u103a\u1019\u1031\u102c\u103a\u1005\u1000\u102d\u102f\u1019\u103c\u102d\u102f\u1037\u1010\u103d\u1004\u103a\u1016\u103c\u1005\u103a\u1015\u103d\u102c\u1038\u1001\u1032\u1037\u101e\u1031\u102c\u1021\u1016\u103c\u1005\u103a\u1021\u1015\u103b\u1000\u103a\u101e\u100a\u103a\u101e\u1030\u1010\u102d\u102f\u1037\u104f\u1019\u102d\u1018\u1019\u103b\u102c\u1038\u104a \u1011\u1004\u103a\u101b\u103e\u102c\u1038\u101e\u1031\u102c\u1006\u1031\u1038\u1018\u1000\u103a\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u101e\u102f\u1010\u1031\u101e\u102e\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1019\u101b\u1031\u1019\u1010\u103d\u1000\u103a\u1014\u102d\u102f\u1004\u103a\u1021\u1031\u102c\u1004\u103a\u1019\u103b\u102c\u1038\u1015\u103c\u102c\u1038\u101c\u103e\u101e\u1031\u102c\u1021\u101e\u1000\u103a\u1010\u102c\u1014\u103e\u1004\u1037\u103a\u1021\u101b\u1031\u1038\u1015\u102b\u101e\u1031\u102c\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1019\u103e\u102f\u1016\u103c\u1005\u103a\u1015\u103c\u102e\u1038\u101e\u1030\u1010\u102d\u102f\u1037\u104f\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u1002\u102e\u1014\u102e\u101d\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u1016\u103c\u1005\u103a\u1021\u101b\u1031\u1038\u1015\u102b\u101e\u1031\u102c\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1019\u103e\u102f\u1010\u1005\u103a\u1001\u102f\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b","body_bn":null,"body_en":"\u201cWe formed a kind of line,\u201d Dr Peter Chumakov, who was 7 at the time, recalled in an interview. Into each waiting mouth, a parent popped a sugar cube laced with weakened poliovirus \u2014 an early vaccine against a dreaded disease. \u201cI was eating it from the hands of my mother.\u201d\n\nToday, that same vaccine is gaining renewed attention from researchers \u2014 including those brothers, who all grew up to be virologists \u2014 as a possible weapon against the new coronavirus, based in part on research done by their mother, Dr Marina Voroshilova.\n\nVoroshilova established that the live polio vaccine had an unexpected benefit that, it turns out, could be relevant to the current pandemic: People who got the vaccine did not become sick with other viral illnesses for a month or so afterward. She took to giving the boys polio vaccine each fall as protection against flu.\n\nNow some scientists in several countries are taking a keen interest in the idea of repurposing existing vaccines, like the one with live poliovirus and another for tuberculosis, to see if they can provide at least temporary resistance to the coronavirus. Russians are among them, drawing on a long history of vaccine research \u2014 and of researchers, unconcerned about being scoffed at as mad scientists, experimenting on themselves.\n\nExperts advise that the idea \u2014 like many other proposed ways of attacking the pandemic \u2014 must be approached with great caution.\n\n\u201cWe are much better off with a vaccine that induces specific immunity,\u201d Dr Paul Offit, a co-inventor of a vaccine against the rotavirus and professor at the Perelman School of Medicine at the University of Pennsylvania, said in a telephone interview. Any benefits from a repurposed vaccine, he said, are \u201cmuch shorter-lived and incomplete\u201d compared with a tailored vaccine.\n\nStill, Dr Robert Gallo, a leading advocate of testing the polio vaccine against the coronavirus, said that repurposing vaccines is \u201cone of the hottest areas of immunology.\u201d Gallo, director of the Institute of Human Virology at the University of Maryland School of Medicine, said that even if the weakened poliovirus confers immunity for only a month or so, \u201cit gets you over the hump, and it would save a lot of lives.\u201d\n\nBut there are risks.\n\nBillions of people have taken live poliovirus vaccine, nearly eradicating the disease. However, in extremely rare cases, the weakened virus used in the vaccine can mutate into a more dangerous form, cause polio and infect other people. The risk of paralysis is estimated at 1 in 2.7 million vaccinations.\n\nFor those reasons, public health organisations say that once a region eliminates naturally occurring polio, it must stop routine use of the oral vaccine, as the United States did 20 years ago.\n\nAnd this month, the National Institute of Allergy and Infectious Diseases delayed a study designed by Gallo\u2019s institute, the Cleveland Clinic, the University of Buffalo and Roswell Park Comprehensive Cancer Centre to test the effectiveness of live polio vaccine against the coronavirus using health care workers as subjects. The agency raised safety concerns, including the chance of live poliovirus making its way into water supplies and infecting others, according to researchers familiar with the study application. The press office of the NIAID declined to comment.\n\nBut other countries are moving ahead. Trials with the polio vaccine have begun in Russia and are planned in Iran and Guinea-Bissau.\n\nA specific vaccine for the coronavirus would be one that trains the immune system to target that virus specifically, and more than 125 vaccine candidates are under development around the world.\n\nRepurposed vaccines, in contrast, use live but weakened viruses or bacteria to stimulate the innate immune system more broadly to fight pathogens, at least temporarily.\n\nThe first polio vaccine, developed by Dr Jonas Salk, an American, used \u201cinactivated\u201d virus \u2014 particles of killed virus. It had to be injected, an obstacle to immunisation campaigns in poorer countries.\n\nWhen that vaccine was widely introduced in 1955, Dr Albert Sabin was testing a vaccine using live but attenuated poliovirus, which could be taken orally. But in the United States, with the Salk vaccine already in use, authorities were reluctant to take the perceived risk of conducting live-virus trials.\n\nSabin gave his three strains of attenuated virus to a married pair of virologists in the Soviet Union, Dr Mikhail Chumakov, founder of a polio research institute that now bears his name, and Voroshilova.\n\nMikhail Chumakov vaccinated himself, but a medicine intended primarily for children needed child test subjects, so he and Voroshilova gave it to their three sons and several nieces and nephews.","body_my":"\u1011\u102d\u102f\u1021\u1001\u103b\u102d\u1014\u103a\u1000 (\u1047) \u1014\u103e\u1005\u103a\u1021\u101b\u103d\u101a\u103a\u1012\u1031\u102b\u1000\u103a\u1010\u102c\u1015\u102e\u1010\u102c\u1001\u103b\u102c\u1019\u1000\u103a\u1000\u1031\u102c\u1037\u1017\u103a (Dr. Peter Chumakov) \u1000\u201c \u1000\u103b\u103d\u1014\u103a\u1010\u1031\u102c\u103a\u1010\u102d\u102f\u1037\u101f\u102c\u1019\u103b\u1009\u103a\u1038\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1010\u1005\u103a\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102d\u102f\u1038\u1000\u102d\u102f\u1016\u103d\u1032\u1037\u1005\u100a\u103a\u1038\u1001\u1032\u1037\u1010\u101a\u103a\u104b \u1005\u1031\u102c\u1004\u1037\u103a\u1006\u102d\u102f\u1004\u103a\u1038\u1014\u1031\u101e\u1031\u102c\u1015\u102b\u1038\u1005\u1015\u103a\u1010\u1005\u103a\u1001\u102f\u1010\u103d\u1004\u103a\u1019\u102d\u1018\u1010\u1005\u103a \u1026\u1038 \u101e\u100a\u103a\u1021\u102c\u1038\u1014\u100a\u103a\u1038\u101e\u1031\u102c\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u101e\u1000\u103c\u102c\u1038\u1013\u102c\u1010\u103a\u1010\u1005\u103a\u1019\u103b\u102d\u102f\u1038\u1015\u1031\u102b\u103a\u101c\u102c\u101e\u100a\u103a\u104b \u104e\u1004\u103a\u1038\u101e\u100a\u103a\u1000\u103c\u1031\u102c\u1000\u103a\u1005\u101b\u102c\u101b\u1031\u102c\u1002\u102b\u1010\u102d\u102f\u1000\u103a\u1016\u103b\u1000\u103a\u101b\u1031\u1038\u1021\u1005\u1031\u102c\u1015\u102d\u102f\u1004\u103a\u1038\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1019\u102d\u1001\u1004\u103a\u104f\u101c\u1000\u103a\u1016\u103c\u1004\u1037\u103a\u1004\u102b\u1005\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u1012\u102e\u1014\u1031\u1037\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1021\u1010\u1030\u1010\u1030\u1015\u1004\u103a\u101e\u102f\u1010\u1031\u101e\u102e\u1019\u103b\u102c\u1038\u1019\u103e\u1015\u103c\u1014\u103a\u101c\u100a\u103a\u1021\u102c\u101b\u102f\u1036\u1005\u1030\u1038\u1005\u102d\u102f\u1000\u103a\u1019\u103e\u102f\u1000\u102d\u102f\u101b\u101b\u103e\u102d\u1001\u1032\u1037\u1000\u103c\u1015\u103c\u102e\u1038\u104a \u1021\u102c\u1038\u101c\u102f\u1036\u1038\u1000\u103c\u102e\u1038\u1015\u103c\u1004\u103a\u1038\u101c\u102c\u1000\u103c\u101e\u1031\u102c\u1011\u102d\u102f\u100a\u102e\u1019\u103b\u102c\u1038\u1021\u1015\u102b\u1021\u101d\u1004\u103a \u101e\u1030\u1010\u102d\u102f\u1037\u104f\u1019\u102d\u1001\u1004\u103a\u1012\u1031\u102b\u1000\u103a\u1010\u102c Marina Voroshilova \u1019\u103e\u101e\u102f\u1010\u1031\u101e\u1014\u1015\u103c\u102f\u1001\u103b\u1000\u103a\u1010\u103d\u1004\u103a\u1021\u1001\u103c\u1031\u1001\u1036\u1021\u102c\u1038\u1016\u103c\u1004\u1037\u103a coronavirus \u1021\u101e\u1005\u103a\u1000\u102d\u102f\u1006\u1014\u1037\u103a\u1000\u103b\u1004\u103a\u101b\u1014\u103a\u1016\u103c\u1005\u103a\u1014\u102d\u102f\u1004\u103a\u1001\u103b\u1031\u101b\u103e\u102d\u101e\u1031\u102c\u101c\u1000\u103a\u1014\u1000\u103a\u1010\u1005\u103a\u1001\u102f\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u101b\u1031\u102c\u1002\u102b\u1017\u1031\u1012\u1015\u100a\u102c\u101b\u103e\u1004\u103a\u1019\u103b\u102c\u1038\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \n \n Voroshilova \u1000 \u1010\u102d\u102f\u1000\u103a\u101b\u102d\u102f\u1000\u103a\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u101e\u100a\u103a\u1019\u1019\u103b\u103e\u1031\u102c\u103a\u101c\u1004\u1037\u103a\u101e\u1031\u102c\u1021\u1000\u103b\u102d\u102f\u1038\u1000\u103b\u1031\u1038\u1007\u1030\u1038\u1010\u1005\u103a\u1001\u102f\u101b\u101b\u103e\u102d\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u104e\u1004\u103a\u1038\u101e\u100a\u103a\u101c\u1000\u103a\u101b\u103e\u102d\u1016\u103c\u1005\u103a\u1015\u103d\u102c\u1038\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u101e\u1000\u103a\u1006\u102d\u102f\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u104b \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u1011\u102c\u1038\u101e\u1031\u102c\u101e\u1030\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1021\u1001\u103c\u102c\u1038\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u101b\u1031\u102c\u1002\u102b\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1010\u1005\u103a\u101c\u1001\u1014\u1037\u103a\u1000\u103c\u102c\u1015\u103c\u102e\u1038\u1014\u1031\u102c\u1000\u103a\u1016\u103b\u102c\u1038\u1014\u102c\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u1001\u1032\u1037\u1015\u102b\u104b \u101e\u1030\u1019\u101e\u100a\u103a\u101a\u1031\u102c\u1000\u103a\u103b\u102c\u1038\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1010\u102f\u1015\u103a\u1000\u103d\u1031\u1038\u1000\u102c\u1000\u103d\u101a\u103a\u1019\u103e\u102f\u1021\u1016\u103c\u1005\u103a\u1015\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u101a\u1001\u102f\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u1005\u103d\u102c\u101b\u103e\u102d\u101e\u102d\u1015\u1039\u1015\u1036\u1015\u100a\u102c\u101b\u103e\u1004\u103a\u1021\u1001\u103b\u102d\u102f\u1037\u101e\u100a\u103a\u101b\u103e\u102d\u1014\u103e\u1004\u1037\u103a\u1015\u103c\u102e\u1038\u101e\u102c\u1038\u1015\u103c\u1014\u103a\u101c\u100a\u103a\u1014\u1031\u101b\u102c\u1001\u103b\u1011\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u1005\u102d\u1010\u103a\u1000\u1030\u1038\u1000\u102d\u102f\u1021\u101c\u103d\u1014\u103a\u1005\u102d\u1010\u103a\u101d\u1004\u103a\u1005\u102c\u1038\u1014\u1031\u1000\u103c\u101e\u100a\u103a\u104b \u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1014\u103e\u1004\u1037\u103a\u1021\u1001\u103c\u102c\u1038\u1010\u102e\u1018\u102e\u101b\u1031\u102c\u1002\u102b\u1000\u1032\u1037\u101e\u102d\u102f\u1037\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u104e\u1004\u103a\u1038\u1010\u102d\u102f\u1037\u101e\u100a\u103a\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038 coronavirus \u1021\u102c\u1038\u101a\u102c\u101a\u102e\u1001\u102f\u1001\u1036\u1014\u102d\u102f\u1004\u103a\u1019\u103e\u102f\u101b\u103e\u102d\u1019\u101b\u103e\u102d\u101e\u102d\u101b\u1014\u103a\u104b \u101b\u102f\u101b\u103e\u102c\u1038\u101c\u1030\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u101e\u102f\u1010\u1031\u101e\u1014\u1014\u103e\u1004\u1037\u103a\u1015\u1010\u103a\u101e\u1000\u103a\u1015\u103c\u102e\u1038\u101b\u103e\u100a\u103a\u101c\u103b\u102c\u1038\u101e\u1031\u102c\u101e\u1019\u102d\u102f\u1004\u103a\u1038\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1000\u102d\u102f\u101c\u1031\u1037\u101c\u102c\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u104e\u1004\u103a\u1038\u1010\u102d\u102f\u1037\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u101b\u1030\u1038\u1000\u103c\u1031\u102c\u1004\u103a\u1000\u103c\u1031\u102c\u1004\u103a\u101e\u102d\u1015\u1039\u1015\u1036\u1015\u100a\u102c\u101b\u103e\u1004\u103a\u1019\u103b\u102c\u1038\u1021\u1016\u103c\u1005\u103a\u1019\u1011\u102e\u1019\u1032\u1037\u1019\u103c\u1004\u103a\u1015\u103c\u102f\u1001\u1036\u101b\u101e\u100a\u1037\u103a\u101e\u102f\u1010\u1031\u101e\u102e\u1019\u103b\u102c\u1038\u101c\u100a\u103a\u1038\u1015\u102b \u1040 \u1004\u103a\u101e\u100a\u103a\u104b \n \n \u1000\u103b\u103d\u1019\u103a\u1038\u1000\u103b\u1004\u103a\u101e\u1030\u1019\u103b\u102c\u1038 \u1024\u1021\u1000\u103c\u1036\u1025\u102c\u100f\u103a\u101e\u100a\u103a\u1021\u1001\u103c\u102c\u1038\u1021\u1006\u102d\u102f\u1015\u103c\u102f\u1011\u102c\u1038\u101e\u100a\u1037\u103a\u1000\u1030\u1038\u1005\u1000\u103a\u101b\u1031\u102c\u1002\u102b\u1000\u102d\u102f\u1010\u102d\u102f\u1000\u103a\u1016\u103b\u1000\u103a\u101b\u1014\u103a\u1014\u100a\u103a\u1038\u101c\u1019\u103a\u1038\u1019\u103b\u102c\u1038\u1014\u100a\u103a\u1038\u1010\u1030\u101e\u1010\u102d\u1000\u103c\u102e\u1038\u1005\u103d\u102c\u1016\u103c\u1004\u1037\u103a\u1001\u103b\u1009\u103a\u1038\u1000\u1015\u103a\u101b\u1019\u100a\u103a\u101f\u102f\u1021\u1000\u103c\u1036\u1015\u1031\u1038\u101e\u100a\u103a\u104b \n \n\u201c \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u1010\u102c\u1000\u1015\u102d\u102f\u1000\u1031\u102c\u1004\u103a\u1038\u1010\u101a\u103a\u104b \u101e\u1010\u103a\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1019\u103e\u1010\u103a\u1000\u102d\u102f\u101a\u103a\u1001\u1036\u1005\u103d\u1019\u103a\u1038\u1021\u102c\u1038\u1000\u102d\u102f\u1016\u103c\u1005\u103a\u1015\u1031\u102b\u103a\u1005\u1031\u1010\u101a\u103a\u201d \u101f\u102f Pennsylvania \u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1019\u103e\u1015\u1032\u101b\u101a\u103a\u101c\u103a\u1019\u1014\u103a\u1006\u1031\u1038\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1019\u103e\u1015\u102b\u1019\u1031\u102c\u1000\u1039\u1001\u101b\u102d\u102f\u1010\u102c\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1014\u103e\u1004\u1037\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1015\u1030\u1038\u1010\u103d\u1032\u1010\u102e\u1011\u103d\u1004\u103a\u101e\u1030\u1012\u1031\u102b\u1000\u103a\u1010\u102c\u1015\u1031\u102b\u101c\u103a\u1021\u1031\u102c\u1037\u1016\u103a\u1000\u1010\u101a\u103a\u101c\u102e\u1016\u102f\u1014\u103a\u1038\u1016\u103c\u1004\u1037\u103a\u1021\u1004\u103a\u1010\u102c\u1017\u103b\u1030\u1038\u1010\u1005\u103a\u1001\u102f\u1010\u103d\u1004\u103a\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1015\u103c\u1014\u103a\u101c\u100a\u103a\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103e\u101b\u101b\u103e\u102d\u101e\u1031\u102c\u1019\u100a\u103a\u101e\u100a\u1037\u103a\u1021\u1000\u103b\u102d\u102f\u1038\u1000\u103b\u1031\u1038\u1007\u1030\u1038\u1000\u102d\u102f\u1019\u1006\u102d\u102f\u1021\u1036\u101d\u1004\u103a\u1001\u103d\u1004\u103a\u1000\u103b\u1016\u103c\u1005\u103a\u1005\u1031\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1014\u103e\u1004\u1037\u103a\u1014\u103e\u102d\u102f\u1004\u103a\u1038\u101a\u103e\u1009\u103a\u101c\u103b\u103e\u1004\u103a\u101e\u1000\u103a\u1010\u1019\u103a\u1038\u1010\u102d\u102f\u104b \u1019\u1015\u103c\u100a\u1037\u103a\u1005\u102f\u1036\u1015\u102b\u101f\u102f\u101e\u1030\u1000\u1015\u103c\u1031\u102c\u101e\u100a\u103a\u104b \n \n \u101e\u102d\u102f\u1037\u1010\u102d\u102f\u1004\u103a\u1012\u1031\u102b\u1000\u103a\u1010\u102c\u101b\u1031\u102c\u1018\u1010\u103a\u1002\u101a\u103a\u101c\u102d\u102f\u1000 Coronavirus \u1006\u1014\u1037\u103a\u1000\u103b\u1004\u103a\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u101b\u102c\u1019\u103e\u102c \u1026\u1038 \u1006\u1031\u102c\u1004\u103a\u101e\u1030\u1000\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1015\u103c\u1014\u103a\u101c\u100a\u103a\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u1001\u103c\u1004\u103a\u1038\u101e\u100a\u103a\u201c \u101b\u1031\u102c\u1002\u102b\u1000\u102f\u101e\u1019\u103e\u102f\u104f\u1021\u1015\u1030\u1006\u102f\u1036\u1038\u1012\u1031\u101e\u1010\u1005\u103a\u1001\u102f\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u201d \u101f\u102f\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u101e\u100a\u103a\u1010\u1005\u103a\u101c\u101e\u102d\u102f\u1037\u1019\u101f\u102f\u1010\u103a\u1010\u1005\u103a\u101c\u1001\u1014\u1037\u103a\u101e\u102c\u1000\u102d\u102f\u101a\u103a\u1001\u1036\u1005\u103d\u1019\u103a\u1038\u1021\u102c\u1038\u1000\u102d\u102f\u1015\u1031\u1038\u1021\u1015\u103a\u101c\u103b\u103e\u1004\u103a\u1015\u1004\u103a\u104e\u1004\u103a\u1038\u101e\u100a\u103a\u101e\u1004\u1037\u103a\u1000\u102d\u102f\u1010\u1005\u103a\u101f\u102f\u1014\u103a\u1011\u102d\u102f\u1038\u1000\u103b\u1031\u102c\u103a\u101c\u103d\u103e\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u1015\u103c\u102e\u1038\u101c\u1030\u1019\u103b\u102c\u1038\u1005\u103d\u102c\u1000\u102d\u102f\u1000\u101a\u103a\u1010\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u101c\u102d\u1019\u1037\u103a\u1019\u100a\u103a\u101f\u102f Maryland \u1006\u1031\u1038\u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u101b\u103e\u102d\u101c\u1030\u1037\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u100c\u102c\u1014\u100a\u103d\u103e\u1014\u103a\u1000\u103c\u102c\u1038\u101b\u1031\u1038\u1019\u103e\u1030\u1038 Gallo \u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u104b \n \n \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1021\u1014\u1039\u1010\u101b\u102c\u101a\u103a\u1019\u103b\u102c\u1038\u101b\u103e\u102d\u101e\u100a\u103a\u104b \n \n \u1018\u102e\u101c\u102e\u101a\u1036\u1014\u103e\u1004\u1037\u103a\u1001\u103b\u102e\u101e\u1031\u102c\u101c\u1030\u1019\u103b\u102c\u1038\u101e\u100a\u103a poliovirus \u1000\u102d\u102f\u1010\u102d\u102f\u1000\u103a\u101b\u102d\u102f\u1000\u103a\u1011\u102f\u1010\u103a\u101c\u103d\u103e\u1004\u1037\u103a\u1001\u1032\u1037\u1000\u103c\u101e\u100a\u103a\u104b \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038, \u1014\u102e\u1038\u1015\u102b\u1038\u101b\u1031\u102c\u1002\u102b\u1015\u1015\u103b\u1031\u102c\u1000\u103a\u101b\u1031\u1038\u104b \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1021\u101c\u103d\u1014\u103a\u101b\u103e\u102c\u1038\u1015\u102b\u1038\u101e\u1031\u102c\u1016\u103c\u1005\u103a\u101b\u1015\u103a\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1010\u103d\u1004\u103a\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u101e\u1031\u102c\u1021\u102c\u1038\u1014\u100a\u103a\u1038\u101e\u1031\u102c\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u101e\u100a\u103a\u1015\u102d\u102f\u1019\u102d\u102f\u1021\u1014\u1039\u1010\u101b\u102c\u101a\u103a\u101b\u103e\u102d\u101e\u1031\u102c\u1015\u102f\u1036\u1005\u1036\u101e\u102d\u102f\u1037\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1016\u103c\u1005\u103a\u1015\u103d\u102c\u1038\u1005\u1031\u1015\u103c\u102e\u1038\u1021\u1001\u103c\u102c\u1038\u101c\u1030\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1000\u1030\u1038\u1005\u1000\u103a\u1005\u1031\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u104b \u101e\u103d\u1000\u103a\u1001\u103b\u102c\u1015\u102b\u1012\u1016\u103c\u1005\u103a\u1014\u102d\u102f\u1004\u103a\u1001\u103c\u1031\u1000\u102d\u102f\u1001\u1014\u1037\u103a\u1019\u103e\u1014\u103a\u1038\u1001\u103c\u1031\u1021\u102c\u1038\u1016\u103c\u1004\u1037\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038 \u1042.\u1047 \u101e\u1014\u103a\u1038\u1019\u103e \u1041 \u1010\u103d\u1004\u103a\u1001\u1014\u1037\u103a\u1019\u103e\u1014\u103a\u1038\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u104b \n \n \u1011\u102d\u102f\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1015\u103c\u100a\u103a\u101e\u1030\u1037\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1021\u1016\u103d\u1032\u1037\u1019\u103b\u102c\u1038\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1012\u1031\u101e\u1010\u1005\u103a\u1001\u102f\u101e\u100a\u103a\u101e\u1018\u102c\u101d\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102d\u102f\u1016\u101a\u103a\u101b\u103e\u102c\u1038\u101e\u100a\u103a\u1014\u103e\u1004\u1037\u103a\u1010\u1015\u103c\u102d\u102f\u1004\u103a\u1014\u1000\u103a\u104a \u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c\u1021\u1014\u103e\u1005\u103a \u1042\u1040 \u1000\u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1000\u1015\u103c\u102f\u1001\u1032\u1037\u101e\u100a\u1037\u103a\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1015\u102b\u1038\u1005\u1015\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1015\u102f\u1036\u1019\u103e\u1014\u103a\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f\u101b\u1015\u103a\u1010\u1014\u1037\u103a\u1015\u102b\u104b \n \n \u101a\u1001\u102f\u101c\u1021\u1019\u103b\u102d\u102f\u1038\u101e\u102c\u1038\u1013\u102c\u1010\u103a\u1019\u1010\u100a\u1037\u103a\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1000\u1030\u1038\u1005\u1000\u103a\u101b\u1031\u102c\u1002\u102b\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1021\u1004\u103a\u1005\u1010\u102e\u1000\u103b\u102f\u1000\u101c\u1031\u1037\u101c\u102c\u1019\u103e\u102f\u1010\u1005\u103a\u1001\u102f\u1014\u103e\u1031\u102c\u1004\u1037\u103a\u1014\u103e\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1002\u101a\u103a\u101c\u102d\u102f\u104f\u100c\u102c\u1014\u104a Cleveland Clinic\u104a Buffalo \u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1014\u103e\u1004\u1037\u103a Roswell Park \u1018\u1000\u103a\u1005\u102f\u1036\u1000\u1004\u103a\u1006\u102c\u1005\u1004\u103a\u1010\u102c\u1010\u102d\u102f\u1037\u1000\u1012\u102e\u1007\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1011\u102c\u1038\u1015\u103c\u102e\u1038\u101e\u1000\u103a\u101b\u103e\u102d\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u104f coronavirus \u1021\u102c\u1038\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u101c\u102f\u1015\u103a\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1018\u102c\u101e\u102c\u101b\u1015\u103a\u1019\u103b\u102c\u1038\u1021\u1014\u1031\u1014\u103e\u1004\u1037\u103a\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u101b\u1014\u103a\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u101b\u1014\u103a\u104b \u101c\u1031\u1037\u101c\u102c\u1019\u103e\u102f\u1010\u103d\u1004\u103a\u1021\u1000\u103b\u103d\u1019\u103a\u1038\u1010\u101d\u1004\u103a\u101b\u103e\u102d\u101e\u100a\u1037\u103a\u101e\u102f\u1010\u1031\u101e\u102e\u1019\u103b\u102c\u1038\u1000\u1021\u1031\u1021\u102d\u102f\u1004\u103a\u1012\u102e\u1021\u1000\u103a\u1005\u103a\u101e\u100a\u103a\u101c\u102f\u1036\u1001\u103c\u102f\u1036\u101b\u1031\u1038\u1021\u1010\u103d\u1000\u103a\u1005\u102d\u102f\u1038\u101b\u102d\u1019\u103a\u1015\u1030\u1015\u1014\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1011\u102f\u1010\u103a\u1016\u1031\u102c\u103a\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b NIAID \u104f\u1005\u102c\u1014\u101a\u103a\u1007\u1004\u103a\u1038\u101b\u102f\u1036\u1038\u1000\u1019\u1030\u1019\u103e\u1010\u103a\u1001\u103b\u1000\u103a\u1015\u1031\u1038\u101b\u1014\u103a\u1004\u103c\u1004\u103a\u1038\u1006\u1014\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1021\u1001\u103c\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u1019\u103e\u102c\u101b\u103e\u1031\u1037\u101e\u102d\u102f\u1037\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u1014\u1031\u101e\u100a\u103a\u104b \u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1014\u103e\u1004\u1037\u103a\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u101b\u102f\u101b\u103e\u102c\u1038\u1010\u103d\u1004\u103a\u1005\u1010\u1004\u103a\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u1021\u102e\u101b\u1014\u103a\u1014\u103e\u1004\u1037\u103a\u1002\u102e\u1014\u102e - \u1018\u102e\u1005\u101d\u102b\u1010\u102d\u102f\u1037\u1010\u103d\u1004\u103a\u1005\u102e\u1005\u1009\u103a\u1011\u102c\u1038\u101e\u100a\u103a\u104b \n \n Coronavirus \u1021\u1010\u103d\u1000\u103a\u1010\u102d\u1000\u103b\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u101e\u100a\u103a\u1001\u102f\u1001\u1036\u1021\u102c\u1038\u1000\u102d\u102f\u101c\u1031\u1037\u1000\u103b\u1004\u1037\u103a\u1015\u1031\u1038\u1019\u100a\u1037\u103a\u1006\u1031\u1038\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1011\u102d\u102f\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1015\u102d\u102f\u1038\u1000\u102d\u102f\u1021\u1011\u1030\u1038\u1015\u1005\u103a\u1019\u103e\u1010\u103a\u1011\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u1037\u103a\u1021\u1015\u103c\u1004\u103a\u1000\u1019\u1039\u1018\u102c\u1010\u1005\u103a\u101d\u103e\u1019\u103a\u1038\u101c\u102f\u1036\u1038\u1010\u103d\u1004\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u101b\u1014\u103a\u101c\u103b\u103e\u1031\u102c\u1000\u103a\u1011\u102c\u1038\u101e\u1030 \u1041\u1042\u1045 \u1026\u1038 \u1000\u103b\u1031\u102c\u103a\u101e\u100a\u103a\u1016\u103d\u1036\u1037\u1016\u103c\u102d\u102f\u1038\u1006\u1032\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \n \n Repurposed vaccines \u101e\u100a\u103a\u1006\u1014\u1037\u103a\u1000\u103b\u1004\u103a\u1018\u1000\u103a\u1021\u102c\u1038\u1016\u103c\u1004\u1037\u103a\u1021\u101e\u1000\u103a\u101b\u103e\u1004\u103a\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038\u1021\u102c\u1038\u1014\u100a\u103a\u1038\u1014\u1031\u101e\u100a\u1037\u103a\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u101e\u100a\u103a\u104b \u101b\u1031\u102c\u1002\u102b\u1015\u102d\u102f\u1038\u1019\u103b\u102c\u1038\u1010\u102d\u102f\u1000\u103a\u1016\u103b\u1000\u103a\u101b\u1014\u103a\u1015\u1004\u103a\u1001\u102f\u1001\u1036\u1021\u102c\u1038\u1005\u1014\u1005\u103a\u1000\u102d\u102f\u1015\u102d\u102f\u1019\u102d\u102f\u1000\u103b\u101a\u103a\u1015\u103c\u1014\u1037\u103a\u1005\u103d\u102c\u101c\u103e\u102f\u1036\u1037\u1006\u1031\u102c\u103a\u101b\u1014\u103a\u1018\u1000\u103a\u1010\u102e\u1038\u101b\u102e\u1038\u101a\u102c\u1038\u1019\u103b\u102c\u1038\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038\u101a\u102c\u101a\u102e\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \n \n \u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1012\u1031\u102b\u1000\u103a\u1010\u102c\u1002\u103b\u103d\u1014\u103a\u1014\u1015\u103a\u1005\u103a\u1000\u1010\u102e\u1011\u103d\u1004\u103a\u101e\u100a\u103a\u104b "\u1019\u101c\u103e\u102f\u1015\u103a\u1019\u101b\u103e\u102c\u1038" \u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a - \u1021\u101e\u1010\u103a\u1001\u1036\u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u104f\u1021\u1019\u103e\u102f\u1014\u103a\u104b \u104e\u1004\u103a\u1038\u1006\u1031\u1038\u1000\u102d\u102f\u1011\u102d\u102f\u1038\u101e\u103d\u1004\u103a\u1038\u101b\u101e\u100a\u103a\u1019\u103e\u102c\u1006\u1004\u103a\u1038\u101b\u1032\u101e\u1031\u102c\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u101b\u1014\u103a\u1021\u101f\u1014\u1037\u103a\u1021\u1010\u102c\u1038\u1010\u1005\u103a\u1001\u102f\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \n \n \u1041\u1049\u1045\u1045 \u1001\u102f\u1014\u103e\u1005\u103a\u1010\u103d\u1004\u103a\u1011\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1000\u103b\u101a\u103a\u1015\u103c\u1014\u1037\u103a\u1005\u103d\u102c\u1005\u1010\u1004\u103a\u1019\u102d\u1010\u103a\u1006\u1000\u103a\u101e\u1031\u102c\u1021\u1001\u102b\u1012\u1031\u102b\u1000\u103a\u1010\u102c\u1021\u1032\u101c\u103a\u1018\u1010\u103a\u1006\u1015\u103a\u1018\u1004\u103a\u101e\u100a\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1014\u103e\u102f\u1010\u103a\u1016\u103c\u1004\u1037\u103a\u1001\u1031\u102b\u103a\u1006\u1031\u102c\u1004\u103a\u101e\u103d\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u1037\u103a\u1021\u101e\u1000\u103a\u101b\u103e\u1004\u103a\u1015\u1031\u1019\u101a\u1037\u103a attenuated poliovirus \u104b \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1015\u103c\u100a\u103a\u1011\u1031\u102c\u1004\u103a\u1005\u102f\u101b\u103e\u102d Salk \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u1014\u1031\u1015\u103c\u102e\u1038\u1021\u102c\u100f\u102c\u1015\u102d\u102f\u1004\u103a\u1019\u103b\u102c\u1038\u101e\u100a\u103a Live virus \u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u101b\u1014\u103a\u1021\u1014\u1039\u1010\u101b\u102c\u101a\u103a\u101b\u103e\u102d\u101e\u100a\u103a\u1000\u102d\u102f\u1010\u103d\u1014\u1037\u103a\u1006\u102f\u1010\u103a\u1014\u1031\u1000\u103c\u101e\u100a\u103a\u104b \n \n Sabin \u1000 \u1006\u102d\u102f\u1017\u102e\u101a\u1000\u103a\u101a\u1030\u1014\u102e\u101a\u1036\u101b\u103e\u102d\u101c\u1000\u103a\u1011\u1015\u103a\u1011\u102c\u1038\u101e\u1031\u102c\u1007\u102e\u101d\u1017\u1031\u1012\u1015\u100a\u102c\u101b\u103e\u1004\u103a\u1010\u1005\u103a \u1026\u1038 \u1021\u102c\u1038 attenuated \u1017\u102d\u102f\u1004\u103a\u1038\u101b\u1015\u103a\u1005\u103a\u1015\u102d\u102f\u1038\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038 \u1043 \u1019\u103b\u102d\u102f\u1038\u104a \u101a\u1001\u102f\u101e\u1030\u104f\u1021\u1019\u100a\u103a\u1016\u103c\u1004\u1037\u103a\u1015\u102d\u102f\u101c\u102e\u101a\u102d\u102f\u101e\u102f\u1010\u1031\u101e\u1014\u100c\u102c\u1014\u1010\u100a\u103a\u1011\u1031\u102c\u1004\u103a\u101e\u1030\u1012\u1031\u102b\u1000\u103a\u1010\u102c Mikhail Chumakov \u1014\u103e\u1004\u1037\u103a Voroshilova \u1010\u102d\u102f\u1037\u1000\u102d\u102f\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n Mikhail Chumakov \u101e\u100a\u103a\u1019\u102d\u1019\u102d\u1000\u102d\u102f\u101a\u103a\u1000\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u1015\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104a \u101e\u102d\u102f\u1037\u101e\u1031\u102c\u103a\u1000\u101c\u1031\u1038\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1021\u1013\u102d\u1000\u101b\u100a\u103a\u101b\u103d\u101a\u103a\u101e\u100a\u1037\u103a\u1006\u1031\u1038\u101d\u102b\u1038\u101e\u100a\u103a\u1000\u101c\u1031\u1038\u101e\u1030\u1004\u101a\u103a\u1005\u1005\u103a\u1006\u1031\u1038\u101b\u1014\u103a\u101c\u102d\u102f\u1021\u1015\u103a\u101e\u100a\u1037\u103a\u1021\u1010\u103d\u1000\u103a\u101e\u1030\u1014\u103e\u1004\u1037\u103a Voroshilova \u101e\u100a\u103a\u101e\u1030\u104f\u101e\u102c\u1038\u101e\u102f\u1036\u1038\u101a\u1031\u102c\u1000\u103a\u1014\u103e\u1004\u1037\u103a\u1010\u1030\u1019\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1010\u1030\u1019\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u1015\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/jP3nzsmkVyhzedrLiCheCBYQQ1ERCls7jhCWgKLf.jpeg","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/8iGtSIXCCQPpWEsmFmIxzeqXDxUuAEWMX7nzOCv5.mp4","author":null,"author_image":"","status":1,"created_at":"Jun 25, 2020","updated_at":"Jun 25, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/81"},{"id":16,"title_bn":"\u099c\u09be\u09ae\u09be\u09b2\u09aa\u09c1\u09b0\u09c7 \u09af\u09c1\u09ac \u0993 \u0995\u09c8\u09b6\u09cb\u09b0\u0995\u09be\u09b2\u09bf\u09a8 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u09aa\u09b0\u09bf\u099a\u09b0\u09cd\u09af\u09be \u09ac\u09bf\u09b7\u09df\u0995 \u09aa\u09b0\u09be\u09ae\u09b0\u09cd\u09b6 \u09b8\u09ad\u09be","title_en":"Youth and adolescent primary health care counseling meeting in Jamalpur","title_my":"Jamalpur \u1021\u1010\u103d\u1000\u103a\u101c\u1030\u1004\u101a\u103a\u1014\u103e\u1004\u1037\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1021\u1000\u103c\u1036\u1015\u1031\u1038\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038","subtitle_bn":"\u0995\u09bf\u09b6\u09cb\u09b0, \u0995\u09bf\u09b6\u09cb\u09b0\u09c0 \u0993 \u09af\u09c1\u09ac\u0995, \u09af\u09c1\u09ac\u09a4\u09c0\u09a6\u09c7\u09b0 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u09b8\u09c7\u09ac\u09be \u0997\u09cd\u09b0\u09b9\u09a3\u09c7 \u0985\u09b8\u09c1\u09ac\u09bf\u09a7\u09be\u09b8\u09ae\u09c2\u09b9 \u098f\u09ac\u0982 \u09a4\u09be \u0989\u09a4\u09cd\u09a4\u09b0\u09a3\u09c7 \u0995\u09b0\u09a3\u09c0\u09df \u09b6\u09c0\u09b0\u09cd\u09b7\u0995 \u098f\u0995 \u09aa\u09b0\u09be\u09ae\u09b0\u09cd\u09b6 \u09b8\u09ad\u09be \u09ea \u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0 \u099c\u09be\u09ae\u09be\u09b2\u09aa\u09c1\u09b0\u09c7 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4 \u09b9\u09df\u0964","subtitle_en":"A consultation meeting on adolescents, adolescents and youths, difficulties in accessing primary health care for young women and how to overcome it was held on 7 September in Jamalpur.","subtitle_my":"\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u104a \u1019\u103c\u102e\u1038\u1000\u1031\u102c\u1004\u103a\u1015\u1031\u102b\u1000\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u101c\u1030\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1010\u102d\u102f\u1004\u103a\u1015\u1004\u103a\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1019\u103e\u102f\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u104a \u1021\u1019\u103b\u102d\u102f\u1038\u101e\u1019\u102e\u1038\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1000\u102d\u102f\u101b\u101a\u1030\u101b\u102c\u1010\u103d\u1004\u103a\u1021\u1001\u1000\u103a\u1021\u1001\u1032\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u104e\u1004\u103a\u1038\u1000\u102d\u102f\u1019\u100a\u103a\u101e\u102d\u102f\u1037\u1000\u103b\u1031\u102c\u103a\u101c\u103d\u103e\u102c\u1038\u1014\u102d\u102f\u1004\u103a\u1019\u100a\u103a\u1000\u102d\u102f\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c \u1047 \u101b\u1000\u103a\u1010\u103d\u1004\u103a Jamalpur \u1010\u103d\u1004\u103a\u1000\u103b\u1004\u103a\u1038\u1015\u1001\u1032\u1037\u101e\u100a\u103a\u104b","body_bn":"\u099c\u09be\u09ae\u09be\u09b2\u09aa\u09c1\u09b0 \u09b8\u09bf\u09ad\u09bf\u09b2 \u09b8\u09be\u09b0\u09cd\u099c\u09a8 \u0995\u09be\u09b0\u09cd\u09af\u09be\u09b2\u09df\u09c7\u09b0 \u09ac\u09c0\u09b0 \u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09cb\u09a6\u09cd\u09a7\u09be \u09a1\u09be\u0995\u09cd\u09a4\u09be\u09b0 \u09a8\u099c\u09b0\u09c1\u09b2 \u0987\u09b8\u09b2\u09be\u09ae \u09b8\u09ad\u09be\u0995\u0995\u09cd\u09b7\u09c7 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4 \u09b8\u09ad\u09be\u09df \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u0985\u09a4\u09bf\u09a5\u09bf \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4 \u099b\u09bf\u09b2\u09c7\u09a8 \u0985\u09a4\u09bf\u09b0\u09bf\u0995\u09cd\u09a4 \u099c\u09c7\u09b2\u09be \u09aa\u09cd\u09b0\u09b6\u09be\u09b8\u0995 (\u09b0\u09be\u099c\u09b8\u09cd\u09ac) \u09ae\u09cb. \u09b2\u09cb\u0995\u09ae\u09be\u09a8 \u09b9\u09cb\u09b8\u09c7\u09a8\u0964\r\n\r\n\u099c\u09c7\u09b2\u09be \u09aa\u09b0\u09bf\u09ac\u09be\u09b0 \u09aa\u09b0\u09bf\u0995\u09b2\u09cd\u09aa\u09a8\u09be\u09b0 \u0989\u09aa\u09aa\u09b0\u09bf\u099a\u09be\u09b2\u0995 \u09a8\u09bf\u09b0\u099e\u09cd\u099c\u09a8 \u09ac\u09a8\u09cd\u09a7\u09c1 \u09a6\u09be\u09ae \u098f\u09b0 \u09b8\u09ad\u09be\u09aa\u09a4\u09bf\u09a4\u09cd\u09ac\u09c7 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4 \u09b8\u09ad\u09be\u09df \u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0986\u09b2\u09cb\u099a\u09a8\u09be\u09df \u0985\u0982\u09b6 \u09a8\u09c7\u09a8 \u09b8\u09bf\u09ad\u09bf\u09b2 \u09b8\u09be\u09b0\u09cd\u099c\u09a8 \u099a\u09bf\u0995\u09bf\u09ce\u09b8\u0995 \u0997\u09cc\u09a4\u09ae \u09b0\u09be\u09df, \u099c\u09c7\u09b2\u09be \u099c\u09cd\u09af\u09c7\u09b7\u09cd\u09a0 \u09a4\u09a5\u09cd\u09af \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09a8\u09c1\u09b0\u09c1\u09a8\u09cd\u09a8\u09ac\u09c0 \u0996\u09a8\u09cd\u09a6\u0995\u09be\u09b0,\r\n\r\n\u099c\u09c7\u09b2\u09be \u09af\u09c1\u09ac \u0989\u09a8\u09cd\u09a8\u09df\u09a8 \u0985\u09a7\u09bf\u09a6\u09aa\u09cd\u09a4\u09b0\u09c7\u09b0 \u0989\u09aa\u09aa\u09b0\u09bf\u099a\u09be\u09b2\u0995 \u098f\u09a8\u09be\u09df\u09c7\u09a4 \u0995\u09b0\u09bf\u09ae, \u099c\u09c7\u09b2\u09be \u09b8\u09ae\u09be\u099c\u09b8\u09c7\u09ac\u09be \u0995\u09be\u09b0\u09cd\u09af\u09be\u09b2\u09df\u09c7\u09b0 \u0989\u09aa\u09aa\u09b0\u09bf\u099a\u09be\u09b2\u0995 \u0997\u09cb\u09b2\u09be\u09ae \u09ae\u09cb\u09b8\u09cd\u09a4\u09ab\u09be, \u099c\u09c7\u09b2\u09be \u09ae\u09b9\u09bf\u09b2\u09be \u09ac\u09bf\u09b7\u09df\u0995 \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09ae\u099b\u09bf\u09b0\u09a8 \u09a8\u09c7\u099b\u09be,\r\n\r\n\u0989\u09a8\u09cd\u09a8\u09df\u09a8 \u09b8\u0982\u0998\u09c7\u09b0 \u099c\u09c7\u09b2\u09be \u09ac\u09cd\u09af\u09ac\u09b8\u09cd\u09a5\u09be\u09aa\u0995 \u09b2\u09bf\u099f\u09a8 \u09b8\u09b0\u0995\u09be\u09b0 \u09aa\u09cd\u09b0\u09ae\u09c1\u0996\u0964 \u09b8\u09ad\u09be\u09df \u09a7\u09be\u09b0\u09a3\u09be\u09aa\u09a4\u09cd\u09b0 \u0989\u09aa\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09c7\u09a8 \u0987\u0989\u09a8\u09bf\u09b8\u09c7\u09ab \u09aa\u09cd\u09b0\u09a4\u09bf\u09a8\u09bf\u09a7\u09bf \u099a\u09bf\u0995\u09bf\u09ce\u09b8\u0995 \u09ae\u09cb. \u0986\u09b2\u09ae\u0997\u09c0\u09b0\u0964\r\n\r\n\u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09be\u09a8\u09c7 \u099c\u09c7\u09b2\u09be\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c0\u09df \u09aa\u09cd\u09b0\u09a7\u09be\u09a8, \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u098f\u09a8\u099c\u09bf\u0993 \u09aa\u09cd\u09b0\u09a4\u09bf\u09a8\u09bf\u09a7\u09bf, \u0995\u09bf\u09b6\u09cb\u09b0, \u0995\u09bf\u09b6\u09cb\u09b0\u09c0, \u09af\u09c1\u09ac\u0995, \u09af\u09c1\u09ac\u09a4\u09c0\u09b8\u09b9 \u0985\u09b0\u09cd\u09a7\u09b6\u09a4\u09be\u09a7\u09bf\u0995 \u09aa\u09cd\u09b0\u09a4\u09bf\u09a8\u09bf\u09a7\u09bf \u0985\u0982\u09b6 \u09a8\u09c7\u09a8\u0964\r\n\r\n\u09a6\u09b2\u09c0\u09df \u0986\u09b2\u09cb\u099a\u09a8\u09be\u09df \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af\u09b8\u09c7\u09ac\u09be \u09aa\u09cd\u09b0\u09be\u09aa\u09cd\u09af\u09a4\u09be, \u0985\u09ad\u09bf\u0997\u09ae\u09cd\u09af\u09a4\u09be, \u09b8\u09ae\u09b8\u09cd\u09af\u09be, \u09b8\u09ae\u09be\u09a7\u09be\u09a8\u09c7\u09b0 \u0989\u09aa\u09be\u09df, \u0995\u09ae\u09bf\u0989\u09a8\u09bf\u099f\u09bf\u09b0 \u0995\u09b0\u09a3\u09c0\u09df, \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u0993 \u09aa\u09b0\u09bf\u09ac\u09be\u09b0 \u09aa\u09b0\u09bf\u0995\u09b2\u09cd\u09aa\u09a8\u09be \u09ac\u09bf\u09ad\u09be\u0997\u09c7\u09b0 \u0995\u09b0\u09a3\u09c0\u09df\u09b8\u09b9 \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u09ac\u09bf\u09b7\u09df\u09ad\u09bf\u09a4\u09cd\u09a4\u09bf\u0995 \u09ac\u0995\u09cd\u09a4\u09ac\u09cd\u09af \u0989\u09aa\u09b8\u09cd\u09a5\u09be\u09aa\u09bf\u09a4 \u09b9\u09df\u0964\r\n\r\n\u09b8\u09ad\u09be \u09b8\u09c2\u09a4\u09cd\u09b0 \u099c\u09be\u09a8\u09be\u09df, \u098f \u09b8\u0982\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4 \u0997\u09a0\u09bf\u09a4 \u09aa\u09cd\u09b0\u09be\u09a5\u09ae\u09bf\u0995 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u09aa\u09b0\u09bf\u099a\u09b0\u09cd\u09af\u09be \u0995\u09ae\u09bf\u099f\u09bf \u2018\u0986\u09b8\u09cd\u09a4\u09be\u09a8\u09be\u2019 \u098f\u09b0 \u099a\u09be\u09b0\u099c\u09a8 \u09b8\u09a6\u09b8\u09cd\u09af \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7\u09b0 \u098f \u09ac\u09bf\u09b7\u09df\u0995 \u0995\u09be\u09b0\u09cd\u09af\u0995\u09cd\u09b0\u09ae \u0989\u09aa\u09b8\u09cd\u09a5\u09be\u09aa\u09a8\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u0985\u099a\u09bf\u09b0\u09c7\u0987 \u0995\u09be\u099c\u09be\u0995\u09be\u09b8\u09cd\u09a5\u09be\u09a8\u09c7\u09b0 \u09af\u09be\u09ac\u09be\u09b0 \u09b8\u09c1\u09af\u09cb\u0997 \u09b9\u09ac\u09c7 \u09ac\u09b2\u09c7 \u099c\u09be\u09a8\u09be \u09af\u09be\u09df\u0964","body_en":"Additional Deputy Commissioner (Revenue) Md. Jamalpur Civil Surgeon's Office was the chief guest at the meeting held in the presence of the valiant freedom fighter Dr. Nazrul Islam. Civil Surgeon Dr. Gautam Roy, District Senior Information Officer, Nurunnabi Khandaker, among others attended the meeting chaired by District Family Planning Director Niranjan Friend Dost Dam, Lokman Hossain. \r\n \r\n Enayet Karim, Deputy Director of the District Youth Development Department, Ghulam Mostafa, Deputy Director of the District Social Services Office, is the District Women's Affairs Officer Mosheran Nesha, \r\n [ [:::::]] Development no Liton Sarkar's district manager. UNICEF representative doctor presented the remarks at the meeting. Alamgir. \r\n \r\n More than half the delegation including the department's head, various NGO representatives, adolescents, adolescents, youth, youth and women were present on the occasion. \r\n \r\n The group discussions presented a variety of topics including health care availability, accessibility, problems, ways to solve, community tasks, health and family planning departments. [[::::]] [[::: ::]] The meeting sources said that this was the primary health concern Ricarya committee \"Astana\" in the affairs of the country for the presentation of the four members will have the opportunity soon to kajakasthanera were reported.","body_my":"\u1014\u1031\u102c\u1000\u103a\u1011\u1015\u103a\u101c\u1000\u103a\u1011\u1031\u102c\u1000\u103a\u1000\u1031\u102c\u103a\u1019\u101b\u103e\u1004\u103a\u1014\u102c (\u1021\u1001\u103d\u1014\u103a) Md \u104b Jamalpur \u1019\u103c\u102d\u102f\u1037\u1001\u103d\u1032\u1005\u102d\u1010\u103a\u1006\u101b\u102c\u101d\u1014\u103a\u104f\u101b\u102f\u1036\u1038\u101e\u100a\u103a\u101b\u1032\u101b\u1004\u1037\u103a\u101e\u1031\u102c\u101c\u103d\u1010\u103a\u101c\u1015\u103a\u101b\u1031\u1038\u1010\u102d\u102f\u1000\u103a\u101c\u1031\u101a\u102c\u1009\u103a Dr. Nazrul Islam \u104f\u101b\u103e\u1031\u1037\u1019\u103e\u1031\u102c\u1000\u103a\u104c\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u101e\u1031\u102c\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u1010\u103d\u1004\u103a guest \u100a\u1037\u103a\u101e\u100a\u103a\u1010\u1031\u102c\u103a\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \u1019\u103c\u102d\u102f\u1037\u1015\u103c\u1001\u103d\u1032\u1005\u102d\u1010\u103a\u1006\u101b\u102c\u101d\u1014\u103a Dr. Gautam Roy\u104a \u1001\u101b\u102d\u102f\u1004\u103a\u1021\u1006\u1004\u1037\u103a\u1021\u1000\u103c\u102e\u1038\u1021\u1000\u1032\u1015\u103c\u1014\u103a\u1000\u103c\u102c\u1038\u101b\u1031\u1038\u1021\u101b\u102c\u101b\u103e\u102d\u104a Nurunnabi Khandaker \u101e\u100a\u103a Lokman Hossain \u104f\u1001\u101b\u102d\u102f\u1004\u103a\u1019\u102d\u101e\u102c\u1038\u1005\u102f\u1005\u102e\u1019\u1036\u1000\u102d\u1014\u103a\u1038\u100a\u103d\u103e\u1014\u103a\u1000\u103c\u102c\u1038\u101b\u1031\u1038\u1019\u103e\u1030\u1038 Niranjan Friend Dost Dam \u101e\u100a\u103a\u1025\u1000\u1039\u1000\u100c\u104f\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u101e\u102d\u102f\u1037\u1010\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \r\n \r\n \u1001\u101b\u102d\u102f\u1004\u103a\u101c\u1030\u1004\u101a\u103a\u1016\u103d\u1036\u1037\u1016\u103c\u102d\u102f\u1038\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u1019\u103e\u102f\u100c\u102c\u1014\u104f\u1012\u102f\u1010\u102d\u101a\u100a\u103d\u103e\u1014\u103a\u1000\u103c\u102c\u1038\u101b\u1031\u1038\u1019\u103e\u1030\u1038 Enayet Karim\u104a \u1001\u101b\u102d\u102f\u1004\u103a\u101c\u1030\u1019\u103e\u102f \u1040 \u1014\u103a\u1006\u1031\u102c\u1004\u103a\u1019\u103e\u102f\u101b\u102f\u1036\u1038\u104f\u1012\u102f\u1010\u102d\u101a\u100a\u103d\u103e\u1014\u103a\u1000\u103c\u102c\u1038\u101b\u1031\u1038\u1019\u103e\u1030\u1038 Ghulam Mostafa \u101e\u100a\u103a\u1001\u101b\u102d\u102f\u1004\u103a\u1021\u1019\u103b\u102d\u102f\u1038\u101e\u1019\u102e\u1038\u101b\u1031\u1038\u101b\u102c\u1021\u101b\u102c\u101b\u103e\u102d Mosheran Nesha\u104a \r\n [ [:::::]] \u1016\u103d\u1036\u1037\u1016\u103c\u102d\u102f\u1038\u1019\u103e\u102f\u1021\u1018\u101a\u103a\u101e\u1030\u1019\u103b\u103e\u1019 Liton Sarkar \u101b\u1032\u1037\u1001\u101b\u102d\u102f\u1004\u103a\u1019\u1014\u103a\u1014\u1031\u1002\u103b\u102c\u104b UNICEF \u1019\u103e\u1006\u101b\u102c \u1040 \u1014\u103a\u1000\u1024\u1019\u103e\u1010\u103a\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u101e\u102d\u102f\u1037\u1010\u1004\u103a\u1015\u103c\u1001\u1032\u1037\u101e\u100a\u103a\u104b Alamgir \u104b \r\n \r\n \u100c\u102c\u1014\u104f\u1021\u1000\u103c\u102e\u1038\u1021\u1000\u1032\u104a NGO \u1000\u102d\u102f\u101a\u103a\u1005\u102c\u1038\u101c\u103e\u101a\u103a\u1019\u103b\u102c\u1038\u104a \u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u104a \u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u104a \u101c\u1030\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u104a \u101c\u1030\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1021\u1019\u103b\u102d\u102f\u1038\u101e\u1019\u102e\u1038\u1019\u103b\u102c\u1038\u1015\u102b \u1040 \u1004\u103a\u101e\u100a\u1037\u103a\u1011\u1000\u103a\u101d\u1000\u103a\u1000\u103b\u1031\u102c\u103a\u1010\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \r\n \r\n \u1021\u102f\u1015\u103a\u1005\u102f\u101c\u102d\u102f\u1000\u103a\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u101b\u101b\u103e\u102d\u1019\u103e\u102f\u104a \u101c\u1000\u103a\u101c\u103e\u1019\u103a\u1038\u1019\u102e\u1014\u102d\u102f\u1004\u103a\u1019\u103e\u102f\u104a \u1015\u103cproblems\u1014\u102c\u1019\u103b\u102c\u1038\u104a \u1016\u103c\u1031\u101b\u103e\u1004\u103a\u1038\u1014\u102d\u102f\u1004\u103a\u1019\u100a\u1037\u103a\u1014\u100a\u103a\u1038\u101c\u1019\u103a\u1038\u1019\u103b\u102c\u1038\u104a \u101b\u1015\u103a\u101b\u103d\u102c\u104f\u101c\u102f\u1015\u103a\u1004\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u104a \u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1014\u103e\u1004\u1037\u103a\u1019\u102d\u101e\u102c\u1038\u1005\u102f\u1005\u102e\u1019\u1036\u1000\u102d\u1014\u103a\u1038\u100c\u102c\u1014\u1019\u103b\u102c\u1038\u1021\u1015\u102b\u1021 \u1040 \u1004\u103a\u1001\u1031\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1021\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102d\u102f\u1038\u1000\u102d\u102f\u1010\u1004\u103a\u1015\u103c\u1001\u1032\u1037\u101e\u100a\u103a\u104b [[::::]] [[::: ::]] \u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u104f\u101b\u1004\u103a\u1038\u1019\u103c\u1005\u103a\u1019\u103b\u102c\u1038\u1000\u104e\u1004\u103a\u1038\u101e\u100a\u103a\u1021\u1013\u102d\u1000\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1015\u103cconcern\u1014\u102c\u1016\u103c\u1005\u103a\u101e\u100a\u103a \u101c\u1031\u1038\u1015\u102b\u1038\u1021\u1016\u103d\u1032\u1037\u101d\u1004\u103a\u1019\u103b\u102c\u1038\u104f\u1010\u1004\u103a\u1006\u1000\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u104f\u1021\u101b\u1031\u1038\u1000\u102d\u1005\u1039\u1005\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a Ricarya \u1000\u1031\u102c\u103a\u1019\u1010\u102e\u1000 "Astana" \u1019\u1000\u103c\u102c\u1019\u102e kajakasthanera \u1016\u102d\u102f\u1037\u1021\u1001\u103d\u1004\u103a\u1037\u1021\u101c\u1019\u103a\u1038\u1021\u1005\u102e\u101b\u1004\u103a\u1001\u1036\u1001\u1032\u1037\u101e\u100a\u103a\u101b\u1015\u102b\u101c\u102d\u1019\u103a\u1037\u1019\u101a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/eKj01bx1XLsyo1hbxGhJXgeatkm5IFJf66GX0x5P.jpeg","story_video":"","author":null,"author_image":"","status":1,"created_at":"Jan 14, 2020","updated_at":"Feb 13, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/16"},{"id":17,"title_bn":"\u09ac\u09b0\u09bf\u09b6\u09be\u09b2\u09c7 \u0995\u09bf\u09b6\u09cb\u09b0-\u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u09aa\u09cd\u09b0\u09be\u0987\u09ae\u09be\u09b0\u09bf \u09b9\u09c7\u09b2\u09a5 \u0995\u09c7\u09df\u09be\u09b0 \u09ac\u09bf\u09b7\u09df\u0995 \u0995\u09b0\u09cd\u09ae\u09b6\u09be\u09b2\u09be","title_en":"Primary health care workshop for teens in Barisal","title_my":"Barisal \u101b\u103e\u102d\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1021\u101c\u102f\u1015\u103a\u101b\u102f\u1036\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1015\u103d\u1032","subtitle_bn":"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0 \u09ae\u09be\u09b8\u09c7 \u0995\u09be\u099c\u09be\u0997\u09bf\u09b8\u09cd\u09a4\u09be\u09a8\u09c7 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4\u09ac\u09cd\u09af \u2018\u0986\u09a8\u09cd\u09a4\u09b0\u09cd\u099c\u09be\u09a4\u09bf\u0995 \u09aa\u09cd\u09b0\u09be\u0987\u09ae\u09be\u09b0\u09bf \u09b9\u09c7\u09b2\u09a5 \u0995\u09c7\u09df\u09be\u09b0 \u0995\u09a8\u09ab\u09be\u09b0\u09c7\u09a8\u09cd\u09b8\u2019 \u098f\u09b0 \u09aa\u09cd\u09b0\u09be\u0995\u09cd\u0995\u09be\u09b2\u09c7 \u09ac\u09b0\u09bf\u09b6\u09be\u09b2\u09c7 \u09aa\u09cd\u09b0\u09be\u0987\u09ae\u09be\u09b0\u09bf \u09b9\u09c7\u09b2\u09a5 \u0995\u09c7\u09df\u09be\u09b0 \u09ac\u09bf\u09b7\u09df\u0995 \u0995\u09b0\u09cd\u09ae\u09b6\u09be\u09b2\u09be \u0997\u09a4\u0995\u09be\u09b2 \u09b8\u09cb\u09ae\u09ac\u09be\u09b0 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4 \u09b9\u09df","subtitle_en":"The primary health care workshop was held in Barisal on Monday on the eve of the \"International Primary Healthcare Conference\" in Kazakhstan in October.","subtitle_my":"\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1021\u101c\u102f\u1015\u103a\u101b\u102f\u1036\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1015\u103d\u1032\u1000\u102d\u102f Barisal \u1010\u103d\u1004\u103a\u1000\u102c\u1007\u1000\u103a\u1005\u1010\u1014\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u104c\u1000\u103b\u1004\u103a\u1038\u1015\u101e\u100a\u1037\u103a "\u1021\u1015\u103c\u100a\u103a\u1015\u103c\u100a\u103a\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1021\u1001\u103c\u1031\u1001\u1036\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u100a\u102e\u101c\u102c\u1001\u1036" \u1019\u1010\u102d\u102f\u1004\u103a\u1019\u102e\u1010\u1014\u1004\u103a\u1039\u101c\u102c\u1014\u1031\u1037\u1010\u103d\u1004\u103a\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b","body_bn":"\u09ac\u09b0\u09bf\u09b6\u09be\u09b2 \u09b8\u09bf\u099f\u09bf \u0995\u09b0\u09aa\u09cb\u09b0\u09c7\u09b6\u09a8\u09c7\u09b0 \u0986\u09df\u09cb\u099c\u09a8\u09c7 \u098f\u09ac\u0982 \u0987\u0989\u09a8\u09bf\u09b8\u09c7\u09ab \u098f\u09ac\u0982 \u0987\u0989\u098f\u09a8\u098f\u09ab\u09aa\u09bf\u098f\u2019\u09b0 \u09b8\u09b9\u09af\u09cb\u0997\u09bf\u09a4\u09be\u09df \u0997\u09a4\u0995\u09be\u09b2 \u09ac\u09bf\u09b8\u09bf\u09b8\u09bf\u09b0 \u0995\u09b0\u09ab\u09be\u09b0\u09c7\u09a8\u09cd\u09b8 \u09b9\u09b2\u09c7 \u098f\u0987 \u0995\u09b0\u09cd\u09ae\u09b6\u09be\u09b2\u09be\u09df \u09ac\u09c7\u09a4\u09be\u09b0 \u09b6\u09cd\u09b0\u09cb\u09a4\u09be \u0995\u09cd\u09b2\u09be\u09ac, \u09b6\u09bf\u09b6\u09c1 \u09aa\u09b0\u09bf\u09b7\u09a6, \u09a4\u09b0\u09c1\u09a3 \u09b8\u09be\u0982\u09ac\u09be\u09a6\u09bf\u0995, \u09b8\u09cd\u09ac\u09b0\u09cd\u09a3 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0 \u09ab\u09be\u0989\u09a8\u09cd\u09a1\u09c7\u09b6\u09a8\u09b8\u09b9 \u09e9\u09e7 \u099c\u09a8 \u0995\u09bf\u09b6\u09cb\u09b0-\u0995\u09bf\u09b6\u09cb\u09b0\u09c0 \u0993 \u09af\u09c1\u09ac\u0995 \u0985\u0982\u09b6\u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u09a8\u0964 \u0995\u09b0\u09cd\u09ae\u09b6\u09be\u09b2\u09be\u09df \u0985\u0982\u09b6\u0997\u09cd\u09b0\u09b9\u09a3\u0995\u09be\u09b0\u09c0 \u0995\u09bf\u09b6\u09cb\u09b0-\u0995\u09bf\u09b6\u09cb\u09b0\u09c0 \u0993 \u09af\u09c1\u09ac\u0995\u09b0\u09be \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af\u0997\u09a4 \u09b8\u09ae\u09b8\u09cd\u09af\u09be, \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u09ac\u09be\u09a7\u09be \u098f\u09ac\u0982 \u09aa\u09cd\u09b0\u09be\u0987\u09ae\u09be\u09b0\u09bf \u09b9\u09c7\u09b2\u09a5 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09a4\u09c7 \u09af\u09c1\u09ac\u0995\u09a6\u09c7\u09b0 \u0985\u0982\u09b6\u0997\u09cd\u09b0\u09b9\u09a3\u09c7\u09b0 \u09ac\u09bf\u09b7\u09df\u09c7 \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u09ae\u09a4\u09be\u09ae\u09a4 \u09a4\u09c1\u09b2\u09c7 \u09a7\u09b0\u09c7\u0964 \u09af\u09be \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09bf\u09a4\u09ac\u09cd\u09af \u0986\u09a8\u09cd\u09a4\u09b0\u09cd\u099c\u09be\u09a4\u09bf\u0995 \u09aa\u09cd\u09b0\u09be\u0987\u09ae\u09be\u09b0\u09bf \u09b9\u09c7\u09b2\u09a5 \u0995\u09a8\u09ab\u09be\u09b0\u09c7\u09a8\u09cd\u09b8\u09c7 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u0995\u09cd\u09b7 \u09a5\u09c7\u0995\u09c7 \u0989\u09aa\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09be \u09b9\u09ac\u09c7\u0964 \u09b8\u09ad\u09be\u09df \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4 \u099b\u09bf\u09b2\u09c7\u09a8 \u09ac\u09bf\u09b8\u09bf\u09b8\u09bf\u09b0 \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u09b9\u09c0 \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be (\u09ad\u09be\u09b0\u09aa\u09cd\u09b0\u09be\u09aa\u09cd\u09a4) \u09ae\u09cb\u0983 \u0987\u09b8\u09b0\u09be\u0987\u09b2 \u09b9\u09cb\u09b8\u09c7\u09a8, \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09a1\u09be. \u09ae\u09cb\u0983 \u09ae\u09a4\u09bf\u0989\u09b0 \u09b0\u09b9\u09ae\u09be\u09a8, \u099c\u09c7\u09b2\u09be \u09ae\u09b9\u09bf\u09b2\u09be \u09ac\u09bf\u09b7\u09df\u0995 \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09b0\u09be\u09b6\u09bf\u09a6\u09be \u09ac\u09c7\u0997\u09ae, \u09ac\u09b0\u09bf\u09b6\u09be\u09b2 \u0987\u0989\u09a8\u09bf\u09b8\u09c7\u09ab\u09c7\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c0\u09df \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u0987\u09ae\u09be\u09a8\u09c1\u09b2 \u0997\u09be\u0987, \u0989\u09a8\u09cd\u09a8\u09df\u09a8\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09af\u09cb\u0997\u09be\u09af\u09cb\u0997 \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09b8\u099e\u09cd\u099c\u09bf\u09a4 \u0995\u09c1\u09ae\u09be\u09b0 \u09a6\u09be\u09b8, \u09b6\u09bf\u09b6\u09c1 \u09b8\u09c1\u09b0\u0995\u09cd\u09b7\u09be \u0995\u09b0\u09cd\u09ae\u0995\u09b0\u09cd\u09a4\u09be \u09ae\u09ae\u09bf\u09a8\u09c1\u09a8\u09cd\u09a8\u09c7\u099a\u09cd\u099b\u09be \u09b6\u09bf\u0996\u09be, \u09aa\u09cd\u09b0\u09cb\u0997\u09cd\u09b0\u09be\u09ae \u0985\u09ab\u09bf\u09b8\u09be\u09b0 \u0986\u09ac\u09cd\u09a6\u09c1\u09b2 \u099c\u09b2\u09bf\u09b2 \u098f\u09ac\u0982 \u0987\u0989\u098f\u09a8\u098f\u09ab\u09aa\u09bf\u098f \u098f\u09b0 \u09ab\u09bf\u09b2\u09cd\u09a1 \u0985\u09ab\u09bf\u09b8\u09be\u09b0 \u09ae\u09cb\u0983 \u09b0\u09ac\u09bf\u0989\u09b2 \u0987\u09b8\u09b2\u09be\u09ae\u0964","body_en":"In the workshop organized by Barisal City Corporation and in collaboration with UNICEF and UNFPA yesterday, the BCCI participated in the workshop, with a radio audience club, children's council, young journalists, gold adolescent foundation and teenagers. Adolescents and youth participating in the workshop share different views on youth participation in ensuring health problems, various obstacles, and primary health. Which will be presented on behalf of Bangladesh at the International Primary Health Conference held. BCC chief executive officer (Israel) Md. Israel Hossain, chief health officer said. Md. Motiur Rahman, District Women's Affairs Officer Rashida Begum, Barisal UNICEF Division Chief Emanul Gai, Communications Officer for Development Sanjit Kumar Das, Child Protection Officer Mominunenchika Shika, Program Officer Abdul Jalil and UNFPA Field Officer Md. Rabul Islam.","body_my":"Barisal City \u1000\u1031\u102c\u103a\u1015\u102d\u102f\u101b\u1031\u1038\u101b\u103e\u1004\u103a\u1038\u1000\u1005\u102e\u1005\u1009\u103a\u101e\u1031\u102c\u1021\u101c\u102f\u1015\u103a\u101b\u102f\u1036\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1015\u103d\u1032\u1010\u103d\u1004\u103a BCCI \u101e\u100a\u103a\u101b\u1031\u1012\u102e\u101a\u102d\u102f\u1015\u101b\u102d\u101e\u1010\u103a\u1015\u101b\u102d\u101e\u1010\u103a\u1019\u103b\u102c\u1038\u104a \u1000\u101c\u1031\u1038\u1000\u1031\u102c\u1004\u103a\u1005\u102e\u104a \u101c\u1030\u1004\u101a\u103a\u1005\u102c\u1014\u101a\u103a\u1007\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u104a \u101b\u103d\u103e\u1031\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u101c\u1030\u1004\u101a\u103a\u1016\u1031\u102c\u1004\u103a\u1012\u1031\u1038\u101b\u103e\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u1021\u101c\u102f\u1015\u103a\u101b\u102f\u1036\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1015\u103d\u1032\u1010\u103d\u1004\u103a\u1015\u102b\u101d\u1004\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1021\u101c\u102f\u1015\u103a\u101b\u102f\u1036\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1015\u103d\u1032\u1010\u103d\u1004\u103a\u1015\u102b \u1040 \u1004\u103a\u101e\u100a\u1037\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u101c\u1030\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1015\u103c,\u1014\u102c\u1019\u103b\u102c\u1038\u104a \u1021\u1010\u102c\u1038\u1021\u1006\u102e\u1038\u1021\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102d\u102f\u1038\u1014\u103e\u1004\u1037\u103a\u1019\u1030\u101c\u1010\u1014\u103a\u1038\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1021\u1010\u103d\u1000\u103a\u101c\u1030\u1004\u101a\u103a\u1019\u103b\u102c\u1038\u104f\u1015\u102b \u1040 \u1004\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a \u1015\u1010\u103a\u101e\u1000\u103a\u104d \u1021\u1019\u103c\u1004\u103a\u1019\u103b\u102c\u1038\u1000\u103d\u1032\u1015\u103c\u102c\u1038\u1000\u103c\u101e\u100a\u103a\u104b \u1000\u103b\u1004\u103a\u1038\u1015\u101e\u100a\u1037\u103a\u1021\u1015\u103c\u100a\u103a\u1015\u103c\u100a\u103a\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1021\u1001\u103c\u1031\u1001\u1036\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u100a\u102e\u101c\u102c\u1001\u1036\u1010\u103d\u1004\u103a\u1018\u1004\u103a\u1039\u1002\u101c\u102c\u1038\u1012\u1031\u1037\u101b\u103a\u103e\u1000\u102d\u102f\u101a\u103a\u1005\u102c\u1038\u1000\u102d\u102f\u101a\u103a\u1005\u102c\u1038\u1015\u103c\u102f\u1010\u1004\u103a\u1015\u103c\u1001\u103c\u1004\u103a\u1038\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b BCC \u1021\u1019\u103e\u102f\u1006\u1031\u102c\u1004\u103a\u1021\u101b\u102c\u101b\u103e\u102d\u1001\u103b\u102f\u1015\u103a (\u1021\u1005\u1039\u1005\u101b\u1031\u1038) Md Israel Hossain \u1019\u103e\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1021\u101b\u102c\u101b\u103e\u102d\u1001\u103b\u102f\u1015\u103a\u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b Md \u104b Motiur Rahman\u104a \u1001\u101b\u102d\u102f\u1004\u103a\u1021\u1019\u103b\u102d\u102f\u1038\u101e\u1019\u102e\u1038\u101b\u1031\u1038\u101b\u102c\u1021\u101b\u102c\u101b\u103e\u102d Rashida Begum\u104a Barisal UNICEF \u100c\u102c\u1014\u1021\u1000\u103c\u102e\u1038\u1021\u1000\u1032 Emanul Gai\u104a \u1016\u103d\u1036\u1037\u1016\u103c\u102d\u102f\u1038\u101b\u1031\u1038\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1006\u1000\u103a\u101e\u103d\u101a\u103a\u101b\u1031\u1038\u1021\u101b\u102c\u101b\u103e\u102d Sanjit Kumar Das\u104a \u1000\u101c\u1031\u1038\u101e\u1030\u1004\u101a\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u101b\u1031\u1038\u1021\u101b\u102c\u101b\u103e\u102d Mominunenchika Shika\u104a","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/N8qLbFCA86YgJ9IklFjQuV2EDABoR5fmj0DwKkBN.jpeg","story_video":"","author":null,"author_image":"","status":1,"created_at":"Jan 14, 2020","updated_at":"Jan 14, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/17"},{"id":19,"title_bn":"\u09b0\u0982\u09aa\u09c1\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c7 \"\u0995\u09c8\u09b6\u09cb\u09b0\u09c7\u09b0 \u099c\u09df\u0997\u09be\u09a8\" \u0989\u09a6\u09af\u09be\u09aa\u09a8","title_en":"Rangpur Division celebrates \"Teenage Joygan\"","title_my":"Rangpur \u100c\u102c\u1014\u1019\u103e Teenage Joygan \u1021\u102c\u1038\u1002\u102f\u100f\u103a\u1015\u103c\u102f","subtitle_bn":"\u09ac\u09b0\u09cd\u09b7\u09be \u09b0\u09be\u09a8\u09c0 \u09ac\u09c0\u09a8\u09be, \u09af\u0996\u09a8 \u09a4\u09be\u09b0 \u099c\u09c0\u09ac\u09a8\u09c7\u09b0 \u09a6\u09be\u09b0\u09bf\u09a6\u09cd\u09b0\u09cd\u09af\u09a4\u09be, \u09b9\u09a4\u09be\u09b6\u09be \u098f\u09ac\u0982 \u09af\u09cc\u09a8 \u09b9\u09af\u09bc\u09b0\u09be\u09a8\u09bf\u09b0 \u09af\u09a8\u09cd\u09a4\u09cd\u09b0\u09a8\u09be\u09ae\u09df \u09b8\u0982\u0997\u09cd\u09b0\u09be\u09ae\u09c7\u09b0 \u0995\u09a5\u09be \u09ac\u09b2\u099b\u09c7\u09a8, \u09a4\u0996\u09a8 \u09b0\u0982\u09aa\u09c1\u09b0 \u09ae\u09c1\u09b8\u09b2\u09bf\u09ae \u0995\u09ae\u09bf\u0989\u09a8\u09bf\u099f\u09bf \u09b9\u09b2 \u0985\u09a1\u09bf\u099f\u09cb\u09b0\u09bf\u09df\u09be\u09ae\u09c7, \u09aa\u09cd\u09b0\u09be\u09df \u09a4\u09bf\u09a8\u2019\u09b6-\u098f\u09b0 \u09ac\u09c7\u09b6\u09bf \u0995\u09bf\u09b6\u09cb\u09b0-\u0995\u09bf\u09b6\u09cb\u09b0\u09c0, \u0985\u09ad\u09bf\u09ad\u09be\u09ac\u0995, \u09a8\u09be\u0997\u09b0\u09bf\u0995 \u09aa\u09cd\u09b0\u09a4\u09bf\u09a8\u09bf\u09a7\u09bf \u098f\u09ac\u0982 \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u09ac\u09bf\u09ad\u09be\u0997\u09c7\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c0\u09af\u09bc \u09aa\u09cd\u09b0\u09a4\u09bf\u09a8\u09bf\u09a7\u09bf \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4 \u09a5\u09be\u0995\u09be \u09b8\u09a4\u09cd\u09a4\u09cd\u09ac\u09c7\u0993 \u09aa\u09bf\u09a8\u09aa\u09a4\u09cd\u09a4\u09a8 \u09a8\u09bf\u09b0\u09ac\u09a4\u09be \u09ac\u09bf\u09b0\u09be\u099c \u0995\u09b0\u099b\u09bf\u09b2\u0964","subtitle_en":"Monsoon Queen Beena, speaking of the painful struggles of poverty, despair and sexual harassment in her life, was present at the Rangpur Muslim Community Hall Auditorium, despite the presence of more than 300 teenagers, guardians, civic representatives and departmental representatives of various sections. Was staying","subtitle_my":"\u1019\u102f\u1010\u103a\u101e\u102f\u1036\u101b\u102c\u101e\u102e\u1018\u102f\u101b\u1004\u103a\u1019\u1018\u102e\u1014\u102e\u1014\u102c\u101e\u100a\u103a\u1006\u1004\u103a\u1038\u101b\u1032\u1001\u103c\u1004\u103a\u1038\u104a \u1005\u102d\u1010\u103a\u1013\u102c\u1010\u103a\u1000\u103b\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u101c\u102d\u1004\u103a\u1015\u102d\u102f\u1004\u103a\u1038\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1021\u1014\u103e\u1031\u102c\u1004\u1037\u103a\u1021\u101a\u103e\u1000\u103a\u1015\u1031\u1038\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1014\u102c\u1000\u103b\u1004\u103a\u1005\u103d\u102c\u101b\u102f\u1014\u103a\u1038\u1000\u1014\u103a\u1014\u1031\u101b\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1015\u1010\u103a\u101e\u1000\u103a\u101e\u1031\u102c\u1005\u1000\u102c\u1038\u1015\u103c\u1031\u102c\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f Rangpur \u1019\u103d\u1010\u103a\u1005\u103a\u101c\u1004\u103a\u1019\u103a\u1021\u101e\u102d\u102f\u1004\u103a\u1038\u1021\u101d\u102d\u102f\u1004\u103a\u1038\u1001\u1014\u103a\u1038\u1019\u104c\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u104a \u1021\u102f\u1015\u103a\u1011\u102d\u1014\u103a\u1038\u101e\u1030\u1019\u103b\u102c\u1038\u104a \u1010\u100a\u103a\u1038\u1001\u102d\u102f\u1001\u1032\u1037\u101e\u100a\u103a","body_bn":"\u09af\u0996\u09a8 \u09a4\u09bf\u09a8\u09bf \u09a4\u09be\u09b0 \u09b8\u09ab\u09b2\u09a4\u09be\u09b0 \u0997\u09b2\u09cd\u09aa \u09b6\u09c7\u09b7 \u0995\u09b0\u09b2\u09c7\u09a8 \u098f\u099f\u09be \u09ac\u09b2\u09c7, \u09a4\u09bf\u09a8\u09bf \u0995\u09bf\u09ad\u09be\u09ac\u09c7 \u099c\u09be\u09a4\u09c0\u09df \u09ac\u09bf\u09b6\u09cd\u09ac\u09ac\u09bf\u09a6\u09cd\u09af\u09be\u09b2\u09df\u09c7 \u09aa\u09dc\u09be\u09b0 \u09b8\u09c1\u09af\u09cb\u0997 \u09aa\u09c7\u09df\u09c7\u099b\u09c7\u09a8 \u098f\u09ac\u0982 \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09a4\u09bf\u09a8\u09bf \u098f\u0995\u099f\u09bf \u09b8\u09cd\u0995\u09c1\u09b2\u09c7 \u09b6\u09bf\u0995\u09cd\u09b7\u0995 \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0996\u09a8\u09cd\u09a1\u0995\u09be\u09b2\u09c0\u09a8 \u099a\u09be\u0995\u09c1\u09b0\u09c0 \u0995\u09b0\u099b\u09c7\u09a8 \u098f\u09ac\u0982 \u0995\u09a5\u09be \u09a6\u09bf\u09b2\u09c7\u09a8 \u09af\u09c7 \u09a4\u09bf\u09a8\u09bf \u0995\u0996\u09a8\u0993 \u09ae\u09be\u09a5\u09be \u09a8\u09bf\u099a\u09c1 \u0995\u09b0\u09ac\u09c7\u09a8 \u09a8\u09be, \u09b8\u09ac\u09be\u0987 \u09a4\u0996\u09a8 \u09b8\u09c7\u0987 \u09a8\u09c0\u09b0\u09ac\u09a4\u09be \u09ad\u0999\u09cd\u0997 \u0995\u09b0\u09c7 \u0995\u09b0\u09a4\u09be\u09b2\u09bf \u09a6\u09bf\u09df\u09c7 \u09a4\u09be\u0995\u09c7 \u0985\u09ad\u09bf\u09a8\u09a8\u09cd\u09a6\u09a8 \u099c\u09be\u09a8\u09be\u09a8\u0964\u09b0\u0982\u09aa\u09c1\u09b0 \u09b8\u09bf\u099f\u09bf \u0995\u09b0\u09cd\u09aa\u09cb\u09b0\u09c7\u09b6\u09a8\u09c7\u09b0 \u09ae\u09c7\u09df\u09b0, \u09ac\u09c0\u09a8\u09be\u09b0 \u0985\u09ad\u09c2\u09a4\u09aa\u09c2\u09b0\u09cd\u09ac \u09ae\u09a8\u09cb\u09ac\u09b2\u0995\u09c7 \u0985\u09ad\u09bf\u09a8\u09a8\u09cd\u09a6\u09a8 \u099c\u09be\u09a8\u09be\u09a8\u098f\u09ac\u0982 \u0998\u09cb\u09b7\u09a8\u09be \u0995\u09b0\u09c7\u09a8 \u09af\u09c7, \u09a4\u09bf\u09a8\u09bf \u09a4\u09be\u09b0 \u09b6\u09b9\u09b0\u09c7\u09b0 \u09b8\u0995\u09b2 \u0995\u09bf\u09b6\u09cb\u09b0-\u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u09b8\u09ac\u09a7\u09b0\u09a8\u09c7\u09b0 \u09b8\u09b9\u09af\u09cb\u0997\u09bf\u09a4\u09be \u0995\u09b0\u09ac\u09c7\u09a8 \u09ac\u09bf\u09b6\u09c7\u09b7 \u0995\u09b0\u09c7 \u09af\u09be\u09b0\u09be \u09a6\u09c1\u09b0\u09cd\u09a6\u09b6\u09be\u0997\u09cd\u09b0\u09b8\u09cd\u09a4 \u09a4\u09be\u09a6\u09c7\u09b0\u0964 \u098f\u09ac\u0982 \u09b8\u09c7\u0987 \u09b8\u09be\u09a5\u09c7 \u09a4\u09bf\u09a8\u09bf \u09b8\u09cd\u09a5\u09be\u09a8\u09c0\u09df \u09b8\u09b0\u0995\u09be\u09b0\u09c7\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c0\u09df \u09aa\u09b0\u09bf\u099a\u09be\u09b2\u0995\u09c7\u09b0\u09b8\u09be\u09a5\u09c7 \u098f\u0995\u09a4\u09cd\u09b0\u09bf\u09a4 \u09b9\u09df\u09c7 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b6\u09cd\u09b0\u09c1\u09a4\u09bf \u09a6\u09c7\u09a8 \u09af\u09c7, \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09b6\u09c1\u09b0\u09c1 \u09b9\u0993\u09df\u09be \u0995\u09be\u099c\u0997\u09c1\u09b2\u09cb\u0995\u09c7 \u09a4\u09bf\u09a8\u09bf \u0986\u09b0\u09cb \u09b6\u0995\u09cd\u09a4\u09bf\u09b6\u09be\u09b2\u09c0 \u0995\u09b0\u09ac\u09c7\u09a8\u0964\u0997\u09a4 \u09e7\u09e6 \u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0 \u0986\u09df\u09cb\u099c\u09bf\u09a4 \u098f\u0987 \u0985\u09b8\u09be\u09a7\u09be\u09b0\u09a8 \u09ae\u09be\u09b2\u09cd\u099f\u09bf\u09b8\u09c7\u0995\u09cd\u099f\u09cb\u09b0\u09be\u09b2 \u0987\u09ad\u09c7\u09a8\u09cd\u099f\u09c7\u09b0 \u0989\u09a6\u09cd\u09a6\u09c7\u09b6\u09cd\u09af \u099b\u09bf\u09b2 \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u09a5\u09be\u0995\u09be \u09b8\u09ae\u09cd\u09ad\u09be\u09ac\u09a8\u09be\u0995\u09c7 \u0989\u09a6\u09af\u09be\u09aa\u09a8 \u0995\u09b0\u09be \u098f\u09ac\u0982 \u09a4\u09be\u09a6\u09c7\u09b0 \u0986\u09b0\u09cb \u09ac\u09c7\u09b6\u09bf \u0989\u09ce\u09b8\u09be\u09b9 \u09aa\u09cd\u09b0\u09a6\u09be\u09a8 \u0995\u09b0\u09be\u0964 \u09b0\u0982\u09aa\u09c1\u09b0 \u09ac\u09bf\u09ad\u09be\u0997\u09c7 \u09ac\u09bf\u09ad\u09be\u0997\u09c0\u09df \u09aa\u09b0\u09cd\u09af\u09be\u09df\u09c7 \u0986\u09df\u09cb\u099c\u09bf\u09a4 \u098f\u0987 \u0986\u09df\u09cb\u099c\u09a8\u09c7\u09b0 \u09a8\u09be\u09ae \u099b\u09bf\u09b2 \u2018Celebrating Adolescent Power\u2019\u0964 \u09a6\u09bf\u09a8\u099f\u09bf \u09b6\u09c1\u09b0\u09c1 \u09b9\u09df \u09b0\u200d\u09cd\u09af\u09be\u09b2\u09c0\u09b0\u09ae\u09be\u09a7\u09cd\u09af\u09ae\u09c7\u0964 \u09b0\u200d\u09cd\u09af\u09be\u09b2\u09c0\u09a4\u09c7 \u0985\u0982\u09b6 \u09a8\u09c7\u09df\u09be \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0 \u098f\u09ac\u0982 \u09b6\u09b9\u09b0\u09c7\u09b0 \u09a8\u09be\u0997\u09b0\u09bf\u0995\u09c7\u09b0\u09be \u201c\u09ac\u09be\u09b2\u09cd\u09af \u09ac\u09bf\u09ac\u09be\u09b9 \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09c1\u09a8\u201d, \u201c\u0986\u09ae\u09b0\u09be \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09ac\u09a8\u09cd\u09a7\u09c1\u09a4\u09cd\u09ac\u09aa\u09c2\u09b0\u09cd\u09a3 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af\u09b8\u09c7\u09ac\u09be \u099a\u09be\u0987\u201d,\u201dLive with Adolescent Spirit, Not in Despair\u201d \u09b2\u09c7\u0996\u09be \u09ab\u09c7\u09b8\u09cd\u099f\u09c2\u09a8 \u09ac\u09b9\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964 \u0989\u09a6\u09cd\u09ac\u09cb\u09a7\u09a8\u09c0 \u0985\u09a7\u09bf\u09ac\u09c7\u09b6\u09a8\u09c7 \u0985\u0982\u09b6 \u09a8\u09bf\u09df\u09c7\u099b\u09bf\u09b2\u09c7\u09a8 \u0995\u09c7\u09a8\u09cd\u09a6\u09cd\u09b0\u09c0\u09df \u09b8\u09b0\u0995\u09be\u09b0\u09c7\u09b0 \u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af \u0993 \u09b6\u09bf\u0995\u09cd\u09b7\u09be, \u09ae\u09b9\u09bf\u09b2\u09be \u09ac\u09bf\u09b7\u09df\u0995 \u0993 \u09a4\u09a5\u09cd\u09af \u09ac\u09bf\u09ad\u09be\u0997\u09c7\u09b0 \u0995\u09b0\u09cd\u09a4\u0995\u09b0\u09cd\u09a4\u09be\u09b0\u09be\u0964\u098f\u09b0\u09aa\u09b0\u0987 \u09b6\u09c1\u09b0\u09c1 \u09b9\u09df \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u0996\u09cb\u09b2\u09be\u09ae\u09c7\u09b2\u09be \u0986\u09b2\u09cb\u099a\u09a8\u09be, \u09ae\u09be\u09b2\u09cd\u099f\u09bf\u09ae\u09bf\u09a1\u09bf\u09df\u09be \u0995\u09cd\u09af\u09be\u09ae\u09cd\u09aa\u09c7\u0987\u09a8 \u0989\u09a6\u09cd\u09ac\u09cb\u09a7\u09a8 \u098f\u09ac\u0982 \u09ae\u09a8\u09cb\u09b0\u09ae \u09b8\u09be\u0982\u09b8\u09cd\u0995\u09c3\u09a4\u09bf\u0995 \u0985\u09a8\u09c1\u09b7\u09cd\u09a0\u09be\u09a8\u0964 \u09a4\u09ac\u09c7, \u098f\u09b8\u09ac\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7\u0987 \u09ac\u09be\u09b0\u09ac\u09be\u09b0 \u0989\u09a0\u09c7 \u0986\u09b8\u099b\u09bf\u09b2 \u0997\u09c1\u09a8\u0997\u09a4 \u09b8\u09c7\u09ac\u09be \u0993 \u09af\u09a5\u09be\u09af\u09a5 \u09aa\u09b0\u09bf\u09ac\u09c7\u09b6 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09be\u09b0 \u09ae\u09be\u09a7\u09cd\u09af\u09ae\u09c7 \u0995\u09bf\u09b6\u09cb\u09b0 \u0995\u09bf\u09b6\u09cb\u09b0\u09c0\u09a6\u09c7\u09b0 \u0995\u09cd\u09b7\u09ae\u09a4\u09be\u09df\u09a8 \u098f\u09ac\u0982 \u09a8\u09be\u0997\u09b0\u09bf\u0995\u09a6\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u098f\u0995\u09a4\u09cd\u09b0\u09bf\u09a4 \u09b9\u09df\u09c7 \u09a8\u09c7\u09a4\u09c3\u09a4\u09cd\u09ac\u09c7\u09b0 \u0989\u09a6\u09be\u09b9\u09b0\u09a8 \u09a4\u09c8\u09b0\u09c0 \u0995\u09b0\u09be\u09b0 \u0995\u09a5\u09be\u0964","body_en":"When he finished his success story it tells how he got a chance to attend a national university and he is currently working part-time as a teacher in a school and promised that he would never bow down. Everyone broke the silence and greeted him. The mayor of Rangpur City Corporation congratulated Beena's unprecedented morale and announced that he would be working for all the cities of his city. Shore and girls, especially in cooperation with all those who are afflicted. And, together with the departmental director of the local government, he promises that he will strengthen the work that has begun for adolescents. The event was organized at the departmental level in Rangpur Division, called 'Celebrating Adolescent Power'. The day began with a rally. Teenagers and citizens of the city who attended the rally carried the festoon, \"Stop Childish Marriage,\" \"We Want Friendly Health Care for Teenagers,\" with \"Live with Adolescent Spirit, Not in Despair.\" The inaugural session was attended by the central government's health and education, women affairs and information department officials. Then there was open discussion with teenagers, inauguration of a multimedia campaign and cultural events. However, all of this was repeatedly emerging as an example of empowering adolescents and providing leadership by integrating with citizens by ensuring quality service and appropriate environment.","body_my":"\u101e\u1030\u101e\u100a\u103a\u1021\u1031\u102c\u1004\u103a\u1019\u103c\u1004\u103a\u1019\u103e\u102f\u1007\u102c\u1010\u103a\u101c\u1019\u103a\u1038\u1015\u103c\u102e\u1038\u1006\u102f\u1036\u1038\u101e\u1031\u102c\u1021\u1001\u102b\u101e\u1030\u101e\u100a\u103a\u1021\u1019\u103b\u102d\u102f\u1038\u101e\u102c\u1038\u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1010\u1000\u103a\u101b\u1014\u103a\u1019\u100a\u103a\u101e\u102d\u102f\u1037\u1021\u1001\u103d\u1004\u1037\u103a\u1021\u101b\u1031\u1038\u101b\u101b\u103e\u102d\u1001\u1032\u1037\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u101c\u1000\u103a\u101b\u103e\u102d\u1010\u103d\u1004\u103a\u101e\u1030\u101e\u100a\u103a\u1000\u103b\u1031\u102c\u1004\u103a\u1038\u1010\u103d\u1004\u103a\u1006\u101b\u102c\u1010\u1005\u103a\u101a\u1031\u102c\u1000\u103a\u1021\u1016\u103c\u1005\u103a\u1021\u1001\u103b\u102d\u1014\u103a\u1015\u102d\u102f\u1004\u103a\u1038\u1021\u101c\u102f\u1015\u103a\u1015\u103c\u102f\u1014\u1031\u1015\u103c\u102e\u1038\u1019\u100a\u103a\u101e\u100a\u1037\u103a\u1021\u1001\u102b\u1019\u103b\u103e \u1026\u1038 \u100a\u103d\u103e\u1010\u103a\u1019\u100a\u103a\u1019\u101f\u102f\u1010\u103a\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1000\u1010\u102d\u1015\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b Rangpur \u1005\u102e\u1038\u1010\u102e\u1038\u1000\u1031\u102c\u103a\u1015\u102d\u102f\u101b\u1031\u1038\u101b\u103e\u1004\u103a\u1038\u104f\u1019\u103c\u102d\u102f\u1037\u1010\u1031\u102c\u103a\u101d\u1014\u103a\u1000 Beena \u104f\u1019\u1000\u103c\u102f\u1036\u1005\u1016\u1030\u1038\u1005\u102d\u1010\u103a\u1013\u102c\u1010\u103a\u1000\u102d\u102f\u1001\u103b\u102e\u1038\u1000\u103b\u1030\u1038\u1002\u102f\u100f\u103a\u1015\u103c\u102f\u1015\u103c\u102e\u1038\u101e\u1030\u104f\u1019\u103c\u102d\u102f\u1037\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u101c\u102f\u1036\u1038\u1021\u1010\u103d\u1000\u103a\u1021\u101c\u102f\u1015\u103a\u101c\u102f\u1015\u103a\u101c\u102d\u1019\u1037\u103a\u1019\u100a\u103a\u101f\u102f\u1000\u103c\u1031\u1004\u103c\u102c\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1021\u1011\u1030\u1038\u101e\u1016\u103c\u1004\u1037\u103a\u100a\u103e\u1009\u103a\u1038\u1006\u1032\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f\u1001\u1036\u101b\u101e\u1031\u102c\u101e\u1030\u104c\u1014\u1031\u101e\u1031\u102c\u101e\u1030\u1021\u1015\u1031\u102b\u1004\u103a\u1038\u1010\u102d\u102f\u1037\u101e\u1030\u1010\u102d\u102f\u1037\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030 \u1015\u1030\u1038\u1015\u1031\u102b\u1004\u103a\u1038. \u1000\u1019\u103a\u1038\u1014\u103e\u1004\u103a\u1037\u1019\u102d\u1014\u103a\u1038\u1000\u101c\u1031\u1038\u1019\u103b\u102c\u1038\u104b \u1011\u102d\u102f\u1037\u1021\u1015\u103c\u1004\u103a\u1012\u1031\u101e\u1014\u1039\u1010\u101b\u1021\u1005\u102d\u102f\u1038\u101b\u104f\u100c\u102c\u1014\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1012\u102b\u101b\u102d\u102f\u1000\u103a\u1010\u102c\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u101e\u1030\u101e\u100a\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1005\u1010\u1004\u103a\u1001\u1032\u1037\u101e\u1031\u102c\u101c\u102f\u1015\u103a\u1004\u1014\u103a\u1038\u1000\u102d\u102f\u1021\u102c\u1038\u1016\u103c\u100a\u1037\u103a\u1019\u100a\u103a\u101f\u102f\u1000\u1010\u102d\u1015\u1031\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1015\u103d\u1032\u1000\u102d\u102f Rangpur \u100c\u102c\u1014\u101b\u103e\u102d\u100c\u102c\u1014\u1021\u1006\u1004\u1037\u103a\u1010\u103d\u1004\u103a\u1000\u103b\u1004\u103a\u1038\u1015\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u104a \u1021\u1006\u102d\u102f\u1015\u102b\u1014\u1031\u1037\u1000\u1006\u1014\u1039\u1012\u1015\u103c\u1015\u103d\u1032\u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030\u1005\u1010\u1004\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1006\u1014\u1039\u1012\u1015\u103c\u1015\u103d\u1032\u101e\u102d\u102f\u1037\u1010\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1001\u1032\u1037\u101e\u100a\u1037\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1019\u103c\u102d\u102f\u1037\u101e\u1030\u1019\u103c\u102d\u102f\u1037\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u201c \u1000\u101c\u1031\u1038\u101e\u1030\u1004\u101a\u103a\u101c\u1000\u103a\u1011\u1015\u103a\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f\u101b\u1015\u103a\u1010\u1014\u1037\u103a\u1015\u102b\u104a \u201d\u201c \u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1010\u102d\u102f\u1037\u101e\u100a\u103a\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u1005\u1031\u102c\u1004\u1037\u103a\u101b\u103e\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1000\u102d\u102f\u101c\u102d\u102f\u101c\u102c\u1038\u101e\u100a\u103a\u201d \u1015\u103d\u1032\u1010\u1031\u102c\u103a\u1000\u102d\u102f\u201c \u1005\u102d\u1010\u103a\u1015\u103b\u1000\u103a\u1021\u102c\u1038\u1004\u101a\u103a\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u1018\u1032\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1021\u101b\u103d\u101a\u103a\u1005\u102d\u1010\u103a\u1013\u102c\u1010\u103a\u1014\u103e\u1004\u1037\u103a\u1014\u1031\u1011\u102d\u102f\u1004\u103a\u1015\u102b\u201d \u1016\u103c\u1004\u1037\u103a\u101e\u101a\u103a\u1006\u1031\u102c\u1004\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1016\u103d\u1004\u1037\u103a\u1015\u103d\u1032\u1021\u1001\u1019\u103a\u1038\u1021\u1014\u102c\u1038\u1000\u102d\u102f\u1017\u101f\u102d\u102f\u1021\u1005\u102d\u102f\u1038\u101b\u104f\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u104a \u1015\u100a\u102c\u101b\u1031\u1038\u104a \u1021\u1019\u103b\u102d\u102f\u1038\u101e\u1019\u102e\u1038\u101b\u1031\u1038\u101b\u102c\u1014\u103e\u1004\u1037\u103a\u101e\u1010\u1004\u103a\u1038\u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a\u100c\u102c\u1014\u1019\u103e\u1021\u101b\u102c\u101b\u103e\u102d\u1019\u103b\u102c\u1038\u1010\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u1006\u101a\u103a\u1000\u103b\u1031\u102c\u103a\u101e\u1000\u103a\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1015\u103d\u1004\u1037\u103a\u1015\u103d\u1004\u1037\u103a\u101c\u1004\u103a\u1038\u101c\u1004\u103a\u1038\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u1001\u103c\u1004\u103a\u1038\u104a \u1019\u102c\u101c\u103a\u1010\u102e\u1019\u102e\u1012\u102e\u101a\u102c\u101c\u103e\u102f\u1015\u103a\u101b\u103e\u102c\u1038\u1019\u103e\u102f\u1016\u103d\u1004\u1037\u103a\u1015\u103d\u1032\u1014\u103e\u1004\u1037\u103a\u101a\u1009\u103a\u1000\u103b\u1031\u1038\u1019\u103e\u102f\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1021\u1001\u1019\u103a\u1038\u1021\u1014\u102c\u1038\u1019\u103b\u102c\u1038\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u101e\u102d\u102f\u1037\u101b\u102c\u1010\u103d\u1004\u103a\u1024\u1021\u101b\u102c\u1021\u102c\u1038\u101c\u102f\u1036\u1038\u101e\u100a\u103a\u1019\u103c\u102e\u1038\u1000\u1031\u102c\u1004\u103a\u1015\u1031\u102b\u1000\u103a\u1019\u103b\u102c\u1038\u104f\u1005\u103d\u1019\u103a\u1038\u101b\u100a\u103a\u1019\u103c\u103e\u1004\u1037\u103a\u1010\u1004\u103a\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1021\u101b\u100a\u103a\u1021\u101e\u103d\u1031\u1038\u1015\u103c\u100a\u1037\u103a\u101d\u101e\u1031\u102c \u1040 \u1014\u103a\u1006\u1031\u102c\u1004\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u101e\u1004\u1037\u103a\u101c\u103b\u1031\u102c\u103a\u101e\u1031\u102c\u1015\u1010\u103a \u1040 \u1014\u103a\u1038\u1000\u103b\u1004\u103a\u1000\u102d\u102f\u101e\u1031\u1001\u103b\u102c\u1005\u1031\u1001\u103c\u1004\u103a\u1038\u1021\u102c\u1038\u1016\u103c\u1004\u1037\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u101e\u102c\u1038\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1015\u1031\u102b\u1004\u103a\u1038\u1005\u100a\u103a\u1038\u1001\u103c\u1004\u103a\u1038\u1021\u102c\u1038\u1016\u103c\u1004\u1037\u103a\u1001\u1031\u102b\u1004\u103a\u1038\u1006\u1031\u102c\u1004\u103a\u1019\u103e\u102f\u1015\u1031\u1038\u1001\u103c\u1004\u103a\u1038\u104f\u1025\u1015\u1019\u102c\u1021\u1016\u103c\u1005\u103a\u1011\u1015\u103a\u1001\u102b\u1010\u101c\u1032\u101c\u1032\u1015\u1031\u102b\u103a\u1011\u103d\u1000\u103a\u101c\u102c\u1001\u1032\u1037\u101e\u100a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/ZNn2Kwn3YrdN0uyFrjXm7cRLefQZqqrbCgsxfbaS.jpeg","story_video":"","author":null,"author_image":"","status":1,"created_at":"Jan 14, 2020","updated_at":"Jan 14, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/19"},{"id":62,"title_bn":"\u09aa\u09c1\u09b0\u09cb\u09ac\u09bf\u09b6\u09cd\u09ac \u09b8\u09cd\u09a4\u09ac\u09cd\u09a7 \u09b9\u09df\u09c7 \u0997\u09c7\u099b\u09c7 \u0995\u09b0\u09cb\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u0995\u09cb\u09aa\u09c7","title_en":"The whole world is shocked by the coroner's anger","title_my":"Coroner \u101b\u1032\u1037\u1012\u1031\u102b\u101e\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1000\u1019\u1039\u1018\u102c\u1000\u103c\u102e\u1038\u1010\u1005\u103a\u1001\u102f\u101c\u102f\u1036\u1038\u1011\u102d\u1010\u103a\u101c\u1014\u1037\u103a\u1010\u102f\u1014\u103a\u101c\u103e\u102f\u1015\u103a\u101e\u103d\u102c\u1038\u1010\u101a\u103a","subtitle_bn":"\u09ac\u09cd\u09af\u09ac\u09b8\u09be-\u09ac\u09be\u09a3\u09bf\u099c\u09cd\u09af, \u099a\u09b2\u09be\u09ab\u09c7\u09b0\u09be \u09b8\u09ac\u0995\u09bf\u099b\u09c1 \u09aa\u09c1\u09b0\u09cb\u09aa\u09c1\u09b0\u09bf \u09a8\u09bf\u09df\u09a8\u09cd\u09a4\u09cd\u09b0\u09bf\u09a4\u0964 \u098f\u09a4\u09c7 \u09a5\u09ae\u0995\u09c7 \u0986\u099b\u09c7 \u0985\u09b0\u09cd\u09a5\u09a8\u09c0\u09a4\u09bf\u09b0 \u099a\u09be\u0995\u09be\u0964 \u098f\u0987 \u09b2\u0995\u09a1\u09be\u0989\u09a8\u09c7\u09b0 \u0995\u09be\u09b0\u09a3\u09c7 \u09b9\u09c1 \u09b9\u09c1 \u0995\u09b0\u09c7 \u09ac\u09bf\u09b6\u09cd\u09ac\u09ac\u09be\u099c\u09be\u09b0\u09c7 \u0995\u09ae\u099b\u09c7 \u099c\u09cd\u09ac\u09be\u09b2\u09be\u09a8\u09bf \u09a4\u09c7\u09b2\u09c7\u09b0 \u09a6\u09be\u09ae\u0964 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09a4\u09c7\u09b2\u09c7\u09b0 \u09ac\u09be\u099c\u09be\u09b0\u09c7 \u09af\u09c7 \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \u09aa\u09dc\u09c7\u099b\u09c7, \u09a4\u09be \u09ac\u09bf\u09b6\u09cd\u09ac\u09c7\u09b0 \u0987\u09a4\u09bf\u09b9\u09be\u09b8\u09c7 \u0986\u09b0 \u0995\u0996\u09a8\u09cb \u09b9\u09df\u09a8\u09bf\u0964","subtitle_en":"Everything is perfectly regulated. In this, the economy is at the wheel. Due to this lockdown, the price of fuel in the world market is coming down. The impact of the US oil market has never been greater in the history of the world.","subtitle_my":"\u1021\u101b\u102c\u1021\u102c\u1038\u101c\u102f\u1036\u1038perfectly\u102f\u1036\u1005\u100a\u103a\u1038\u1019\u103b\u1009\u103a\u1038\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1011\u102c\u1038\u101e\u100a\u103a\u104b \u1024\u101e\u100a\u103a\u104c, \u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u1000\u102d\u102f\u1018\u102e\u1038\u1019\u103e\u102c\u1016\u103c\u1005\u103a\u1015\u102b\u1010\u101a\u103a\u104b \u1024\u1015\u102d\u1010\u103a\u1006\u102d\u102f\u1037\u1019\u103e\u102f\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1000\u1019\u1039\u1018\u102c\u1037\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a\u1010\u103d\u1004\u103a\u101c\u1031\u102c\u1004\u103a\u1005\u102c\u1006\u102e\u1008\u1031\u1038\u1000\u103b\u1014\u1031\u101e\u100a\u103a\u104b \u101a\u1030\u1021\u1000\u103a\u1005\u103a\u101b\u1031\u1014\u1036\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a\u104f\u1021\u1000\u103b\u102d\u102f\u1038\u101e\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u101e\u100a\u103a\u1000\u1019\u1039\u1018\u102c\u1037\u101e\u1019\u102d\u102f\u1004\u103a\u1038\u1010\u103d\u1004\u103a\u1018\u101a\u103a\u101e\u1031\u102c\u1021\u1001\u102b\u1019\u103b\u103e\u1015\u102d\u102f\u1019\u102d\u102f\u1000\u103c\u102e\u1038\u1019\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u1001\u1032\u1037\u1015\u102b\u104b","body_bn":"\u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09a4\u09c7\u09b2\u09c7\u09b0 \u09ac\u09be\u099c\u09be\u09b0\u09c7 \u09ac\u09b9\u09c1\u09a6\u09bf\u09a8 \u09a7\u09b0\u09c7\u0987 \u09ac\u09c7\u099e\u09cd\u099a\u09ae\u09be\u09b0\u09cd\u0995 \u09b9\u09df\u09c7 \u0986\u099b\u09c7 \u0993\u09df\u09c7\u09b8\u09cd\u099f \u099f\u09c7\u0995\u09cd\u09b8\u09be\u09b8 \u0987\u09a8\u09cd\u099f\u09be\u09b0\u09ae\u09bf\u09a1\u09bf\u09df\u09c7\u099f\u09c7\u09b0 (\u09a1\u09ac\u09cd\u09b2\u09bf\u0989\u099f\u09bf\u0986\u0987) \u09ae\u09c2\u09b2\u09cd\u09af\u0964 \u0985\u09b0\u09cd\u09a5\u09a8\u09c8\u09a4\u09bf\u0995 \u09ae\u09a8\u09cd\u09a6\u09be, \u09af\u09c1\u09a6\u09cd\u09a7 \u09af\u09be-\u0987 \u09b9\u09cb\u0995 \u09a8\u09be \u0995\u09c7\u09a8 \u098f\u09b0 \u09a6\u09be\u09ae \u0995\u0996\u09a8\u09cb\u0987 \u0985\u09a8\u09cd\u09a4\u09a4 \u09a4\u09bf\u09a8\u09b6\u2019 \u09b6\u09a4\u09be\u0982\u09b6 \u09aa\u09dc\u09c7 \u09af\u09c7\u09a4\u09c7 \u09a6\u09c7\u0996\u09be \u09af\u09be\u09df\u09a8\u09bf\u0964 \u098f\u09a6\u09bf\u09a8 \u09ae\u09c7 \u09ae\u09be\u09b8\u09c7\u09b0 \u099a\u09c1\u0995\u09cd\u09a4\u09bf\u09a4\u09c7 \u09a4\u09c7\u09b2\u09c7\u09b0 \u09a6\u09be\u09ae \u09aa\u09cd\u09b0\u09a4\u09bf \u09ac\u09cd\u09af\u09be\u09b0\u09c7\u09b2 \u09e7\u09ed \u09a6\u09b6\u09ae\u09bf\u0995 \u09ee\u09eb\u09ae\u09be\u09b0\u09cd\u0995\u09bf\u09a8 \u09a1\u09b2\u09be\u09b0 \u09a5\u09c7\u0995\u09c7 \u0995\u09ae\u09a4\u09c7 \u0995\u09ae\u09a4\u09c7 \u09a6\u09be\u0981\u09dc\u09bf\u09df\u09c7\u099b\u09bf\u09b2 \u09ae\u09be\u0987\u09a8\u09be\u09b8 \u09e9\u09ed \u09a6\u09b6\u09ae\u09bf\u0995 \u09ec\u09e9 \u09a1\u09b2\u09be\u09b0\u09c7\u0964 \u09ac\u09bf\u09ac\u09bf\u09b8\u09bf \u0985\u09a8\u09b2\u09be\u0987\u09a8\u09c7\u09b0 \u098f\u0995 \u09aa\u09cd\u09b0\u09a4\u09bf\u09ac\u09c7\u09a6\u09a8\u09c7 \u098f \u09a4\u09a5\u09cd\u09af \u099c\u09be\u09a8\u09be\u09a8\u09cb \u09b9\u09df\u0964\n\n\u09ae\u09be\u09b0\u09cd\u099a\u09c7\u09a8\u09cd\u099f \u0995\u09ae\u09cb\u09a1\u09bf\u099f\u09bf \u09ab\u09be\u09a8\u09cd\u09a1\u09c7\u09b0 \u09b8\u09b9-\u09aa\u09cd\u09b0\u09a4\u09bf\u09b7\u09cd\u09a0\u09be\u09a4\u09be \u09a1\u0997 \u0995\u09bf\u0982 \u09ac\u09b2\u09c7\u09a8, \u2018\u0986\u099c \u09ac\u09bf\u09b6\u09cd\u09ac\u09ac\u09cd\u09af\u09be\u09aa\u09c0 \u09a4\u09c7\u09b2 \u09b6\u09bf\u09b2\u09cd\u09aa\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u098f\u0995 \u09ac\u09bf\u09a7\u09cd\u09ac\u0982\u09b8\u09c0 \u09a6\u09bf\u09a8\u0964 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09a7\u09be\u09b0\u09a3\u0995\u09cd\u09b7\u09ae\u09a4\u09be \u09aa\u09c2\u09b0\u09a3 \u09b9\u09df\u09c7 \u0997\u09c7\u099b\u09c7 \u09ac\u09be \u09af\u09be\u099a\u09cd\u099b\u09c7 \u098f\u09ac\u0982 \u09ac\u09be\u099c\u09be\u09b0\u09c7 \u0995\u09bf\u099b\u09c1 \u09a6\u09c1\u09b0\u09cd\u09ad\u09be\u0997\u09cd\u09af\u099c\u09a8\u0995 \u09b2\u09c7\u09a8\u09a6\u09c7\u09a8 \u09b9\u09df\u09c7\u099b\u09c7\u0964\u2019 \u09ac\u09bf\u09b6\u09cd\u09ac\u099c\u09c1\u09dc\u09c7 \u09b2\u0995\u09a1\u09be\u0989\u09a8\u09c7\u09b0 \u0995\u09be\u09b0\u09a3\u09c7 \u09ad\u09cd\u09b0\u09ae\u09a3, \u09ae\u09be\u09a8\u09c1\u09b7\u09c7\u09b0 \u099a\u09b2\u09be\u099a\u09b2 \u09b8\u09ac \u09ac\u09a8\u09cd\u09a7\u0964 \u098f\u09a4\u09c7 \u09a4\u09c7\u09b2\u09c7\u09b0 \u099a\u09be\u09b9\u09bf\u09a6\u09be \u098f\u0995\u09c7\u09ac\u09be\u09b0\u09c7\u0987 \u09a8\u09c7\u0987\u0964\n\n\u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u0995\u09c7\u09b0\u09be \u09ac\u09b2\u099b\u09c7\u09a8, \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u099a\u09c1\u0995\u09cd\u09a4\u09bf\u09b0 \u09ae\u09c7\u09df\u09be\u09a6 \u09b6\u09c7\u09b7 \u09b9\u09df\u09c7 \u09af\u09be\u0993\u09df\u09be\u09b0 \u09b8\u09ae\u09df \u09b9\u0993\u09df\u09be\u09df \u09a4\u09c7\u09b2\u09c7\u09b0 \u09a6\u09be\u09ae \u0995\u09ae\u09c7\u099b\u09c7\u0964 \u0997\u09a4\u0995\u09be\u09b2 \u09ae\u09c2\u09b2\u09a4 \u09ae\u09c7 \u09ae\u09be\u09b8\u09c7 \u09af\u09c7\u09b8\u09ac \u09a4\u09c7\u09b2 \u09b8\u09b0\u09ac\u09b0\u09be\u09b9 \u0995\u09b0\u09be\u09b0 \u0995\u09a5\u09be \u099b\u09bf\u09b2, \u09b8\u09c7\u0997\u09c1\u09b2\u09cb\u09b0 \u09a6\u09be\u09ae \u0995\u09ae\u09c7\u099b\u09c7\u0964 \u0995\u09be\u09b0\u09a3 \u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3\u09be\u0997\u09be\u09b0\u0997\u09c1\u09b2\u09cb\u09a4\u09c7 \u09ae\u09c7 \u09ae\u09be\u09b8\u09c7\u09b0 \u09a4\u09c7\u09b2 \u09b0\u09be\u0996\u09be\u09b0 \u099c\u09be\u09df\u0997\u09be \u0986\u09b0 \u09a8\u09c7\u0987\u0964 \u099c\u09c1\u09a8\u09c7 \u09af\u09c7 \u09a1\u09ac\u09cd\u09b2\u09bf\u0989\u099f\u09bf\u0986\u0987 \u09a4\u09c7\u09b2 \u09b8\u09b0\u09ac\u09b0\u09be\u09b9 \u0995\u09b0\u09be\u09b0 \u0995\u09a5\u09be \u099b\u09bf\u09b2, \u09a4\u09be\u09b0 \u09a6\u09be\u09ae \u0997\u09a4\u0995\u09be\u09b2 \u0995\u09ae\u09c7 \u09ac\u09cd\u09af\u09be\u09b0\u09c7\u09b2\u09aa\u09cd\u09b0\u09a4\u09bf \u09e8\u09e6 \u09a1\u09b2\u09be\u09b0\u09c7 \u09a0\u09c7\u0995\u09c7\u099b\u09c7\u0964\n\n\u0985\u09a8\u09cd\u09af\u09a6\u09bf\u0995\u09c7 \u09ac\u09cd\u09b0\u09c7\u09a8\u09cd\u099f \u0995\u09cd\u09b0\u09c1\u09a1 \u0985\u09df\u09c7\u09b2\u09c7\u09b0 \u09a6\u09be\u09ae \u09ee \u09a6\u09b6\u09ae\u09bf\u0995 \u09ef \u09b6\u09a4\u09be\u0982\u09b6 \u0995\u09ae\u09c7 \u0997\u09a4\u0995\u09be\u09b2 \u09b9\u09df\u09c7\u099b\u09c7 \u09ac\u09cd\u09af\u09be\u09b0\u09c7\u09b2\u09aa\u09cd\u09b0\u09a4\u09bf \u09e8\u09ec \u09a1\u09b2\u09be\u09b0\u0964 \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u0995\u09c7\u09b0\u09be \u0986\u09b6\u0999\u09cd\u0995\u09be \u0995\u09b0\u099b\u09c7\u09a8, \u09ac\u09bf\u09b6\u09cd\u09ac\u099c\u09c1\u09dc\u09c7 \u09b2\u0995\u09a1\u09be\u0989\u09a8 \u099c\u09be\u09b0\u09bf \u09a5\u09be\u0995\u09b2\u09c7 \u099c\u09c1\u09a8\u09c7 \u09af\u09c7\u09b8\u09ac \u09a4\u09c7\u09b2 \u09b8\u09b0\u09ac\u09b0\u09be\u09b9 \u0995\u09b0\u09be\u09b0 \u0995\u09a5\u09be, \u09a4\u09be\u09b0 \u09a6\u09be\u09ae\u0993 \u0986\u09b0\u0993 \u0995\u09ae\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u0964 \u09ae\u09c2\u09b2\u09a4 \u0995\u09b0\u09cb\u09a8\u09be\u09ad\u09be\u0987\u09b0\u09be\u09b8 \u09ae\u09b9\u09be\u09ae\u09be\u09b0\u09bf\u09b0 \u0995\u09be\u09b0\u09a3\u09c7 \u099a\u09b2\u09a4\u09bf \u09ac\u099b\u09b0\u09c7\u09b0 \u09b6\u09c1\u09b0\u09c1 \u09a5\u09c7\u0995\u09c7 \u099a\u09be\u09b9\u09bf\u09a6\u09be \u0995\u09ae\u09c7\u099b\u09c7 \u099c\u09cd\u09ac\u09be\u09b2\u09be\u09a8\u09bf \u09a4\u09c7\u09b2\u09c7\u09b0 \u09ac\u09be\u099c\u09be\u09b0\u0964 \u09ab\u09b2\u09c7 \u09ac\u09bf\u09b6\u09cd\u09ac\u09ac\u09be\u099c\u09be\u09b0\u09c7 \u09b9\u09c1 \u09b9\u09c1 \u0995\u09b0\u09c7 \u0995\u09ae\u099b\u09c7 \u09a6\u09be\u09ae\u0964\n\n\u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09a4\u09c7\u09b2 \u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3\u09be\u0997\u09be\u09b0\u0997\u09c1\u09b2\u09cb \u0985\u09a4\u09bf\u09b0\u09bf\u0995\u09cd\u09a4 \u09a4\u09c7\u09b2\u09c7\u09b0 \u099a\u09be\u09aa \u0986\u09b0 \u09a8\u09bf\u09a4\u09c7 \u09aa\u09be\u09b0\u099b\u09c7 \u09a8\u09be\u0964 \u098f\u09a4\u09c7 \u09a6\u09be\u09ae \u0986\u09b0\u0993 \u0995\u09ae\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7\u0964 \u09ae\u09be\u09b0\u09cd\u099a\u09c7\u09b0 \u09b6\u09c7\u09b7\u09c7 \u09e7\u09ee \u09ac\u099b\u09b0\u09c7\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u09b8\u09b0\u09cd\u09ac\u09a8\u09bf\u09ae\u09cd\u09a8 \u0985\u09ac\u09b8\u09cd\u09a5\u09be\u09a8\u09c7 \u09a8\u09c7\u09ae\u09c7 \u0986\u09b8\u09c7 \u09a6\u09be\u09ae\u0964","body_en":"West Texas Intermediate (WTI) prices have long been the benchmark in the US oil market. Whatever the economic downturn, the war, its price has never been seen to fall by at least 300 percent. On the day of the contract in May, the price of oil fell to less than US $ 1 per barrel, down from US $ 5.7 a barrel. \"Today is a devastating day for the global oil industry,\" said Doug King, co-founder of the Merchant Commodity Fund. US capacity has either been met or going and some unfortunate transactions have taken place in the market. ' Traveling around the world due to lockdown, people's movements are all closed. There is no demand for oil at all. The oil prices, which were originally supposed to be delivered in May, have fallen. Because there is no longer room for oil in the archives. The price of WTI oil, which was supposed to be delivered in June, dropped to $ 25 a barrel yesterday. Dollars. Analysts fear that if the lockdown is issued around the world, the price of oil that is supposed to be supplied in June may fall further. Due to the coronavirus epidemic, the demand for fuel oil market has decreased since the beginning of this year. As a result, prices have dropped sharply in the world market. \n \n US oil reserves are no longer able to handle excess oil pressure. The price is falling further. By the end of March, prices have come down to the lowest position in five years.","body_my":"\u1021\u1014\u1031\u102c\u1000\u103a\u1010\u1000\u1039\u1000\u1006\u1000\u103a\u1021\u101c\u101a\u103a\u1021\u101c\u1010\u103a (WTI) \u104f\u1005\u103b\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u101b\u1031\u1014\u1036\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a\u1010\u103d\u1004\u103a\u1000\u103c\u102c\u1019\u103c\u1004\u1037\u103a\u1005\u103d\u102c\u1000\u1010\u100a\u103a\u1038\u1000\u101b\u103e\u102d\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u1000\u103b\u1006\u1004\u103a\u1038\u1019\u103e\u102f\u1019\u100a\u103a\u101e\u102d\u102f\u1037\u1015\u1004\u103a\u1016\u103c\u1005\u103a\u1005\u1031\u1005\u1005\u103a\u1015\u103d\u1032\u104f\u1005\u103b\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u101e\u100a\u103a\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038 \u1043\u1040\u1040 \u101b\u102c\u1001\u102d\u102f\u1004\u103a\u1014\u103e\u102f\u1014\u103a\u1038\u1000\u103b\u1006\u1004\u103a\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u1000\u102d\u102f\u1019\u1010\u103d\u1031\u1037\u101b\u1015\u102b\u104b \u1019\u1031\u101c\u1005\u102c\u1001\u103b\u102f\u1015\u103a\u1001\u103b\u102f\u1015\u103a\u1006\u102d\u102f\u101e\u100a\u1037\u103a\u1014\u1031\u1037\u1010\u103d\u1004\u103a\u101b\u1031\u1014\u1036\u1008\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u101e\u100a\u103a\u1010\u1005\u103a\u1005\u100a\u103a\u101c\u103b\u103e\u1004\u103a\u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1012\u1031\u102b\u103a\u101c\u102c \u1045.\u1047 \u1019\u103e\u1000\u103b\u1006\u1004\u103a\u1038\u1015\u103c\u102e\u1038\u1010\u1005\u103a\u1005\u100a\u103a\u101c\u103b\u103e\u1004\u103a\u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1012\u1031\u102b\u103a\u101c\u102c \u1041 \u1012\u1031\u102b\u103a\u101c\u102c\u1021\u1031\u102c\u1000\u103a\u101e\u102d\u102f\u1037\u1000\u103b\u1006\u1004\u103a\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1000\u102f\u1014\u103a\u101e\u103d\u101a\u103a\u101b\u1031\u1038\u101b\u1014\u103a\u1015\u102f\u1036\u1004\u103d\u1031\u1021\u1016\u103d\u1032\u1037\u1000\u102d\u102f\u1015\u1030\u1038\u1010\u103d\u1032\u1010\u100a\u103a\u1011\u1031\u102c\u1004\u103a\u101e\u1030 Doug King \u1000\u201c \u1012\u102e\u1014\u1031\u1037\u101f\u102c\u1000\u1019\u1039\u1018\u102c\u101c\u102f\u1036\u1038\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u101b\u1031\u1014\u1036\u101c\u102f\u1015\u103a\u1004\u1014\u103a\u1038\u1021\u1010\u103d\u1000\u103a\u1021\u1000\u103c\u102e\u1038\u1021\u1000\u103b\u101a\u103a\u1015\u103b\u1000\u103a\u1005\u102e\u1038\u1006\u102f\u1036\u1038\u1014\u1031\u1037\u1015\u102b\u1015\u1032\u104b \u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u104f\u1005\u103d\u1019\u103a\u1038\u1006\u1031\u102c\u1004\u103a\u101b\u100a\u103a\u1000\u102d\u102f\u1016\u103c\u100a\u1037\u103a\u1006\u100a\u103a\u1038\u1001\u103c\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u1019\u101f\u102f\u1010\u103a\u101e\u103d\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1000\u1036\u1019\u1000\u1031\u102c\u1004\u103a\u1038\u1021\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u1019\u101c\u103e\u1005\u103d\u102c\u1021\u101b\u1031\u102c\u1004\u103a\u1038\u1021 \u1040 \u101a\u103a\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a\u1010\u103d\u1004\u103a\u1016\u103c\u1005\u103a\u1015\u103b\u1000\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u101e\u1031\u102c\u1037\u1001\u1010\u103a\u1011\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1000\u1019\u1039\u1018\u102c\u1010\u1005\u103a\u101d\u103e\u1019\u103a\u1038\u1010\u103d\u1004\u103a\u1001\u101b\u102e\u1038\u101e\u103d\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u104a \u101c\u1030\u1019\u103b\u102c\u1038\u104f\u101c\u103e\u102f\u1015\u103a\u101b\u103e\u102c\u1038\u1019\u103e\u102f\u1021\u102c\u1038\u101c\u102f\u1036\u1038\u1000\u102d\u102f\u1015\u102d\u1010\u103a\u1011\u102c\u1038\u101b\u101e\u100a\u103a\u104b \u101c\u102f\u1036\u1038\u101d\u1006\u102e\u101d\u101a\u103a\u101c\u102d\u102f\u1021\u102c\u1038\u1019\u101b\u103e\u102d\u1015\u102b\u104b \u1019\u1030\u101c\u1000\u1019\u1031\u101c\u1010\u103d\u1004\u103a\u1010\u1004\u103a\u1015\u102d\u102f\u1037\u1019\u100a\u103a\u101f\u102f\u101a\u1030\u1006\u101b\u101e\u1031\u102c\u101b\u1031\u1014\u1036\u1005\u103b\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u103b\u1006\u1004\u103a\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1018\u102c\u1016\u103c\u1005\u103a\u101c\u102d\u102f\u1037\u101c\u1032\u1006\u102d\u102f\u1010\u1031\u102c\u1037\u1019\u1031\u102c\u103a\u1000\u103d\u1014\u103a\u1038\u1010\u102d\u102f\u1000\u103a\u1011\u1032\u1019\u103e\u102c\u1006\u102e\u1021\u1010\u103d\u1000\u103a\u1014\u1031\u101b\u102c\u1019\u101b\u103e\u102d\u1010\u1031\u102c\u1037\u101c\u102d\u102f\u1037\u1015\u1032\u104b \u1007\u103d\u1014\u103a\u101c\u1010\u103d\u1004\u103a\u1016\u103c\u1014\u1037\u103a\u101d\u1031\u1019\u100a\u103a\u101f\u102f\u101a\u1030\u1006\u101b\u101e\u1031\u102c WTI \u101b\u1031\u1014\u1036\u101e\u100a\u103a\u1019\u1014\u1031\u1037\u1000\u1010\u1005\u103a\u1005\u100a\u103a\u101c\u103b\u103e\u1004\u103a \u1042\u1045 \u1012\u1031\u102b\u103a\u101c\u102c\u101e\u102d\u102f\u1037\u1000\u103b\u1006\u1004\u103a\u1038\u101e\u103d\u102c\u1038\u101e\u100a\u103a\u104b \u1012\u1031\u102b\u103a\u101c\u102c\u104b \u101c\u1031\u1037\u101c\u102c\u101e\u102f\u1036\u1038\u101e\u1015\u103a\u101e\u1030\u1019\u103b\u102c\u1038\u1000\u1000\u1019\u1039\u1018\u102c\u1021\u1014\u103e\u1036\u1037\u101b\u1031\u102c\u1004\u103a\u1038\u1001\u103b\u1019\u103e\u102f\u1015\u102d\u1010\u103a\u1006\u102d\u102f\u1037\u1001\u103c\u1004\u103a\u1038\u1000\u102d\u102f\u1011\u102f\u1010\u103a\u1015\u103c\u1014\u103a\u1001\u1032\u1037\u1015\u102b\u1000\u1007\u103d\u1014\u103a\u101c\u1010\u103d\u1004\u103a\u1010\u1004\u103a\u1015\u102d\u102f\u1037\u1019\u100a\u1037\u103a\u101c\u1031\u102c\u1004\u103a\u1005\u102c\u1006\u102e\u1008\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1011\u1015\u103a\u1019\u1036\u1000\u103b\u1006\u1004\u103a\u1038\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u101f\u102f\u1005\u102d\u102f\u1038\u101b\u102d\u1019\u103a\u1014\u1031\u1000\u103c\u101e\u100a\u103a\u104b Coronavirus \u1000\u1015\u103a\u101b\u1031\u102c\u1002\u102b\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u101a\u1001\u102f\u1014\u103e\u1005\u103a\u1021\u1005\u1019\u103e\u101c\u1031\u102c\u1004\u103a\u1005\u102c\u1006\u102e\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a \u1040 \u101a\u103a\u101c\u102d\u102f\u1021\u102c\u1038\u1000\u103b\u1006\u1004\u103a\u1038\u101c\u102c\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1000\u1019\u1039\u1018\u102c\u1037\u1005\u103b\u1031\u1038\u1000\u103d\u1000\u103a\u1010\u103d\u1004\u103a\u1005\u103b\u1031\u1038\u1014\u103e\u102f\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u101e\u102d\u101e\u102d\u101e\u102c\u101e\u102c\u1000\u103b\u1006\u1004\u103a\u1038\u101e\u103d\u102c\u1038\u101e\u100a\u103a\u104b \u1014\u1031\u102c\u1000\u103a\u1011\u1015\u103a\u1005\u103b\u1031\u1038\u1000\u1000\u103b\u1014\u1031\u1010\u101a\u103a\u104b \u1019\u1010\u103a\u101c\u1021\u1000\u102f\u1014\u103a\u1010\u103d\u1004\u103a\u1004\u102b\u1038\u1014\u103e\u1005\u103a\u1021\u1010\u103d\u1004\u103a\u1038\u1021\u1014\u102d\u1019\u1037\u103a\u1006\u102f\u1036\u1038\u1021\u1006\u1004\u1037\u103a\u101e\u102d\u102f\u1037\u1000\u103b\u1006\u1004\u103a\u1038\u101e\u103d\u102c\u1038\u101e\u100a\u103a\u104b","content_image":"","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/mMj2rGgnRfGgSujmApicHV4KFYcIVHMRnvKTZT1V.mp4","author":null,"author_image":"","status":0,"created_at":"Apr 21, 2020","updated_at":"Jun 16, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/62"},{"id":64,"title_bn":"\u0995\u09b0\u09cb\u09a8\u09be \u09ae\u09cb\u0995\u09be\u09ac\u09bf\u09b2\u09be\u09df \u0993\u0986\u0987\u09b8\u09bf \u09a6\u09c7\u09b6\u0997\u09c1\u09b2\u09cb \u09ac\u09c8\u09a0\u0995\u09c7 \u09ac\u09b8\u099b\u09c7","title_en":"OIC countries are meeting to fight Corona","title_my":"OIC \u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u101e\u100a\u103a Corona \u1021\u102c\u1038\u1010\u102d\u102f\u1000\u103a\u1001\u102d\u102f\u1000\u103a\u101b\u1014\u103a\u1010\u103d\u1031\u1037\u1006\u102f\u1036\u1014\u1031\u1000\u103c\u101e\u100a\u103a","subtitle_bn":"\u09ac\u09c8\u09b6\u09cd\u09ac\u09bf\u0995 \u09ae\u09b9\u09be\u09ae\u09be\u09b0\u09bf \u0986\u0995\u09be\u09b0 \u09a7\u09be\u09b0\u09a8 \u0995\u09b0\u09be \u0995\u09b0\u09cb\u09a8\u09be\u09ad\u09be\u0987\u09b0\u09be\u09b8 \u09ae\u09cb\u0995\u09be\u09ac\u09bf\u09b2\u09be\u09df \u099c\u09b0\u09c1\u09b0\u09bf \u09ac\u09c8\u09a0\u0995\u09c7 \u09ac\u09b8\u09a4\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7 \u0987\u09b8\u09b2\u09be\u09ae\u09bf\u0995 \u09a6\u09c7\u09b6\u0997\u09c1\u09b2\u09cb\u09b0 \u09b8\u0982\u09b8\u09cd\u09a5\u09be \u0993\u0986\u0987\u09b8\u09bf\u0964 \u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2 \u09ac\u09c1\u09a7\u09ac\u09be\u09b0 \u09ad\u09bf\u09a1\u09bf\u0993 \u0995\u09a8\u09ab\u09be\u09b0\u09c7\u09a8\u09cd\u09b8\u09c7\u09b0 \u09ae\u09be\u09a7\u09cd\u09af\u09ae\u09c7 \u0993\u0986\u0987\u09b8\u09bf \u09b8\u09a6\u09b8\u09cd\u09af \u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u09b0\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09ae\u09a8\u09cd\u09a4\u09cd\u09b0\u09c0\u09b0\u09be \u09ac\u09c8\u09a0\u0995\u09c7 \u09ac\u09b8\u099b\u09c7\u09a8\u0964","subtitle_en":"OIC is set to hold an emergency meeting to combat the global pandemic of coronavirus. The foreign ministers of the OIC member country are meeting with a video conference on Wednesday.","subtitle_my":"\u1000\u1019\u1039\u1018\u102c\u1010\u1005\u103a \u1040 \u1014\u103a\u1038 Coronavirus \u1000\u1030\u1038\u1005\u1000\u103a\u101b\u1031\u102c\u1002\u102b\u1000\u102d\u102f\u1010\u102d\u102f\u1000\u103a\u1016\u103b\u1000\u103a\u101b\u1014\u103a\u1021\u1010\u103d\u1000\u103a OIC \u101e\u100a\u103a\u1021\u101b\u1031\u1038\u1015\u1031\u102b\u103a\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u101b\u1014\u103a\u1005\u102e\u1005\u1009\u103a\u1011\u102c\u1038\u101e\u100a\u103a\u104b \u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038\u1014\u1031\u1037\u1000 OIC \u1021\u1016\u103d\u1032\u1037\u101d\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u104f\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1001\u103c\u102c\u1038\u101b\u1031\u1038 \u1040 \u1014\u103a\u1000\u103c\u102e\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1017\u102e\u1012\u102e\u101a\u102d\u102f\u1000\u103d\u1014\u103a\u1016\u101b\u1004\u1037\u103a\u1010\u1005\u103a\u1001\u102f\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b","body_bn":"\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0 \u09aa\u09b0\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0 \u09ae\u09a8\u09cd\u09a4\u09cd\u09b0\u09a3\u09be\u09b2\u09df \u09a5\u09c7\u0995\u09c7 \u09aa\u09be\u09a0\u09be\u09a8\u09cb \u098f\u0995 \u09ac\u09be\u09b0\u09cd\u09a4\u09be\u09df \u098f\u0987 \u09a4\u09a5\u09cd\u09af \u099c\u09be\u09a8\u09be\u09a8\u09cb \u09b9\u09df\u09c7\u099b\u09c7\u0964 \u09ac\u09be\u09b0\u09cd\u09a4\u09be\u09df \u09ac\u09b2\u09be \u09b9\u09df, \u0995\u09b0\u09cb\u09a8\u09be\u09ad\u09be\u0987\u09b0\u09be\u09b8 \u09b6\u09c1\u09b0\u09c1 \u09b9\u0993\u09df\u09be\u09b0 \u09aa\u09b0 \u09a5\u09c7\u0995\u09c7 \u09ac\u09bf\u09ad\u09bf\u09a8\u09cd\u09a8 \u0995\u09be\u09b0\u09cd\u09af\u0995\u09cd\u09b0\u09ae \u09b9\u09be\u09a4\u09c7 \u09a8\u09bf\u09df\u09c7\u099b\u09c7 \u0993\u0986\u0987\u09b8\u09bf\u0964 \u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2 \u0993\u0986\u0987\u09b8\u09bf \u09b8\u09a6\u09b8\u09cd\u09af \u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u09b0\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09ae\u09a8\u09cd\u09a4\u09cd\u09b0\u09c0\u09b0\u09be \u09ac\u09c8\u09a0\u0995\u09c7 \u099c\u09a8\u09b8\u09cd\u09ac\u09be\u09b8\u09cd\u09a5\u09cd\u09af, \u09a8\u09bf\u09b0\u09be\u09aa\u09a4\u09cd\u09a4\u09be \u098f\u09ac\u0982 \u0985\u09b0\u09cd\u09a5\u09a8\u09c8\u09a4\u09bf\u0995 \u09b8\u09cd\u09a5\u09bf\u09a4\u09bf\u09b6\u09c0\u09b2\u09a4\u09be \u09a8\u09bf\u09df\u09c7 \u0986\u09b2\u09cb\u099a\u09a8\u09be \u0995\u09b0\u09ac\u09c7\u09a8\u0964\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u0993\u0986\u0987\u09b8\u09bf \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u09b9\u09c0 \u0995\u09ae\u09bf\u099f\u09bf\u09b0 \u09b8\u09a6\u09b8\u09cd\u09af \u09a6\u09c7\u09b6\u0997\u09c1\u09b2\u09cb \u09b9\u099a\u09cd\u099b\u09c7 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6, \u09a4\u09c1\u09b0\u09b8\u09cd\u0995, \u09b8\u09cc\u09a6\u09bf \u0986\u09b0\u09ac, \u0997\u09be\u09ae\u09cd\u09ac\u09bf\u09df\u09be, \u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4 \u0986\u09b0\u09ac \u0986\u09ae\u09bf\u09b0\u09be\u09a4 \u0993 \u09a8\u09be\u0987\u099c\u09be\u09b0\u0964 \u09e7\u09ea\u09a4\u09ae \u0987\u09b8\u09b2\u09be\u09ae\u09bf\u0995 \u09b8\u09be\u09ae\u09bf\u099f \u0995\u09a8\u09ab\u09be\u09b0\u09c7\u09a8\u09cd\u09b8\u09c7\u09b0 \u099a\u09c7\u09df\u09be\u09b0\u09ae\u09cd\u09af\u09be\u09a8 \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u09ac\u09c8\u09a0\u0995\u09c7 \u09b8\u09ad\u09be\u09aa\u09a4\u09bf\u09a4\u09cd\u09ac \u0995\u09b0\u09ac\u09c7 \u09b8\u09cc\u09a6\u09bf \u0986\u09b0\u09ac\u0964\n\n\u09ac\u09c8\u09a0\u0995\u09c7 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u0995\u09cd\u09b7\u09c7 \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4 \u09a5\u09be\u0995\u09ac\u09c7\u09a8 \u09aa\u09b0\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09ae\u09a8\u09cd\u09a4\u09cd\u09b0\u09c0 \u098f \u0995\u09c7 \u0986\u09ac\u09a6\u09c1\u09b2 \u09ae\u09cb\u09ae\u09c7\u09a8\u0964","body_en":"The information was revealed in a message sent from the Foreign Ministry on Tuesday. According to the message, OIC has taken various activities since the onset of coronavirus. The foreign ministers of the OIC member countries will discuss public health, security and economic stability at the meeting tomorrow. The current OIC executive committee members are Bangladesh, Turkey, Saudi Arabia, Gambia, United Arab Emirates and Niger. Saudi Arabia will preside over the meeting as Chairman of the 5th Islamic Summit Conference. \n \n Foreign Minister AK Abdul Momen will be present for Bangladesh at the meeting.","body_my":"\u1021\u1006\u102d\u102f\u1015\u102b\u101e\u1010\u1004\u103a\u1038\u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1021\u1004\u103a\u1039\u1002\u102b\u1014\u1031\u1037\u1000\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1001\u103c\u102c\u1038\u101b\u1031\u1038 \u1040 \u1014\u103a\u1000\u103c\u102e\u1038\u100c\u102c\u1014\u1019\u103e\u1015\u1031\u1038\u1015\u102d\u102f\u1037\u101e\u1031\u102c\u1005\u102c\u1010\u103d\u1004\u103a\u1016\u1031\u102c\u103a\u1015\u103c\u1011\u102c\u1038\u101e\u100a\u103a\u104b \u1019\u1000\u103a\u1006\u1031\u1037\u1001\u103a\u103b\u1021\u101b OIC \u101e\u100a\u103a coronavirus \u1005\u1010\u1004\u103a\u1015\u103c\u102e\u1038\u1000\u1010\u100a\u103a\u1038\u1000\u101c\u103e\u102f\u1015\u103a\u101b\u103e\u102c\u1038\u1019\u103e\u102f\u1021\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102d\u102f\u1038\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b OIC \u1021\u1016\u103d\u1032\u1037 \u1040 \u1004\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u1019\u103e\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1001\u103c\u102c\u1038\u101b\u1031\u1038 \u1040 \u1014\u103a\u1000\u103c\u102e\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a\u1010\u103d\u1004\u103a\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u1010\u103d\u1004\u103a\u1015\u103c\u100a\u103a\u101e\u1030\u1037\u1000\u103b\u1014\u103a\u1038\u1019\u102c\u101b\u1031\u1038\u104a \u101c\u102f\u1036\u1001\u103c\u102f\u1036\u101b\u1031\u1038\u1014\u103e\u1004\u1037\u103a\u1005\u102e\u1038\u1015\u103d\u102c\u1038\u101b\u1031\u1038\u1010\u100a\u103a\u1004\u103c\u102d\u1019\u103a\u1019\u103e\u102f\u1000\u102d\u102f\u1006\u103d\u1031\u1038\u1014\u103d\u1031\u1038\u101e\u103d\u102c\u1038\u1019\u100a\u103a\u1016\u103c\u1005\u103a\u1015\u103c\u102e\u1038\u101c\u1000\u103a\u101b\u103e\u102d OIC \u1021\u101c\u102f\u1015\u103a\u1021\u1019\u103e\u102f\u1006\u1031\u102c\u1004\u103a\u1000\u1031\u102c\u103a\u1019\u1010\u102e\u101d\u1004\u103a\u1019\u103b\u102c\u1038\u1019\u103e\u102c\u1018\u1004\u103a\u1039\u1002\u101c\u102c\u1038\u1012\u1031\u1037\u101b\u103a\u103e\u104a \u1010\u1030\u101b\u1000\u102e\u104a \u1006\u1031\u102c\u103a\u1012\u102e\u1021\u102c\u101b\u1031\u1038\u1017\u102e\u1038\u101a\u102c\u1038\u104a \u1002\u1019\u103a\u1018\u102e\u101a\u102c\u104a \u1006\u1031\u102c\u103a\u1012\u102e\u1021\u102c\u101b\u1031\u1017\u103b\u1019\u103e \u1045 \u1000\u103c\u102d\u1019\u103a\u1019\u103c\u1031\u102c\u1000\u103a\u1021\u1005\u1039\u1005\u101c\u102c\u1019\u103a\u1019\u1005\u103a\u1011\u102d\u1015\u103a\u101e\u102e\u1038\u1021\u1005\u100a\u103a\u1038\u1021\u101d\u1031\u1038\u104f\u1025\u1000\u1039\u1000Chairman\u1039\u100c\u1021\u1016\u103c\u1005\u103a\u101e\u1018\u102c\u1015\u1010\u102d\u1021\u1016\u103c\u1005\u103a\u1006\u1031\u102c\u1004\u103a\u101b\u103d\u1000\u103a\u1019\u100a\u103a\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b \n \n \u1018\u1004\u103a\u1039\u1002\u101c\u102c\u1038\u1012\u1031\u1037\u101b\u103e\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1001\u103c\u102c\u1038\u101b\u1031\u1038\u101d\u1014\u103a\u1000\u103c\u102e\u1038 AK Abdul Momen \u101e\u100a\u103a\u1018\u1004\u103a\u1039\u1002\u101c\u102c\u1038\u1012\u1031\u1037\u101b\u103a\u103e\u101e\u102d\u102f\u1037\u1010\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1019\u100a\u103a\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/QoWSMV3Isly9C8fSy6gsAW1n6typ62ZeiYhbn8mZ.jpeg","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/MaHntxoeohEIApstFMbCpQlUQkpgOitpJvsoySdw.mp4","author":null,"author_image":"","status":1,"created_at":"Apr 21, 2020","updated_at":"Apr 21, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/64"},{"id":67,"title_bn":"\u0995\u09b0\u09cb\u09a8\u09be: \u0997\u09be\u099b\u09c7\u09b0 \u09ab\u09c1\u09b2 \u09aa\u099a\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7 \u0997\u09be\u099b\u09c7\u0987, \u09a6\u09bf\u09b6\u09c7\u09b9\u09be\u09b0\u09be \u099a\u09be\u09b7\u09bf\u09b0\u09be","title_en":"Corona: The flowers of the trees are rotting on the trees, the farmers are lost","title_my":"Corona - \u101e\u1005\u103a\u1015\u1004\u103a\u1015\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u101e\u1005\u103a\u1015\u1004\u103a\u1019\u103b\u102c\u1038\u1015\u1031\u102b\u103a\u1010\u103d\u1004\u103a\u1015\u102f\u1015\u103a\u1014\u1031\u1015\u103c\u102e\u1038\u101c\u101a\u103a\u101e\u1019\u102c\u1038\u1019\u103b\u102c\u1038\u1006\u102f\u1036\u1038\u101b\u103e\u102f\u1036\u1038\u101e\u103d\u102c\u1038\u101e\u100a\u103a","subtitle_bn":"\u09aa\u09cd\u09b0\u09be\u09a3\u0998\u09be\u09a4\u09c0 \u09a8\u09cb\u09ad\u09c7\u09b2 \u0995\u09b0\u09cb\u09a8\u09be \u09ad\u09be\u0987\u09b0\u09be\u09b8 (\u0995\u09cb\u09ad\u09bf\u09a1-\u09e7\u09ef) \u09aa\u09cd\u09b0\u09be\u09a6\u09c1\u09b0\u09cd\u09ad\u09be\u09ac\u09c7\u09b0 \u0995\u09be\u09b0\u09a3\u09c7 \u09a5\u09ae\u0995\u09c7 \u0997\u09c7\u099b\u09c7 \u09a6\u09c7\u09b6\u0964 \u098f\u09b0 \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \u09a5\u09c7\u0995\u09c7 \u09b0\u0995\u09cd\u09b7\u09be \u09aa\u09be\u09df\u09a8\u09bf \u09b0\u09be\u099c\u09a7\u09be\u09a8\u09c0\u09b0 \u0996\u09c1\u09ac \u0995\u09be\u099b\u09c7\u09b0 \u0989\u09aa\u099c\u09c7\u09b2\u09be \u09b8\u09be\u09ad\u09be\u09b0\u09c7\u09b0 \u0997\u09cb\u09b2\u09be\u09aa \u0997\u09cd\u09b0\u09be\u09ae \u09a8\u09be\u09ae\u09c7 \u0996\u09cd\u09af\u09be\u09a4 \u09ac\u09bf\u09b0\u09c1\u09b2\u09bf\u09df\u09be\u09b0 \u09b6\u09a4 \u09b6\u09a4 \u09ab\u09c1\u09b2 \u099a\u09be\u09b7\u09bf\u09b0\u09be\u0964","subtitle_en":"The country has come to a standstill due to the outbreak of the deadly novel corona virus (Covid-19). Hundreds of flower growers of Birulia, known as Golap village of Savar upazila, very close to the capital, could not escape from its effects.","subtitle_my":"\u101e\u1031\u1005\u1031\u1014\u102d\u102f\u1004\u103a\u101e\u1031\u102c\u101d\u1010\u1039\u1011\u102f Corona virus (Covid-19) \u1016\u103c\u1005\u103a\u1015\u103d\u102c\u1038\u1019\u103e\u102f\u1000\u103c\u1031\u102c\u1004\u1037\u103a\u1010\u102d\u102f\u1004\u103a\u1038\u1015\u103c\u100a\u103a\u101e\u100a\u103a\u101b\u1015\u103a\u1010\u1014\u1037\u103a\u101e\u103d\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \u1019\u103c\u102d\u102f\u1037\u1010\u1031\u102c\u103a\u1014\u103e\u1004\u1037\u103a\u1021\u101c\u103d\u1014\u103a\u1014\u102e\u1038\u1005\u1015\u103a\u101e\u1031\u102c Savar upazila, Golap \u1000\u103b\u1031\u1038\u101b\u103d\u102c\u101f\u102f\u101c\u1030\u101e\u102d\u1019\u103b\u102c\u1038\u101e\u1031\u102c Birulia \u1019\u103e\u101b\u102c\u1014\u103e\u1004\u1037\u103a\u1001\u103b\u102e\u101e\u1031\u102c\u1015\u1014\u103a\u1038\u1005\u102d\u102f\u1000\u103a\u1015\u103b\u102d\u102f\u1038\u101e\u1030\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u104e\u1004\u103a\u1038\u104f\u1021\u1000\u103b\u102d\u102f\u1038\u101e\u1000\u103a\u101b\u1031\u102c\u1000\u103a\u1019\u103e\u102f\u1019\u103e\u1019\u101c\u103d\u1010\u103a\u1019\u103c\u1031\u102c\u1000\u103a\u1014\u102d\u102f\u1004\u103a\u1015\u102b\u104b","body_bn":"\u0997\u09a4 \u09e8\u09ec \u09ae\u09be\u09b0\u09cd\u099a \u09a5\u09c7\u0995\u09c7 \u09aa\u09b9\u09c7\u09b2\u09be \u09ac\u09c8\u09b6\u09be\u0996\u09c7 \u09ab\u09c1\u09b2 \u09ac\u09bf\u0995\u09cd\u09b0\u09bf\u09b0 \u099f\u09be\u09b0\u09cd\u0997\u09c7\u099f \u09a8\u09bf\u09df\u09c7 \u099a\u09be\u09b7\u09bf\u09b0\u09be \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4\u09bf \u09a8\u09bf\u09b2\u09c7\u0993 \u0995\u09b0\u09cb\u09a8\u09be\u09b0 \u0995\u09be\u09b0\u09a3\u09c7 \u0995\u09cd\u09b7\u09c7\u09a4\u0997\u09c1\u09b2\u09cb \u09a5\u09c7\u0995\u09c7 \u09ab\u09c1\u09b2 \u09a4\u09c1\u09b2\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u09a8\u09a8\u09bf\u0964 \u09ab\u09b2\u09c7 \u0995\u09cd\u09b7\u09c7\u09a4\u09c7\u09b0 \u09ac\u09dc \u09ac\u09dc \u09b2\u09be\u09b2 \u0997\u09cb\u09b2\u09be\u09aa\u0997\u09c1\u09b2\u09cb \u0997\u09be\u099b\u09c7\u0987 \u09aa\u099a\u09c7 \u09a8\u09b7\u09cd\u099f \u09b9\u09df\u09c7 \u09af\u09be\u099a\u09cd\u099b\u09c7\u0964 \u09ab\u09b2\u09c7 \u09a6\u09bf\u09b6\u09c7\u09b9\u09be\u09b0\u09be \u09b9\u09df\u09c7 \u09aa\u09dc\u099b\u09c7\u09a8 \u099a\u09be\u09b7\u09bf\u09b0\u09be\u0964 \u09b8\u09c7\u0987\u09b8\u0999\u09cd\u0997\u09c7 \u09a7\u09be\u09b0 \u09a6\u09c7\u09a8\u09be\u09df \u099c\u09b0\u09cd\u099c\u09b0\u09bf\u09a4 \u0995\u09c3\u09b7\u0995 \u09aa\u09b0\u09bf\u09ac\u09be\u09b0\u0997\u09c1\u09b2\u09cb\u09a4\u09c7 \u099a\u09b2\u099b\u09c7 \u09b6\u09c1\u09a7\u09c1 \u09b9\u09be\u09b9\u09be\u0995\u09be\u09b0\u0964\n\n\u09b8\u09be\u09ad\u09be\u09b0 \u0995\u09c3\u09b7\u09bf \u09b8\u09ae\u09cd\u09aa\u09cd\u09b0\u09b8\u09be\u09b0\u09a3 \u0985\u09a7\u09bf\u09a6\u09aa\u09cd\u09a4\u09b0 \u09b8\u09c2\u09a4\u09cd\u09b0\u09c7 \u099c\u09be\u09a8\u09be \u0997\u09c7\u099b\u09c7, \u098f\u09ac\u09be\u09b0 \u09ac\u09bf\u09b0\u09c1\u09b2\u09bf\u09df\u09be\u09b8\u09b9 \u09b8\u09be\u09ad\u09be\u09b0\u09c7\u09b0 \u0995\u09df\u09c7\u0995\u099f\u09bf \u099c\u09be\u09df\u0997\u09be\u09df \u09aa\u09cd\u09b0\u09be\u09df \u09e9\u09e6\u09e6 \u098f\u0995\u09b0 \u099c\u09ae\u09bf\u09a4\u09c7 \u0997\u09cb\u09b2\u09be\u09aa\u09b8\u09b9 \u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af \u09ab\u09c1\u09b2\u09c7\u09b0 \u099a\u09be\u09b7 \u0995\u09b0\u09c7\u099b\u09c7\u09a8 \u099a\u09be\u09b7\u09bf\u09b0\u09be\u0964 \u098f \u09ac\u099b\u09b0 \u09b2\u09be\u09ad\u09c7\u09b0 \u09aa\u09cd\u09b0\u09a4\u09cd\u09af\u09be\u09b6\u09be \u099b\u09bf\u09b2 \u0995\u09df\u09c7\u0995 \u0995\u09cb\u099f\u09bf \u099f\u09be\u0995\u09be\u0964 \u0995\u09b0\u09cb\u09a8\u09be\u09b0 \u0986\u0997\u09c7 \u0995\u09df\u09c7\u0995\u099f\u09bf \u09a6\u09bf\u09ac\u09b8\u09c7 \u098f \u09aa\u09b0\u09cd\u09af\u09a8\u09cd\u09a4 \u09e9\u09e6 \u09b6\u09a4\u09be\u0982\u09b6 \u09ab\u09c1\u09b2 \u09ac\u09bf\u0995\u09cd\u09b0\u09bf \u09b9\u09df\u09c7\u099b\u09c7, \u09ac\u09be\u0995\u09bf \u09ab\u09c1\u09b2\u0997\u09c1\u09b2\u09cb \u0995\u09cd\u09b7\u09c7\u09a4\u09c7\u0987 \u09b0\u09df\u09c7 \u0997\u09c7\u099b\u09c7\u0964","body_en":"Although the farmers have been preparing for the first Baishakh flower sale since March 26, they have not been able to pick flowers from the fields due to corona. As a result, the big red roses of the field are rotting on the trees. As a result, the farmers are getting lost. At the same time, there is only wailing among the debt-ridden farming families. \n \n Farmers. The profit expected this year was a few crores. In the few days before Corona, 30 percent of the flowers have been sold so far, with the rest remaining in the field.","body_my":"\u101c\u101a\u103a\u101e\u1019\u102c\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1019\u1010\u103a\u101c \u1042\u1046 \u101b\u1000\u103a\u1019\u103e\u1005\u104d \u1015\u1011\u1019\u1006\u102f\u1036\u1038 Baishakh \u1015\u1014\u103a\u1038\u101b\u1031\u102c\u1004\u103a\u1038\u101b\u1014\u103a\u1015\u103c\u1004\u103a\u1006\u1004\u103a\u1014\u1031\u1000\u103c\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038 Corona \u1000\u103c\u1031\u102c\u1004\u1037\u103a\u101c\u101a\u103a\u1000\u103d\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u1019\u103e\u1015\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u101b\u103d\u1031\u1038\u1014\u102d\u102f\u1004\u103a\u1001\u103c\u1004\u103a\u1038\u1019\u101b\u103e\u102d\u101e\u1031\u1038\u1015\u1031\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1010\u1031\u102c\u1014\u102e\u1019\u103b\u102c\u1038\u1000\u101e\u1005\u103a\u1015\u1004\u103a\u1019\u103b\u102c\u1038\u1015\u1031\u102b\u103a\u1010\u103d\u1004\u103a\u1015\u102f\u1015\u103a\u1014\u1031\u101e\u100a\u103a\u104b \u101b\u101c\u1012\u103a\u1021\u1014\u1031\u1014\u103e\u1004\u1037\u103a\u101c\u101a\u103a\u101e\u1019\u102c\u1038\u1019\u103b\u102c\u1038\u1006\u102f\u1036\u1038\u101b\u103e\u102f\u1036\u1038\u101e\u103d\u102c\u1038\u101e\u100a\u103a\u104b \u1010\u1005\u103a\u1001\u103b\u102d\u1014\u103a\u1010\u100a\u103a\u1038\u1019\u103e\u102c\u1015\u1004\u103a\u1000\u103c\u103d\u1031\u1038\u1019\u103c\u102e\u1019\u103b\u102c\u1038\u101c\u103b\u1031\u102c\u1037\u1014\u100a\u103a\u1038\u1014\u1031\u101e\u1031\u102c\u101c\u101a\u103a\u101a\u102c\u1019\u102d\u101e\u102c\u1038\u1005\u102f\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1004\u102d\u102f\u1000\u103c\u103d\u1031\u1038\u1019\u103c\u100a\u103a\u1010\u1019\u103a\u1038\u1001\u103c\u1004\u103a\u1038\u101e\u102c\u101b\u103e\u102d\u101e\u100a\u103a\u104b \n \n \u101c\u101a\u103a\u101e\u1019\u102c\u1038\u1019\u103b\u102c\u1038\u104b \u101a\u1001\u102f\u1014\u103e\u1005\u103a\u1010\u103d\u1004\u103a\u1019\u103b\u103e\u1031\u102c\u103a\u101c\u1004\u1037\u103a\u101b\u101e\u1031\u102c\u1021\u1019\u103c\u1010\u103a\u101e\u100a\u103a\u1000\u102fcro\u1031\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a\u101e\u102c\u101b\u103e\u102d\u101e\u100a\u103a\u104b Corona \u1019\u1010\u102d\u102f\u1004\u103a\u1019\u102e\u101b\u1000\u103a\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a\u1021\u1010\u103d\u1004\u103a\u1038\u1015\u1014\u103a\u1038 \u1043\u1040 \u101b\u102c\u1014\u103e\u102f\u1014\u103a\u1038\u1000\u102d\u102f\u101a\u1001\u102f\u1021\u1001\u103b\u102d\u1014\u103a\u1021\u1011\u102d\u101b\u1031\u102c\u1004\u103a\u1038\u1001\u103b\u1001\u1032\u1037\u1015\u103c\u102e\u1038\u1000\u103b\u1014\u103a\u1019\u103b\u102c\u1038\u1019\u103e\u102c\u1000\u103b\u1014\u103a\u101b\u103e\u102d\u1014\u1031\u101e\u1031\u1038\u101e\u100a\u103a\u104b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/kbK2khceoojYtv2HsJ8htaqLsiME83rGfja3U5ds.png","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/4k2L8LvQhBsTN4Hjewcsq8UMCT7MtbnrZtBuRtdx.mp4","author":null,"author_image":"","status":1,"created_at":"Apr 23, 2020","updated_at":"Apr 23, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/67"},{"id":79,"title_bn":null,"title_en":"The patient is healthy, but the corona is positive-","title_my":"\u1005\u1019\u103a\u1038\u101e\u1015\u103a\u1001\u103c\u1004\u103a\u1038","subtitle_bn":null,"subtitle_en":"This is a company","subtitle_my":"\u1012\u102b\u1000\u1000\u102f\u1019\u1039\u1015\u100f\u102e\u1010\u1005\u103a\u1001\u102f\u1015\u102b","body_bn":null,"body_en":"This is a company","body_my":"\u1012\u102b\u1000\u1000\u102f\u1019\u1039\u1015\u100f\u102e\u1010\u1005\u103a\u1001\u102f\u1015\u102b","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/VNzVuzifgEfGWUtb9Q5U2GSBkApl7ZUbH33ymiXy.jpeg","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/pUmEsis2zJibXQjZR0YMWKzC6WCvUQBQCSg99pGa.mp4","author":null,"author_image":"","status":1,"created_at":"Jun 24, 2020","updated_at":"Jun 25, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/79"},{"id":80,"title_bn":null,"title_en":"Vaccine alliance finds manufacturing capacity for 4 bln doses of coronavirus vaccines","title_my":"\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u101f\u102c\u1019\u102d\u1010\u103a\u1021\u1016\u103d\u1032\u1037\u101e\u100a\u103a coronavirus \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u104f \u1044 \u1018\u102e\u101c\u102e\u101a\u1036\u1015\u1019\u102c\u100f\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1005\u103d\u1019\u103a\u1038\u101b\u100a\u103a\u1000\u102d\u102f\u1010\u103d\u1031\u1037\u101b\u103e\u102d\u1001\u1032\u1037\u101e\u100a\u103a","subtitle_bn":null,"subtitle_en":"An influential foundation focused on preparation and response to epidemics that is backing nine potential coronavirus vaccines has identified manufacturers with capacity to produce four billion doses a year, the group's top manufacturing expert told Reuters.","subtitle_my":"\u1021\u101c\u102c\u1038\u1021\u101c\u102c\u101b\u103e\u102d\u101e\u1031\u102c coronavirus \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038 \u1049 \u1001\u102f\u1000\u102d\u102f\u1011\u1031\u102c\u1000\u103a\u1001\u1036\u1021\u102c\u1038\u1015\u1031\u1038\u101e\u100a\u1037\u103a\u1000\u1015\u103a\u101b\u1031\u102c\u1002\u102b\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1000\u103c\u102d\u102f\u1010\u1004\u103a\u1015\u103c\u1004\u103a\u1006\u1004\u103a\u1001\u103c\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1010\u102f\u1014\u1037\u103a\u1015\u103c\u1014\u103a\u1001\u103c\u1004\u103a\u1038\u1021\u1015\u1031\u102b\u103a\u1021\u1013\u102d\u1000\u1011\u102c\u1038\u101e\u100a\u1037\u103a\u101e\u103c\u1007\u102c\u101c\u103d\u103e\u1019\u103a\u1038\u1019\u102d\u102f\u1038\u1019\u103e\u102f\u101b\u103e\u102d\u101e\u1031\u102c\u1021\u1001\u103c\u1031\u1001\u1036\u1021\u102f\u1010\u103a\u1019\u103c\u1005\u103a\u101e\u100a\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101e\u1030\u1019\u103b\u102c\u1038\u1021\u1014\u1031\u1016\u103c\u1004\u1037\u103a\u1010\u1005\u103a\u1014\u103e\u1005\u103a\u101c\u103b\u103e\u1004\u103a\u1006\u1031\u1038\u1015\u1019\u102c\u100f\u101c\u1031\u1038\u1018\u102e\u101c\u102e\u101a\u1036\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101b\u1014\u103a\u1005\u103d\u1019\u103a\u1038\u101b\u100a\u103a\u101b\u103e\u102d\u101e\u100a\u103a\u101f\u102f\u1021\u102f\u1015\u103a\u1005\u102f\u104f\u1011\u102d\u1015\u103a\u1010\u1014\u103a\u1038\u1000\u102f\u1014\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1000\u103b\u103d\u1019\u103a\u1038\u1000\u103b\u1004\u103a\u101e\u1030\u1000\u101b\u102d\u102f\u1000\u103a\u1010\u102c\u101e\u1010\u1004\u103a\u1038\u100c\u102c\u1014\u101e\u102d\u102f\u1037\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b","body_bn":null,"body_en":"The Coalition for Epidemic Preparedness Innovation (CEPI)plans to have two or three manufacturing plants for each vaccine, James Robinson, a longtime biopharma executive leading CEPI'S vast manufacturing push, said in an interview.\n\n\"Right now, we know we can do the two billion doses that we have as our kind of our minimum target\" by the end of 2021, he said.\n\nThe group is planning for eight to 10 regional distribution sites \"so that we don't have to make everything centrally and try and ship it around the world,\" he said.\n\nEven with no existing approved vaccines, CEPI is already getting manufacturing and supply chains lined up in a quest to ensure coronavirus vaccines are distributed equitably around the globe.\n\nThe Oslo, Norway-based group is backed by 14 governments, the Bill and Melinda Gates Foundation, and Britain's Wellcome Trust.\n\nCEPI has deployed up to $829 million so far in the search for a COVID-19 vaccine through partnerships with nine developers, with the hope that at least some will be successful.\n\nThey are Inovio Pharmaceuticals Inc, the University of Queensland with CSL Ltd, CureVac, Moderna Inc with US government backing, Novavax Inc, the University of Oxford with AstraZeneca, Clover Biopharmaceuticals, the University of Hong Kong, and a consortium led by Institut Pasteur and including the University of Pittsburgh and Themis Bioscience, which was recently purchased by Merck & Co.\n\nRobinson said CEPI has taken initial steps toward securing manufacturing capacity with more than 200 biopharma or sterile vaccine production companies.\n\n\"Most people don't believe that four billion is possible. I do,\" he said.\n\nRobinson, a manufacturing consultant who has worked at some of the world's biggest vaccine companies including Sanofi and Merck, said his group has done \"matchmaking\" based on manufacturers' capabilities and the specific needs of the various vaccines.\n\nEffective vaccines are seen as critical to stopping a pandemic that has infected more than 9.3 million people and killed nearly 480,000 globally with little sign of letting up.\n\nCEPI is taking care to ensure that the work to produce a vaccine to prevent COVID-19 does not sideline other critical vaccines. That has been a particular concern in less developed countries, Robinson said.\nThank You!","body_my":"\u1000\u1030\u1038\u1005\u1000\u103a\u101b\u1031\u102c\u1002\u102b\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u1000\u103c\u102d\u102f\u1010\u1004\u103a\u1015\u103c\u1004\u103a\u1006\u1004\u103a\u1019\u103e\u102f\u1010\u102e\u1011\u103d\u1004\u103a\u1019\u103e\u102f\u1006\u102d\u102f\u1004\u103a\u101b\u102c\u100a\u103d\u1014\u1037\u103a\u1015\u1031\u102b\u1004\u103a\u1038\u1021\u1016\u103d\u1032\u1037 (CEPI) \u101e\u100a\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1010\u1005\u103a\u1001\u102f\u1005\u102e\u1021\u1010\u103d\u1000\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1005\u1000\u103a\u101b\u102f\u1036\u1014\u103e\u1005\u103a\u1001\u102f\u101e\u102d\u102f\u1037\u1019\u101f\u102f\u1010\u103a\u101e\u102f\u1036\u1038\u1001\u102f\u1000\u102d\u102f\u1005\u102e\u1005\u1009\u103a\u101b\u1014\u103a\u1005\u102e\u1005\u1009\u103a\u1011\u102c\u1038\u101e\u100a\u103a\u104b \u1002\u103b\u102d\u1019\u103a\u1038\u1005\u103a\u101b\u1031\u102c\u103a\u1018\u1004\u103a\u1006\u1004\u103a\u101e\u100a\u103a CEPI \u104f\u1000\u103b\u101a\u103a\u1015\u103c\u1014\u1037\u103a\u101e\u1031\u102c\u1000\u102f\u1014\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1010\u102d\u102f\u1038\u1010\u1000\u103a\u1019\u103e\u102f\u1000\u102d\u102f \u1026\u1038 \u1006\u1031\u102c\u1004\u103a\u1014\u1031\u101e\u100a\u1037\u103a\u1007\u102e\u101d\u1006\u1031\u1038\u101d\u102b\u1038\u1021\u1019\u103e\u102f\u1006\u1031\u102c\u1004\u103a\u1021\u101b\u102c\u101b\u103e\u102d\u1001\u103b\u102f\u1015\u103a\u1000\u1010\u103d\u1031\u1037\u1006\u102f\u1036\u1019\u1031\u1038\u1019\u103c\u1014\u103a\u1038\u1001\u1014\u103a\u1038\u1010\u1005\u103a\u1001\u102f\u1010\u103d\u1004\u103a\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b :::::]] \u1042\u1040\u1042\u1041 \u1001\u102f\u1014\u103e\u1005\u103a\u1021\u1000\u102f\u1014\u103a\u1010\u103d\u1004\u103a\u201c \u101a\u1001\u102f\u1021\u1001\u103b\u102d\u1014\u103a\u1011\u102d\u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1010\u102d\u102f\u1037\u1021\u1014\u102d\u1019\u1037\u103a\u1006\u102f\u1036\u1038\u101b\u100a\u103a\u1019\u103e\u1014\u103a\u1038\u1001\u103b\u1000\u103a\u1016\u103c\u1005\u103a\u101e\u1031\u102c\u1000\u103b\u103d\u1014\u103a\u102f\u1015\u103a\u1010\u102d\u102f\u1037\u104f\u1006\u1031\u1038\u1015\u1019\u102c\u100f\u1014\u103e\u1005\u103a\u1018\u102e\u101c\u102e\u101a\u1036\u1000\u102d\u102f\u101c\u102f\u1015\u103a\u1014\u102d\u102f\u1004\u103a\u101e\u100a\u103a\u1000\u102d\u102f\u1004\u102b\u1010\u102d\u102f\u1037\u101e\u102d\u101e\u100a\u103a\u201d \u101f\u102f\u101e\u1030\u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n] [:::::]] \u1024\u1021\u1016\u103d\u1032\u1037\u101e\u100a\u103a\u1012\u1031\u101e\u1010\u103d\u1004\u103a\u1038\u1016\u103c\u1014\u1037\u103a\u1016\u103c\u1030\u1038\u101b\u1014\u103a\u1014\u1031\u101b\u102c\u101b\u103e\u1005\u103a\u1001\u102f\u1019\u103e \u1041\u1040 \u1001\u102f\u1021\u1011\u102d\u1005\u102e\u1005\u1009\u103a\u1011\u102c\u1038\u101e\u100a\u103a\u104b \u101e\u102d\u102f\u1037\u1019\u103e\u101e\u102c\u1021\u101b\u102c\u101b\u102c\u1000\u102d\u102f \u1017\u101f\u102d\u102f\u1015\u103c\u102f\u104d \u1015\u103c\u102f\u101c\u102f\u1015\u103a\u104d \u1000\u1019\u1039\u1018\u102c\u1010\u1005\u103a\u101d\u103e\u1019\u103a\u1038\u1010\u103d\u1004\u103a\u1010\u1004\u103a\u1015\u102d\u102f\u1037\u101b\u1014\u103a\u1019\u101c\u102d\u102f\u1021\u1015\u103a\u1010\u1031\u102c\u1037\u1000\u103c\u1031\u102c\u1004\u103a\u1038\u104e\u1004\u103a\u1038\u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b :]] \n CEPI \u101e\u100a\u103a\u101c\u1000\u103a\u101b\u103e\u102d\u1021\u1010\u100a\u103a\u1015\u103c\u102f\u1011\u102c\u1038\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u1019\u101b\u103e\u102d\u101e\u1031\u102c\u103a\u101c\u100a\u103a\u1038 Coronavirus \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1000\u1019\u1039\u1018\u102c\u1021\u1014\u103e\u1036\u1037\u1010\u103d\u1004\u103a\u100a\u102e\u1019\u103b\u103e\u1005\u103d\u102c\u1016\u103c\u1014\u1037\u103a\u101d\u1031\u1014\u102d\u102f\u1004\u103a\u101b\u1014\u103a\u1021\u1010\u103d\u1000\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u1011\u1031\u102c\u1000\u103a\u1015\u1036\u1037\u101b\u1031\u1038\u1000\u103d\u1004\u103a\u1038\u1006\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101c\u103b\u1000\u103a\u101b\u103e\u102d\u101e\u100a\u103a\u104b \n] \n \u1021\u1031\u102c\u103a\u1005\u101c\u102d\u102f\u104a \u1014\u1031\u102c\u103a\u101d\u1031\u1021\u1001\u103c\u1031\u1005\u102d\u102f\u1000\u103a\u1021\u1016\u103d\u1032\u1037\u1000\u102d\u102f\u1021\u1005\u102d\u102f\u1038\u101b \u1041\u1044 \u1001\u102f\u104a \u1018\u102e\u101c\u103a\u1014\u103e\u1004\u1037\u103a\u1019\u101a\u103a\u101c\u1004\u103a\u1012\u102b\u1002\u102d\u1010\u103a\u1005\u103a\u1016\u1031\u102c\u1004\u103a\u1012\u1031\u1038\u101b\u103e\u1004\u103a\u1038\u1014\u103e\u1004\u1037\u103a\u1017\u103c\u102d\u1010\u102d\u1014\u103a\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u104f Wellcome Trust \u1010\u102d\u102f\u1037\u1019\u103e\u1011\u1031\u102c\u1000\u103a\u1015\u1036\u1037\u1011\u102c\u1038\u101e\u100a\u103a\u104b \n \n CEPI \u101e\u100a\u103a COVID \u101b\u103e\u102c\u1016\u103d\u1031\u101b\u1014\u103a\u1012\u1031\u102b\u103a\u101c\u102c \u1048\u1042\u1049 \u101e\u1014\u103a\u1038\u1021\u1011\u102d\u1021\u101e\u102f\u1036\u1038\u1015\u103c\u102f\u1001\u1032\u1037\u101e\u100a\u103a -19 \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102d\u102f\u1021\u1014\u100a\u103a\u1038\u1006\u102f\u1036\u1038\u1021\u1001\u103b\u102d\u102f\u1037\u1021\u1031\u102c\u1004\u103a\u1019\u103c\u1004\u103a\u101c\u102d\u1019\u1037\u103a\u1019\u100a\u103a\u101f\u102f\u1019\u103b\u103e\u1031\u102c\u103a\u101c\u1004\u1037\u103a\u1001\u103b\u1000\u103a\u1016\u103c\u1004\u1037\u103a developer \u1000\u102d\u102f\u1038\u101a\u1031\u102c\u1000\u103a\u1014\u103e\u1004\u1037\u103a \u101c\u1000\u103a\u1010\u103d\u1032\u104d \u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102d\u102f\u1038\u101e\u100a\u103a\u104b \n \n \u101e\u1030\u1010\u102d\u102f\u1037\u1000 Inovio Pharmaceuticals Inc, CSL \u1014\u103e\u1004\u1037\u103a\u1021\u1010\u1030 Queensland \u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u104a Ltd\u104a \u1021\u1019\u1031\u101b\u102d\u1000\u1014\u103a\u1021\u1005\u102d\u102f\u1038\u101b\u104f\u1015\u1036\u1037\u1015\u102d\u102f\u1038\u1019\u103e\u102f\u1016\u103c\u1004\u1037\u103a Moderna Inc\u104a Novavax Inc\u104a AstraZeneca \u1014\u103e\u1004\u1037\u103a Oxford \u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u104a Clover Biopharmaceuticals\u104a \u101f\u1031\u102c\u1004\u103a\u1000\u1031\u102c\u1004\u103a\u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1014\u103e\u1004\u1037\u103a\u1019\u1000\u103c\u102c\u101e\u1031\u1038\u1019\u102e\u1000 Institution Pasteur \u1026\u1038 \u1006\u1031\u102c\u1004\u103a\u101e\u100a\u1037\u103a\u1021\u1016\u103d\u1032\u1037\u1014\u103e\u1004\u1037\u103a Pittsburgh \u1010\u1000\u1039\u1000\u101e\u102d\u102f\u101c\u103a\u1014\u103e\u1004\u1037\u103a Themis Bioscience \u1010\u102d\u102f\u1037\u1015\u102b\u101d\u1004\u103a\u101e\u100a\u103a\u104b Merck & Co \u1019\u103e \u1040 \u101a\u103a\u101e\u100a\u103a\u104b \n \n \u101b\u1031\u102c\u103a\u1018\u1004\u103a\u1006\u1004\u103a\u1000 CEPI \u101e\u100a\u103a biopharma \u1042\u1040\u1040 \u101e\u102d\u102f\u1037\u1019\u101f\u102f\u1010\u103a\u1019\u103c\u102f\u1036\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101e\u100a\u1037\u103a\u1000\u102f\u1019\u1039\u1015\u100f\u102e\u1019\u103b\u102c\u1038\u1014\u103e\u1004\u1037\u103a\u1000\u102f\u1014\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1005\u103d\u1019\u103a\u1038\u101b\u100a\u103a\u1000\u102d\u102f\u101e\u1031\u1001\u103b\u102c\u1005\u1031\u101b\u1014\u103a \u1026\u1038 \u1006\u102f\u1036\u1038\u1001\u103c\u1031\u101c\u103e\u1019\u103a\u1038\u1019\u103b\u102c\u1038\u101c\u103e\u1019\u103a\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u101f\u102f\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b :::]] \n "\u101c\u1030\u1021\u1019\u103b\u102c\u1038\u1005\u102f\u1000\u101c\u1031\u1038\u1018\u102e\u101c\u102e\u101a\u1036\u1016\u103c\u1005\u103a\u1014\u102d\u102f\u1004\u103a\u1010\u101a\u103a\u1006\u102d\u102f\u1010\u102c\u1019\u101a\u102f\u1036\u1000\u103c\u1018\u1030\u1038\u104b \u1004\u102b\u101c\u102f\u1015\u103a\u1015\u1031\u1038\u1019\u101a\u103a "\u101f\u102f\u101e\u1030\u1000\u1015\u103c\u1031\u102c\u101e\u100a\u103a\u104b \n \n \u101b\u1031\u102c\u103a\u1018\u1004\u103a\u1006\u1004\u103a\u101e\u100a\u103a\u1000\u102f\u1014\u103a\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u1019\u103e\u102f\u1021\u1010\u102d\u102f\u1004\u103a\u1015\u1004\u103a\u1001\u1036 Sanofi \u1014\u103e\u1004\u1037\u103a Merck \u1021\u1015\u102b\u1021\u101d\u1004\u103a\u1000\u1019\u1039\u1018\u102c\u1037\u1021\u1000\u103c\u102e\u1038\u1006\u102f\u1036\u1038\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1000\u102f\u1019\u1039\u1015\u100f\u102e\u1019\u103b\u102c\u1038\u1010\u103d\u1004\u103a\u1021\u101c\u102f\u1015\u103a\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u1037\u103a\u101e\u1030\u104f\u1021\u102f\u1015\u103a\u1005\u102f\u1010\u103d\u1004\u103a\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a \u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101e\u1030\u1019\u103b\u102c\u1038\u104f\u1005\u103d\u1019\u103a\u1038\u1006\u1031\u102c\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u1019\u103e\u102f\u1014\u103e\u1004\u1037\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1021\u1019\u103b\u102d\u102f\u1038\u1019\u103b\u102d\u102f\u1038\u104f\u1021\u1011\u1030\u1038\u101c\u102d\u102f\u1021\u1015\u103a\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u1001\u103c\u1031\u1001\u1036\u104d\u201c \u1015\u103d\u1032\u1005\u1009\u103a\u201d \u1000\u102d\u102f\u1015\u103c\u102f\u101c\u102f\u1015\u103a\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n \u1011\u102d\u101b\u1031\u102c\u1000\u103a\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u101e\u100a\u103a\u1000\u1030\u1038\u1005\u1000\u103a\u101b\u1031\u102c\u1002\u102b\u1016\u103c\u1005\u103a\u1015\u103d\u102c\u1038\u1019\u103e\u102f\u1000\u102d\u102f\u101b\u1015\u103a\u1010\u1014\u1037\u103a\u101b\u1014\u103a\u1021\u101c\u103d\u1014\u103a\u1021\u101b\u1031\u1038\u1000\u103c\u102e\u1038\u101e\u100a\u103a\u101f\u102f\u101b\u103e\u102f\u1019\u103c\u1004\u103a\u1000\u103c\u101e\u100a\u103a\u104b \u101c\u1030\u1015\u1031\u102b\u1004\u103a\u1038 \u1049.\u1043 \u101e\u1014\u103a\u1038\u1000\u103b\u1031\u102c\u103a\u101e\u1031\u1006\u102f\u1036\u1038\u1015\u103c\u102e\u1038 \u1044\u1048\u1040,\u1040\u1040\u1040 \u1014\u102e\u1038\u1015\u102b\u1038\u101e\u1031\u1006\u102f\u1036\u1038\u1001\u1032\u1037\u101b\u1015\u103c\u102e\u1038\u1014\u102d\u1030\u1004\u103a\u1004\u1036\u1001\u103c\u102c\u1038\u101e\u102c\u1038 \u1044\u1048\u1040,\u1040\u1040\u1040 \u1014\u102e\u1038\u1015\u102b\u1038\u101e\u1031\u1006\u102f\u1036\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \n CEPI \u101e\u100a\u103a COVID \u1000\u102d\u102f\u1000\u102c\u1000\u103d\u101a\u103a\u101b\u1014\u103a\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1011\u102f\u1010\u103a\u101c\u102f\u1015\u103a\u101b\u1014\u103a\u101e\u1031\u1001\u103b\u102c\u1005\u1031\u101b\u1014\u103a\u1002\u101b\u102f\u1005\u102d\u102f\u1000\u103a\u1014\u1031\u101e\u100a\u103a\u104b -19 \u101e\u100a\u103a\u1021\u1001\u103c\u102c\u1038\u1021\u101b\u1031\u1038\u1015\u102b\u101e\u1031\u102c\u1000\u102c\u1000\u103d\u101a\u103a\u1006\u1031\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f\u1018\u1031\u1038\u1016\u101a\u103a\u1011\u102c\u1038\u1001\u103c\u1004\u103a\u1038\u1019\u1015\u103c\u102f\u1015\u102b\u104b \u104e\u1004\u103a\u1038\u101e\u100a\u103a\u1016\u103d\u1036\u1037\u1016\u103c\u102d\u102f\u1038\u1019\u103e\u102f\u1014\u100a\u103a\u1038\u1015\u102b\u1038\u101e\u1031\u102c\u1014\u102d\u102f\u1004\u103a\u1004\u1036\u1019\u103b\u102c\u1038\u1021\u1010\u103d\u1000\u103a\u1021\u1011\u1030\u1038\u1005\u102d\u102f\u1038\u101b\u102d\u1019\u103a\u1005\u101b\u102c\u1016\u103c\u1005\u103a\u101e\u100a\u103a\u101f\u102f\u101b\u1031\u102c\u103a\u1018\u1004\u103a\u1006\u1004\u103a\u1000\u1015\u103c\u1031\u102c\u1000\u103c\u102c\u1038\u1001\u1032\u1037\u101e\u100a\u103a\u104b \n \u1000\u103b\u1031\u1038\u1007\u1030\u1038\u1010\u1004\u103a\u1015\u102b\u1010\u101a\u103a","content_image":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Content\/ze4AzuyggGJWVATHHfopI9TC3l69aX6Bp5sMAsL0.jpeg","story_video":"https:\/\/ureport-offline.unicefbangladesh.org\/storage\/Video\/2ikrArCKb7SKdHR3REkCDssgerZWJcmcBfN9FHqf.mp4","author":null,"author_image":"","status":1,"created_at":"Jun 25, 2020","updated_at":"Jun 25, 2020","href":"https:\/\/ureport-offline.unicefbangladesh.org\/api\/story\/80"}],"last_updated":"2020-06-25T15:12:33.000000Z"} \ No newline at end of file diff --git a/app/src/main/assets/data/story_image/story_image_0a21f225dc510c03abb08184bdcc2d87 b/app/src/main/assets/data/story_image/story_image_0a21f225dc510c03abb08184bdcc2d87 new file mode 100644 index 0000000..0101bd5 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_0a21f225dc510c03abb08184bdcc2d87 differ diff --git a/app/src/main/assets/data/story_image/story_image_0d830d3bc853b56d413c9fa37bcf4db0 b/app/src/main/assets/data/story_image/story_image_0d830d3bc853b56d413c9fa37bcf4db0 new file mode 100644 index 0000000..f333c82 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_0d830d3bc853b56d413c9fa37bcf4db0 differ diff --git a/app/src/main/assets/data/story_image/story_image_279e5c3adeb7e0e877748af13686113e b/app/src/main/assets/data/story_image/story_image_279e5c3adeb7e0e877748af13686113e new file mode 100644 index 0000000..91a612d Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_279e5c3adeb7e0e877748af13686113e differ diff --git a/app/src/main/assets/data/story_image/story_image_39acbc47e6a004debe5d064eeac6865a b/app/src/main/assets/data/story_image/story_image_39acbc47e6a004debe5d064eeac6865a new file mode 100644 index 0000000..ef92246 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_39acbc47e6a004debe5d064eeac6865a differ diff --git a/app/src/main/assets/data/story_image/story_image_3e303d00e65c686af319177569298e72 b/app/src/main/assets/data/story_image/story_image_3e303d00e65c686af319177569298e72 new file mode 100644 index 0000000..1a783bc Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_3e303d00e65c686af319177569298e72 differ diff --git a/app/src/main/assets/data/story_image/story_image_548e0971f0bb4490af85213eaed32814 b/app/src/main/assets/data/story_image/story_image_548e0971f0bb4490af85213eaed32814 new file mode 100644 index 0000000..06de8aa Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_548e0971f0bb4490af85213eaed32814 differ diff --git a/app/src/main/assets/data/story_image/story_image_5810a36a3e254633066c1d12845c7028 b/app/src/main/assets/data/story_image/story_image_5810a36a3e254633066c1d12845c7028 new file mode 100644 index 0000000..3ef3b1f Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_5810a36a3e254633066c1d12845c7028 differ diff --git a/app/src/main/assets/data/story_image/story_image_67068fd55af1c4401fc087429bbaff39 b/app/src/main/assets/data/story_image/story_image_67068fd55af1c4401fc087429bbaff39 new file mode 100644 index 0000000..a72c5f3 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_67068fd55af1c4401fc087429bbaff39 differ diff --git a/app/src/main/assets/data/story_image/story_image_7144c04bd879001fbace05c92dd5152a b/app/src/main/assets/data/story_image/story_image_7144c04bd879001fbace05c92dd5152a new file mode 100644 index 0000000..eb671d3 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_7144c04bd879001fbace05c92dd5152a differ diff --git a/app/src/main/assets/data/story_image/story_image_7b0519dffa3ba56ebf8698836184a46a b/app/src/main/assets/data/story_image/story_image_7b0519dffa3ba56ebf8698836184a46a new file mode 100644 index 0000000..e3eaff6 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_7b0519dffa3ba56ebf8698836184a46a differ diff --git a/app/src/main/assets/data/story_image/story_image_9465ecaf45335d41a4442bfe072538e0 b/app/src/main/assets/data/story_image/story_image_9465ecaf45335d41a4442bfe072538e0 new file mode 100644 index 0000000..c3b41c0 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_9465ecaf45335d41a4442bfe072538e0 differ diff --git a/app/src/main/assets/data/story_image/story_image_9c7eaaa06644d12c48ff4861bd55566e b/app/src/main/assets/data/story_image/story_image_9c7eaaa06644d12c48ff4861bd55566e new file mode 100644 index 0000000..cc2b57d Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_9c7eaaa06644d12c48ff4861bd55566e differ diff --git a/app/src/main/assets/data/story_image/story_image_b8dcfea72c0679e4f6c7b1057398b181 b/app/src/main/assets/data/story_image/story_image_b8dcfea72c0679e4f6c7b1057398b181 new file mode 100644 index 0000000..1a40c6a Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_b8dcfea72c0679e4f6c7b1057398b181 differ diff --git a/app/src/main/assets/data/story_image/story_image_b8fa588aa068f6f73d93f3fd9c59a675 b/app/src/main/assets/data/story_image/story_image_b8fa588aa068f6f73d93f3fd9c59a675 new file mode 100644 index 0000000..6c2dee4 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_b8fa588aa068f6f73d93f3fd9c59a675 differ diff --git a/app/src/main/assets/data/story_image/story_image_de837d81996cd1dbe2c48472733fa9d2 b/app/src/main/assets/data/story_image/story_image_de837d81996cd1dbe2c48472733fa9d2 new file mode 100644 index 0000000..d25d846 Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_de837d81996cd1dbe2c48472733fa9d2 differ diff --git a/app/src/main/assets/data/story_image/story_image_f587c7f8dbb02e83a5c81a0543c69c7c b/app/src/main/assets/data/story_image/story_image_f587c7f8dbb02e83a5c81a0543c69c7c new file mode 100644 index 0000000..1abfbec Binary files /dev/null and b/app/src/main/assets/data/story_image/story_image_f587c7f8dbb02e83a5c81a0543c69c7c differ diff --git a/app/src/main/assets/data/story_video/story_video_342a40ecfe42f1f3caae6cd3d49a63a6 b/app/src/main/assets/data/story_video/story_video_342a40ecfe42f1f3caae6cd3d49a63a6 new file mode 100644 index 0000000..7994500 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_342a40ecfe42f1f3caae6cd3d49a63a6 differ diff --git a/app/src/main/assets/data/story_video/story_video_43290acc3c400c386ad12e271dd1a17f b/app/src/main/assets/data/story_video/story_video_43290acc3c400c386ad12e271dd1a17f new file mode 100644 index 0000000..932a571 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_43290acc3c400c386ad12e271dd1a17f differ diff --git a/app/src/main/assets/data/story_video/story_video_483ff34283adb5ed7844117a07db3305 b/app/src/main/assets/data/story_video/story_video_483ff34283adb5ed7844117a07db3305 new file mode 100644 index 0000000..7994500 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_483ff34283adb5ed7844117a07db3305 differ diff --git a/app/src/main/assets/data/story_video/story_video_6d2e16a0da465846c8d18fc06dc49653 b/app/src/main/assets/data/story_video/story_video_6d2e16a0da465846c8d18fc06dc49653 new file mode 100644 index 0000000..4d02411 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_6d2e16a0da465846c8d18fc06dc49653 differ diff --git a/app/src/main/assets/data/story_video/story_video_797281c616b5ea9a27627eaa4cba3b50 b/app/src/main/assets/data/story_video/story_video_797281c616b5ea9a27627eaa4cba3b50 new file mode 100644 index 0000000..b8a4fbb Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_797281c616b5ea9a27627eaa4cba3b50 differ diff --git a/app/src/main/assets/data/story_video/story_video_bdfebda6105e166ac5f6f53c60fde083 b/app/src/main/assets/data/story_video/story_video_bdfebda6105e166ac5f6f53c60fde083 new file mode 100644 index 0000000..b4aead3 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_bdfebda6105e166ac5f6f53c60fde083 differ diff --git a/app/src/main/assets/data/story_video/story_video_d544768aaa88b27ecef1410c22111bb7 b/app/src/main/assets/data/story_video/story_video_d544768aaa88b27ecef1410c22111bb7 new file mode 100644 index 0000000..1da8838 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_d544768aaa88b27ecef1410c22111bb7 differ diff --git a/app/src/main/assets/data/story_video/story_video_dead737d0304dd08888ffcf36fba7a6c b/app/src/main/assets/data/story_video/story_video_dead737d0304dd08888ffcf36fba7a6c new file mode 100644 index 0000000..7994500 Binary files /dev/null and b/app/src/main/assets/data/story_video/story_video_dead737d0304dd08888ffcf36fba7a6c differ diff --git a/app/src/main/assets/data/surveyor.json b/app/src/main/assets/data/surveyor.json new file mode 100644 index 0000000..b2d5ed4 --- /dev/null +++ b/app/src/main/assets/data/surveyor.json @@ -0,0 +1 @@ +{"data":[{"id":20,"flow_id":"881a673b-fb06-4062-a983-c6cdd83a040e","data_pack":"{\"id\":0,\"flow_uuid\":\"881a673b-fb06-4062-a983-c6cdd83a040e\",\"title\":\"1.Hand washing practice surveyor\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"What is the name of your social hub\\\/MPC?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":1},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"Camp 8E\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"b2b4b31d-be85-4d01-84a7-1ae3170f8795\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"70a15bab-e068-43d0-a809-f0e4acd894d6\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"07f40aa5-59ed-4244-9ba9-ddd4e8dcf586\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92f07ee6-768b-4bc0-bf71-fb7aa26ff467\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes always\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"0cb214e6-33c9-47df-b651-8d024a756c16\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"fc85c6ae-c47a-45ca-a879-3c42eb2fd738\"},{\"title\":\"Why don\\u2019t you wash your hands?\\nReply with 1 to 4\\n1 Don\\u2019t have water\\n2 Don\\u2019t have soap\\n3 Don\\u2019t think it is needed\\n4 Don\\u2019t like washing hands\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Don't have water\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"Don't think it is needed\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"4142b2d3-5d0e-45cf-b16f-21dbd522eabe\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"a7a114ff-a921-4b4d-97fd-2730d5ddc870\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"881a673b-fb06-4062-a983-c6cdd83a040e\",\"title\":\"1.Hand washing practice surveyor\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u09b8\\u09be\\u09ae\\u09be\\u099c\\u09bf\\u0995 \\u0995\\u09c7\\u09a8\\u09cd\\u09a6\\u09cd\\u09b0 \\\/ \\u098f\\u09ae\\u09aa\\u09bf\\u09b8\\u09bf\\u09b0 \\u09a8\\u09be\\u09ae \\u0995\\u09c0?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":1},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"\\u0995\\u09cd\\u09af\\u09be\\u09ae\\u09cd\\u09aa 8 \\u0987\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"b2b4b31d-be85-4d01-84a7-1ae3170f8795\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"70a15bab-e068-43d0-a809-f0e4acd894d6\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"07f40aa5-59ed-4244-9ba9-ddd4e8dcf586\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92f07ee6-768b-4bc0-bf71-fb7aa26ff467\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981 \\u09b8\\u09ac\\u09b8\\u09ae\\u09af\\u09bc\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"0cb214e6-33c9-47df-b651-8d024a756c16\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"fc85c6ae-c47a-45ca-a879-3c42eb2fd738\"},{\"title\":\"Why don\\u2019t you wash your hands?\\nReply with 1 to 4\\n1 Don\\u2019t have water\\n2 Don\\u2019t have soap\\n3 Don\\u2019t think it is needed\\n4 Don\\u2019t like washing hands\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Don't have water\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"\\u098f\\u099f\\u09bf \\u09aa\\u09cd\\u09b0\\u09af\\u09bc\\u09cb\\u099c\\u09a8 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09ac\\u09c7\\u09a8 \\u09a8\\u09be\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"4142b2d3-5d0e-45cf-b16f-21dbd522eabe\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"a7a114ff-a921-4b4d-97fd-2730d5ddc870\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"881a673b-fb06-4062-a983-c6cdd83a040e\",\"title\":\"1.Hand washing practice surveyor\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u101e\\u1004\\u103a\\u104f\\u101c\\u1030\\u1019\\u103e\\u102f\\u101b\\u1031\\u1038\\u1021\\u1001\\u103b\\u1000\\u103a\\u1021\\u1001\\u103b\\u102c \\\/ MPC \\u104f\\u1021\\u1019\\u100a\\u103a\\u1019\\u103e\\u102c\\u1018\\u102c\\u101c\\u1032\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":1},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"\\u1005\\u1001\\u1014\\u103a\\u1038 8E\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"b2b4b31d-be85-4d01-84a7-1ae3170f8795\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"70a15bab-e068-43d0-a809-f0e4acd894d6\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"07f40aa5-59ed-4244-9ba9-ddd4e8dcf586\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92f07ee6-768b-4bc0-bf71-fb7aa26ff467\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\\u101b\\u103e\\u102d\\u101e\\u100a\\u103a\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"0cb214e6-33c9-47df-b651-8d024a756c16\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"fc85c6ae-c47a-45ca-a879-3c42eb2fd738\"},{\"title\":\"\\u101e\\u1004\\u103a\\u104f\\u101c\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u1021\\u1018\\u101a\\u103a\\u1000\\u103c\\u1031\\u102c\\u1004\\u1037\\u103a\\u1019\\u1006\\u1031\\u1038\\u1000\\u103c\\u101e\\u1014\\u100a\\u103a\\u1038 \\u1041 \\u1014\\u103e\\u1004\\u1037\\u103a \\u1044\\u1041 \\u1016\\u103c\\u1004\\u1037\\u103a\\u1005\\u102c\\u1015\\u103c\\u1014\\u103a\\u1015\\u102b\\u101b\\u1031\\u1019\\u101e\\u102f\\u1036\\u1038\\u1015\\u102b\\u1014\\u103e\\u1004\\u1037\\u103a \\u1042 \\u1006\\u1015\\u103a\\u1015\\u103c\\u102c\\u1019\\u101e\\u102f\\u1036\\u1038\\u1015\\u102b3\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u101e\\u100a\\u103a\\u101f\\u102f\\u1019\\u1011\\u1004\\u103a\\u1015\\u102b\\u1014\\u103e\\u1004\\u1037\\u103a4\\u101c\\u1000\\u103a\\u1006\\u1031\\u1038\\u1001\\u103c\\u1004\\u103a\\u1038\\u1000\\u102d\\u102f\\u1019\\u1000\\u103c\\u102d\\u102f\\u1000\\u103a\\u1015\\u102b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101b\\u1031\\u1019\\u101b\\u103e\\u102d\\u1018\\u1030\\u1038\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1015\\u102b\\u1014\\u1032\\u1037\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"4142b2d3-5d0e-45cf-b16f-21dbd522eabe\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"a7a114ff-a921-4b4d-97fd-2730d5ddc870\"}]}","status":1,"created_at":"2020-06-15 21:33:16","updated_at":"2020-06-27 22:09:01"},{"id":19,"flow_id":"15120464-a6d2-46c8-a571-44caa7c4a518","data_pack":"{\"id\":0,\"flow_uuid\":\"15120464-a6d2-46c8-a571-44caa7c4a518\",\"title\":\"1.Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Reply in numbers between 1 to 8\\n1.\\tBurmapara\\n2.\\tJadimura\\n3.\\tJamtoli\\n4.\\tLeda\\n5.\\tShamlapur \\n6.\\tCamp 8E\\n7.\\tCamp 14\\n8.\\tCamp 22\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":0},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"Camp 8E\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"ca70bea7-5a7a-4185-b994-90eefa3ba575\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bcf34fce-7a17-4511-9a14-e0aedfc57b60\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"961328e2-79ba-4716-9a0c-6063843a18bb\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"365f4f64-300d-48b0-9762-dca1a3c1fb55\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes always\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"a4cc1933-767e-4155-802c-e39c78e66270\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"29d3b15c-fc7c-44c7-99b2-f592a6f161ca\"},{\"title\":\"Why don\\u2019t you wash your hands?\\nReply with 1 to 4\\n1 Don\\u2019t have water\\n2 Don\\u2019t have soap\\n3 Don\\u2019t think it is needed\\n4 Don\\u2019t like washing hands\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Don't have water\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"Don't think it is needed\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"2796b754-a603-4d39-81de-bc7e1cf5cd7f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"99e63c5e-af4e-4c1d-85d0-1268511d58fe\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"15120464-a6d2-46c8-a571-44caa7c4a518\",\"title\":\"1.Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Reply in numbers between 1 to 8\\n1.\\tBurmapara\\n2.\\tJadimura\\n3.\\tJamtoli\\n4.\\tLeda\\n5.\\tShamlapur \\n6.\\tCamp 8E\\n7.\\tCamp 14\\n8.\\tCamp 22\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":0},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"\\u0995\\u09cd\\u09af\\u09be\\u09ae\\u09cd\\u09aa 8 \\u0987\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"ca70bea7-5a7a-4185-b994-90eefa3ba575\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bcf34fce-7a17-4511-9a14-e0aedfc57b60\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"961328e2-79ba-4716-9a0c-6063843a18bb\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"365f4f64-300d-48b0-9762-dca1a3c1fb55\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981 \\u09b8\\u09ac\\u09b8\\u09ae\\u09af\\u09bc\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"a4cc1933-767e-4155-802c-e39c78e66270\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"29d3b15c-fc7c-44c7-99b2-f592a6f161ca\"},{\"title\":\"Why don\\u2019t you wash your hands?\\nReply with 1 to 4\\n1 Don\\u2019t have water\\n2 Don\\u2019t have soap\\n3 Don\\u2019t think it is needed\\n4 Don\\u2019t like washing hands\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Don't have water\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"\\u098f\\u099f\\u09bf \\u09aa\\u09cd\\u09b0\\u09af\\u09bc\\u09cb\\u099c\\u09a8 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09ac\\u09c7\\u09a8 \\u09a8\\u09be\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"2796b754-a603-4d39-81de-bc7e1cf5cd7f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"99e63c5e-af4e-4c1d-85d0-1268511d58fe\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"15120464-a6d2-46c8-a571-44caa7c4a518\",\"title\":\"1.Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Reply in numbers between 1 to 8\\n1.\\tBurmapara\\n2.\\tJadimura\\n3.\\tJamtoli\\n4.\\tLeda\\n5.\\tShamlapur \\n6.\\tCamp 8E\\n7.\\tCamp 14\\n8.\\tCamp 22\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Burmapara\",\"count\":0},{\"label\":\"Jadimura\",\"count\":0},{\"label\":\"Jamtoli\",\"count\":0},{\"label\":\"Leda\",\"count\":0},{\"label\":\"Shamlapur\",\"count\":0},{\"label\":\"\\u1005\\u1001\\u1014\\u103a\\u1038 8E\",\"count\":0},{\"label\":\"Camp 14\",\"count\":0},{\"label\":\"Camp 22\",\"count\":0}],\"name\":\"Name of the Social hub or MPC\",\"node\":\"ca70bea7-5a7a-4185-b994-90eefa3ba575\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bcf34fce-7a17-4511-9a14-e0aedfc57b60\"},{\"title\":\"Are you a boy or a girl?\\nReply with a number between 1 and 2\\n1 Boy\\n2 Girl\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Boy\",\"count\":0},{\"label\":\"Girl\",\"count\":0}],\"name\":\"Gender of the participants\",\"node\":\"961328e2-79ba-4716-9a0c-6063843a18bb\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"365f4f64-300d-48b0-9762-dca1a3c1fb55\"},{\"title\":\"Do you wash hands with soap before eating?\\nReply with 1 to 3\\n1 Yes always\\n2 Yes sometimes\\n3 No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\\u101b\\u103e\\u102d\\u101e\\u100a\\u103a\",\"count\":0},{\"label\":\"Yes sometimes\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you wash your hands with soap before eating\",\"node\":\"a4cc1933-767e-4155-802c-e39c78e66270\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"29d3b15c-fc7c-44c7-99b2-f592a6f161ca\"},{\"title\":\"Why don\\u2019t you wash your hands?\\nReply with 1 to 4\\n1 Don\\u2019t have water\\n2 Don\\u2019t have soap\\n3 Don\\u2019t think it is needed\\n4 Don\\u2019t like washing hands\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101b\\u1031\\u1019\\u101b\\u103e\\u102d\\u1018\\u1030\\u1038\",\"count\":0},{\"label\":\"Don't have soap\",\"count\":0},{\"label\":\"\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1015\\u102b\\u1014\\u1032\\u1037\",\"count\":0},{\"label\":\"Don't like washing hands\",\"count\":0}],\"name\":\"Why dont you wash your hands\",\"node\":\"2796b754-a603-4d39-81de-bc7e1cf5cd7f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"99e63c5e-af4e-4c1d-85d0-1268511d58fe\"}]}","status":0,"created_at":"2020-06-15 11:46:29","updated_at":"2020-06-27 22:09:01"},{"id":18,"flow_id":"0ec0a012-bd99-46d7-a9b1-4bc7e1af5577","data_pack":"{\"id\":0,\"flow_uuid\":\"0ec0a012-bd99-46d7-a9b1-4bc7e1af5577\",\"title\":\"Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\"8\",\"count\":1}],\"name\":\"What is the name of your social hub or MPC\",\"node\":\"d12a7869-cea4-49b6-b4c9-685a345b3ada\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9cc807fc-4828-4f73-be8c-719ad34fc7bd\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":3},{\"label\":\"2\",\"count\":2}],\"name\":\"Are you a boy or a girl\",\"node\":\"6c47e1fc-7a5e-4f39-b447-173b1c467ecf\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f93689af-b141-4041-a7fc-87e1d3a08b95\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":1}],\"name\":\"Do you wash hands with soap before eating\",\"node\":\"ce637e66-87b5-4002-aa74-f83027cab052\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f83348a6-2765-4139-b1c5-bf3747a69d6e\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":1}],\"name\":\"If no why dont you wash your hands\",\"node\":\"c2bb3dfa-66ca-453d-a134-bd5f8210bfb6\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bb5690d8-7aef-40f6-8db0-958603c55f9e\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"0ec0a012-bd99-46d7-a9b1-4bc7e1af5577\",\"title\":\"Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\"8\",\"count\":1}],\"name\":\"What is the name of your social hub or MPC\",\"node\":\"d12a7869-cea4-49b6-b4c9-685a345b3ada\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9cc807fc-4828-4f73-be8c-719ad34fc7bd\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":3},{\"label\":\"2\",\"count\":2}],\"name\":\"Are you a boy or a girl\",\"node\":\"6c47e1fc-7a5e-4f39-b447-173b1c467ecf\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f93689af-b141-4041-a7fc-87e1d3a08b95\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":1}],\"name\":\"Do you wash hands with soap before eating\",\"node\":\"ce637e66-87b5-4002-aa74-f83027cab052\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f83348a6-2765-4139-b1c5-bf3747a69d6e\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":1}],\"name\":\"If no why dont you wash your hands\",\"node\":\"c2bb3dfa-66ca-453d-a134-bd5f8210bfb6\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bb5690d8-7aef-40f6-8db0-958603c55f9e\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"0ec0a012-bd99-46d7-a9b1-4bc7e1af5577\",\"title\":\"Hand washing practice\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\"8\",\"count\":1}],\"name\":\"What is the name of your social hub or MPC\",\"node\":\"d12a7869-cea4-49b6-b4c9-685a345b3ada\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9cc807fc-4828-4f73-be8c-719ad34fc7bd\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":3},{\"label\":\"2\",\"count\":2}],\"name\":\"Are you a boy or a girl\",\"node\":\"6c47e1fc-7a5e-4f39-b447-173b1c467ecf\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f93689af-b141-4041-a7fc-87e1d3a08b95\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":2},{\"label\":\"2\",\"count\":2},{\"label\":\"3\",\"count\":1}],\"name\":\"Do you wash hands with soap before eating\",\"node\":\"ce637e66-87b5-4002-aa74-f83027cab052\",\"set\":5,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f83348a6-2765-4139-b1c5-bf3747a69d6e\"},{\"title\":\",\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":1}],\"name\":\"If no why dont you wash your hands\",\"node\":\"c2bb3dfa-66ca-453d-a134-bd5f8210bfb6\",\"set\":1,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bb5690d8-7aef-40f6-8db0-958603c55f9e\"}]}","status":0,"created_at":"2020-05-30 07:54:07","updated_at":"2020-06-27 22:09:01"},{"id":17,"flow_id":"d7f469c3-53d1-4a11-87b2-3a4aaecc58d4","data_pack":"{\"id\":0,\"flow_uuid\":\"d7f469c3-53d1-4a11-87b2-3a4aaecc58d4\",\"title\":\"ZZ\",\"org\":0,\"poll_date\":\"1592367352\",\"created_on\":\"1592367352\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"d7f469c3-53d1-4a11-87b2-3a4aaecc58d4\",\"title\":\"ZZ \\u098f\\u09b0\",\"org\":0,\"poll_date\":\"1592367352\",\"created_on\":\"1592367352\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","my_pack":"{\"id\":0,\"flow_uuid\":\"d7f469c3-53d1-4a11-87b2-3a4aaecc58d4\",\"title\":\"ZZ\",\"org\":0,\"poll_date\":\"1592367352\",\"created_on\":\"1592367352\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","status":0,"created_at":"2020-05-18 00:28:34","updated_at":"2020-06-27 22:09:01"},{"id":16,"flow_id":"ea00a83c-535f-40d2-8b07-ad44f296ef7b","data_pack":"{\"id\":0,\"flow_uuid\":\"ea00a83c-535f-40d2-8b07-ad44f296ef7b\",\"title\":\"Offline - Social Hub - Open\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"What do you like most?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":12},{\"label\":\"Football\",\"count\":17},{\"label\":\"Programming\",\"count\":2}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":31,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":9},{\"label\":\"Football\",\"count\":11},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":21,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":1},{\"label\":\"Football\",\"count\":6},{\"label\":\"Programming\",\"count\":0}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":7,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":2},{\"label\":\"Football\",\"count\":0},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":3,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"9f97cc1d-24af-4cd1-9f58-cb38217d9594\"},{\"title\":\"Hello User, Send a message\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"j\",\"count\":1},{\"label\":\"m\",\"count\":1},{\"label\":\"hi\",\"count\":8},{\"label\":\"Thanks\",\"count\":1},{\"label\":\"Thank you.\",\"count\":1},{\"label\":\"yhyuuufghj\",\"count\":1},{\"label\":\"nnn\",\"count\":1},{\"label\":\"nn\",\"count\":1},{\"label\":\"kj\",\"count\":1},{\"label\":\"iu\",\"count\":1},{\"label\":\"kk\",\"count\":2},{\"label\":\"jjii\",\"count\":1},{\"label\":\"sh\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"uu\",\"count\":1},{\"label\":\"yo\",\"count\":1},{\"label\":\"ko\",\"count\":1},{\"label\":\"jo\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"tiktok\",\"count\":1},{\"label\":\"cricket\",\"count\":1},{\"label\":\"mm\",\"count\":1},{\"label\":\"t800\",\"count\":1},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"426c2275-cb6a-4d1b-9432-e54c92c211f9\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"ea00a83c-535f-40d2-8b07-ad44f296ef7b\",\"title\":\"Offline - Social Hub - Open\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"What do you like most?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":12},{\"label\":\"\\u09ab\\u09c1\\u099f\\u09ac\\u09b2\",\"count\":17},{\"label\":\"Programming\",\"count\":2}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":31,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":9},{\"label\":\"\\u09ab\\u09c1\\u099f\\u09ac\\u09b2\",\"count\":11},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":21,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":1},{\"label\":\"\\u09ab\\u09c1\\u099f\\u09ac\\u09b2\",\"count\":6},{\"label\":\"Programming\",\"count\":0}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":7,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":2},{\"label\":\"\\u09ab\\u09c1\\u099f\\u09ac\\u09b2\",\"count\":0},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":3,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"9f97cc1d-24af-4cd1-9f58-cb38217d9594\"},{\"title\":\"Hello User, Send a message\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"j\",\"count\":1},{\"label\":\"m\",\"count\":1},{\"label\":\"hi\",\"count\":8},{\"label\":\"Thanks\",\"count\":1},{\"label\":\"Thank you.\",\"count\":1},{\"label\":\"yhyuuufghj\",\"count\":1},{\"label\":\"nnn\",\"count\":1},{\"label\":\"nn\",\"count\":1},{\"label\":\"kj\",\"count\":1},{\"label\":\"iu\",\"count\":1},{\"label\":\"kk\",\"count\":2},{\"label\":\"jjii\",\"count\":1},{\"label\":\"sh\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"uu\",\"count\":1},{\"label\":\"yo\",\"count\":1},{\"label\":\"ko\",\"count\":1},{\"label\":\"jo\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"tiktok\",\"count\":1},{\"label\":\"cricket\",\"count\":1},{\"label\":\"mm\",\"count\":1},{\"label\":\"t800\",\"count\":1},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"426c2275-cb6a-4d1b-9432-e54c92c211f9\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"ea00a83c-535f-40d2-8b07-ad44f296ef7b\",\"title\":\"Offline - Social Hub - Open\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"What do you like most?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":12},{\"label\":\"Football\",\"count\":17},{\"label\":\"Programming\",\"count\":2}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":31,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":9},{\"label\":\"Football\",\"count\":11},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":21,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":1},{\"label\":\"Football\",\"count\":6},{\"label\":\"Programming\",\"count\":0}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":7,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Cricket\",\"count\":2},{\"label\":\"Football\",\"count\":0},{\"label\":\"Programming\",\"count\":1}],\"name\":\"sports\",\"node\":\"a315864c-ad1d-440c-9791-6306a9b6293b\",\"set\":3,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"9f97cc1d-24af-4cd1-9f58-cb38217d9594\"},{\"title\":\"Hello User, Send a message\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"j\",\"count\":1},{\"label\":\"m\",\"count\":1},{\"label\":\"hi\",\"count\":8},{\"label\":\"Thanks\",\"count\":1},{\"label\":\"Thank you.\",\"count\":1},{\"label\":\"yhyuuufghj\",\"count\":1},{\"label\":\"nnn\",\"count\":1},{\"label\":\"nn\",\"count\":1},{\"label\":\"kj\",\"count\":1},{\"label\":\"iu\",\"count\":1},{\"label\":\"kk\",\"count\":2},{\"label\":\"jjii\",\"count\":1},{\"label\":\"sh\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"uu\",\"count\":1},{\"label\":\"yo\",\"count\":1},{\"label\":\"ko\",\"count\":1},{\"label\":\"jo\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"tiktok\",\"count\":1},{\"label\":\"cricket\",\"count\":1},{\"label\":\"mm\",\"count\":1},{\"label\":\"t800\",\"count\":1},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"user_message\",\"node\":\"2651dabd-ab33-4615-b180-43fc8627ab99\",\"set\":0,\"unset\":0,\"label\":\"Nonbinary\"}],\"results_by_hub\":[],\"ruleset_uuid\":\"426c2275-cb6a-4d1b-9432-e54c92c211f9\"}]}","status":1,"created_at":"2020-05-05 04:51:43","updated_at":"2020-06-27 22:09:01"},{"id":15,"flow_id":"18e96e2a-4210-4412-aac5-7466a7d3d42a","data_pack":"{\"id\":0,\"flow_uuid\":\"18e96e2a-4210-4412-aac5-7466a7d3d42a\",\"title\":\"Open Ended Test Flow\",\"org\":0,\"poll_date\":\"1588675485\",\"created_on\":\"1588675485\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Send an open text\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"hi\",\"count\":2},{\"label\":\"hello\",\"count\":1}],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"NonBinary\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"c5595bdd-a869-4570-9cfb-1c68c5c3c375\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"18e96e2a-4210-4412-aac5-7466a7d3d42a\",\"title\":\"\\u0996\\u09cb\\u09b2\\u09be\\u09b0 \\u09b8\\u09ae\\u09be\\u09aa\\u09cd\\u09a4 \\u09aa\\u09b0\\u09c0\\u0995\\u09cd\\u09b7\\u09be\\u09b0 \\u09aa\\u09cd\\u09b0\\u09ac\\u09be\\u09b9\",\"org\":0,\"poll_date\":\"1588675485\",\"created_on\":\"1588675485\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u098f\\u0995\\u099f\\u09bf \\u09ae\\u09c1\\u0995\\u09cd\\u09a4 \\u09aa\\u09be\\u09a0\\u09cd\\u09af \\u09aa\\u09cd\\u09b0\\u09c7\\u09b0\\u09a3 \\u0995\\u09b0\\u09c1\\u09a8\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"hi\",\"count\":2},{\"label\":\"hello\",\"count\":1}],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"NonBinary\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"c5595bdd-a869-4570-9cfb-1c68c5c3c375\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"18e96e2a-4210-4412-aac5-7466a7d3d42a\",\"title\":\"\\u1021\\u1006\\u102f\\u1036\\u1038\\u101e\\u1010\\u103a\\u1005\\u1019\\u103a\\u1038\\u101e\\u1015\\u103a Flow \\u1016\\u103d\\u1004\\u1037\\u103a\\u1015\\u102b\",\"org\":0,\"poll_date\":\"1588675485\",\"created_on\":\"1588675485\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u1015\\u103d\\u1004\\u1037\\u103a\\u101c\\u1004\\u103a\\u1038\\u101e\\u1031\\u102c\\u1005\\u102c\\u101e\\u102c\\u1038\\u1015\\u102d\\u102f\\u1037\\u1015\\u102b\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"hi\",\"count\":2},{\"label\":\"hello\",\"count\":1}],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Female\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"NonBinary\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"83614207-375c-48ed-a626-5bff4fbf0c6c\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"c5595bdd-a869-4570-9cfb-1c68c5c3c375\"}]}","status":1,"created_at":"2020-05-05 04:18:45","updated_at":"2020-06-26 11:12:40"},{"id":14,"flow_id":"fb9b1941-472a-45f5-9b47-37f91487c2e2","data_pack":"{\"id\":0,\"flow_uuid\":\"fb9b1941-472a-45f5-9b47-37f91487c2e2\",\"title\":\"Sample Flow - Satisfaction Survey\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Great! Don't worry, this will be quick. On a scale of 1-5, with 1 being not likely and 5 being very likely, how likely would you be to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"20ccb3ee-d7eb-4905-8a07-29878f1b7762\"},{\"title\":\"Sorry, I didn't understand that. From 1-5, with 5 best most likely, how likely are you to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"154760a8-a31f-4aaa-a1cd-7095f6a7de10\"},{\"title\":\"Thanks, it is great to hear we did a good job. Rest assured we still strive to improve every single day. Ok, so on a scale 1-5, with 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"682da4ff-a707-41ee-9398-f0fb08ff357f\"},{\"title\":\"Sorry I didn't understand that, please answer with 1-5. With 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"445786dd-4d82-40f5-b4b8-bc24147702b7\"},{\"title\":\"That is always nice to hear, thanks, but I'm sure we could do even better, what could we do to improve?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Suggestion\",\"node\":\"5ed6c9b1-42fe-47c7-88d0-9b10e3a13784\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"68d131b3-14c5-4d15-8d36-1dde3cd93a8a\"},{\"title\":\"Ok, thanks, we'll definitely consider that. Ok, two last questions and then you're all done, are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"42f79d16-4f7e-486c-99a3-eac3bff6a974\"},{\"title\":\"I'm sorry, I didn't understand that! We're almost done though so let's try again. Are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"767da1dc-5efa-4a02-b4a5-df8c9ca4329d\"},{\"title\":\"Great, one last question, and don't worry we promise not to tell anyone else. How old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d81bb8a9-429b-4422-8ffb-0c5ad3b26c47\"},{\"title\":\"I know, I know, nobody likes to think about their age, but we promise not to share it with anyone else. Come on, how old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2883c900-af5f-4d74-8502-e370fe92ce62\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"fb9b1941-472a-45f5-9b47-37f91487c2e2\",\"title\":\"Sample Flow - Satisfaction Survey\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Great! Don't worry, this will be quick. On a scale of 1-5, with 1 being not likely and 5 being very likely, how likely would you be to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"20ccb3ee-d7eb-4905-8a07-29878f1b7762\"},{\"title\":\"Sorry, I didn't understand that. From 1-5, with 5 best most likely, how likely are you to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"154760a8-a31f-4aaa-a1cd-7095f6a7de10\"},{\"title\":\"Thanks, it is great to hear we did a good job. Rest assured we still strive to improve every single day. Ok, so on a scale 1-5, with 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"682da4ff-a707-41ee-9398-f0fb08ff357f\"},{\"title\":\"Sorry I didn't understand that, please answer with 1-5. With 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"445786dd-4d82-40f5-b4b8-bc24147702b7\"},{\"title\":\"That is always nice to hear, thanks, but I'm sure we could do even better, what could we do to improve?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Suggestion\",\"node\":\"5ed6c9b1-42fe-47c7-88d0-9b10e3a13784\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"68d131b3-14c5-4d15-8d36-1dde3cd93a8a\"},{\"title\":\"Ok, thanks, we'll definitely consider that. Ok, two last questions and then you're all done, are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"42f79d16-4f7e-486c-99a3-eac3bff6a974\"},{\"title\":\"I'm sorry, I didn't understand that! We're almost done though so let's try again. Are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"767da1dc-5efa-4a02-b4a5-df8c9ca4329d\"},{\"title\":\"Great, one last question, and don't worry we promise not to tell anyone else. How old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d81bb8a9-429b-4422-8ffb-0c5ad3b26c47\"},{\"title\":\"I know, I know, nobody likes to think about their age, but we promise not to share it with anyone else. Come on, how old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2883c900-af5f-4d74-8502-e370fe92ce62\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"fb9b1941-472a-45f5-9b47-37f91487c2e2\",\"title\":\"Sample Flow - Satisfaction Survey\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Great! Don't worry, this will be quick. On a scale of 1-5, with 1 being not likely and 5 being very likely, how likely would you be to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"20ccb3ee-d7eb-4905-8a07-29878f1b7762\"},{\"title\":\"Sorry, I didn't understand that. From 1-5, with 5 best most likely, how likely are you to shop with us again?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Shop Again\",\"node\":\"67662d22-b717-49c5-bc9a-c1570473251e\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"154760a8-a31f-4aaa-a1cd-7095f6a7de10\"},{\"title\":\"Thanks, it is great to hear we did a good job. Rest assured we still strive to improve every single day. Ok, so on a scale 1-5, with 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"682da4ff-a707-41ee-9398-f0fb08ff357f\"},{\"title\":\"Sorry I didn't understand that, please answer with 1-5. With 5 being most likely, how likely would you be to recommend us to a friend?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0}],\"name\":\"Recommend\",\"node\":\"827448e6-1da7-493c-bf75-0c568c8e11c8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"445786dd-4d82-40f5-b4b8-bc24147702b7\"},{\"title\":\"That is always nice to hear, thanks, but I'm sure we could do even better, what could we do to improve?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Suggestion\",\"node\":\"5ed6c9b1-42fe-47c7-88d0-9b10e3a13784\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"68d131b3-14c5-4d15-8d36-1dde3cd93a8a\"},{\"title\":\"Ok, thanks, we'll definitely consider that. Ok, two last questions and then you're all done, are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"42f79d16-4f7e-486c-99a3-eac3bff6a974\"},{\"title\":\"I'm sorry, I didn't understand that! We're almost done though so let's try again. Are you male or female?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Male\",\"count\":0},{\"label\":\"Female\",\"count\":0}],\"name\":\"Gender\",\"node\":\"eeea262b-d62b-4df9-91e5-1ce3b4c99a5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"767da1dc-5efa-4a02-b4a5-df8c9ca4329d\"},{\"title\":\"Great, one last question, and don't worry we promise not to tell anyone else. How old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d81bb8a9-429b-4422-8ffb-0c5ad3b26c47\"},{\"title\":\"I know, I know, nobody likes to think about their age, but we promise not to share it with anyone else. Come on, how old are you?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1-120\",\"count\":0}],\"name\":\"Age\",\"node\":\"124d714a-7370-497e-8d04-67508567b5cc\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2883c900-af5f-4d74-8502-e370fe92ce62\"}]}","status":0,"created_at":"2020-05-05 00:12:35","updated_at":"2020-06-27 22:09:01"},{"id":13,"flow_id":"e4634fde-914b-4c96-83c2-d8fec5da9087","data_pack":"{\"id\":0,\"flow_uuid\":\"e4634fde-914b-4c96-83c2-d8fec5da9087\",\"title\":\"Copy of Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"883ae559-7ea7-4367-87cd-fafe8790f826\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bfc533ab-a52c-4372-bc62-93994dc6c972\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f58565f6-2844-4b53-bb9c-8fd9853ea2ea\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4759d4bf-8b66-4de4-9705-fd58d60d9dd1\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b18cb43a-e5a8-4137-b67d-b17791604291\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"975fc19a-52eb-4b4b-95cf-429210e6d5aa\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4892ff35-300a-4209-b598-386306bdfdab\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7d14990a-e4e2-4168-9a02-dd67fee31fb3\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b3a16aaf-c46c-4a85-96de-6489d4e9532d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"82f28351-d03e-4fa1-8a6c-a9fe1f027dae\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6c163b3f-000d-4247-bb03-3d592d724ce6\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3f3ca58c-36a1-457e-bc5d-cf910c569b7f\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c9b46093-bc74-4447-b5a7-83a503cd5ac1\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6677d2c1-7990-4845-abe0-21fcf7deb85e\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"59e3917c-8207-4d50-9740-3cfd16ca574c\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"3646519c-85ae-497e-bf2e-2e14d94169f0\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9e38e2df-67bc-40bf-a22c-0446dc94560b\"},{\"title\":\"Thank you, we will share this with health experts and use this to make more information available in the future.\\n\\nType Menu to return to menu\\nType End to Exit\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b44cb3b6-2ba8-424d-89f6-6d2d44d0c9e1\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"\",\"node\":\"9ec22f07-a0a5-4602-a876-59e809ec1dab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"44a2dd03-3404-4aab-9ccf-edcbffdba1fa\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"e4634fde-914b-4c96-83c2-d8fec5da9087\",\"title\":\"Copy of Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"883ae559-7ea7-4367-87cd-fafe8790f826\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bfc533ab-a52c-4372-bc62-93994dc6c972\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f58565f6-2844-4b53-bb9c-8fd9853ea2ea\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4759d4bf-8b66-4de4-9705-fd58d60d9dd1\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b18cb43a-e5a8-4137-b67d-b17791604291\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"975fc19a-52eb-4b4b-95cf-429210e6d5aa\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4892ff35-300a-4209-b598-386306bdfdab\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7d14990a-e4e2-4168-9a02-dd67fee31fb3\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b3a16aaf-c46c-4a85-96de-6489d4e9532d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"82f28351-d03e-4fa1-8a6c-a9fe1f027dae\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6c163b3f-000d-4247-bb03-3d592d724ce6\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3f3ca58c-36a1-457e-bc5d-cf910c569b7f\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c9b46093-bc74-4447-b5a7-83a503cd5ac1\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6677d2c1-7990-4845-abe0-21fcf7deb85e\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"59e3917c-8207-4d50-9740-3cfd16ca574c\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"3646519c-85ae-497e-bf2e-2e14d94169f0\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9e38e2df-67bc-40bf-a22c-0446dc94560b\"},{\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u0995\\u09c7 \\u09a7\\u09a8\\u09cd\\u09af\\u09ac\\u09be\\u09a6, \\u0986\\u09ae\\u09b0\\u09be \\u098f\\u099f\\u09bf \\u09b8\\u09cd\\u09ac\\u09be\\u09b8\\u09cd\\u09a5\\u09cd\\u09af \\u09ac\\u09bf\\u09b6\\u09c7\\u09b7\\u099c\\u09cd\\u099e\\u09a6\\u09c7\\u09b0 \\u09b8\\u09be\\u09a5\\u09c7 \\u09ad\\u09be\\u0997 \\u0995\\u09b0\\u09c7 \\u09a8\\u09c7\\u09ac \\u098f\\u09ac\\u0982 \\u09ad\\u09ac\\u09bf\\u09b7\\u09cd\\u09af\\u09a4\\u09c7 \\u0986\\u09b0\\u0993 \\u09a4\\u09a5\\u09cd\\u09af \\u09b8\\u09b0\\u09ac\\u09b0\\u09be\\u09b9 \\u0995\\u09b0\\u09a4\\u09c7 \\u098f\\u099f\\u09bf \\u09ac\\u09cd\\u09af\\u09ac\\u09b9\\u09be\\u09b0 \\u0995\\u09b0\\u09ac menu \\u09ae\\u09c7\\u09a8\\u09c1\\u09a4\\u09c7 \\u099f\\u09be\\u0987\\u09aa \\u09ae\\u09c7\\u09a8\\u09c1 \\u099f\\u09be\\u0987\\u09aa \\u0995\\u09b0\\u09c1\\u09a8 \\u09aa\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09a5\\u09c7\\u0995\\u09c7 \\u09aa\\u09cd\\u09b0\\u09b8\\u09cd\\u09a5\\u09be\\u09a8 \\u0995\\u09b0\\u09a4\\u09c7\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b44cb3b6-2ba8-424d-89f6-6d2d44d0c9e1\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"\",\"node\":\"9ec22f07-a0a5-4602-a876-59e809ec1dab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"44a2dd03-3404-4aab-9ccf-edcbffdba1fa\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"e4634fde-914b-4c96-83c2-d8fec5da9087\",\"title\":\"Copy of Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"883ae559-7ea7-4367-87cd-fafe8790f826\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bfc533ab-a52c-4372-bc62-93994dc6c972\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"bb4155ed-c191-47b5-a3ac-383a01652f5b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f58565f6-2844-4b53-bb9c-8fd9853ea2ea\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\n\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0}],\"name\":\"\",\"node\":\"52d3eab5-d992-4b9b-ad51-477376c349ab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4759d4bf-8b66-4de4-9705-fd58d60d9dd1\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b18cb43a-e5a8-4137-b67d-b17791604291\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"975fc19a-52eb-4b4b-95cf-429210e6d5aa\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4892ff35-300a-4209-b598-386306bdfdab\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7d14990a-e4e2-4168-9a02-dd67fee31fb3\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b3a16aaf-c46c-4a85-96de-6489d4e9532d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"82f28351-d03e-4fa1-8a6c-a9fe1f027dae\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6c163b3f-000d-4247-bb03-3d592d724ce6\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3f3ca58c-36a1-457e-bc5d-cf910c569b7f\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c9b46093-bc74-4447-b5a7-83a503cd5ac1\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"6677d2c1-7990-4845-abe0-21fcf7deb85e\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"4e1d690c-55bf-4c1b-beea-b7180152e73c\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"59e3917c-8207-4d50-9740-3cfd16ca574c\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"3646519c-85ae-497e-bf2e-2e14d94169f0\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9e38e2df-67bc-40bf-a22c-0446dc94560b\"},{\"title\":\"\\u1000\\u103b\\u1031\\u1038\\u1007\\u1030\\u1038\\u1010\\u1004\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1000\\u103b\\u103d\\u1014\\u103a\\u102f\\u1015\\u103a\\u1010\\u102d\\u102f\\u1037\\u101e\\u100a\\u103a\\u1024\\u1021\\u1001\\u103b\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u1000\\u103b\\u1014\\u103a\\u1038\\u1019\\u102c\\u101b\\u1031\\u1038\\u1000\\u103b\\u103d\\u1019\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u1030\\u1019\\u103b\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1019\\u103b\\u103e\\u101d\\u1031\\u1015\\u103c\\u102e\\u1038\\u1021\\u1014\\u102c\\u1002\\u1010\\u103a\\u104c\\u1015\\u102d\\u102f\\u1019\\u102d\\u102f\\u101e\\u1031\\u102c\\u101e\\u1010\\u1004\\u103a\\u1038\\u1021\\u1001\\u103b\\u1000\\u103a\\u1021\\u101c\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u101b\\u101b\\u103e\\u102d\\u1005\\u1031\\u101b\\u1014\\u103a\\u1021\\u101e\\u102f\\u1036\\u1038\\u1015\\u103c\\u102f\\u1015\\u102b\\u101c\\u102d\\u1019\\u1037\\u103a\\u1019\\u100a\\u103a\\u104b\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"a22f89df-9a6f-4ab8-9e3a-65480d5caa8f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b44cb3b6-2ba8-424d-89f6-6d2d44d0c9e1\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"\",\"node\":\"9ec22f07-a0a5-4602-a876-59e809ec1dab\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"44a2dd03-3404-4aab-9ccf-edcbffdba1fa\"}]}","status":0,"created_at":"2020-05-05 00:12:35","updated_at":"2020-06-27 22:09:01"},{"id":12,"flow_id":"d934b755-64e0-48b7-93af-d001c40822ec","data_pack":"{\"id\":0,\"flow_uuid\":\"d934b755-64e0-48b7-93af-d001c40822ec\",\"title\":\"Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92ccede7-93b9-4247-8860-ee83d171e040\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"04322bf4-2eb9-491c-b8c9-44c98aa695f8\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2320f208-34f5-4a88-b51b-27e0527ffc75\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4404820f-8134-49f8-a637-1c4edf6bd34a\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"db43daa2-91ba-4ec3-8db6-4b8e0f19c623\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"5406dc67-fd2a-4cfb-9873-3010d975924e\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"1d51826e-b542-4f8e-b9d8-8ae678058417\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3cfcbfb6-9e1e-4fb0-bbdc-854562db4b9c\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"072f9023-98ed-477e-bac5-5fdd4e73238d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8f71b457-293d-48fc-81fa-584babec793f\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0a7fe1a-2e32-4abd-9a4b-28083002ad4a\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"ebbe8f5d-3f13-4b3e-94bf-c6eded35d5ff\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d8820aba-574b-4900-ba83-127e50d37bd8\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"51cfb5ab-d08b-4f87-a253-ad60be9fbee5\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b29357ad-4e48-4b3f-9fea-5493896ef1a9\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"5b96168a-1206-4e30-bdfc-5c4548725c7b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bc18a389-1d85-4f9a-9f88-566d463c7264\"},{\"title\":\"Thank you, we will share this with health experts and use this to make more information available in the future.\\n\\nType Menu to return to menu\\nType End to Exit\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4778d307-19ec-462e-8920-06375e9fe614\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"\",\"node\":\"c664d117-77ec-45d2-944f-de6ab8f30721\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f9527c7b-1e1d-454d-b2a2-6b9a0e50d19f\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"d934b755-64e0-48b7-93af-d001c40822ec\",\"title\":\"Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92ccede7-93b9-4247-8860-ee83d171e040\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"04322bf4-2eb9-491c-b8c9-44c98aa695f8\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2320f208-34f5-4a88-b51b-27e0527ffc75\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"1\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4404820f-8134-49f8-a637-1c4edf6bd34a\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"db43daa2-91ba-4ec3-8db6-4b8e0f19c623\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"5406dc67-fd2a-4cfb-9873-3010d975924e\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"1d51826e-b542-4f8e-b9d8-8ae678058417\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3cfcbfb6-9e1e-4fb0-bbdc-854562db4b9c\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"072f9023-98ed-477e-bac5-5fdd4e73238d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8f71b457-293d-48fc-81fa-584babec793f\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0a7fe1a-2e32-4abd-9a4b-28083002ad4a\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"ebbe8f5d-3f13-4b3e-94bf-c6eded35d5ff\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d8820aba-574b-4900-ba83-127e50d37bd8\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"51cfb5ab-d08b-4f87-a253-ad60be9fbee5\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b29357ad-4e48-4b3f-9fea-5493896ef1a9\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"5b96168a-1206-4e30-bdfc-5c4548725c7b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bc18a389-1d85-4f9a-9f88-566d463c7264\"},{\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u0995\\u09c7 \\u09a7\\u09a8\\u09cd\\u09af\\u09ac\\u09be\\u09a6, \\u0986\\u09ae\\u09b0\\u09be \\u098f\\u099f\\u09bf \\u09b8\\u09cd\\u09ac\\u09be\\u09b8\\u09cd\\u09a5\\u09cd\\u09af \\u09ac\\u09bf\\u09b6\\u09c7\\u09b7\\u099c\\u09cd\\u099e\\u09a6\\u09c7\\u09b0 \\u09b8\\u09be\\u09a5\\u09c7 \\u09ad\\u09be\\u0997 \\u0995\\u09b0\\u09c7 \\u09a8\\u09c7\\u09ac \\u098f\\u09ac\\u0982 \\u09ad\\u09ac\\u09bf\\u09b7\\u09cd\\u09af\\u09a4\\u09c7 \\u0986\\u09b0\\u0993 \\u09a4\\u09a5\\u09cd\\u09af \\u09b8\\u09b0\\u09ac\\u09b0\\u09be\\u09b9 \\u0995\\u09b0\\u09a4\\u09c7 \\u098f\\u099f\\u09bf \\u09ac\\u09cd\\u09af\\u09ac\\u09b9\\u09be\\u09b0 \\u0995\\u09b0\\u09ac menu \\u09ae\\u09c7\\u09a8\\u09c1\\u09a4\\u09c7 \\u099f\\u09be\\u0987\\u09aa \\u09ae\\u09c7\\u09a8\\u09c1 \\u099f\\u09be\\u0987\\u09aa \\u0995\\u09b0\\u09c1\\u09a8 \\u09aa\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09a5\\u09c7\\u0995\\u09c7 \\u09aa\\u09cd\\u09b0\\u09b8\\u09cd\\u09a5\\u09be\\u09a8 \\u0995\\u09b0\\u09a4\\u09c7\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4778d307-19ec-462e-8920-06375e9fe614\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"\",\"node\":\"c664d117-77ec-45d2-944f-de6ab8f30721\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f9527c7b-1e1d-454d-b2a2-6b9a0e50d19f\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"d934b755-64e0-48b7-93af-d001c40822ec\",\"title\":\"Coronavirus bot Final with referrals\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hey U-Reporter, Have you heard about Coronavirus? It is a new respiratory virus which is spreading fast in some places around the world. More than 28,000 people are known to be infected and at least 564 deaths have been recorded (as of Feb 6, 2020). Would you like to receive useful information from WHO, IFRC and UNICEF on how to prevent it? Please reply YES or NO\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"92ccede7-93b9-4247-8860-ee83d171e040\"},{\"title\":\"Sorry we did not understand, reply with Yes or No\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Do you want information on CoronaVirus\",\"node\":\"244cf78e-7b5e-4018-93a0-4606323e6e9a\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"04322bf4-2eb9-491c-b8c9-44c98aa695f8\"},{\"title\":\"Sorry we did not understand.\\n\\nWhat would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2320f208-34f5-4a88-b51b-27e0527ffc75\"},{\"title\":\"Thanks What would you like to learn?\\nA. What is Coronavirus?\\nB. How does the virus spread\\nC. What are the symptoms of Coronavirus\\nD. How can I protect myself\\nE. Protecting others from getting sick\\nF. Myths about the virus\\nG. Other questions\\nH. [referral info]\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1041\",\"count\":0},{\"label\":\"2\",\"count\":0},{\"label\":\"3\",\"count\":0},{\"label\":\"4\",\"count\":0},{\"label\":\"5\",\"count\":0},{\"label\":\"6\",\"count\":0},{\"label\":\"7\",\"count\":0},{\"label\":\">7\",\"count\":0}],\"name\":\"\",\"node\":\"7c2946f6-286f-417c-b2b1-a58735660289\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4404820f-8134-49f8-a637-1c4edf6bd34a\"},{\"title\":\"Coronavirus is a new respiratory virus that has not been previously identified in humans. The first case of the virus has been identified in Wuhan, Hubei Province, China. United Nations, Public health officials and partners are working hard to identify the source of the virus. Coronaviruses are a large family of viruses, some causing illness in people and others that circulate among animals, including camels, cats and bats\\n\\nType B to learn about how the virus spreads\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"db43daa2-91ba-4ec3-8db6-4b8e0f19c623\"},{\"title\":\"According to World Health Organization, Coronavirus originally emerged from an animal source but now seems to be spreading from person-to-person. \\n\\nType C to learn about symptoms of Coronavirus\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"5406dc67-fd2a-4cfb-9873-3010d975924e\"},{\"title\":\"Common signs of Coronavirus infection include fever, cough, shortness of breath and breathing difficulties. In severe cases, infection can cause pneumonia, severe acute respiratory syndrome, kidney failure and even death.\\n\\nType D to learn about Protecting yourself\\nType MENU to return to main menu\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"1d51826e-b542-4f8e-b9d8-8ae678058417\"},{\"title\":\"You can protect yourself by:\\n- Washing your hands with soap and running water frequently : before and after eating, after using toilet, touching animals or animal waste\\n- Covering mouth and nose with a disposable tissue when coughing or sneezing\\n- Avoiding close contact with anyone who shows symptoms.\\n- Seek medical care if you have fever, cough or difficulty breathing.\\n\\nType E to learn about Protecting others\\nType MENU to return to main menu\\n\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"3cfcbfb6-9e1e-4fb0-bbdc-854562db4b9c\"},{\"title\":\"You can protect others from getting sick taking the following precautions \\n- When coughing and sneezing, cover mouth and nose with elbow or tissue\\n- Throw the tissue in a bin immediately after use\\n- Clean hands with soap after coughing or sneezing \\n- Avoid close contact when you are experiencing cough and fever\\n- Avoid spitting in public\\n- Seek medical care if your loved one have fever, cough or difficulty breathing.\\n\\nType F to learn about Myths about the Virus\\nType MENU to return to main menu\\n\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"072f9023-98ed-477e-bac5-5fdd4e73238d\"},{\"title\":\"Sorry we did not understand, Reply with A, B, C or D\\n\\nWhat would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8f71b457-293d-48fc-81fa-584babec793f\"},{\"title\":\"What would you like to learn?\\nA. Can pets at home spread the coronavirus?\\nB. Does the new coronavirus affect older people, or are younger people more?\\nC. Are antibiotics effective in preventing and treating the new coronavirus?\\nD. Are there any specific medicines to prevent or treat the new coronavirus?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0a7fe1a-2e32-4abd-9a4b-28083002ad4a\"},{\"title\":\"At present, there is no evidence that companion animals\\\/pets such as dogs or cats can be infected with the new coronavirus. However, it is always a good idea to wash your hands with soap and water after contact with pets. This protects you against various common bacteria such as E.coli and Salmonella that can pass between pets and humans.\\n\\nType B to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"ebbe8f5d-3f13-4b3e-94bf-c6eded35d5ff\"},{\"title\":\"People of all ages can be infected by the new coronavirus .Older people, and people with pre-existing medical conditions (such as asthma, diabetes, heart disease) appear to be more vulnerable to becoming severely ill with the virus. \\n\\nType C to learn more \",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d8820aba-574b-4900-ba83-127e50d37bd8\"},{\"title\":\"Antibiotics do not work against viruses, only bacteria.\\n\\nThe new coronavirus is a virus and, therefore, antibiotics should not be used as a means of prevention or treatment. However, if you are hospitalized you may receive antibiotics because bacterial co-infection is possible.\\n\\nType D to learn more\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"51cfb5ab-d08b-4f87-a253-ad60be9fbee5\"},{\"title\":\"To date, there is no specific medicine recommended to prevent or treat the new coronavirus. However, those infected with the virus should receive appropriate care to relieve and treat symptoms, and those with severe illness should receive optimized supportive care\\n\\nType Menu to return\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Can pets spread the Coronavirus\",\"count\":0},{\"label\":\"Who does the virus affect more\",\"count\":0},{\"label\":\"Are antibiotics effective\",\"count\":0},{\"label\":\"Medicines to prevent the virus\",\"count\":0}],\"name\":\"Myths\",\"node\":\"1b71d8fa-4982-497d-96c2-088362fae568\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"b29357ad-4e48-4b3f-9fea-5493896ef1a9\"},{\"title\":\"What else would you like to know? Please tell us and UNICEF will review your suggested questions\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Other what would you like to learn more\",\"node\":\"5b96168a-1206-4e30-bdfc-5c4548725c7b\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"bc18a389-1d85-4f9a-9f88-566d463c7264\"},{\"title\":\"\\u1000\\u103b\\u1031\\u1038\\u1007\\u1030\\u1038\\u1010\\u1004\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1000\\u103b\\u103d\\u1014\\u103a\\u102f\\u1015\\u103a\\u1010\\u102d\\u102f\\u1037\\u101e\\u100a\\u103a\\u1024\\u1021\\u1001\\u103b\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u1000\\u103b\\u1014\\u103a\\u1038\\u1019\\u102c\\u101b\\u1031\\u1038\\u1000\\u103b\\u103d\\u1019\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u1030\\u1019\\u103b\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1019\\u103b\\u103e\\u101d\\u1031\\u1015\\u103c\\u102e\\u1038\\u1021\\u1014\\u102c\\u1002\\u1010\\u103a\\u104c\\u1015\\u102d\\u102f\\u1019\\u102d\\u102f\\u101e\\u1031\\u102c\\u101e\\u1010\\u1004\\u103a\\u1038\\u1021\\u1001\\u103b\\u1000\\u103a\\u1021\\u101c\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u101b\\u101b\\u103e\\u102d\\u1005\\u1031\\u101b\\u1014\\u103a\\u1021\\u101e\\u102f\\u1036\\u1038\\u1015\\u103c\\u102f\\u1015\\u102b\\u101c\\u102d\\u1019\\u1037\\u103a\\u1019\\u100a\\u103a\\u104b\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"run_num\",\"node\":\"beb4d87b-94df-430c-9aba-f7dee6714adf\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"4778d307-19ec-462e-8920-06375e9fe614\"},{\"title\":\"[referral info]\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"\",\"node\":\"c664d117-77ec-45d2-944f-de6ab8f30721\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"f9527c7b-1e1d-454d-b2a2-6b9a0e50d19f\"}]}","status":0,"created_at":"2020-05-05 00:12:35","updated_at":"2020-06-27 22:09:01"},{"id":11,"flow_id":"cf88123a-4d09-4993-b3c6-d003dc898d5a","data_pack":"{\"id\":0,\"flow_uuid\":\"cf88123a-4d09-4993-b3c6-d003dc898d5a\",\"title\":\"Sample Flow - Simple Poll\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hi @contact.name, is your water filter working? Answer with Yes or No.\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cc4c5927-1417-4f6a-8e37-0e243e7c10bb\"},{\"title\":\"I'm sorry, I didn't understand that. Is your water filter still working? Answer with Yes or No.\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"72fffe25-ee14-4576-b033-d44806c1fa06\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"cf88123a-4d09-4993-b3c6-d003dc898d5a\",\"title\":\"\\u09a8\\u09ae\\u09c1\\u09a8\\u09be \\u09aa\\u09cd\\u09b0\\u09ac\\u09be\\u09b9 - \\u09b8\\u09be\\u09a7\\u09be\\u09b0\\u09a3 \\u09aa\\u09cb\\u09b2\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u09b9\\u09be\\u0987 @ \\u0995\\u09a8\\u09cd\\u099f\\u09be\\u0995\\u09cd\\u099f.\\u09a8\\u09c7\\u09ae, \\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u099c\\u09b2 \\u09ab\\u09bf\\u09b2\\u09cd\\u099f\\u09be\\u09b0 \\u0995\\u09be\\u099c \\u0995\\u09b0\\u099b\\u09c7? \\u09b9\\u09cd\\u09af\\u09be\\u0981 \\u09ac\\u09be \\u09a8\\u09be \\u09a6\\u09bf\\u09af\\u09bc\\u09c7 \\u0989\\u09a4\\u09cd\\u09a4\\u09b0 \\u09a6\\u09bf\\u09a8\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cc4c5927-1417-4f6a-8e37-0e243e7c10bb\"},{\"title\":\"I'm sorry, I didn't understand that. Is your water filter still working? Answer with Yes or No.\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"72fffe25-ee14-4576-b033-d44806c1fa06\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"cf88123a-4d09-4993-b3c6-d003dc898d5a\",\"title\":\"\\u1014\\u1019\\u1030\\u1014\\u102c Flow - \\u101b\\u102d\\u102f\\u1038\\u101b\\u103e\\u1004\\u103a\\u1038\\u101e\\u1031\\u102c\\u1005\\u1005\\u103a\\u1010\\u1019\\u103a\\u1038\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u1019\\u1004\\u103a\\u1039\\u1002\\u101c\\u102c\\u1015\\u102b @ contact.name, \\u101e\\u1004\\u1037\\u103a\\u101b\\u1031\\u1005\\u1005\\u103a\\u1005\\u1000\\u103a\\u1021\\u101c\\u102f\\u1015\\u103a\\u101c\\u102f\\u1015\\u103a\\u1014\\u1031\\u101e\\u101c\\u102c\\u1038\\u104b \\u101f\\u102f\\u1010\\u103a\\u1000\\u1032\\u1037\\u101e\\u102d\\u102f\\u1037\\u1019\\u101f\\u102f\\u1010\\u103a\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1016\\u103c\\u1004\\u1037\\u103a\\u1016\\u103c\\u1031\\u1015\\u102b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cc4c5927-1417-4f6a-8e37-0e243e7c10bb\"},{\"title\":\"I'm sorry, I didn't understand that. Is your water filter still working? Answer with Yes or No.\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"Filter Working\",\"node\":\"688fb4da-4025-40fa-b601-9a7c236c67d8\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"72fffe25-ee14-4576-b033-d44806c1fa06\"}]}","status":0,"created_at":"2020-05-05 00:12:35","updated_at":"2020-06-27 22:09:01"},{"id":10,"flow_id":"a3002619-43b0-4624-8c76-9770304fc8a5","data_pack":"{\"id\":0,\"flow_uuid\":\"a3002619-43b0-4624-8c76-9770304fc8a5\",\"title\":\"Sample Flow - Order Status Checker\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Thanks for contacting the ThriftShop order status system. Please send your order # and we'll help you in a jiffy!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cfb86851-e0ac-4575-a566-2a0a164ca876\"},{\"title\":\"Sorry that doesn't look like a valid order number. Maybe try: CU001, CU002 or CU003?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2d9dfd3d-f509-494d-90e7-496493e53949\"},{\"title\":\"Great news @legacy_extra.name! We shipped your order for @legacy_extra.description on @legacy_extra.ship_date and we expect it will be delivered on @legacy_extra.delivery_date. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0eff961-80ba-40b4-a5c7-31072d3065e9\"},{\"title\":\"Hi @legacy_extra.name. Hope you are patient because we haven't shipped your order for @legacy_extra.description yet. We expect to ship it by @legacy_extra.ship_date though. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"452449ff-50de-4903-aeb9-f0e212cf63ee\"},{\"title\":\"Uh oh @legacy_extra.name! Our record indicate that your order for @legacy_extra.description was cancelled on @legacy_extra.cancel_date. If you think this is in error, please reply with a comment and our orders department will get right on it!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c22e8b16-0264-4d5a-9e46-56622ea8505e\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"a3002619-43b0-4624-8c76-9770304fc8a5\",\"title\":\"Sample Flow - Order Status Checker\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Thanks for contacting the ThriftShop order status system. Please send your order # and we'll help you in a jiffy!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cfb86851-e0ac-4575-a566-2a0a164ca876\"},{\"title\":\"Sorry that doesn't look like a valid order number. Maybe try: CU001, CU002 or CU003?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2d9dfd3d-f509-494d-90e7-496493e53949\"},{\"title\":\"Great news @legacy_extra.name! We shipped your order for @legacy_extra.description on @legacy_extra.ship_date and we expect it will be delivered on @legacy_extra.delivery_date. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0eff961-80ba-40b4-a5c7-31072d3065e9\"},{\"title\":\"Hi @legacy_extra.name. Hope you are patient because we haven't shipped your order for @legacy_extra.description yet. We expect to ship it by @legacy_extra.ship_date though. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"452449ff-50de-4903-aeb9-f0e212cf63ee\"},{\"title\":\"Uh oh @legacy_extra.name! Our record indicate that your order for @legacy_extra.description was cancelled on @legacy_extra.cancel_date. If you think this is in error, please reply with a comment and our orders department will get right on it!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c22e8b16-0264-4d5a-9e46-56622ea8505e\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"a3002619-43b0-4624-8c76-9770304fc8a5\",\"title\":\"Sample Flow - Order Status Checker\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Thanks for contacting the ThriftShop order status system. Please send your order # and we'll help you in a jiffy!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"cfb86851-e0ac-4575-a566-2a0a164ca876\"},{\"title\":\"Sorry that doesn't look like a valid order number. Maybe try: CU001, CU002 or CU003?\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Lookup Response\",\"node\":\"f7fa171c-9d3a-4dc2-a5da-63db19c967e2\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"2d9dfd3d-f509-494d-90e7-496493e53949\"},{\"title\":\"Great news @legacy_extra.name! We shipped your order for @legacy_extra.description on @legacy_extra.ship_date and we expect it will be delivered on @legacy_extra.delivery_date. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d0eff961-80ba-40b4-a5c7-31072d3065e9\"},{\"title\":\"Hi @legacy_extra.name. Hope you are patient because we haven't shipped your order for @legacy_extra.description yet. We expect to ship it by @legacy_extra.ship_date though. If you have any questions, just reply and our customer service department will be notified.\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"452449ff-50de-4903-aeb9-f0e212cf63ee\"},{\"title\":\"Uh oh @legacy_extra.name! Our record indicate that your order for @legacy_extra.description was cancelled on @legacy_extra.cancel_date. If you think this is in error, please reply with a comment and our orders department will get right on it!\",\"results\":{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Comment\",\"node\":\"b2a4a24f-23a1-45f1-8c93-fd0a426ea27f\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"c22e8b16-0264-4d5a-9e46-56622ea8505e\"}]}","status":1,"created_at":"2020-05-05 00:12:35","updated_at":"2020-06-27 22:09:01"},{"id":9,"flow_id":"94ec9c2b-5c1f-4a6f-a739-5fb68b65b247","data_pack":"{\"id\":0,\"flow_uuid\":\"94ec9c2b-5c1f-4a6f-a739-5fb68b65b247\",\"title\":\"Test\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"94ec9c2b-5c1f-4a6f-a739-5fb68b65b247\",\"title\":\"Test\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","my_pack":"{\"id\":0,\"flow_uuid\":\"94ec9c2b-5c1f-4a6f-a739-5fb68b65b247\",\"title\":\"Test\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","status":0,"created_at":"2020-05-04 23:58:43","updated_at":"2020-06-27 22:09:01"},{"id":8,"flow_id":"cacac6c2-6f9e-4873-871b-5753024c45cf","data_pack":"{\"id\":0,\"flow_uuid\":\"cacac6c2-6f9e-4873-871b-5753024c45cf\",\"title\":\"U-Report App & Multimedia test flow\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Hello U-Reporters. click link or upload for photo\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":16},{\"label\":\"Upload\",\"count\":10}],\"name\":\"PHOTO\",\"node\":\"313dbf0a-da9f-40a4-bd64-ef0f55847ec7\",\"set\":26,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7f744ea4-310b-4d61-aa96-8c5aaa13b226\"},{\"title\":\" click link or upload for Gif\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":0},{\"label\":\"Upload\",\"count\":0}],\"name\":\"Gif\",\"node\":\"9b3d44e1-6855-4109-b250-b84762152c58\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d22ad447-e0ab-4649-87fa-388b5e0fdb20\"},{\"title\":\" click link or upload for video\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":0},{\"label\":\"Upload\",\"count\":0}],\"name\":\"Video\",\"node\":\"0a1dee7e-001f-4a20-80d3-134e879da497\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9b258562-d355-4613-821d-068f18b61f40\"},{\"title\":\"Audio\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Play\",\"count\":13}],\"name\":\"Audio\",\"node\":\"ab8589e6-8202-4c88-a555-35f447fe973b\",\"set\":13,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"40f0960c-879f-42be-b326-5c6c6b727e84\"},{\"title\":\"Thank You\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"k\",\"count\":1},{\"label\":\"ok\",\"count\":2},{\"label\":\"hi\",\"count\":3},{\"label\":\"nice\",\"count\":1},{\"label\":\"hlw\",\"count\":1},{\"label\":\"\\ud83d\\ude0b\",\"count\":1},{\"label\":\"1\",\"count\":1},{\"label\":\"test\",\"count\":1},{\"label\":\"m\",\"count\":2}],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"Result 5\",\"node\":\"c9378035-1587-4aee-800e-323e80a2202d\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8505192b-a485-484e-bc09-4ed66f18f759\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"cacac6c2-6f9e-4873-871b-5753024c45cf\",\"title\":\"\\u0987\\u0989-\\u09b0\\u09bf\\u09aa\\u09cb\\u09b0\\u09cd\\u099f \\u0985\\u09cd\\u09af\\u09be\\u09aa\\u09cd\\u09b2\\u09bf\\u0995\\u09c7\\u09b6\\u09a8 \\u098f\\u09ac\\u0982 \\u09ae\\u09be\\u09b2\\u09cd\\u099f\\u09bf\\u09ae\\u09bf\\u09a1\\u09bf\\u09af\\u09bc\\u09be \\u09aa\\u09b0\\u09c0\\u0995\\u09cd\\u09b7\\u09be\\u09b0 \\u09aa\\u09cd\\u09b0\\u09ac\\u09be\\u09b9\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u09b9\\u09cd\\u09af\\u09be\\u09b2\\u09cb \\u0987\\u0989-\\u09b0\\u09bf\\u09aa\\u09cb\\u09b0\\u09cd\\u099f\\u09be\\u09b0\\u09cd\\u09b8 \\u09b2\\u09bf\\u0999\\u09cd\\u0995\\u09c7 \\u0995\\u09cd\\u09b2\\u09bf\\u0995 \\u0995\\u09b0\\u09c1\\u09a8 \\u09ac\\u09be \\u099b\\u09ac\\u09bf\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u0986\\u09aa\\u09b2\\u09cb\\u09a1 \\u0995\\u09b0\\u09c1\\u09a8\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b2\\u09bf\\u0982\\u0995\",\"count\":16},{\"label\":\"\\u0986\\u09aa\\u09b2\\u09cb\\u09a1\",\"count\":10}],\"name\":\"PHOTO\",\"node\":\"313dbf0a-da9f-40a4-bd64-ef0f55847ec7\",\"set\":26,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7f744ea4-310b-4d61-aa96-8c5aaa13b226\"},{\"title\":\"\\u09b2\\u09bf\\u0999\\u09cd\\u0995\\u099f\\u09bf \\u0995\\u09cd\\u09b2\\u09bf\\u0995 \\u0995\\u09b0\\u09c1\\u09a8 \\u09ac\\u09be \\u099c\\u09bf\\u0986\\u0987\\u09ab\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u0986\\u09aa\\u09b2\\u09cb\\u09a1 \\u0995\\u09b0\\u09c1\\u09a8\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b2\\u09bf\\u0982\\u0995\",\"count\":0},{\"label\":\"\\u0986\\u09aa\\u09b2\\u09cb\\u09a1\",\"count\":0}],\"name\":\"Gif\",\"node\":\"9b3d44e1-6855-4109-b250-b84762152c58\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d22ad447-e0ab-4649-87fa-388b5e0fdb20\"},{\"title\":\"\\u09b2\\u09bf\\u0999\\u09cd\\u0995 \\u0995\\u09cd\\u09b2\\u09bf\\u0995 \\u0995\\u09b0\\u09c1\\u09a8 \\u09ac\\u09be \\u09ad\\u09bf\\u09a1\\u09bf\\u0993 \\u0986\\u09aa\\u09b2\\u09cb\\u09a1 \\u0995\\u09b0\\u09c1\\u09a8\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b2\\u09bf\\u0982\\u0995\",\"count\":0},{\"label\":\"\\u0986\\u09aa\\u09b2\\u09cb\\u09a1\",\"count\":0}],\"name\":\"Video\",\"node\":\"0a1dee7e-001f-4a20-80d3-134e879da497\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9b258562-d355-4613-821d-068f18b61f40\"},{\"title\":\"\\u09b6\\u09cd\\u09b0\\u09c1\\u09a4\\u09bf\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09aa\\u09cd\\u09b2\\u09c7\",\"count\":13}],\"name\":\"Audio\",\"node\":\"ab8589e6-8202-4c88-a555-35f447fe973b\",\"set\":13,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"40f0960c-879f-42be-b326-5c6c6b727e84\"},{\"title\":\"\\u09a7\\u09a8\\u09cd\\u09af\\u09ac\\u09be\\u09a6\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"k\",\"count\":1},{\"label\":\"ok\",\"count\":2},{\"label\":\"hi\",\"count\":3},{\"label\":\"nice\",\"count\":1},{\"label\":\"hlw\",\"count\":1},{\"label\":\"\\ud83d\\ude0b\",\"count\":1},{\"label\":\"1\",\"count\":1},{\"label\":\"test\",\"count\":1},{\"label\":\"m\",\"count\":2}],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"Result 5\",\"node\":\"c9378035-1587-4aee-800e-323e80a2202d\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8505192b-a485-484e-bc09-4ed66f18f759\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"cacac6c2-6f9e-4873-871b-5753024c45cf\",\"title\":\"U-Report App & Multimedia \\u1005\\u1019\\u103a\\u1038\\u101e\\u1015\\u103a\\u1019\\u103e\\u102f\\u1005\\u102e\\u1038\\u1006\\u1004\\u103a\\u1038\\u1019\\u103e\\u102f\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u1019\\u1004\\u103a\\u1039\\u1002\\u101c\\u102c\\u1015\\u102b \\u1026\\u1038 - \\u101e\\u1010\\u1004\\u103a\\u1038\\u1011\\u1031\\u102c\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u104b link \\u1000\\u102d\\u102f\\u1014\\u103e\\u102d\\u1015\\u103a\\u1015\\u103c\\u102e\\u1038\\u101e\\u102d\\u102f\\u1037\\u1019\\u101f\\u102f\\u1010\\u103a\\u1013\\u102c\\u1010\\u103a\\u1015\\u102f\\u1036\\u1021\\u1010\\u103d\\u1000\\u103a upload \\u101c\\u102f\\u1015\\u103a\\u1015\\u102b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":16},{\"label\":\"\\u1010\\u1004\\u103a\\u1015\\u102b\",\"count\":10}],\"name\":\"PHOTO\",\"node\":\"313dbf0a-da9f-40a4-bd64-ef0f55847ec7\",\"set\":26,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"7f744ea4-310b-4d61-aa96-8c5aaa13b226\"},{\"title\":\"link \\u1000\\u102d\\u102f\\u1014\\u103e\\u102d\\u1015\\u103a\\u1015\\u103c\\u102e\\u1038 Gif \\u1021\\u1010\\u103d\\u1000\\u103a upload \\u101c\\u102f\\u1015\\u103a\\u1015\\u102b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":0},{\"label\":\"\\u1010\\u1004\\u103a\\u1015\\u102b\",\"count\":0}],\"name\":\"Gif\",\"node\":\"9b3d44e1-6855-4109-b250-b84762152c58\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"d22ad447-e0ab-4649-87fa-388b5e0fdb20\"},{\"title\":\"link \\u1000\\u102d\\u102f\\u1000\\u101c\\u1005\\u103a\\u1014\\u103e\\u102d\\u1015\\u103a\\u1015\\u102b\\u101e\\u102d\\u102f\\u1037\\u1019\\u101f\\u102f\\u1010\\u103a\\u1017\\u102e\\u1012\\u102e\\u101a\\u102d\\u102f\\u1021\\u1018\\u102d\\u102f\\u1037\\u1021 upload\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Link\",\"count\":0},{\"label\":\"\\u1010\\u1004\\u103a\\u1015\\u102b\",\"count\":0}],\"name\":\"Video\",\"node\":\"0a1dee7e-001f-4a20-80d3-134e879da497\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"9b258562-d355-4613-821d-068f18b61f40\"},{\"title\":\"\\u1021\\u101e\\u1036\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u1000\\u1005\\u102c\\u1038\\u101e\\u100a\\u103a\",\"count\":13}],\"name\":\"Audio\",\"node\":\"ab8589e6-8202-4c88-a555-35f447fe973b\",\"set\":13,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"40f0960c-879f-42be-b326-5c6c6b727e84\"},{\"title\":\"\\u1000\\u103b\\u1031\\u1038\\u1007\\u1030\\u1038\\u1010\\u1004\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"k\",\"count\":1},{\"label\":\"ok\",\"count\":2},{\"label\":\"hi\",\"count\":3},{\"label\":\"nice\",\"count\":1},{\"label\":\"hlw\",\"count\":1},{\"label\":\"\\ud83d\\ude0b\",\"count\":1},{\"label\":\"1\",\"count\":1},{\"label\":\"test\",\"count\":1},{\"label\":\"m\",\"count\":2}],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"Result 5\",\"node\":\"c9378035-1587-4aee-800e-323e80a2202d\",\"set\":0,\"unset\":0},\"results_by_gender\":[],\"results_by_hub\":[],\"ruleset_uuid\":\"8505192b-a485-484e-bc09-4ed66f18f759\"}]}","status":1,"created_at":"2020-05-01 06:15:08","updated_at":"2020-06-27 22:09:01"},{"id":7,"flow_id":"983affb0-8fde-4ceb-a9b9-352e466f4db8","data_pack":"{\"id\":0,\"flow_uuid\":\"983affb0-8fde-4ceb-a9b9-352e466f4db8\",\"title\":\"Social Hub - Open Ended Test\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Do you think open ended questions are a good method to collect data?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":39},{\"label\":\"No\",\"count\":20}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":59,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":33},{\"label\":\"No\",\"count\":15}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":6},{\"label\":\"No\",\"count\":6}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":19},{\"label\":\"No\",\"count\":8}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":5}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":0}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e7500630-9051-4949-b01a-deed18ab3fe7\"},{\"title\":\"Do you know what open-ended means?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":30},{\"label\":\"No\",\"count\":21},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":51,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":22},{\"label\":\"No\",\"count\":18},{\"label\":\"I Don't Know\",\"count\":8}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":8},{\"label\":\"No\",\"count\":3},{\"label\":\"I Don't Know\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":12},{\"label\":\"No\",\"count\":11},{\"label\":\"I Don't Know\",\"count\":4}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":3},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":6},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":1},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":1},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":0},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":0},{\"label\":\"No\",\"count\":0},{\"label\":\"I Don't Know\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"1ff44eff-0c5d-48d2-b065-22a8904b44c8\"},{\"title\":\"What do you think about open ended questions?\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"good\",\"count\":6},{\"label\":\"good option\",\"count\":1},{\"label\":\"awesome\",\"count\":1},{\"label\":\"awesome \",\"count\":2},{\"label\":\"jjj\",\"count\":1},{\"label\":\"fgg\",\"count\":1},{\"label\":\"nice\",\"count\":2},{\"label\":\"without options\",\"count\":1},{\"label\":\"jj\",\"count\":2},{\"label\":\"nn\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"mm\",\"count\":1},{\"label\":\"hh\",\"count\":3},{\"label\":\"no\",\"count\":2},{\"label\":\"fjj\",\"count\":1},{\"label\":\"nj\",\"count\":1},{\"label\":\"kk\",\"count\":8},{\"label\":\"\\ud83d\\ude1c\",\"count\":1},{\"label\":\"hhh\",\"count\":1},{\"label\":\"j\",\"count\":2},{\"label\":\"how\",\"count\":1},{\"label\":\"yyyyy\",\"count\":1},{\"label\":\"12300\",\"count\":1},{\"label\":\"\\ud83d\\ude02\\ud83d\\ude02\\ud83d\\ude02\",\"count\":1},{\"label\":\"thanks\",\"count\":1},{\"label\":\"nothing\",\"count\":1},{\"label\":\"arman\",\"count\":1},{\"label\":\"ratul\",\"count\":1},{\"label\":\"mix123\",\"count\":1},{\"label\":\"nk\",\"count\":1},{\"label\":\"test123\",\"count\":1},{\"label\":\"zzz\",\"count\":1},{\"label\":\" no\",\"count\":1},{\"label\":\"new\",\"count\":2},{\"label\":\"koi\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"nothing \",\"count\":2},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"All Responses\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e473572f-7edc-41db-9df9-ce060136fcd4\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"983affb0-8fde-4ceb-a9b9-352e466f4db8\",\"title\":\"\\u09b8\\u09cb\\u09b8\\u09cd\\u09af\\u09be\\u09b2 \\u09b9\\u09be\\u09ac - \\u0993\\u09aa\\u09c7\\u09a8 \\u09b8\\u09ae\\u09be\\u09aa\\u09cd\\u09a4 \\u09aa\\u09b0\\u09c0\\u0995\\u09cd\\u09b7\\u09be\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09c7\\u09a8 \\u09af\\u09c7 \\u0993\\u09aa\\u09c7\\u09a8 \\u098f\\u09a8\\u09cd\\u09a1\\u09c7\\u09a1 \\u09aa\\u09cd\\u09b0\\u09b6\\u09cd\\u09a8\\u0997\\u09c1\\u09b2\\u09bf \\u09a1\\u09c7\\u099f\\u09be \\u09b8\\u0982\\u0997\\u09cd\\u09b0\\u09b9\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u098f\\u0995\\u099f\\u09bf \\u09ad\\u09be\\u09b2 \\u09aa\\u09a6\\u09cd\\u09a7\\u09a4\\u09bf?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":39},{\"label\":\"\\u09a8\\u09be\",\"count\":20}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":59,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":33},{\"label\":\"\\u09a8\\u09be\",\"count\":15}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":6},{\"label\":\"\\u09a8\\u09be\",\"count\":6}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":19},{\"label\":\"\\u09a8\\u09be\",\"count\":8}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":5}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e7500630-9051-4949-b01a-deed18ab3fe7\"},{\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u099c\\u09be\\u09a8\\u09c7\\u09a8 \\u09af\\u09c7 \\u0989\\u09a8\\u09cd\\u09ae\\u09c1\\u0995\\u09cd\\u09a4 \\u0985\\u09b0\\u09cd\\u09a5 \\u0995\\u09c0?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":30},{\"label\":\"\\u09a8\\u09be\",\"count\":21},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":51,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":22},{\"label\":\"\\u09a8\\u09be\",\"count\":18},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":8}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":8},{\"label\":\"\\u09a8\\u09be\",\"count\":3},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":12},{\"label\":\"\\u09a8\\u09be\",\"count\":11},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":4}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":3},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":6},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":1},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":1},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":0},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":0},{\"label\":\"\\u09a8\\u09be\",\"count\":0},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"1ff44eff-0c5d-48d2-b065-22a8904b44c8\"},{\"title\":\"\\u0996\\u09cb\\u09b2\\u09be \\u09b8\\u09ae\\u09be\\u09aa\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09b6\\u09cd\\u09a8\\u0997\\u09c1\\u09b2\\u09bf \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09c0 \\u09ad\\u09be\\u09ac\\u09c7\\u09a8?\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"good\",\"count\":6},{\"label\":\"good option\",\"count\":1},{\"label\":\"awesome\",\"count\":1},{\"label\":\"awesome \",\"count\":2},{\"label\":\"jjj\",\"count\":1},{\"label\":\"fgg\",\"count\":1},{\"label\":\"nice\",\"count\":2},{\"label\":\"without options\",\"count\":1},{\"label\":\"jj\",\"count\":2},{\"label\":\"nn\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"mm\",\"count\":1},{\"label\":\"hh\",\"count\":3},{\"label\":\"no\",\"count\":2},{\"label\":\"fjj\",\"count\":1},{\"label\":\"nj\",\"count\":1},{\"label\":\"kk\",\"count\":8},{\"label\":\"\\ud83d\\ude1c\",\"count\":1},{\"label\":\"hhh\",\"count\":1},{\"label\":\"j\",\"count\":2},{\"label\":\"how\",\"count\":1},{\"label\":\"yyyyy\",\"count\":1},{\"label\":\"12300\",\"count\":1},{\"label\":\"\\ud83d\\ude02\\ud83d\\ude02\\ud83d\\ude02\",\"count\":1},{\"label\":\"thanks\",\"count\":1},{\"label\":\"nothing\",\"count\":1},{\"label\":\"arman\",\"count\":1},{\"label\":\"ratul\",\"count\":1},{\"label\":\"mix123\",\"count\":1},{\"label\":\"nk\",\"count\":1},{\"label\":\"test123\",\"count\":1},{\"label\":\"zzz\",\"count\":1},{\"label\":\" no\",\"count\":1},{\"label\":\"new\",\"count\":2},{\"label\":\"koi\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"nothing \",\"count\":2},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u0995\\u09cd\\u09b0\\u09bf\\u09af\\u09bc\\u09be\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e473572f-7edc-41db-9df9-ce060136fcd4\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"983affb0-8fde-4ceb-a9b9-352e466f4db8\",\"title\":\"\\u101c\\u1030\\u1019\\u103e\\u102f\\u101b\\u1031\\u1038\\u1017\\u101f\\u102d\\u102f - \\u1015\\u103d\\u1004\\u1037\\u103a\\u101c\\u1004\\u103a\\u1038\\u1021\\u1006\\u102f\\u1036\\u1038\\u101e\\u1010\\u103a\\u1005\\u1019\\u103a\\u1038\\u101e\\u1015\\u103a\\u1019\\u103e\\u102f\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u1015\\u103d\\u1004\\u1037\\u103a\\u101c\\u1004\\u103a\\u1038\\u1015\\u103c\\u102e\\u1038\\u1015\\u103c\\u100a\\u1037\\u103a\\u1005\\u102f\\u1036\\u1010\\u1032\\u1037\\u1019\\u1031\\u1038\\u1001\\u103d\\u1014\\u103a\\u1038\\u1010\\u103d\\u1031\\u101f\\u102c\\u1021\\u1001\\u103b\\u1000\\u103a\\u1021\\u101c\\u1000\\u103a\\u1010\\u103d\\u1031\\u1000\\u102d\\u102f\\u1005\\u102f\\u1006\\u1031\\u102c\\u1004\\u103a\\u1038\\u1016\\u102d\\u102f\\u1037\\u1014\\u100a\\u103a\\u1038\\u101c\\u1019\\u103a\\u1038\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u1005\\u103a\\u1001\\u102f\\u101c\\u102d\\u102f\\u1037\\u1001\\u1004\\u103a\\u1017\\u103b\\u102c\\u1038\\u1011\\u1004\\u103a\\u101e\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":39},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":20}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":59,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":33},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":15}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":6},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":6}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":19},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":8}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":5}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"is_good\",\"node\":\"46b0d36c-7e1a-4a21-b7fb-7e2d6666bcba\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e7500630-9051-4949-b01a-deed18ab3fe7\"},{\"title\":\"Open-end \\u1006\\u102d\\u102f\\u1010\\u102c\\u1018\\u102c\\u1000\\u102d\\u102f\\u1006\\u102d\\u102f\\u101c\\u102d\\u102f\\u1010\\u102c\\u101c\\u1032\\u101e\\u102d\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":30},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":21},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":51,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":22},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":18},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":8}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":48,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":8},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":12,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":12},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":11},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":4}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":6,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":6},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":8,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":1},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":5,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":1},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":4,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":3,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":0},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"know_open_ended\",\"node\":\"20ed5519-d7f4-4195-bdec-8bf49ba9eb59\",\"set\":2,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"1ff44eff-0c5d-48d2-b065-22a8904b44c8\"},{\"title\":\"\\u1015\\u103d\\u1004\\u1037\\u103a\\u101c\\u1004\\u103a\\u1038\\u1015\\u103c\\u102e\\u1038\\u1015\\u103c\\u100a\\u1037\\u103a\\u1005\\u102f\\u1036\\u1010\\u1032\\u1037\\u1019\\u1031\\u1038\\u1001\\u103d\\u1014\\u103a\\u1038\\u1010\\u103d\\u1031\\u1014\\u1032\\u1037\\u1015\\u1010\\u103a\\u101e\\u1000\\u103a\\u1015\\u103c\\u102e\\u1038\\u101e\\u1004\\u103a\\u1018\\u101a\\u103a\\u101c\\u102d\\u102f\\u1011\\u1004\\u103a\\u101e\\u101c\\u1032\\u104b\",\"results\":{\"open_ended\":true,\"open\":[{\"label\":\"good\",\"count\":6},{\"label\":\"good option\",\"count\":1},{\"label\":\"awesome\",\"count\":1},{\"label\":\"awesome \",\"count\":2},{\"label\":\"jjj\",\"count\":1},{\"label\":\"fgg\",\"count\":1},{\"label\":\"nice\",\"count\":2},{\"label\":\"without options\",\"count\":1},{\"label\":\"jj\",\"count\":2},{\"label\":\"nn\",\"count\":1},{\"label\":\"gg\",\"count\":2},{\"label\":\"mm\",\"count\":1},{\"label\":\"hh\",\"count\":3},{\"label\":\"no\",\"count\":2},{\"label\":\"fjj\",\"count\":1},{\"label\":\"nj\",\"count\":1},{\"label\":\"kk\",\"count\":8},{\"label\":\"\\ud83d\\ude1c\",\"count\":1},{\"label\":\"hhh\",\"count\":1},{\"label\":\"j\",\"count\":2},{\"label\":\"how\",\"count\":1},{\"label\":\"yyyyy\",\"count\":1},{\"label\":\"12300\",\"count\":1},{\"label\":\"\\ud83d\\ude02\\ud83d\\ude02\\ud83d\\ude02\",\"count\":1},{\"label\":\"thanks\",\"count\":1},{\"label\":\"nothing\",\"count\":1},{\"label\":\"arman\",\"count\":1},{\"label\":\"ratul\",\"count\":1},{\"label\":\"mix123\",\"count\":1},{\"label\":\"nk\",\"count\":1},{\"label\":\"test123\",\"count\":1},{\"label\":\"zzz\",\"count\":1},{\"label\":\" no\",\"count\":1},{\"label\":\"new\",\"count\":2},{\"label\":\"koi\",\"count\":1},{\"label\":\"hello\",\"count\":1},{\"label\":\"nothing \",\"count\":2},{\"label\":\"test\",\"count\":1}],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0},\"results_by_gender\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Shamlapur\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp8E\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp14\"},{\"open_ended\":true,\"open\":[],\"categories\":[{\"label\":\"\\u1021\\u102c\\u1038\\u101c\\u102f\\u1036\\u1038\\u1010\\u102f\\u1036\\u1037\\u1015\\u103c\\u1014\\u103a\\u1019\\u103e\\u102f\",\"count\":0}],\"name\":\"open_ended\",\"node\":\"c4b72e7f-df01-4154-b9b0-2daf4949c607\",\"set\":0,\"unset\":0,\"label\":\"Camp22\"}],\"ruleset_uuid\":\"e473572f-7edc-41db-9df9-ce060136fcd4\"}]}","status":1,"created_at":"2020-05-01 06:15:08","updated_at":"2020-06-27 22:09:01"},{"id":6,"flow_id":"65d2efef-1922-4da7-bd62-813e451048f7","data_pack":"{\"id\":0,\"flow_uuid\":\"65d2efef-1922-4da7-bd62-813e451048f7\",\"title\":\"Social Hub - Test\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"Do you think COVID-19 is a risk for your community?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":37},{\"label\":\"No\",\"count\":15}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":34},{\"label\":\"No\",\"count\":13}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":21},{\"label\":\"No\",\"count\":6}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":3}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":8},{\"label\":\"No\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"1fa24a4f-7fab-4a71-96c0-bf0e55c09a53\"},{\"title\":\"Do you know that people of all ages can get infected with COVID-19?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":21},{\"label\":\"No\",\"count\":19},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":40,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":19},{\"label\":\"No\",\"count\":18},{\"label\":\"I Don't Know\",\"count\":10}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":13},{\"label\":\"No\",\"count\":11},{\"label\":\"I Don't Know\",\"count\":3}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":1},{\"label\":\"No\",\"count\":4},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":4}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":1}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":1},{\"label\":\"No\",\"count\":1},{\"label\":\"I Don't Know\",\"count\":2}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"6e689c7a-69c4-4cac-b00d-b7c2432b2409\"},{\"title\":\"Do you know that social distancing is the best way to prevent COVID-19?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":30},{\"label\":\"No\",\"count\":15},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":45,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":28},{\"label\":\"No\",\"count\":15},{\"label\":\"I Don't Know\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":19},{\"label\":\"No\",\"count\":4},{\"label\":\"I Don't Know\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":1},{\"label\":\"No\",\"count\":3},{\"label\":\"I Don't Know\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":6},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":2},{\"label\":\"I Don't Know\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"905d522b-a222-4a38-a13b-0ea9a4330590\"},{\"title\":\"During this emergency situation are you following the rules & staying home?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":35},{\"label\":\"No\",\"count\":17}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":33},{\"label\":\"No\",\"count\":14}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":18},{\"label\":\"No\",\"count\":9}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":2},{\"label\":\"No\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":8},{\"label\":\"No\",\"count\":2}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":3},{\"label\":\"No\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"Yes\",\"count\":4},{\"label\":\"No\",\"count\":0}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"c1729949-e772-4217-a088-bb71c5d6ef8f\"}]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"65d2efef-1922-4da7-bd62-813e451048f7\",\"title\":\"\\u09b8\\u09be\\u09ae\\u09be\\u099c\\u09bf\\u0995 \\u0995\\u09c7\\u09a8\\u09cd\\u09a6\\u09cd\\u09b0 - \\u09aa\\u09b0\\u09c0\\u0995\\u09cd\\u09b7\\u09be\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09c7\\u09a8 COVID-19 \\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u09b8\\u09ae\\u09cd\\u09aa\\u09cd\\u09b0\\u09a6\\u09be\\u09af\\u09bc\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u099d\\u09c1\\u0981\\u0995\\u09bf\\u09aa\\u09c2\\u09b0\\u09cd\\u09a3?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":37},{\"label\":\"\\u09a8\\u09be\",\"count\":15}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":34},{\"label\":\"\\u09a8\\u09be\",\"count\":13}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":21},{\"label\":\"\\u09a8\\u09be\",\"count\":6}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":3}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":8},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"1fa24a4f-7fab-4a71-96c0-bf0e55c09a53\"},{\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u099c\\u09be\\u09a8\\u09c7\\u09a8 \\u09af\\u09c7 \\u09b8\\u09ae\\u09b8\\u09cd\\u09a4 \\u09ac\\u09af\\u09bc\\u09b8\\u09c7\\u09b0 \\u09b2\\u09cb\\u0995\\u09c7\\u09b0\\u09be COVID-19 \\u098f \\u09b8\\u0982\\u0995\\u09cd\\u09b0\\u09be\\u09ae\\u09bf\\u09a4 \\u09b9\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09c7?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":21},{\"label\":\"\\u09a8\\u09be\",\"count\":19},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":40,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":19},{\"label\":\"\\u09a8\\u09be\",\"count\":18},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":10}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":13},{\"label\":\"\\u09a8\\u09be\",\"count\":11},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":3}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":1},{\"label\":\"\\u09a8\\u09be\",\"count\":4},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":4}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":1}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":1},{\"label\":\"\\u09a8\\u09be\",\"count\":1},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":2}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"6e689c7a-69c4-4cac-b00d-b7c2432b2409\"},{\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u099c\\u09be\\u09a8\\u09c7\\u09a8 \\u09af\\u09c7 \\u09b8\\u09be\\u09ae\\u09be\\u099c\\u09bf\\u0995 \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac COVID-19 \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09b0\\u09cb\\u09a7\\u09c7\\u09b0 \\u09b8\\u09c7\\u09b0\\u09be \\u0989\\u09aa\\u09be\\u09af\\u09bc?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":30},{\"label\":\"\\u09a8\\u09be\",\"count\":15},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":45,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":28},{\"label\":\"\\u09a8\\u09be\",\"count\":15},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":19},{\"label\":\"\\u09a8\\u09be\",\"count\":4},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":1},{\"label\":\"\\u09a8\\u09be\",\"count\":3},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":6},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":2},{\"label\":\"\\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"905d522b-a222-4a38-a13b-0ea9a4330590\"},{\"title\":\"\\u098f\\u0987 \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09aa\\u09b0\\u09bf\\u09b8\\u09cd\\u09a5\\u09bf\\u09a4\\u09bf\\u09a4\\u09c7 \\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u09ac\\u09bf\\u09a7\\u09bf\\u0997\\u09c1\\u09b2\\u09bf \\u0985\\u09a8\\u09c1\\u09b8\\u09b0\\u09a3 \\u0995\\u09b0\\u099b\\u09c7\\u09a8 \\u098f\\u09ac\\u0982 \\u0998\\u09b0\\u09c7 \\u09ac\\u09b8\\u09c7 \\u0986\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":35},{\"label\":\"\\u09a8\\u09be\",\"count\":17}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":33},{\"label\":\"\\u09a8\\u09be\",\"count\":14}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":18},{\"label\":\"\\u09a8\\u09be\",\"count\":9}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":2},{\"label\":\"\\u09a8\\u09be\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":8},{\"label\":\"\\u09a8\\u09be\",\"count\":2}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":3},{\"label\":\"\\u09a8\\u09be\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\",\"count\":4},{\"label\":\"\\u09a8\\u09be\",\"count\":0}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"c1729949-e772-4217-a088-bb71c5d6ef8f\"}]}","my_pack":"{\"id\":0,\"flow_uuid\":\"65d2efef-1922-4da7-bd62-813e451048f7\",\"title\":\"Social Hub - \\u1005\\u1019\\u103a\\u1038\\u101e\\u1015\\u103a\\u1001\\u103c\\u1004\\u103a\\u1038\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[{\"title\":\"COVID-19 \\u101e\\u100a\\u103a\\u101e\\u1004\\u103a\\u104f\\u101c\\u1030\\u1019\\u103e\\u102f\\u1021\\u101e\\u102d\\u102f\\u1004\\u103a\\u1038\\u1021 \\u1040 \\u102d\\u102f\\u1004\\u103a\\u1038\\u1021\\u1010\\u103d\\u1000\\u103a\\u1021\\u1014\\u1039\\u1010\\u101b\\u102c\\u101a\\u103a\\u101b\\u103e\\u102d\\u101e\\u100a\\u103a\\u101f\\u102f\\u101e\\u1004\\u103a\\u1011\\u1004\\u103a\\u1015\\u102b\\u101e\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":37},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":15}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":34},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":13}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":21},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":6}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":8},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"is_risk\",\"node\":\"0bfd72d1-764a-487a-a977-584b2b97c748\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"1fa24a4f-7fab-4a71-96c0-bf0e55c09a53\"},{\"title\":\"\\u1021\\u101e\\u1000\\u103a\\u1021\\u101b\\u103d\\u101a\\u103a\\u1021\\u101e\\u102e\\u1038\\u101e\\u102e\\u1038\\u1019\\u103e\\u101c\\u1030\\u1019\\u103b\\u102c\\u1038\\u101e\\u100a\\u103a COVID-19 \\u101b\\u1031\\u102c\\u1002\\u102b\\u1000\\u1030\\u1038\\u1005\\u1000\\u103a\\u1014\\u102d\\u102f\\u1004\\u103a\\u1000\\u103c\\u1031\\u102c\\u1004\\u103a\\u1038\\u101e\\u1004\\u103a\\u101e\\u102d\\u1015\\u102b\\u101e\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":21},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":19},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":40,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":19},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":18},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":10}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":13},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":11},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":3}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":1},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":4},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":4}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":1},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":1},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"can_infect_all_age\",\"node\":\"b8fd34c9-8a6d-4595-9b0a-2fc703b886ff\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"6e689c7a-69c4-4cac-b00d-b7c2432b2409\"},{\"title\":\"COVID-19 \\u1000\\u102d\\u102f\\u1000\\u102c\\u1000\\u103d\\u101a\\u103a\\u101b\\u1014\\u103a\\u1021\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1006\\u102f\\u1036\\u1038\\u1014\\u100a\\u103a\\u1038\\u101c\\u1019\\u103a\\u1038\\u101e\\u100a\\u103a\\u101c\\u1030\\u1019\\u103e\\u102f\\u101b\\u1031\\u1038\\u1021\\u101b\\u101d\\u1031\\u1038\\u1000\\u103d\\u102c\\u101e\\u103d\\u102c\\u1038\\u1001\\u103c\\u1004\\u103a\\u1038\\u1016\\u103c\\u1005\\u103a\\u101e\\u100a\\u103a\\u1000\\u102d\\u102f\\u101e\\u1004\\u103a\\u101e\\u102d\\u1015\\u102b\\u101e\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":30},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":15},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":45,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":28},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":15},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":19},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":4},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":4}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":1},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":1}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":6},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2},{\"label\":\"\\u1004\\u102b\\u1019\\u101e\\u102d\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"social_distancing\",\"node\":\"7d9ca1b5-2c4a-4a03-8264-c53ff3e66304\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"905d522b-a222-4a38-a13b-0ea9a4330590\"},{\"title\":\"\\u1024\\u1021\\u101b\\u1031\\u1038\\u1015\\u1031\\u102b\\u103a\\u1021\\u1001\\u103c\\u1031\\u1021\\u1014\\u1031\\u1000\\u102c\\u101c\\u1021\\u1010\\u103d\\u1004\\u103a\\u1038\\u101e\\u1004\\u103a\\u101e\\u100a\\u103a\\u1005\\u100a\\u103a\\u1038\\u1000\\u1019\\u103a\\u1038\\u1019\\u103b\\u102c\\u1038\\u1000\\u102d\\u102f\\u101c\\u102d\\u102f\\u1000\\u103a\\u1014\\u102c\\u1015\\u103c\\u102e\\u1038\\u1021\\u102d\\u1019\\u103a\\u1010\\u103d\\u1004\\u103a\\u1014\\u1031\\u1015\\u102b\\u101e\\u101c\\u1031\\u102c\\u104b\",\"results\":{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":35},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":17}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":52,\"unset\":0},\"results_by_gender\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":33},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":14}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":47,\"unset\":0,\"label\":\"Male\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Female\"}],\"results_by_hub\":[{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":18},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":9}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":27,\"unset\":0,\"label\":\"Burmapara\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":2},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":5,\"unset\":0,\"label\":\"Jadimora\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":8},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":2}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":10,\"unset\":0,\"label\":\"Jamtoli\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":3},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":3}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":6,\"unset\":0,\"label\":\"Ledda\"},{\"open_ended\":false,\"categories\":[{\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\",\"count\":4},{\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\",\"count\":0}],\"name\":\"staying_home\",\"node\":\"6ecf9c8e-052f-4e49-93eb-430fce0d98f0\",\"set\":4,\"unset\":0,\"label\":\"Shamlapur\"}],\"ruleset_uuid\":\"c1729949-e772-4217-a088-bb71c5d6ef8f\"}]}","status":1,"created_at":"2020-05-01 06:15:08","updated_at":"2020-06-27 22:09:01"},{"id":5,"flow_id":"053c18a7-04b4-4987-afb6-450b178bf49b","data_pack":"{\"id\":0,\"flow_uuid\":\"053c18a7-04b4-4987-afb6-450b178bf49b\",\"title\":\"Coronavirus bot Final with referrals for cox\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","bn_pack":"{\"id\":0,\"flow_uuid\":\"053c18a7-04b4-4987-afb6-450b178bf49b\",\"title\":\"\\u0995\\u0995\\u09cd\\u09b8\\u09ac\\u09be\\u099c\\u09be\\u09b0 \\u09b0\\u09c7\\u09ab\\u09be\\u09b0\\u09c7\\u09b2 \\u09b8\\u09b9 \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u09ac\\u099f \\u09ab\\u09be\\u0987\\u09a8\\u09be\\u09b2\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","my_pack":"{\"id\":0,\"flow_uuid\":\"053c18a7-04b4-4987-afb6-450b178bf49b\",\"title\":\"Cox \\u1021\\u1010\\u103d\\u1000\\u103a\\u101b\\u100a\\u103a\\u100a\\u103d\\u103e\\u1014\\u103a\\u1038\\u1001\\u103b\\u1000\\u103a\\u1019\\u103b\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1021\\u1010\\u1030 Coronavirus bot \\u1017\\u102d\\u102f\\u101c\\u103a\\u101c\\u102f\\u1015\\u103d\\u1032\",\"org\":0,\"poll_date\":\"1593274141\",\"created_on\":\"1593274141\",\"category\":{\"image_url\":\"\",\"name\":\"Offline Survey\"},\"questions\":[]}","status":0,"created_at":"2020-05-01 06:15:08","updated_at":"2020-06-27 22:09:01"}],"last_updated":"2020-06-27T16:09:01.000000Z"} \ No newline at end of file diff --git a/app/src/main/assets/data/ureport.json b/app/src/main/assets/data/ureport.json new file mode 100644 index 0000000..811c33f --- /dev/null +++ b/app/src/main/assets/data/ureport.json @@ -0,0 +1 @@ +{"data":[{"id":62,"ureport_id":1651,"flow_id":"a0169e26-7756-4b20-a4ce-2e8da96ce78a","data_pack":"{\"id\":1651,\"flow_uuid\":\"a0169e26-7756-4b20-a4ce-2e8da96ce78a\",\"title\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c1\\u09a8\",\"org\":17,\"category\":{\"image_url\":null,\"name\":\"Health\"},\"poll_date\":\"2020-03-30T13:32:09+06:00\",\"created_on\":\"2020-04-07T16:06:04.097005+06:00\",\"questions\":[{\"id\":11512,\"ruleset_uuid\":\"557221a4-cfeb-4101-91ed-b2a4903b5225\",\"title\":\"\\u09b8\\u09be\\u09b0\\u09be\\u09a6\\u09c7\\u09b6\\u09c7 \\u09b2\\u0995\\u09a1\\u09be\\u0989\\u09a8 \\u099a\\u09b2\\u099b\\u09c7\\u0964 \\u0986\\u09aa\\u09a8\\u09bf \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u099b\\u09c7\\u09a8 \\u09a4\\u09cb?\",\"results\":{\"open_ended\":false,\"set\":23025,\"unset\":9281,\"categories\":[{\"count\":14778,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":4939,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":2302,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":1006,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":124,\"unset\":31,\"label\":\"0-14\",\"categories\":[{\"count\":90,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":21,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":8,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3143,\"unset\":478,\"label\":\"15-19\",\"categories\":[{\"count\":1955,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":686,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":362,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":140,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3033,\"unset\":491,\"label\":\"20-24\",\"categories\":[{\"count\":1962,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":631,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":339,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":101,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":1378,\"unset\":268,\"label\":\"25-30\",\"categories\":[{\"count\":921,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":284,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":130,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":43,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":301,\"unset\":72,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":72,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":37,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":726,\"unset\":235,\"label\":\"35+\",\"categories\":[{\"count\":489,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":169,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":46,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":22,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":6576,\"unset\":1149,\"label\":\"Male\",\"categories\":[{\"count\":3975,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":1581,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":778,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":242,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":2316,\"unset\":452,\"label\":\"Female\",\"categories\":[{\"count\":1722,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":330,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":171,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":93,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2320,\"unset\":492,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1504,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":507,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":244,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":65,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1213,\"unset\":206,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":798,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":266,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":108,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":943,\"unset\":148,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":586,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":211,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":118,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":28,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":731,\"unset\":125,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":449,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":175,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":80,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":725,\"unset\":113,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":475,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":135,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":84,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":31,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":416,\"unset\":66,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":272,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":89,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":35,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":20,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1315,\"unset\":233,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":831,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":274,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":144,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":66,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":191,\"unset\":36,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":123,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":36,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09be\\u09df \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\"},{\"count\":22,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}]},{\"id\":11513,\"ruleset_uuid\":\"22fd7014-63c8-4f46-ae44-8ea4fe737337\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09c7\\u09a8\\u09cb \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u099b\\u09c7\\u09a8 \\u09a8\\u09be?\",\"results\":{\"open_ended\":false,\"set\":3277,\"unset\":264,\"categories\":[{\"count\":1655,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":96,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":122,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":129,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":854,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":421,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},\"results_by_age\":[{\"set\":13,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":4,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":1,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":549,\"unset\":22,\"label\":\"15-19\",\"categories\":[{\"count\":184,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":11,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":37,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":31,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":211,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":75,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":467,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":243,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":4,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":15,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":14,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":122,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":69,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":187,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":130,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":38,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":12,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":49,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":36,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":3,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":73,\"unset\":2,\"label\":\"35+\",\"categories\":[{\"count\":53,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":7,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":7,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}],\"results_by_gender\":[{\"set\":1105,\"unset\":34,\"label\":\"Male\",\"categories\":[{\"count\":549,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":17,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":49,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":34,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":326,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":130,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":278,\"unset\":12,\"label\":\"Female\",\"categories\":[{\"count\":125,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":6,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":15,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":17,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":42,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":340,\"unset\":14,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":175,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":5,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":12,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":99,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":39,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":168,\"unset\":3,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":84,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":8,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":44,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":25,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":151,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":67,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":48,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":25,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":116,\"unset\":5,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":35,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":12,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":123,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":7,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":33,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":15,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":61,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":26,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":19,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":9,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":226,\"unset\":7,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":107,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":12,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":65,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":32,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":0,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":0,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":34,\"unset\":2,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09b9\\u09ac\\u09c7 \\u09b8\\u09c7\\u099f\\u09be \\u0986\\u09ae\\u09bf \\u099c\\u09be\\u09a8\\u09bf\\u09a8\\u09be\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u09ae\\u09a8\\u09c7 \\u09b9\\u09df \\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09be \\u099c\\u09b0\\u09c1\\u09b0\\u09c0 \\u09a8\\u09be\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09a4\\u09c7 \\u09ac\\u09bf\\u09b0\\u0995\\u09cd\\u09a4 \\u09b2\\u09be\\u0997\\u09c7\"},{\"count\":1,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}]},{\"id\":11515,\"ruleset_uuid\":\"c82005a4-958d-4fa4-9890-5906226ebbd1\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09bf \\u09b8\\u09ac\\u09be\\u09b0 \\u09b8\\u09be\\u09a5\\u09c7 \\u0995\\u09ae\\u09aa\\u0995\\u09cd\\u09b7\\u09c7 \\u09e9\\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":21721,\"unset\":1574,\"categories\":[{\"count\":7705,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":9135,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":3703,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":1178,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":125,\"unset\":9,\"label\":\"0-14\",\"categories\":[{\"count\":52,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":51,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":18,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":3178,\"unset\":123,\"label\":\"15-19\",\"categories\":[{\"count\":1097,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":1180,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":671,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":230,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":3042,\"unset\":113,\"label\":\"20-24\",\"categories\":[{\"count\":1056,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":1303,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":548,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":135,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":1381,\"unset\":49,\"label\":\"25-30\",\"categories\":[{\"count\":509,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":609,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":214,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":49,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":305,\"unset\":10,\"label\":\"31-34\",\"categories\":[{\"count\":108,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":142,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":42,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":754,\"unset\":18,\"label\":\"35+\",\"categories\":[{\"count\":289,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":358,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":74,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":33,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":6654,\"unset\":233,\"label\":\"Male\",\"categories\":[{\"count\":2260,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":2880,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":1181,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":333,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"set\":2305,\"unset\":112,\"label\":\"Female\",\"categories\":[{\"count\":914,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":826,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":422,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":143,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2368,\"unset\":83,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":826,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":990,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":449,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":103,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":45,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":456,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":537,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":189,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":48,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":949,\"unset\":30,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":297,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":424,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":174,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":54,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":747,\"unset\":22,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":274,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":323,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":114,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":36,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":719,\"unset\":32,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":279,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":262,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":132,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":46,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":408,\"unset\":26,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":139,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":179,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":68,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":22,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1344,\"unset\":41,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":478,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":528,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":247,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":91,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":196,\"unset\":7,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"\\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":76,\"label\":\"\\u09ac\\u09c7\\u09b6\\u09bf\\u09b0\\u09ad\\u09be\\u0997 \\u09b8\\u09ae\\u09df\"},{\"count\":48,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a8\\u09be\"}]}]},{\"id\":11516,\"ruleset_uuid\":\"0103fccc-0357-4f7b-99ae-e0ec0f81b700\",\"title\":\"\\u09af\\u09be\\u09b0\\u09be \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be \\u09a4\\u09be\\u09b0\\u09be \\u0995\\u09c7\\u09a8\\u09cb \\u09b8\\u09ac\\u09be\\u09b0 \\u0995\\u09be\\u099b \\u09a5\\u09c7\\u0995\\u09c7 \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be?\",\"results\":{\"open_ended\":false,\"set\":3716,\"unset\":1365,\"categories\":[{\"count\":1083,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":237,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":355,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":176,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":1238,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":627,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},\"results_by_age\":[{\"set\":15,\"unset\":11,\"label\":\"0-14\",\"categories\":[{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":3,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":741,\"unset\":229,\"label\":\"15-19\",\"categories\":[{\"count\":180,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":48,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":75,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":36,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":272,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":130,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":554,\"unset\":176,\"label\":\"20-24\",\"categories\":[{\"count\":181,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":24,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":43,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":22,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":205,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":79,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":234,\"unset\":42,\"label\":\"25-30\",\"categories\":[{\"count\":82,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":14,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":91,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":23,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":49,\"unset\":11,\"label\":\"31-34\",\"categories\":[{\"count\":20,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":1,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":18,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":6,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":103,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":32,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":2,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":12,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}],\"results_by_gender\":[{\"set\":1290,\"unset\":337,\"label\":\"Male\",\"categories\":[{\"count\":364,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":78,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":109,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":56,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":487,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":196,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"set\":444,\"unset\":159,\"label\":\"Female\",\"categories\":[{\"count\":146,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":19,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":40,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":19,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":153,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":67,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":482,\"unset\":116,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":142,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":28,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":44,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":21,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":187,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":60,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":190,\"unset\":71,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":17,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":8,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":32,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":187,\"unset\":56,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":80,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":20,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":127,\"unset\":35,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":7,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":45,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":19,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":154,\"unset\":39,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":54,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":27,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":70,\"unset\":24,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":18,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":5,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":11,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":283,\"unset\":78,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":79,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":13,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":28,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":96,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":54,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]},{\"open_ended\":false,\"set\":47,\"unset\":15,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"\\u0986\\u09ae\\u09be\\u09b0 \\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u09a7\\u09b0\\u09a8 \\u098f\\u09ac\\u0982 \\u09aa\\u09b0\\u09bf\\u09ac\\u09c7\\u09b6\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u09aa\\u09cd\\u09b0\\u09df\\u09cb\\u099c\\u09a8 \\u0986\\u099b\\u09c7 \\u09ac\\u09b2\\u09c7 \\u09ae\\u09a8\\u09c7 \\u0995\\u09b0\\u09bf \\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":21,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":2,\"label\":\"\\u0985\\u09a8\\u09cd\\u09af\\u09be\\u09a8\\u09cd\\u09af\"}]}]},{\"id\":11517,\"ruleset_uuid\":\"8bafd3a0-0f98-4f23-9d0c-94cd70535c52\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u09aa\\u09b0\\u09bf\\u09ac\\u09be\\u09b0\\u09c7 \\u098f\\u09ae\\u09a8 \\u0995\\u09bf \\u0995\\u09c7\\u0989 \\u0986\\u099b\\u09c7\\u09a8 \\u09af\\u09bf\\u09a8\\u09bf \\u09b8\\u09ae\\u09cd\\u09aa\\u09cd\\u09b0\\u09a4\\u09bf \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09a6\\u09c7\\u09b6\\u09c7 \\u0997\\u09bf\\u09df\\u09c7\\u099b\\u09bf\\u09b2\\u09c7\\u09a8 \\u09ac\\u09be \\u09ab\\u09bf\\u09b0\\u09c7\\u099b\\u09c7\\u09a8 \\u0995\\u09bf\\u0982\\u09ac\\u09be \\u09ac\\u09be \\u09b8\\u09a8\\u09cd\\u09a6\\u09c7\\u09b9\\u09ad\\u09be\\u099c\\u09a8 \\u09ac\\u09be \\u09a8\\u09bf\\u09b6\\u09cd\\u099a\\u09bf\\u09a4 \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09b0\\u09cb\\u0997\\u09c0\\u09b0 \\u09b8\\u0982\\u09b8\\u09cd\\u09aa\\u09b0\\u09cd\\u09b6\\u09c7 \\u098f\\u09b8\\u09c7\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":20380,\"unset\":1048,\"categories\":[{\"count\":1254,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":19126,\"label\":\"\\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":127,\"unset\":5,\"label\":\"0-14\",\"categories\":[{\"count\":7,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":120,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":3150,\"unset\":120,\"label\":\"15-19\",\"categories\":[{\"count\":227,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":2923,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":3015,\"unset\":93,\"label\":\"20-24\",\"categories\":[{\"count\":166,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":2849,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":1364,\"unset\":36,\"label\":\"25-30\",\"categories\":[{\"count\":53,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":1311,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":314,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":7,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":307,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":759,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":30,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":729,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":6625,\"unset\":195,\"label\":\"Male\",\"categories\":[{\"count\":351,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":6274,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":2262,\"unset\":97,\"label\":\"Female\",\"categories\":[{\"count\":150,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":2112,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2348,\"unset\":75,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":125,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":2223,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":34,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":54,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":1176,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":53,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":899,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":742,\"unset\":27,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":41,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":701,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":718,\"unset\":22,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":681,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":404,\"unset\":20,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":381,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1330,\"unset\":55,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":1234,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":201,\"unset\":4,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":9,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":192,\"label\":\"\\u09a8\\u09be\"}]}]},{\"id\":11519,\"ruleset_uuid\":\"1affab6a-5735-485e-8665-e605a7f4bbed\",\"title\":\"\\u09a4\\u09be\\u0995\\u09c7 \\u0995\\u09bf \\u098f\\u0995\\u099f\\u09bf \\u09b8\\u09ae\\u09cd\\u09aa\\u09c2\\u09b0\\u09cd\\u09a3 \\u0986\\u09b2\\u09be\\u09a6\\u09be \\u09b0\\u09c1\\u09ae\\u09c7 \\u098f\\u0995\\u09be \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac?\",\"results\":{\"open_ended\":false,\"set\":1233,\"unset\":129,\"categories\":[{\"count\":628,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":605,\"label\":\"\\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":6,\"unset\":1,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":3,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":250,\"unset\":6,\"label\":\"15-19\",\"categories\":[{\"count\":109,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":141,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":173,\"unset\":5,\"label\":\"20-24\",\"categories\":[{\"count\":83,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":90,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":52,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":32,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":20,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":7,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":3,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":4,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":35,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":17,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":18,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":381,\"unset\":12,\"label\":\"Male\",\"categories\":[{\"count\":185,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":196,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":154,\"unset\":7,\"label\":\"Female\",\"categories\":[{\"count\":68,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":86,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":136,\"unset\":5,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":72,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":64,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":63,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":27,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":36,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":52,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":25,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":27,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":42,\"unset\":0,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":19,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":39,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":19,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":20,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":24,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":18,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":100,\"unset\":3,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":42,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":58,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":10,\"unset\":1,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":7,\"label\":\"\\u09a8\\u09be\"}]}]},{\"id\":11520,\"ruleset_uuid\":\"4b67e334-b776-4f1a-a872-28f390acc799\",\"title\":\"\\u09a4\\u09bf\\u09a8\\u09bf \\u0995\\u09bf \\u0985\\u09a8\\u09cd\\u09af\\u09a6\\u09c7\\u09b0 \\u09a5\\u09c7\\u0995\\u09c7 \\u0986\\u09b2\\u09be\\u09a6\\u09be \\u098f\\u0995\\u099f\\u09bf \\u09b0\\u09c1\\u09ae\\u09c7 \\u09a5\\u09be\\u0995\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":576,\"unset\":64,\"categories\":[{\"count\":473,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":103,\"label\":\"\\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":3,\"unset\":0,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":111,\"unset\":3,\"label\":\"15-19\",\"categories\":[{\"count\":89,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":22,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":83,\"unset\":4,\"label\":\"20-24\",\"categories\":[{\"count\":69,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":14,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":31,\"unset\":1,\"label\":\"25-30\",\"categories\":[{\"count\":28,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":3,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":3,\"unset\":0,\"label\":\"31-34\",\"categories\":[{\"count\":2,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":1,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":17,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":14,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":3,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":186,\"unset\":7,\"label\":\"Male\",\"categories\":[{\"count\":152,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":34,\"label\":\"\\u09a8\\u09be\"}]},{\"set\":68,\"unset\":2,\"label\":\"Female\",\"categories\":[{\"count\":55,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":13,\"label\":\"\\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":74,\"unset\":2,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":16,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":27,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":4,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":28,\"unset\":0,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":22,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":6,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":22,\"unset\":1,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":2,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":19,\"unset\":0,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":3,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":5,\"unset\":1,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":4,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":1,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":39,\"unset\":4,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":35,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":4,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":3,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981\"},{\"count\":0,\"label\":\"\\u09a8\\u09be\"}]}]},{\"id\":11521,\"ruleset_uuid\":\"43f82bd8-1db9-466d-b41e-f967b8892c24\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0997\\u09cd\\u09b0\\u09be\\u09ae\\u09c7 \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u09a8\\u09be\\u0995\\u09bf \\u09b6\\u09b9\\u09b0\\u09c7?\",\"results\":{\"open_ended\":false,\"set\":19826,\"unset\":607,\"categories\":[{\"count\":8624,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":11202,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},\"results_by_age\":[{\"set\":130,\"unset\":4,\"label\":\"0-14\",\"categories\":[{\"count\":62,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":68,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":3187,\"unset\":83,\"label\":\"15-19\",\"categories\":[{\"count\":1035,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2152,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":3037,\"unset\":62,\"label\":\"20-24\",\"categories\":[{\"count\":1012,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2025,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":1375,\"unset\":15,\"label\":\"25-30\",\"categories\":[{\"count\":620,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":755,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":316,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":133,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":765,\"unset\":15,\"label\":\"35+\",\"categories\":[{\"count\":530,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":235,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]}],\"results_by_gender\":[{\"set\":6694,\"unset\":127,\"label\":\"Male\",\"categories\":[{\"count\":2478,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":4216,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"set\":2256,\"unset\":75,\"label\":\"Female\",\"categories\":[{\"count\":1016,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1240,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2373,\"unset\":49,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1017,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1356,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":1243,\"unset\":29,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":443,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":800,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":336,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":616,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":749,\"unset\":16,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":262,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":487,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":725,\"unset\":16,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":276,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":449,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":416,\"unset\":10,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":155,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":261,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":1326,\"unset\":36,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":581,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":745,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]},{\"open_ended\":false,\"set\":203,\"unset\":3,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":77,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":126,\"label\":\"\\u0997\\u09cd\\u09b0\\u09be\\u09ae\"}]}]},{\"id\":11522,\"ruleset_uuid\":\"f3a359b1-7212-4fae-8f8c-2b1d61e55889\",\"title\":\"\\u09af\\u09be\\u09b0\\u09be \\u09b6\\u09b9\\u09b0\\u09c7 \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u09a4\\u09be\\u09b0\\u09be \\u0995\\u09c0 \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf \\u098f\\u09b2\\u09be\\u0995\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":8674,\"unset\":144,\"categories\":[{\"count\":727,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":7947,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":67,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":5,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":62,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":1078,\"unset\":16,\"label\":\"15-19\",\"categories\":[{\"count\":127,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":951,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":1032,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":117,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":915,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":630,\"unset\":10,\"label\":\"25-30\",\"categories\":[{\"count\":45,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":585,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":184,\"unset\":3,\"label\":\"31-34\",\"categories\":[{\"count\":11,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":173,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":538,\"unset\":7,\"label\":\"35+\",\"categories\":[{\"count\":24,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":514,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":2539,\"unset\":33,\"label\":\"Male\",\"categories\":[{\"count\":236,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":2303,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"set\":1044,\"unset\":19,\"label\":\"Female\",\"categories\":[{\"count\":100,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":944,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":1036,\"unset\":15,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":940,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":454,\"unset\":6,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":417,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":338,\"unset\":7,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":321,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":267,\"unset\":3,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":24,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":243,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":281,\"unset\":7,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":30,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":251,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":165,\"unset\":2,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":145,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":600,\"unset\":9,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":69,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":531,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":0,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":0,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":86,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09b6\\u09b9\\u09b0\\u09c7\\u09b0 \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf\"},{\"count\":80,\"label\":\"\\u09a8\\u09be, \\u09ac\\u09b8\\u09cd\\u09a4\\u09bf\\u09a4\\u09c7 \\u09a5\\u09be\\u0995\\u09bf \\u09a8\\u09be\"}]}]},{\"id\":11523,\"ruleset_uuid\":\"1b406dee-311a-4e5d-a3f5-5b9a7fb76710\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09cb\\u09a5\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u0986\\u09ae\\u09be\\u09a6\\u09c7\\u09b0 \\u099c\\u09be\\u09a8\\u09be\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09c7\\u09a8\",\"results\":{\"open_ended\":true,\"set\":18473,\"unset\":1441,\"categories\":[{\"label\":\"04\",\"count\":1163},{\"label\":\"2020\",\"count\":1123},{\"label\":\"01\",\"count\":753},{\"label\":\"chittagong\",\"count\":509},{\"label\":\"khulna\",\"count\":408},{\"label\":\"sylhet\",\"count\":402},{\"label\":\"rajshahi\",\"count\":234},{\"label\":\"dhaka\",\"count\":224},{\"label\":\"rangpur\",\"count\":224},{\"label\":\"ctg\",\"count\":203},{\"label\":\"dinajpur\",\"count\":184},{\"label\":\"bogura\",\"count\":173},{\"label\":\"02\",\"count\":172},{\"label\":\"mymensingh\",\"count\":172},{\"label\":\"cumilla\",\"count\":152},{\"label\":\"noakhali\",\"count\":146},{\"label\":\"satkhira\",\"count\":145},{\"label\":\"chattogram\",\"count\":143},{\"label\":\"comilla\",\"count\":141},{\"label\":\"cox\",\"count\":141},{\"label\":\"bazar\",\"count\":139},{\"label\":\"pabna\",\"count\":133},{\"label\":\"tangail\",\"count\":122},{\"label\":\"bagerhat\",\"count\":119},{\"label\":\"kushtia\",\"count\":118},{\"label\":\"feni\",\"count\":112},{\"label\":\"jessore\",\"count\":109},{\"label\":\"chandpur\",\"count\":96},{\"label\":\"barishal\",\"count\":93},{\"label\":\"jashore\",\"count\":93},{\"label\":\"naogaon\",\"count\":91},{\"label\":\"brahmanbaria\",\"count\":79},{\"label\":\"lalmonirhat\",\"count\":77},{\"label\":\"03\",\"count\":75},{\"label\":\"jamalpur\",\"count\":73},{\"label\":\"barisal\",\"count\":70},{\"label\":\"moulvibazar\",\"count\":70},{\"label\":\"faridpur\",\"count\":69},{\"label\":\"kurigram\",\"count\":67},{\"label\":\"nilphamari\",\"count\":66},{\"label\":\"joypurhat\",\"count\":65},{\"label\":\"sunamganj\",\"count\":65},{\"label\":\"gazipur\",\"count\":63},{\"label\":\"sirajgonj\",\"count\":61},{\"label\":\"sirajganj\",\"count\":60},{\"label\":\"bogra\",\"count\":59},{\"label\":\"jhenaidah\",\"count\":58},{\"label\":\"chottogram\",\"count\":55},{\"label\":\"panchagarh\",\"count\":52},{\"label\":\"pirojpur\",\"count\":52},{\"label\":\"thakurgaon\",\"count\":51},{\"label\":\"patuakhali\",\"count\":50},{\"label\":\"magura\",\"count\":49},{\"label\":\"gaibandha\",\"count\":48},{\"label\":\"rangamati\",\"count\":48},{\"label\":\"sunamgonj\",\"count\":46},{\"label\":\"gopalgonj\",\"count\":45},{\"label\":\"chattagram\",\"count\":44},{\"label\":\"chuadanga\",\"count\":44},{\"label\":\"madaripur\",\"count\":40},{\"label\":\"kishoreganj\",\"count\":39},{\"label\":\"natore\",\"count\":39},{\"label\":\"05\",\"count\":38},{\"label\":\"09\",\"count\":37},{\"label\":\"baria\",\"count\":36},{\"label\":\"chapai\",\"count\":36},{\"label\":\"06\",\"count\":35},{\"label\":\"ami\",\"count\":35},{\"label\":\"narail\",\"count\":35},{\"label\":\"netrokona\",\"count\":34},{\"label\":\"sherpur\",\"count\":34},{\"label\":\"habiganj\",\"count\":32},{\"label\":\"11\",\"count\":31},{\"label\":\"barguna\",\"count\":31},{\"label\":\"13\",\"count\":30},{\"label\":\"city\",\"count\":30},{\"label\":\"lakshmipur\",\"count\":30},{\"label\":\"07\",\"count\":29},{\"label\":\"12\",\"count\":29},{\"label\":\"34\",\"count\":28},{\"label\":\"district\",\"count\":28},{\"label\":\"khagrachari\",\"count\":28},{\"label\":\"netrakona\",\"count\":28},{\"label\":\"21\",\"count\":27},{\"label\":\"55\",\"count\":27},{\"label\":\"chapainawabganj\",\"count\":27},{\"label\":\"hobigonj\",\"count\":27},{\"label\":\"jela\",\"count\":27},{\"label\":\"sadar\",\"count\":27},{\"label\":\"39\",\"count\":26},{\"label\":\"49\",\"count\":26},{\"label\":\"23\",\"count\":25},{\"label\":\"25\",\"count\":25},{\"label\":\"14\",\"count\":24},{\"label\":\"15\",\"count\":24},{\"label\":\"16\",\"count\":24},{\"label\":\"24\",\"count\":24},{\"label\":\"29\",\"count\":24},{\"label\":\"33\",\"count\":24},{\"label\":\"gopalganj\",\"count\":24}]}}]}","en_pack":"{\"id\":1651,\"flow_uuid\":\"a0169e26-7756-4b20-a4ce-2e8da96ce78a\",\"title\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c1\\u09a8\",\"org\":17,\"category\":{\"image_url\":null,\"name\":\"Health\"},\"poll_date\":\"2020-03-30T13:32:09+06:00\",\"created_on\":\"2020-04-07T16:06:04.097005+06:00\",\"questions\":[{\"id\":11512,\"ruleset_uuid\":\"557221a4-cfeb-4101-91ed-b2a4903b5225\",\"title\":\"Lockdown is going on all over the country. Are you at home\",\"results\":{\"open_ended\":false,\"set\":23025,\"unset\":9281,\"categories\":[{\"count\":14778,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":4939,\"label\":\"Yes, almost every day\"},{\"count\":2302,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":1006,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":124,\"unset\":31,\"label\":\"0-14\",\"categories\":[{\"count\":90,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":21,\"label\":\"Yes, almost every day\"},{\"count\":8,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3143,\"unset\":478,\"label\":\"15-19\",\"categories\":[{\"count\":1955,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":686,\"label\":\"Yes, almost every day\"},{\"count\":362,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":140,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3033,\"unset\":491,\"label\":\"20-24\",\"categories\":[{\"count\":1962,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":631,\"label\":\"Yes, almost every day\"},{\"count\":339,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":101,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":1378,\"unset\":268,\"label\":\"25-30\",\"categories\":[{\"count\":921,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":284,\"label\":\"Yes, almost every day\"},{\"count\":130,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":43,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":301,\"unset\":72,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":72,\"label\":\"Yes, almost every day\"},{\"count\":37,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":726,\"unset\":235,\"label\":\"35+\",\"categories\":[{\"count\":489,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":169,\"label\":\"Yes, almost every day\"},{\"count\":46,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":22,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":6576,\"unset\":1149,\"label\":\"Male\",\"categories\":[{\"count\":3975,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":1581,\"label\":\"Yes, almost every day\"},{\"count\":778,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":242,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":2316,\"unset\":452,\"label\":\"Female\",\"categories\":[{\"count\":1722,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":330,\"label\":\"Yes, almost every day\"},{\"count\":171,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":93,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2320,\"unset\":492,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1504,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":507,\"label\":\"Yes, almost every day\"},{\"count\":244,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":65,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1213,\"unset\":206,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":798,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":266,\"label\":\"Yes, almost every day\"},{\"count\":108,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":943,\"unset\":148,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":586,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":211,\"label\":\"Yes, almost every day\"},{\"count\":118,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":28,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":731,\"unset\":125,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":449,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":175,\"label\":\"Yes, almost every day\"},{\"count\":80,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":725,\"unset\":113,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":475,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":135,\"label\":\"Yes, almost every day\"},{\"count\":84,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":31,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":416,\"unset\":66,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":272,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":89,\"label\":\"Yes, almost every day\"},{\"count\":35,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":20,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1315,\"unset\":233,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":831,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":274,\"label\":\"Yes, almost every day\"},{\"count\":144,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":66,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"Yes, almost every day\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"Yes, almost every day\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":191,\"unset\":36,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":123,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":36,\"label\":\"Yes, almost every day\"},{\"count\":22,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}]},{\"id\":11513,\"ruleset_uuid\":\"22fd7014-63c8-4f46-ae44-8ea4fe737337\",\"title\":\"Why aren't you at home?\",\"results\":{\"open_ended\":false,\"set\":3277,\"unset\":264,\"categories\":[{\"count\":1655,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":96,\"label\":\"I don't know if I have to stay at home\"},{\"count\":122,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":129,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":854,\"label\":\"It feels annoying to be at home\"},{\"count\":421,\"label\":\"The other\"}]},\"results_by_age\":[{\"set\":13,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":4,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"I don't know if I have to stay at home\"},{\"count\":1,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":5,\"label\":\"It feels annoying to be at home\"},{\"count\":1,\"label\":\"The other\"}]},{\"set\":549,\"unset\":22,\"label\":\"15-19\",\"categories\":[{\"count\":184,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":11,\"label\":\"I don't know if I have to stay at home\"},{\"count\":37,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":31,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":211,\"label\":\"It feels annoying to be at home\"},{\"count\":75,\"label\":\"The other\"}]},{\"set\":467,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":243,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":4,\"label\":\"I don't know if I have to stay at home\"},{\"count\":15,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":14,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":122,\"label\":\"It feels annoying to be at home\"},{\"count\":69,\"label\":\"The other\"}]},{\"set\":187,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":130,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"I don't know if I have to stay at home\"},{\"count\":3,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":38,\"label\":\"It feels annoying to be at home\"},{\"count\":12,\"label\":\"The other\"}]},{\"set\":49,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":36,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"I don't know if I have to stay at home\"},{\"count\":1,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"It feels annoying to be at home\"},{\"count\":3,\"label\":\"The other\"}]},{\"set\":73,\"unset\":2,\"label\":\"35+\",\"categories\":[{\"count\":53,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"I don't know if I have to stay at home\"},{\"count\":2,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":7,\"label\":\"It feels annoying to be at home\"},{\"count\":7,\"label\":\"The other\"}]}],\"results_by_gender\":[{\"set\":1105,\"unset\":34,\"label\":\"Male\",\"categories\":[{\"count\":549,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":17,\"label\":\"I don't know if I have to stay at home\"},{\"count\":49,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":34,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":326,\"label\":\"It feels annoying to be at home\"},{\"count\":130,\"label\":\"The other\"}]},{\"set\":278,\"unset\":12,\"label\":\"Female\",\"categories\":[{\"count\":125,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":6,\"label\":\"I don't know if I have to stay at home\"},{\"count\":15,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":17,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"It feels annoying to be at home\"},{\"count\":42,\"label\":\"The other\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":340,\"unset\":14,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":175,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":5,\"label\":\"I don't know if I have to stay at home\"},{\"count\":12,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":99,\"label\":\"It feels annoying to be at home\"},{\"count\":39,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":168,\"unset\":3,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":84,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"I don't know if I have to stay at home\"},{\"count\":8,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":44,\"label\":\"It feels annoying to be at home\"},{\"count\":25,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":151,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":67,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"I don't know if I have to stay at home\"},{\"count\":4,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":48,\"label\":\"It feels annoying to be at home\"},{\"count\":25,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":116,\"unset\":5,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"I don't know if I have to stay at home\"},{\"count\":4,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":35,\"label\":\"It feels annoying to be at home\"},{\"count\":12,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":123,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"I don't know if I have to stay at home\"},{\"count\":7,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":33,\"label\":\"It feels annoying to be at home\"},{\"count\":15,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":61,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":26,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"I don't know if I have to stay at home\"},{\"count\":3,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":19,\"label\":\"It feels annoying to be at home\"},{\"count\":9,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":226,\"unset\":7,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":107,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"I don't know if I have to stay at home\"},{\"count\":12,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":65,\"label\":\"It feels annoying to be at home\"},{\"count\":32,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"I don't know if I have to stay at home\"},{\"count\":0,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"It feels annoying to be at home\"},{\"count\":0,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"I don't know if I have to stay at home\"},{\"count\":0,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"It feels annoying to be at home\"},{\"count\":0,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":34,\"unset\":2,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"I don't know if I have to stay at home\"},{\"count\":2,\"label\":\"I don't think it's necessary to stay at home\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"It feels annoying to be at home\"},{\"count\":1,\"label\":\"The other\"}]}]},{\"id\":11515,\"ruleset_uuid\":\"c82005a4-958d-4fa4-9890-5906226ebbd1\",\"title\":\"Do you maintain a distance of at least 3 feet with everyone?\",\"results\":{\"open_ended\":false,\"set\":21721,\"unset\":1574,\"categories\":[{\"count\":7705,\"label\":\"Always\"},{\"count\":9135,\"label\":\"Most of the time\"},{\"count\":3703,\"label\":\"Not so\"},{\"count\":1178,\"label\":\"Not at all\"}]},\"results_by_age\":[{\"set\":125,\"unset\":9,\"label\":\"0-14\",\"categories\":[{\"count\":52,\"label\":\"Always\"},{\"count\":51,\"label\":\"Most of the time\"},{\"count\":18,\"label\":\"Not so\"},{\"count\":4,\"label\":\"Not at all\"}]},{\"set\":3178,\"unset\":123,\"label\":\"15-19\",\"categories\":[{\"count\":1097,\"label\":\"Always\"},{\"count\":1180,\"label\":\"Most of the time\"},{\"count\":671,\"label\":\"Not so\"},{\"count\":230,\"label\":\"Not at all\"}]},{\"set\":3042,\"unset\":113,\"label\":\"20-24\",\"categories\":[{\"count\":1056,\"label\":\"Always\"},{\"count\":1303,\"label\":\"Most of the time\"},{\"count\":548,\"label\":\"Not so\"},{\"count\":135,\"label\":\"Not at all\"}]},{\"set\":1381,\"unset\":49,\"label\":\"25-30\",\"categories\":[{\"count\":509,\"label\":\"Always\"},{\"count\":609,\"label\":\"Most of the time\"},{\"count\":214,\"label\":\"Not so\"},{\"count\":49,\"label\":\"Not at all\"}]},{\"set\":305,\"unset\":10,\"label\":\"31-34\",\"categories\":[{\"count\":108,\"label\":\"Always\"},{\"count\":142,\"label\":\"Most of the time\"},{\"count\":42,\"label\":\"Not so\"},{\"count\":13,\"label\":\"Not at all\"}]},{\"set\":754,\"unset\":18,\"label\":\"35+\",\"categories\":[{\"count\":289,\"label\":\"Always\"},{\"count\":358,\"label\":\"Most of the time\"},{\"count\":74,\"label\":\"Not so\"},{\"count\":33,\"label\":\"Not at all\"}]}],\"results_by_gender\":[{\"set\":6654,\"unset\":233,\"label\":\"Male\",\"categories\":[{\"count\":2260,\"label\":\"Always\"},{\"count\":2880,\"label\":\"Most of the time\"},{\"count\":1181,\"label\":\"Not so\"},{\"count\":333,\"label\":\"Not at all\"}]},{\"set\":2305,\"unset\":112,\"label\":\"Female\",\"categories\":[{\"count\":914,\"label\":\"Always\"},{\"count\":826,\"label\":\"Most of the time\"},{\"count\":422,\"label\":\"Not so\"},{\"count\":143,\"label\":\"Not at all\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2368,\"unset\":83,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":826,\"label\":\"Always\"},{\"count\":990,\"label\":\"Most of the time\"},{\"count\":449,\"label\":\"Not so\"},{\"count\":103,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":45,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":456,\"label\":\"Always\"},{\"count\":537,\"label\":\"Most of the time\"},{\"count\":189,\"label\":\"Not so\"},{\"count\":48,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":949,\"unset\":30,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":297,\"label\":\"Always\"},{\"count\":424,\"label\":\"Most of the time\"},{\"count\":174,\"label\":\"Not so\"},{\"count\":54,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":747,\"unset\":22,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":274,\"label\":\"Always\"},{\"count\":323,\"label\":\"Most of the time\"},{\"count\":114,\"label\":\"Not so\"},{\"count\":36,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":719,\"unset\":32,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":279,\"label\":\"Always\"},{\"count\":262,\"label\":\"Most of the time\"},{\"count\":132,\"label\":\"Not so\"},{\"count\":46,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":408,\"unset\":26,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":139,\"label\":\"Always\"},{\"count\":179,\"label\":\"Most of the time\"},{\"count\":68,\"label\":\"Not so\"},{\"count\":22,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":1344,\"unset\":41,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":478,\"label\":\"Always\"},{\"count\":528,\"label\":\"Most of the time\"},{\"count\":247,\"label\":\"Not so\"},{\"count\":91,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"Always\"},{\"count\":0,\"label\":\"Most of the time\"},{\"count\":0,\"label\":\"Not so\"},{\"count\":0,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"Always\"},{\"count\":0,\"label\":\"Most of the time\"},{\"count\":0,\"label\":\"Not so\"},{\"count\":0,\"label\":\"Not at all\"}]},{\"open_ended\":false,\"set\":196,\"unset\":7,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"Always\"},{\"count\":76,\"label\":\"Most of the time\"},{\"count\":48,\"label\":\"Not so\"},{\"count\":10,\"label\":\"Not at all\"}]}]},{\"id\":11516,\"ruleset_uuid\":\"0103fccc-0357-4f7b-99ae-e0ec0f81b700\",\"title\":\"\\u09af\\u09be\\u09b0\\u09be \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be \\u09a4\\u09be\\u09b0\\u09be \\u0995\\u09c7\\u09a8\\u09cb \\u09b8\\u09ac\\u09be\\u09b0 \\u0995\\u09be\\u099b \\u09a5\\u09c7\\u0995\\u09c7 \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be?\",\"results\":{\"open_ended\":false,\"set\":3716,\"unset\":1365,\"categories\":[{\"count\":1083,\"label\":\"For my work type and environment\"},{\"count\":237,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":355,\"label\":\"I don't think there is a need\"},{\"count\":176,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":1238,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":627,\"label\":\"The other\"}]},\"results_by_age\":[{\"set\":15,\"unset\":11,\"label\":\"0-14\",\"categories\":[{\"count\":2,\"label\":\"For my work type and environment\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"I don't think there is a need\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":3,\"label\":\"The other\"}]},{\"set\":741,\"unset\":229,\"label\":\"15-19\",\"categories\":[{\"count\":180,\"label\":\"For my work type and environment\"},{\"count\":48,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":75,\"label\":\"I don't think there is a need\"},{\"count\":36,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":272,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":130,\"label\":\"The other\"}]},{\"set\":554,\"unset\":176,\"label\":\"20-24\",\"categories\":[{\"count\":181,\"label\":\"For my work type and environment\"},{\"count\":24,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":43,\"label\":\"I don't think there is a need\"},{\"count\":22,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":205,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":79,\"label\":\"The other\"}]},{\"set\":234,\"unset\":42,\"label\":\"25-30\",\"categories\":[{\"count\":82,\"label\":\"For my work type and environment\"},{\"count\":14,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"I don't think there is a need\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":91,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":23,\"label\":\"The other\"}]},{\"set\":49,\"unset\":11,\"label\":\"31-34\",\"categories\":[{\"count\":20,\"label\":\"For my work type and environment\"},{\"count\":1,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":3,\"label\":\"I don't think there is a need\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":18,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":6,\"label\":\"The other\"}]},{\"set\":103,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":32,\"label\":\"For my work type and environment\"},{\"count\":2,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"I don't think there is a need\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":12,\"label\":\"The other\"}]}],\"results_by_gender\":[{\"set\":1290,\"unset\":337,\"label\":\"Male\",\"categories\":[{\"count\":364,\"label\":\"For my work type and environment\"},{\"count\":78,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":109,\"label\":\"I don't think there is a need\"},{\"count\":56,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":487,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":196,\"label\":\"The other\"}]},{\"set\":444,\"unset\":159,\"label\":\"Female\",\"categories\":[{\"count\":146,\"label\":\"For my work type and environment\"},{\"count\":19,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":40,\"label\":\"I don't think there is a need\"},{\"count\":19,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":153,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":67,\"label\":\"The other\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":482,\"unset\":116,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":142,\"label\":\"For my work type and environment\"},{\"count\":28,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":44,\"label\":\"I don't think there is a need\"},{\"count\":21,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":187,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":60,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":190,\"unset\":71,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"For my work type and environment\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":17,\"label\":\"I don't think there is a need\"},{\"count\":8,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":32,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":187,\"unset\":56,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"For my work type and environment\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"I don't think there is a need\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":80,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":20,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":127,\"unset\":35,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"For my work type and environment\"},{\"count\":7,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"I don't think there is a need\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":45,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":19,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":154,\"unset\":39,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"For my work type and environment\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":9,\"label\":\"I don't think there is a need\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":54,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":27,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":70,\"unset\":24,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":18,\"label\":\"For my work type and environment\"},{\"count\":5,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":4,\"label\":\"I don't think there is a need\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":11,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":283,\"unset\":78,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":79,\"label\":\"For my work type and environment\"},{\"count\":13,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":28,\"label\":\"I don't think there is a need\"},{\"count\":13,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":96,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":54,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"For my work type and environment\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"I don't think there is a need\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"For my work type and environment\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"I don't think there is a need\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"The other\"}]},{\"open_ended\":false,\"set\":47,\"unset\":15,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"For my work type and environment\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":1,\"label\":\"I don't think there is a need\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":21,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":2,\"label\":\"The other\"}]}]},{\"id\":11517,\"ruleset_uuid\":\"8bafd3a0-0f98-4f23-9d0c-94cd70535c52\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u09aa\\u09b0\\u09bf\\u09ac\\u09be\\u09b0\\u09c7 \\u098f\\u09ae\\u09a8 \\u0995\\u09bf \\u0995\\u09c7\\u0989 \\u0986\\u099b\\u09c7\\u09a8 \\u09af\\u09bf\\u09a8\\u09bf \\u09b8\\u09ae\\u09cd\\u09aa\\u09cd\\u09b0\\u09a4\\u09bf \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09a6\\u09c7\\u09b6\\u09c7 \\u0997\\u09bf\\u09df\\u09c7\\u099b\\u09bf\\u09b2\\u09c7\\u09a8 \\u09ac\\u09be \\u09ab\\u09bf\\u09b0\\u09c7\\u099b\\u09c7\\u09a8 \\u0995\\u09bf\\u0982\\u09ac\\u09be \\u09ac\\u09be \\u09b8\\u09a8\\u09cd\\u09a6\\u09c7\\u09b9\\u09ad\\u09be\\u099c\\u09a8 \\u09ac\\u09be \\u09a8\\u09bf\\u09b6\\u09cd\\u099a\\u09bf\\u09a4 \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09b0\\u09cb\\u0997\\u09c0\\u09b0 \\u09b8\\u0982\\u09b8\\u09cd\\u09aa\\u09b0\\u09cd\\u09b6\\u09c7 \\u098f\\u09b8\\u09c7\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":20380,\"unset\":1048,\"categories\":[{\"count\":1254,\"label\":\"Yes\"},{\"count\":19126,\"label\":\"No\"}]},\"results_by_age\":[{\"set\":127,\"unset\":5,\"label\":\"0-14\",\"categories\":[{\"count\":7,\"label\":\"Yes\"},{\"count\":120,\"label\":\"No\"}]},{\"set\":3150,\"unset\":120,\"label\":\"15-19\",\"categories\":[{\"count\":227,\"label\":\"Yes\"},{\"count\":2923,\"label\":\"No\"}]},{\"set\":3015,\"unset\":93,\"label\":\"20-24\",\"categories\":[{\"count\":166,\"label\":\"Yes\"},{\"count\":2849,\"label\":\"No\"}]},{\"set\":1364,\"unset\":36,\"label\":\"25-30\",\"categories\":[{\"count\":53,\"label\":\"Yes\"},{\"count\":1311,\"label\":\"No\"}]},{\"set\":314,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":7,\"label\":\"Yes\"},{\"count\":307,\"label\":\"No\"}]},{\"set\":759,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":30,\"label\":\"Yes\"},{\"count\":729,\"label\":\"No\"}]}],\"results_by_gender\":[{\"set\":6625,\"unset\":195,\"label\":\"Male\",\"categories\":[{\"count\":351,\"label\":\"Yes\"},{\"count\":6274,\"label\":\"No\"}]},{\"set\":2262,\"unset\":97,\"label\":\"Female\",\"categories\":[{\"count\":150,\"label\":\"Yes\"},{\"count\":2112,\"label\":\"No\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2348,\"unset\":75,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":125,\"label\":\"Yes\"},{\"count\":2223,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":34,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":54,\"label\":\"Yes\"},{\"count\":1176,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":53,\"label\":\"Yes\"},{\"count\":899,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":742,\"unset\":27,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":41,\"label\":\"Yes\"},{\"count\":701,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":718,\"unset\":22,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"Yes\"},{\"count\":681,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":404,\"unset\":20,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"Yes\"},{\"count\":381,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":1330,\"unset\":55,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"Yes\"},{\"count\":1234,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":201,\"unset\":4,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":9,\"label\":\"Yes\"},{\"count\":192,\"label\":\"No\"}]}]},{\"id\":11519,\"ruleset_uuid\":\"1affab6a-5735-485e-8665-e605a7f4bbed\",\"title\":\"Is it possible to keep him alone in a completely separate room?\",\"results\":{\"open_ended\":false,\"set\":1233,\"unset\":129,\"categories\":[{\"count\":628,\"label\":\"Yes\"},{\"count\":605,\"label\":\"No\"}]},\"results_by_age\":[{\"set\":6,\"unset\":1,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"Yes\"},{\"count\":3,\"label\":\"No\"}]},{\"set\":250,\"unset\":6,\"label\":\"15-19\",\"categories\":[{\"count\":109,\"label\":\"Yes\"},{\"count\":141,\"label\":\"No\"}]},{\"set\":173,\"unset\":5,\"label\":\"20-24\",\"categories\":[{\"count\":83,\"label\":\"Yes\"},{\"count\":90,\"label\":\"No\"}]},{\"set\":52,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":32,\"label\":\"Yes\"},{\"count\":20,\"label\":\"No\"}]},{\"set\":7,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":3,\"label\":\"Yes\"},{\"count\":4,\"label\":\"No\"}]},{\"set\":35,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":17,\"label\":\"Yes\"},{\"count\":18,\"label\":\"No\"}]}],\"results_by_gender\":[{\"set\":381,\"unset\":12,\"label\":\"Male\",\"categories\":[{\"count\":185,\"label\":\"Yes\"},{\"count\":196,\"label\":\"No\"}]},{\"set\":154,\"unset\":7,\"label\":\"Female\",\"categories\":[{\"count\":68,\"label\":\"Yes\"},{\"count\":86,\"label\":\"No\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":136,\"unset\":5,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":72,\"label\":\"Yes\"},{\"count\":64,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":63,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":27,\"label\":\"Yes\"},{\"count\":36,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":52,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":25,\"label\":\"Yes\"},{\"count\":27,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":42,\"unset\":0,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"Yes\"},{\"count\":19,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":39,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":19,\"label\":\"Yes\"},{\"count\":20,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":24,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"Yes\"},{\"count\":18,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":100,\"unset\":3,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":42,\"label\":\"Yes\"},{\"count\":58,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":10,\"unset\":1,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"Yes\"},{\"count\":7,\"label\":\"No\"}]}]},{\"id\":11520,\"ruleset_uuid\":\"4b67e334-b776-4f1a-a872-28f390acc799\",\"title\":\"Does he live in a separate room?\",\"results\":{\"open_ended\":false,\"set\":576,\"unset\":64,\"categories\":[{\"count\":473,\"label\":\"Yes\"},{\"count\":103,\"label\":\"No\"}]},\"results_by_age\":[{\"set\":3,\"unset\":0,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"set\":111,\"unset\":3,\"label\":\"15-19\",\"categories\":[{\"count\":89,\"label\":\"Yes\"},{\"count\":22,\"label\":\"No\"}]},{\"set\":83,\"unset\":4,\"label\":\"20-24\",\"categories\":[{\"count\":69,\"label\":\"Yes\"},{\"count\":14,\"label\":\"No\"}]},{\"set\":31,\"unset\":1,\"label\":\"25-30\",\"categories\":[{\"count\":28,\"label\":\"Yes\"},{\"count\":3,\"label\":\"No\"}]},{\"set\":3,\"unset\":0,\"label\":\"31-34\",\"categories\":[{\"count\":2,\"label\":\"Yes\"},{\"count\":1,\"label\":\"No\"}]},{\"set\":17,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":14,\"label\":\"Yes\"},{\"count\":3,\"label\":\"No\"}]}],\"results_by_gender\":[{\"set\":186,\"unset\":7,\"label\":\"Male\",\"categories\":[{\"count\":152,\"label\":\"Yes\"},{\"count\":34,\"label\":\"No\"}]},{\"set\":68,\"unset\":2,\"label\":\"Female\",\"categories\":[{\"count\":55,\"label\":\"Yes\"},{\"count\":13,\"label\":\"No\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":74,\"unset\":2,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"Yes\"},{\"count\":16,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":27,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"Yes\"},{\"count\":4,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":28,\"unset\":0,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":22,\"label\":\"Yes\"},{\"count\":6,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":22,\"unset\":1,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"Yes\"},{\"count\":2,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":19,\"unset\":0,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"Yes\"},{\"count\":3,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":5,\"unset\":1,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":4,\"label\":\"Yes\"},{\"count\":1,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":39,\"unset\":4,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":35,\"label\":\"Yes\"},{\"count\":4,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]},{\"open_ended\":false,\"set\":3,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"Yes\"},{\"count\":0,\"label\":\"No\"}]}]},{\"id\":11521,\"ruleset_uuid\":\"43f82bd8-1db9-466d-b41e-f967b8892c24\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0997\\u09cd\\u09b0\\u09be\\u09ae\\u09c7 \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u09a8\\u09be\\u0995\\u09bf \\u09b6\\u09b9\\u09b0\\u09c7?\",\"results\":{\"open_ended\":false,\"set\":19826,\"unset\":607,\"categories\":[{\"count\":8624,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":11202,\"label\":\"Village\"}]},\"results_by_age\":[{\"set\":130,\"unset\":4,\"label\":\"0-14\",\"categories\":[{\"count\":62,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":68,\"label\":\"Village\"}]},{\"set\":3187,\"unset\":83,\"label\":\"15-19\",\"categories\":[{\"count\":1035,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2152,\"label\":\"Village\"}]},{\"set\":3037,\"unset\":62,\"label\":\"20-24\",\"categories\":[{\"count\":1012,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2025,\"label\":\"Village\"}]},{\"set\":1375,\"unset\":15,\"label\":\"25-30\",\"categories\":[{\"count\":620,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":755,\"label\":\"Village\"}]},{\"set\":316,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":133,\"label\":\"Village\"}]},{\"set\":765,\"unset\":15,\"label\":\"35+\",\"categories\":[{\"count\":530,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":235,\"label\":\"Village\"}]}],\"results_by_gender\":[{\"set\":6694,\"unset\":127,\"label\":\"Male\",\"categories\":[{\"count\":2478,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":4216,\"label\":\"Village\"}]},{\"set\":2256,\"unset\":75,\"label\":\"Female\",\"categories\":[{\"count\":1016,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1240,\"label\":\"Village\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2373,\"unset\":49,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1017,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1356,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":1243,\"unset\":29,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":443,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":800,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":336,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":616,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":749,\"unset\":16,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":262,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":487,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":725,\"unset\":16,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":276,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":449,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":416,\"unset\":10,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":155,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":261,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":1326,\"unset\":36,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":581,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":745,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"Village\"}]},{\"open_ended\":false,\"set\":203,\"unset\":3,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":77,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":126,\"label\":\"Village\"}]}]},{\"id\":11522,\"ruleset_uuid\":\"f3a359b1-7212-4fae-8f8c-2b1d61e55889\",\"title\":\"Do those who live in the city live in the slums of the city?\",\"results\":{\"open_ended\":false,\"set\":8674,\"unset\":144,\"categories\":[{\"count\":727,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":7947,\"label\":\"No, I don't live in a slum\"}]},\"results_by_age\":[{\"set\":67,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":5,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":62,\"label\":\"No, I don't live in a slum\"}]},{\"set\":1078,\"unset\":16,\"label\":\"15-19\",\"categories\":[{\"count\":127,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":951,\"label\":\"No, I don't live in a slum\"}]},{\"set\":1032,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":117,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":915,\"label\":\"No, I don't live in a slum\"}]},{\"set\":630,\"unset\":10,\"label\":\"25-30\",\"categories\":[{\"count\":45,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":585,\"label\":\"No, I don't live in a slum\"}]},{\"set\":184,\"unset\":3,\"label\":\"31-34\",\"categories\":[{\"count\":11,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":173,\"label\":\"No, I don't live in a slum\"}]},{\"set\":538,\"unset\":7,\"label\":\"35+\",\"categories\":[{\"count\":24,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":514,\"label\":\"No, I don't live in a slum\"}]}],\"results_by_gender\":[{\"set\":2539,\"unset\":33,\"label\":\"Male\",\"categories\":[{\"count\":236,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":2303,\"label\":\"No, I don't live in a slum\"}]},{\"set\":1044,\"unset\":19,\"label\":\"Female\",\"categories\":[{\"count\":100,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":944,\"label\":\"No, I don't live in a slum\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":1036,\"unset\":15,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":940,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":454,\"unset\":6,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":417,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":338,\"unset\":7,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":321,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":267,\"unset\":3,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":24,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":243,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":281,\"unset\":7,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":30,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":251,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":165,\"unset\":2,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":145,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":600,\"unset\":9,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":69,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":531,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":0,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":0,\"label\":\"No, I don't live in a slum\"}]},{\"open_ended\":false,\"set\":86,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"Yes, I live in a slum in the city\"},{\"count\":80,\"label\":\"No, I don't live in a slum\"}]}]},{\"id\":11523,\"ruleset_uuid\":\"1b406dee-311a-4e5d-a3f5-5b9a7fb76710\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09cb\\u09a5\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u0986\\u09ae\\u09be\\u09a6\\u09c7\\u09b0 \\u099c\\u09be\\u09a8\\u09be\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09c7\\u09a8\",\"results\":{\"open_ended\":true,\"set\":18473,\"unset\":1441,\"categories\":[{\"label\":\"04\",\"count\":1163},{\"label\":\"2020\",\"count\":1123},{\"label\":\"01\",\"count\":753},{\"label\":\"chittagong\",\"count\":509},{\"label\":\"khulna\",\"count\":408},{\"label\":\"sylhet\",\"count\":402},{\"label\":\"rajshahi\",\"count\":234},{\"label\":\"dhaka\",\"count\":224},{\"label\":\"rangpur\",\"count\":224},{\"label\":\"ctg\",\"count\":203},{\"label\":\"dinajpur\",\"count\":184},{\"label\":\"bogura\",\"count\":173},{\"label\":\"02\",\"count\":172},{\"label\":\"mymensingh\",\"count\":172},{\"label\":\"cumilla\",\"count\":152},{\"label\":\"noakhali\",\"count\":146},{\"label\":\"satkhira\",\"count\":145},{\"label\":\"chattogram\",\"count\":143},{\"label\":\"comilla\",\"count\":141},{\"label\":\"cox\",\"count\":141},{\"label\":\"bazar\",\"count\":139},{\"label\":\"pabna\",\"count\":133},{\"label\":\"tangail\",\"count\":122},{\"label\":\"bagerhat\",\"count\":119},{\"label\":\"kushtia\",\"count\":118},{\"label\":\"feni\",\"count\":112},{\"label\":\"jessore\",\"count\":109},{\"label\":\"chandpur\",\"count\":96},{\"label\":\"barishal\",\"count\":93},{\"label\":\"jashore\",\"count\":93},{\"label\":\"naogaon\",\"count\":91},{\"label\":\"brahmanbaria\",\"count\":79},{\"label\":\"lalmonirhat\",\"count\":77},{\"label\":\"03\",\"count\":75},{\"label\":\"jamalpur\",\"count\":73},{\"label\":\"barisal\",\"count\":70},{\"label\":\"moulvibazar\",\"count\":70},{\"label\":\"faridpur\",\"count\":69},{\"label\":\"kurigram\",\"count\":67},{\"label\":\"nilphamari\",\"count\":66},{\"label\":\"joypurhat\",\"count\":65},{\"label\":\"sunamganj\",\"count\":65},{\"label\":\"gazipur\",\"count\":63},{\"label\":\"sirajgonj\",\"count\":61},{\"label\":\"sirajganj\",\"count\":60},{\"label\":\"bogra\",\"count\":59},{\"label\":\"jhenaidah\",\"count\":58},{\"label\":\"chottogram\",\"count\":55},{\"label\":\"panchagarh\",\"count\":52},{\"label\":\"pirojpur\",\"count\":52},{\"label\":\"thakurgaon\",\"count\":51},{\"label\":\"patuakhali\",\"count\":50},{\"label\":\"magura\",\"count\":49},{\"label\":\"gaibandha\",\"count\":48},{\"label\":\"rangamati\",\"count\":48},{\"label\":\"sunamgonj\",\"count\":46},{\"label\":\"gopalgonj\",\"count\":45},{\"label\":\"chattagram\",\"count\":44},{\"label\":\"chuadanga\",\"count\":44},{\"label\":\"madaripur\",\"count\":40},{\"label\":\"kishoreganj\",\"count\":39},{\"label\":\"natore\",\"count\":39},{\"label\":\"05\",\"count\":38},{\"label\":\"09\",\"count\":37},{\"label\":\"baria\",\"count\":36},{\"label\":\"chapai\",\"count\":36},{\"label\":\"06\",\"count\":35},{\"label\":\"ami\",\"count\":35},{\"label\":\"narail\",\"count\":35},{\"label\":\"netrokona\",\"count\":34},{\"label\":\"sherpur\",\"count\":34},{\"label\":\"habiganj\",\"count\":32},{\"label\":\"11\",\"count\":31},{\"label\":\"barguna\",\"count\":31},{\"label\":\"13\",\"count\":30},{\"label\":\"city\",\"count\":30},{\"label\":\"lakshmipur\",\"count\":30},{\"label\":\"07\",\"count\":29},{\"label\":\"12\",\"count\":29},{\"label\":\"34\",\"count\":28},{\"label\":\"district\",\"count\":28},{\"label\":\"khagrachari\",\"count\":28},{\"label\":\"netrakona\",\"count\":28},{\"label\":\"21\",\"count\":27},{\"label\":\"55\",\"count\":27},{\"label\":\"chapainawabganj\",\"count\":27},{\"label\":\"hobigonj\",\"count\":27},{\"label\":\"jela\",\"count\":27},{\"label\":\"sadar\",\"count\":27},{\"label\":\"39\",\"count\":26},{\"label\":\"49\",\"count\":26},{\"label\":\"23\",\"count\":25},{\"label\":\"25\",\"count\":25},{\"label\":\"14\",\"count\":24},{\"label\":\"15\",\"count\":24},{\"label\":\"16\",\"count\":24},{\"label\":\"24\",\"count\":24},{\"label\":\"29\",\"count\":24},{\"label\":\"33\",\"count\":24},{\"label\":\"gopalganj\",\"count\":24}]}}]}","my_pack":"{\"id\":1651,\"flow_uuid\":\"a0169e26-7756-4b20-a4ce-2e8da96ce78a\",\"title\":\"\\u09ac\\u09be\\u09b8\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c1\\u09a8\",\"org\":17,\"category\":{\"image_url\":null,\"name\":\"Health\"},\"poll_date\":\"2020-03-30T13:32:09+06:00\",\"created_on\":\"2020-04-07T16:06:04.097005+06:00\",\"questions\":[{\"id\":11512,\"ruleset_uuid\":\"557221a4-cfeb-4101-91ed-b2a4903b5225\",\"title\":\"Lockdown \\u101e\\u100a\\u103a\\u1010\\u1005\\u103a\\u1014\\u102d\\u102f\\u1004\\u103a\\u1004\\u1036\\u101c\\u102f\\u1036\\u1038\\u1021\\u1014\\u103e\\u1036\\u1037\\u1021\\u1015\\u103c\\u102c\\u1038\\u1010\\u103d\\u1004\\u103a\\u1016\\u103c\\u1005\\u103a\\u101e\\u100a\\u103a\\u104b \\u1019\\u1004\\u103a\\u1038\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u101b\\u103e\\u102d\\u101c\\u102c\\u1038\",\"results\":{\"open_ended\":false,\"set\":23025,\"unset\":9281,\"categories\":[{\"count\":14778,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":4939,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":2302,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":1006,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},\"results_by_age\":[{\"set\":124,\"unset\":31,\"label\":\"0-14\",\"categories\":[{\"count\":90,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":21,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":8,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3143,\"unset\":478,\"label\":\"15-19\",\"categories\":[{\"count\":1955,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":686,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":362,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":140,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":3033,\"unset\":491,\"label\":\"20-24\",\"categories\":[{\"count\":1962,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":631,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":339,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":101,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":1378,\"unset\":268,\"label\":\"25-30\",\"categories\":[{\"count\":921,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":284,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":130,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":43,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":301,\"unset\":72,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":72,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":37,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":726,\"unset\":235,\"label\":\"35+\",\"categories\":[{\"count\":489,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":169,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":46,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":22,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_gender\":[{\"set\":6576,\"unset\":1149,\"label\":\"Male\",\"categories\":[{\"count\":3975,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":1581,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":778,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":242,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"set\":2316,\"unset\":452,\"label\":\"Female\",\"categories\":[{\"count\":1722,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":330,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":171,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":93,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2320,\"unset\":492,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1504,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":507,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":244,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":65,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1213,\"unset\":206,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":798,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":266,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":108,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":943,\"unset\":148,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":586,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":211,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":118,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":28,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":731,\"unset\":125,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":449,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":175,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":80,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":725,\"unset\":113,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":475,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":135,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":84,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":31,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":416,\"unset\":66,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":272,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":89,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":35,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":20,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":1315,\"unset\":233,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":831,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":274,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":144,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":66,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":0,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]},{\"open_ended\":false,\"set\":191,\"unset\":36,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":123,\"label\":\"\\u09b9\\u09cd\\u09af\\u09be\\u0981, \\u09aa\\u09cd\\u09b0\\u09a4\\u09bf\\u09a6\\u09bf\\u09a8\\u0987 \\u09b8\\u09ac\\u09b8\\u09ae\\u09df\"},{\"count\":36,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\\u1010\\u101a\\u103a\\u104a \\u1014\\u1031\\u1037\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u101c\\u102d\\u102f\\u101c\\u102d\\u102f\"},{\"count\":22,\"label\":\"\\u09a4\\u09c7\\u09ae\\u09a8 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"},{\"count\":10,\"label\":\"\\u098f\\u0995\\u09a6\\u09ae\\u0987 \\u09a5\\u09be\\u0995\\u09be \\u09b9\\u09df \\u09a8\\u09be\"}]}]},{\"id\":11513,\"ruleset_uuid\":\"22fd7014-63c8-4f46-ae44-8ea4fe737337\",\"title\":\"\\u1019\\u1004\\u103a\\u1038\\u1018\\u102c\\u101c\\u102d\\u102f\\u1037\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1019\\u101b\\u103e\\u102d\\u1010\\u102c\\u101c\\u1032\",\"results\":{\"open_ended\":false,\"set\":3277,\"unset\":264,\"categories\":[{\"count\":1655,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":96,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":122,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":129,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":854,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":421,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},\"results_by_age\":[{\"set\":13,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":4,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":5,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":1,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":549,\"unset\":22,\"label\":\"15-19\",\"categories\":[{\"count\":184,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":11,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":37,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":31,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":211,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":75,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":467,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":243,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":4,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":15,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":14,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":122,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":69,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":187,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":130,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":3,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":38,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":12,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":49,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":36,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":3,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":73,\"unset\":2,\"label\":\"35+\",\"categories\":[{\"count\":53,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":2,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":7,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":7,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}],\"results_by_gender\":[{\"set\":1105,\"unset\":34,\"label\":\"Male\",\"categories\":[{\"count\":549,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":17,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":49,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":34,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":326,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":130,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":278,\"unset\":12,\"label\":\"Female\",\"categories\":[{\"count\":125,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":6,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":15,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":17,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":42,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":340,\"unset\":14,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":175,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":5,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":12,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":99,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":39,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":168,\"unset\":3,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":84,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":8,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":44,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":25,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":151,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":67,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":2,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":4,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":48,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":25,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":116,\"unset\":5,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":4,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":35,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":12,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":123,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":7,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":33,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":15,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":61,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":26,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":1,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":3,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":19,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":9,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":226,\"unset\":7,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":107,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":12,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":65,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":32,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":34,\"unset\":2,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"\\u0995\\u09be\\u099c\\u09c7\\u09b0 \\u099c\\u09a8\\u09cd\\u09af \\u09ac\\u09c7\\u09b0 \\u09b9\\u09a4\\u09c7 \\u09b9\\u09df\"},{\"count\":3,\"label\":\"\\u1004\\u102b\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101b\\u103e\\u102d\\u1019\\u101b\\u103e\\u102d\\u1019\\u101e\\u102d\\u101b\\u1015\\u102b\\u1018\\u1030\\u1038\"},{\"count\":2,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1016\\u102d\\u102f\\u1037\\u101c\\u102d\\u102f\\u1010\\u101a\\u103a\\u101c\\u102d\\u102f\\u1037\\u1019\\u1011\\u1004\\u103a\\u1018\\u1030\\u1038\"},{\"count\":2,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u1021\\u102d\\u1019\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u101b\\u1010\\u102c\\u1005\\u102d\\u1010\\u103a\\u1015\\u103b\\u1000\\u103a\\u1005\\u101b\\u102c\\u1000\\u1031\\u102c\\u1004\\u103a\\u1038\\u1010\\u101a\\u103a\"},{\"count\":1,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}]},{\"id\":11515,\"ruleset_uuid\":\"c82005a4-958d-4fa4-9890-5906226ebbd1\",\"title\":\"\\u101c\\u1030\\u1010\\u102d\\u102f\\u1004\\u103a\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1021\\u1014\\u100a\\u103a\\u1038\\u1006\\u102f\\u1036\\u1038 \\u1043 \\u1015\\u1031\\u1021\\u1000\\u103d\\u102c\\u1021\\u101d\\u1031\\u1038\\u1000\\u102d\\u102f\\u101e\\u1004\\u103a\\u1011\\u102c\\u1038\\u101e\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"set\":21721,\"unset\":1574,\"categories\":[{\"count\":7705,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":9135,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":3703,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":1178,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},\"results_by_age\":[{\"set\":125,\"unset\":9,\"label\":\"0-14\",\"categories\":[{\"count\":52,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":51,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":18,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":4,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":3178,\"unset\":123,\"label\":\"15-19\",\"categories\":[{\"count\":1097,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":1180,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":671,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":230,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":3042,\"unset\":113,\"label\":\"20-24\",\"categories\":[{\"count\":1056,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":1303,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":548,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":135,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":1381,\"unset\":49,\"label\":\"25-30\",\"categories\":[{\"count\":509,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":609,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":214,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":49,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":305,\"unset\":10,\"label\":\"31-34\",\"categories\":[{\"count\":108,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":142,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":42,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":13,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":754,\"unset\":18,\"label\":\"35+\",\"categories\":[{\"count\":289,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":358,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":74,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":33,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_gender\":[{\"set\":6654,\"unset\":233,\"label\":\"Male\",\"categories\":[{\"count\":2260,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":2880,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":1181,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":333,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":2305,\"unset\":112,\"label\":\"Female\",\"categories\":[{\"count\":914,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":826,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":422,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":143,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2368,\"unset\":83,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":826,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":990,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":449,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":103,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":45,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":456,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":537,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":189,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":48,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":949,\"unset\":30,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":297,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":424,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":174,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":54,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":747,\"unset\":22,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":274,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":323,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":114,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":36,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":719,\"unset\":32,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":279,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":262,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":132,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":46,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":408,\"unset\":26,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":139,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":179,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":68,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":22,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":1344,\"unset\":41,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":478,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":528,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":247,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":91,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":0,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":0,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":196,\"unset\":7,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":62,\"label\":\"\\u1021\\u1019\\u103c\\u1032\\u1010\\u1019\\u103a\\u1038\"},{\"count\":76,\"label\":\"\\u1021\\u1001\\u103b\\u102d\\u1014\\u103a\\u1021\\u1019\\u103b\\u102c\\u1038\\u1005\\u102f\"},{\"count\":48,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1015\\u102b\"},{\"count\":10,\"label\":\"\\u101c\\u102f\\u1036\\u1038\\u101d\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}]},{\"id\":11516,\"ruleset_uuid\":\"0103fccc-0357-4f7b-99ae-e0ec0f81b700\",\"title\":\"\\u09af\\u09be\\u09b0\\u09be \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be \\u09a4\\u09be\\u09b0\\u09be \\u0995\\u09c7\\u09a8\\u09cb \\u09b8\\u09ac\\u09be\\u09b0 \\u0995\\u09be\\u099b \\u09a5\\u09c7\\u0995\\u09c7 \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u099b\\u09c7\\u09a8 \\u09a8\\u09be?\",\"results\":{\"open_ended\":false,\"set\":3716,\"unset\":1365,\"categories\":[{\"count\":1083,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":237,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":355,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":176,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":1238,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":627,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},\"results_by_age\":[{\"set\":15,\"unset\":11,\"label\":\"0-14\",\"categories\":[{\"count\":2,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":6,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":3,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":741,\"unset\":229,\"label\":\"15-19\",\"categories\":[{\"count\":180,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":48,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":75,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":36,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":272,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":130,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":554,\"unset\":176,\"label\":\"20-24\",\"categories\":[{\"count\":181,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":24,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":43,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":22,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":205,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":79,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":234,\"unset\":42,\"label\":\"25-30\",\"categories\":[{\"count\":82,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":14,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":10,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":91,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":23,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":49,\"unset\":11,\"label\":\"31-34\",\"categories\":[{\"count\":20,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":1,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":3,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":1,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":18,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":6,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":103,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":32,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":2,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":3,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":41,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":12,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}],\"results_by_gender\":[{\"set\":1290,\"unset\":337,\"label\":\"Male\",\"categories\":[{\"count\":364,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":78,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":109,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":56,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":487,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":196,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"set\":444,\"unset\":159,\"label\":\"Female\",\"categories\":[{\"count\":146,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":19,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":40,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":19,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":153,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":67,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":482,\"unset\":116,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":142,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":28,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":44,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":21,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":187,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":60,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":190,\"unset\":71,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":17,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":8,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":73,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":32,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":187,\"unset\":56,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":14,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":80,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":20,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":127,\"unset\":35,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":7,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":13,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":6,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":45,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":19,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":154,\"unset\":39,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":51,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":9,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":9,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":54,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":27,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":70,\"unset\":24,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":18,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":5,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":4,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":5,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":27,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":11,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":283,\"unset\":78,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":79,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":13,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":28,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":13,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":96,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":54,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":0,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":0,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":0,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":0,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]},{\"open_ended\":false,\"set\":47,\"unset\":15,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"\\u1004\\u102b\\u104f\\u1021\\u1021\\u101c\\u102f\\u1015\\u103a\\u1021\\u1019\\u103b\\u102d\\u102f\\u1038\\u1021\\u1005\\u102c\\u1038\\u1014\\u103e\\u1004\\u1037\\u103a\\u1015\\u1010\\u103a\\u101d\\u1014\\u103a\\u1038\\u1000\\u103b\\u1004\\u103a\\u101e\\u100a\\u103a\"},{\"count\":3,\"label\":\"\\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ae\\u09cd\\u09aa\\u09b0\\u09cd\\u0995\\u09c7 \\u099c\\u09be\\u09a8\\u09bf \\u09a8\\u09be\"},{\"count\":1,\"label\":\"\\u1004\\u102b\\u101c\\u102d\\u102f\\u1021\\u1015\\u103a\\u1001\\u103b\\u1000\\u103a\\u101b\\u103e\\u102d\\u1019\\u1011\\u1004\\u103a\\u1000\\u103c\\u1018\\u1030\\u1038\"},{\"count\":4,\"label\":\"\\u0986\\u09ae\\u09be\\u0995\\u09c7 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u0995\\u09b0\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09ac\\u09c7 \\u09a8\\u09be\"},{\"count\":21,\"label\":\"\\u09e9 \\u09ab\\u09c1\\u099f \\u09a6\\u09c2\\u09b0\\u09a4\\u09cd\\u09ac \\u09ac\\u099c\\u09be\\u09df \\u09b0\\u09be\\u0996\\u09be \\u09b8\\u09ac \\u09b8\\u09ae\\u09df \\u09b8\\u09ae\\u09cd\\u09ad\\u09ac\"},{\"count\":2,\"label\":\"\\u1021\\u1001\\u103c\\u102c\\u1038\"}]}]},{\"id\":11517,\"ruleset_uuid\":\"8bafd3a0-0f98-4f23-9d0c-94cd70535c52\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09be\\u09b0 \\u09aa\\u09b0\\u09bf\\u09ac\\u09be\\u09b0\\u09c7 \\u098f\\u09ae\\u09a8 \\u0995\\u09bf \\u0995\\u09c7\\u0989 \\u0986\\u099b\\u09c7\\u09a8 \\u09af\\u09bf\\u09a8\\u09bf \\u09b8\\u09ae\\u09cd\\u09aa\\u09cd\\u09b0\\u09a4\\u09bf \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09a6\\u09c7\\u09b6\\u09c7 \\u0997\\u09bf\\u09df\\u09c7\\u099b\\u09bf\\u09b2\\u09c7\\u09a8 \\u09ac\\u09be \\u09ab\\u09bf\\u09b0\\u09c7\\u099b\\u09c7\\u09a8 \\u0995\\u09bf\\u0982\\u09ac\\u09be \\u09ac\\u09be \\u09b8\\u09a8\\u09cd\\u09a6\\u09c7\\u09b9\\u09ad\\u09be\\u099c\\u09a8 \\u09ac\\u09be \\u09a8\\u09bf\\u09b6\\u09cd\\u099a\\u09bf\\u09a4 \\u0995\\u09b0\\u09cb\\u09a8\\u09be\\u09ad\\u09be\\u0987\\u09b0\\u09be\\u09b8 \\u0986\\u0995\\u09cd\\u09b0\\u09be\\u09a8\\u09cd\\u09a4 \\u09b0\\u09cb\\u0997\\u09c0\\u09b0 \\u09b8\\u0982\\u09b8\\u09cd\\u09aa\\u09b0\\u09cd\\u09b6\\u09c7 \\u098f\\u09b8\\u09c7\\u099b\\u09c7\\u09a8?\",\"results\":{\"open_ended\":false,\"set\":20380,\"unset\":1048,\"categories\":[{\"count\":1254,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":19126,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},\"results_by_age\":[{\"set\":127,\"unset\":5,\"label\":\"0-14\",\"categories\":[{\"count\":7,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":120,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":3150,\"unset\":120,\"label\":\"15-19\",\"categories\":[{\"count\":227,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":2923,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":3015,\"unset\":93,\"label\":\"20-24\",\"categories\":[{\"count\":166,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":2849,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":1364,\"unset\":36,\"label\":\"25-30\",\"categories\":[{\"count\":53,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":1311,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":314,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":7,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":307,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":759,\"unset\":16,\"label\":\"35+\",\"categories\":[{\"count\":30,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":729,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_gender\":[{\"set\":6625,\"unset\":195,\"label\":\"Male\",\"categories\":[{\"count\":351,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":6274,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":2262,\"unset\":97,\"label\":\"Female\",\"categories\":[{\"count\":150,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":2112,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2348,\"unset\":75,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":125,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":2223,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":1230,\"unset\":34,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":54,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":1176,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":53,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":899,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":742,\"unset\":27,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":41,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":701,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":718,\"unset\":22,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":681,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":404,\"unset\":20,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":381,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":1330,\"unset\":55,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":1234,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":201,\"unset\":4,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":9,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":192,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}]},{\"id\":11519,\"ruleset_uuid\":\"1affab6a-5735-485e-8665-e605a7f4bbed\",\"title\":\"\\u101e\\u1030\\u1037\\u1000\\u102d\\u102f\\u101e\\u102e\\u1038\\u1001\\u103c\\u102c\\u1038\\u1021\\u1001\\u1014\\u103a\\u1038\\u1010\\u1005\\u103a\\u1001\\u102f\\u1010\\u100a\\u103a\\u1038\\u1010\\u103d\\u1004\\u103a\\u1011\\u102c\\u1038\\u1014\\u102d\\u102f\\u1004\\u103a\\u1019\\u100a\\u103a\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"set\":1233,\"unset\":129,\"categories\":[{\"count\":628,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":605,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},\"results_by_age\":[{\"set\":6,\"unset\":1,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":3,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":250,\"unset\":6,\"label\":\"15-19\",\"categories\":[{\"count\":109,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":141,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":173,\"unset\":5,\"label\":\"20-24\",\"categories\":[{\"count\":83,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":90,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":52,\"unset\":4,\"label\":\"25-30\",\"categories\":[{\"count\":32,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":20,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":7,\"unset\":1,\"label\":\"31-34\",\"categories\":[{\"count\":3,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":4,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":35,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":17,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":18,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_gender\":[{\"set\":381,\"unset\":12,\"label\":\"Male\",\"categories\":[{\"count\":185,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":196,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":154,\"unset\":7,\"label\":\"Female\",\"categories\":[{\"count\":68,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":86,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":136,\"unset\":5,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":72,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":64,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":63,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":27,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":36,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":52,\"unset\":6,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":25,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":27,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":42,\"unset\":0,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":19,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":39,\"unset\":1,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":19,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":20,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":24,\"unset\":0,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":18,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":100,\"unset\":3,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":42,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":58,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":10,\"unset\":1,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":7,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}]},{\"id\":11520,\"ruleset_uuid\":\"4b67e334-b776-4f1a-a872-28f390acc799\",\"title\":\"\\u101e\\u1030\\u1000\\u101e\\u102e\\u1038\\u1001\\u103c\\u102c\\u1038\\u1021\\u1001\\u1014\\u103a\\u1038\\u1011\\u1032\\u1019\\u103e\\u102c\\u1014\\u1031\\u101c\\u102c\\u1038\",\"results\":{\"open_ended\":false,\"set\":576,\"unset\":64,\"categories\":[{\"count\":473,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":103,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},\"results_by_age\":[{\"set\":3,\"unset\":0,\"label\":\"0-14\",\"categories\":[{\"count\":3,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":111,\"unset\":3,\"label\":\"15-19\",\"categories\":[{\"count\":89,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":22,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":83,\"unset\":4,\"label\":\"20-24\",\"categories\":[{\"count\":69,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":14,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":31,\"unset\":1,\"label\":\"25-30\",\"categories\":[{\"count\":28,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":3,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":3,\"unset\":0,\"label\":\"31-34\",\"categories\":[{\"count\":2,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":1,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":17,\"unset\":1,\"label\":\"35+\",\"categories\":[{\"count\":14,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":3,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_gender\":[{\"set\":186,\"unset\":7,\"label\":\"Male\",\"categories\":[{\"count\":152,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":34,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"set\":68,\"unset\":2,\"label\":\"Female\",\"categories\":[{\"count\":55,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":13,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":74,\"unset\":2,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":58,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":16,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":27,\"unset\":1,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":23,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":4,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":28,\"unset\":0,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":22,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":6,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":22,\"unset\":1,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":2,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":19,\"unset\":0,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":16,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":3,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":5,\"unset\":1,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":4,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":1,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":39,\"unset\":4,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":35,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":4,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":3,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":3,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\"}]}]},{\"id\":11521,\"ruleset_uuid\":\"43f82bd8-1db9-466d-b41e-f967b8892c24\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0997\\u09cd\\u09b0\\u09be\\u09ae\\u09c7 \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u09a8\\u09be\\u0995\\u09bf \\u09b6\\u09b9\\u09b0\\u09c7?\",\"results\":{\"open_ended\":false,\"set\":19826,\"unset\":607,\"categories\":[{\"count\":8624,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":11202,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},\"results_by_age\":[{\"set\":130,\"unset\":4,\"label\":\"0-14\",\"categories\":[{\"count\":62,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":68,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":3187,\"unset\":83,\"label\":\"15-19\",\"categories\":[{\"count\":1035,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2152,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":3037,\"unset\":62,\"label\":\"20-24\",\"categories\":[{\"count\":1012,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":2025,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":1375,\"unset\":15,\"label\":\"25-30\",\"categories\":[{\"count\":620,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":755,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":316,\"unset\":5,\"label\":\"31-34\",\"categories\":[{\"count\":183,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":133,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":765,\"unset\":15,\"label\":\"35+\",\"categories\":[{\"count\":530,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":235,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]}],\"results_by_gender\":[{\"set\":6694,\"unset\":127,\"label\":\"Male\",\"categories\":[{\"count\":2478,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":4216,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"set\":2256,\"unset\":75,\"label\":\"Female\",\"categories\":[{\"count\":1016,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1240,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":2373,\"unset\":49,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":1017,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":1356,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":1243,\"unset\":29,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":443,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":800,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":952,\"unset\":14,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":336,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":616,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":749,\"unset\":16,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":262,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":487,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":725,\"unset\":16,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":276,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":449,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":416,\"unset\":10,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":155,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":261,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":1326,\"unset\":36,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":581,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":745,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":0,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]},{\"open_ended\":false,\"set\":203,\"unset\":3,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":77,\"label\":\"\\u09b6\\u09b9\\u09b0\"},{\"count\":126,\"label\":\"\\u1000\\u103b\\u1031\\u1038\\u101b\\u103d\\u102c\"}]}]},{\"id\":11522,\"ruleset_uuid\":\"f3a359b1-7212-4fae-8f8c-2b1d61e55889\",\"title\":\"\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1014\\u1031\\u101e\\u1030\\u1010\\u103d\\u1031\\u1000\\u1019\\u103c\\u102d\\u102f\\u1037\\u101b\\u1032\\u1037\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1011\\u102d\\u102f\\u1004\\u103a\\u1000\\u103c\\u101c\\u102c\\u1038\\u104b\",\"results\":{\"open_ended\":false,\"set\":8674,\"unset\":144,\"categories\":[{\"count\":727,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":7947,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},\"results_by_age\":[{\"set\":67,\"unset\":2,\"label\":\"0-14\",\"categories\":[{\"count\":5,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":62,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":1078,\"unset\":16,\"label\":\"15-19\",\"categories\":[{\"count\":127,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":951,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":1032,\"unset\":15,\"label\":\"20-24\",\"categories\":[{\"count\":117,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":915,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":630,\"unset\":10,\"label\":\"25-30\",\"categories\":[{\"count\":45,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":585,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":184,\"unset\":3,\"label\":\"31-34\",\"categories\":[{\"count\":11,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":173,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":538,\"unset\":7,\"label\":\"35+\",\"categories\":[{\"count\":24,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":514,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]}],\"results_by_gender\":[{\"set\":2539,\"unset\":33,\"label\":\"Male\",\"categories\":[{\"count\":236,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":2303,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"set\":1044,\"unset\":19,\"label\":\"Female\",\"categories\":[{\"count\":100,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":944,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]}],\"results_by_location\":[{\"open_ended\":false,\"set\":1036,\"unset\":15,\"boundary\":\"3824588\",\"label\":\"\\u099a\\u099f\\u09cd\\u099f\\u0997\\u09cd\\u09b0\\u09be\\u09ae \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":96,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":940,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":454,\"unset\":6,\"boundary\":\"3825003\",\"label\":\"\\u0996\\u09c1\\u09b2\\u09a8\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":37,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":417,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":338,\"unset\":7,\"boundary\":\"3859335\",\"label\":\"\\u09b0\\u09be\\u099c\\u09b6\\u09be\\u09b9\\u09c0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":17,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":321,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":267,\"unset\":3,\"boundary\":\"3921211\",\"label\":\"\\u09b0\\u0982\\u09aa\\u09c1\\u09b0 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":24,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":243,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":281,\"unset\":7,\"boundary\":\"3921222\",\"label\":\"\\u09b8\\u09bf\\u09b2\\u09c7\\u099f \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":30,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":251,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":165,\"unset\":2,\"boundary\":\"3921298\",\"label\":\"\\u09ac\\u09b0\\u09bf\\u09b6\\u09be\\u09b2 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":20,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":145,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":600,\"unset\":9,\"boundary\":\"3921322\",\"label\":\"\\u09a2\\u09be\\u0995\\u09be \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":69,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":531,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826930\",\"label\":\"Talasadar_union_satkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":0,\"unset\":0,\"boundary\":\"551826955\",\"label\":\"Islamkathi_union_TalaSatkhira\",\"categories\":[{\"count\":0,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":0,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]},{\"open_ended\":false,\"set\":86,\"unset\":0,\"boundary\":\"7318343\",\"label\":\"\\u09ae\\u09af\\u09bc\\u09ae\\u09a8\\u09b8\\u09bf\\u0982\\u09b9 \\u09ac\\u09bf\\u09ad\\u09be\\u0997\",\"categories\":[{\"count\":6,\"label\":\"\\u101f\\u102f\\u1010\\u103a\\u1010\\u101a\\u103a\\u104a \\u1004\\u102b\\u1019\\u103c\\u102d\\u102f\\u1037\\u1011\\u1032\\u1019\\u103e\\u102c\\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1014\\u1031\\u1010\\u101a\\u103a\"},{\"count\":80,\"label\":\"\\u1019\\u101f\\u102f\\u1010\\u103a\\u1018\\u1030\\u1038\\u104a \\u1006\\u1004\\u103a\\u1038\\u101b\\u1032\\u101e\\u102c\\u1038\\u101b\\u1015\\u103a\\u1000\\u103d\\u1000\\u103a\\u1019\\u103e\\u102c\\u1019\\u1014\\u1031\\u1015\\u102b\\u1018\\u1030\\u1038\"}]}]},{\"id\":11523,\"ruleset_uuid\":\"1b406dee-311a-4e5d-a3f5-5b9a7fb76710\",\"title\":\"\\u0986\\u09aa\\u09a8\\u09bf \\u0995\\u09cb\\u09a5\\u09be\\u09df \\u09a5\\u09be\\u0995\\u09c7\\u09a8 \\u0986\\u09ae\\u09be\\u09a6\\u09c7\\u09b0 \\u099c\\u09be\\u09a8\\u09be\\u09a4\\u09c7 \\u09aa\\u09be\\u09b0\\u09c7\\u09a8\",\"results\":{\"open_ended\":true,\"set\":18473,\"unset\":1441,\"categories\":[{\"label\":\"04\",\"count\":1163},{\"label\":\"2020\",\"count\":1123},{\"label\":\"01\",\"count\":753},{\"label\":\"chittagong\",\"count\":509},{\"label\":\"khulna\",\"count\":408},{\"label\":\"sylhet\",\"count\":402},{\"label\":\"rajshahi\",\"count\":234},{\"label\":\"dhaka\",\"count\":224},{\"label\":\"rangpur\",\"count\":224},{\"label\":\"ctg\",\"count\":203},{\"label\":\"dinajpur\",\"count\":184},{\"label\":\"bogura\",\"count\":173},{\"label\":\"02\",\"count\":172},{\"label\":\"mymensingh\",\"count\":172},{\"label\":\"cumilla\",\"count\":152},{\"label\":\"noakhali\",\"count\":146},{\"label\":\"satkhira\",\"count\":145},{\"label\":\"chattogram\",\"count\":143},{\"label\":\"comilla\",\"count\":141},{\"label\":\"cox\",\"count\":141},{\"label\":\"bazar\",\"count\":139},{\"label\":\"pabna\",\"count\":133},{\"label\":\"tangail\",\"count\":122},{\"label\":\"bagerhat\",\"count\":119},{\"label\":\"kushtia\",\"count\":118},{\"label\":\"feni\",\"count\":112},{\"label\":\"jessore\",\"count\":109},{\"label\":\"chandpur\",\"count\":96},{\"label\":\"barishal\",\"count\":93},{\"label\":\"jashore\",\"count\":93},{\"label\":\"naogaon\",\"count\":91},{\"label\":\"brahmanbaria\",\"count\":79},{\"label\":\"lalmonirhat\",\"count\":77},{\"label\":\"03\",\"count\":75},{\"label\":\"jamalpur\",\"count\":73},{\"label\":\"barisal\",\"count\":70},{\"label\":\"moulvibazar\",\"count\":70},{\"label\":\"faridpur\",\"count\":69},{\"label\":\"kurigram\",\"count\":67},{\"label\":\"nilphamari\",\"count\":66},{\"label\":\"joypurhat\",\"count\":65},{\"label\":\"sunamganj\",\"count\":65},{\"label\":\"gazipur\",\"count\":63},{\"label\":\"sirajgonj\",\"count\":61},{\"label\":\"sirajganj\",\"count\":60},{\"label\":\"bogra\",\"count\":59},{\"label\":\"jhenaidah\",\"count\":58},{\"label\":\"chottogram\",\"count\":55},{\"label\":\"panchagarh\",\"count\":52},{\"label\":\"pirojpur\",\"count\":52},{\"label\":\"thakurgaon\",\"count\":51},{\"label\":\"patuakhali\",\"count\":50},{\"label\":\"magura\",\"count\":49},{\"label\":\"gaibandha\",\"count\":48},{\"label\":\"rangamati\",\"count\":48},{\"label\":\"sunamgonj\",\"count\":46},{\"label\":\"gopalgonj\",\"count\":45},{\"label\":\"chattagram\",\"count\":44},{\"label\":\"chuadanga\",\"count\":44},{\"label\":\"madaripur\",\"count\":40},{\"label\":\"kishoreganj\",\"count\":39},{\"label\":\"natore\",\"count\":39},{\"label\":\"05\",\"count\":38},{\"label\":\"09\",\"count\":37},{\"label\":\"baria\",\"count\":36},{\"label\":\"chapai\",\"count\":36},{\"label\":\"06\",\"count\":35},{\"label\":\"ami\",\"count\":35},{\"label\":\"narail\",\"count\":35},{\"label\":\"netrokona\",\"count\":34},{\"label\":\"sherpur\",\"count\":34},{\"label\":\"habiganj\",\"count\":32},{\"label\":\"11\",\"count\":31},{\"label\":\"barguna\",\"count\":31},{\"label\":\"13\",\"count\":30},{\"label\":\"city\",\"count\":30},{\"label\":\"lakshmipur\",\"count\":30},{\"label\":\"07\",\"count\":29},{\"label\":\"12\",\"count\":29},{\"label\":\"34\",\"count\":28},{\"label\":\"district\",\"count\":28},{\"label\":\"khagrachari\",\"count\":28},{\"label\":\"netrakona\",\"count\":28},{\"label\":\"21\",\"count\":27},{\"label\":\"55\",\"count\":27},{\"label\":\"chapainawabganj\",\"count\":27},{\"label\":\"hobigonj\",\"count\":27},{\"label\":\"jela\",\"count\":27},{\"label\":\"sadar\",\"count\":27},{\"label\":\"39\",\"count\":26},{\"label\":\"49\",\"count\":26},{\"label\":\"23\",\"count\":25},{\"label\":\"25\",\"count\":25},{\"label\":\"14\",\"count\":24},{\"label\":\"15\",\"count\":24},{\"label\":\"16\",\"count\":24},{\"label\":\"24\",\"count\":24},{\"label\":\"29\",\"count\":24},{\"label\":\"33\",\"count\":24},{\"label\":\"gopalganj\",\"count\":24}]}}]}","data_category":"Health","en_category":"Health","my_category":"Health","created_at":"2020-04-16 12:16:02","updated_at":"2020-04-30 13:40:29"}],"last_updated":"2020-04-30T07:40:29.000000Z"} \ No newline at end of file diff --git a/app/src/main/assets/font-my/cherry_unicode-webfont.eot b/app/src/main/assets/font-my/cherry_unicode-webfont.eot new file mode 100644 index 0000000..293ce89 Binary files /dev/null and b/app/src/main/assets/font-my/cherry_unicode-webfont.eot differ diff --git a/app/src/main/assets/font-my/cherry_unicode-webfont.svg b/app/src/main/assets/font-my/cherry_unicode-webfont.svg new file mode 100644 index 0000000..d147108 --- /dev/null +++ b/app/src/main/assets/font-my/cherry_unicode-webfont.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/font-my/cherry_unicode-webfont.ttf b/app/src/main/assets/font-my/cherry_unicode-webfont.ttf new file mode 100644 index 0000000..748b546 Binary files /dev/null and b/app/src/main/assets/font-my/cherry_unicode-webfont.ttf differ diff --git a/app/src/main/assets/font-my/cherry_unicode-webfont.woff b/app/src/main/assets/font-my/cherry_unicode-webfont.woff new file mode 100644 index 0000000..6e7a501 Binary files /dev/null and b/app/src/main/assets/font-my/cherry_unicode-webfont.woff differ diff --git a/app/src/main/assets/font-my/cherry_unicode-webfont.woff2 b/app/src/main/assets/font-my/cherry_unicode-webfont.woff2 new file mode 100644 index 0000000..f59b992 Binary files /dev/null and b/app/src/main/assets/font-my/cherry_unicode-webfont.woff2 differ diff --git a/app/src/main/assets/font-my/font.css b/app/src/main/assets/font-my/font.css new file mode 100644 index 0000000..b67f426 --- /dev/null +++ b/app/src/main/assets/font-my/font.css @@ -0,0 +1,15 @@ +/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on April 23, 2020 */ + + +@font-face { + font-family: 'cherry_unicoderegular'; + src: url('cherry_unicode-webfont.eot'); + src: url('cherry_unicode-webfont.eot?#iefix') format('embedded-opentype'), + url('cherry_unicode-webfont.woff2') format('woff2'), + url('cherry_unicode-webfont.woff') format('woff'), + url('cherry_unicode-webfont.ttf') format('truetype'), + url('cherry_unicode-webfont.svg#cherry_unicoderegular') format('svg'); + font-weight: normal; + font-style: normal; + +} \ No newline at end of file diff --git a/app/src/main/assets/images/_/v1_icon_logout.png b/app/src/main/assets/images/_/v1_icon_logout.png new file mode 100644 index 0000000..2611bd8 Binary files /dev/null and b/app/src/main/assets/images/_/v1_icon_logout.png differ diff --git a/app/src/main/assets/images/_/v1_icon_signin.png b/app/src/main/assets/images/_/v1_icon_signin.png new file mode 100644 index 0000000..1156744 Binary files /dev/null and b/app/src/main/assets/images/_/v1_icon_signin.png differ diff --git a/app/src/main/assets/images/no-image.png b/app/src/main/assets/images/no-image.png new file mode 100644 index 0000000..87057a8 Binary files /dev/null and b/app/src/main/assets/images/no-image.png differ diff --git a/app/src/main/assets/images/v1_icon_logout.png b/app/src/main/assets/images/v1_icon_logout.png new file mode 100644 index 0000000..93c9832 Binary files /dev/null and b/app/src/main/assets/images/v1_icon_logout.png differ diff --git a/app/src/main/assets/images/v1_icon_logout.zip b/app/src/main/assets/images/v1_icon_logout.zip new file mode 100644 index 0000000..0d1ef3e Binary files /dev/null and b/app/src/main/assets/images/v1_icon_logout.zip differ diff --git a/app/src/main/assets/images/v1_icon_signin.png b/app/src/main/assets/images/v1_icon_signin.png new file mode 100644 index 0000000..7591a05 Binary files /dev/null and b/app/src/main/assets/images/v1_icon_signin.png differ diff --git a/app/src/main/assets/images/v1_riseup_logo.png b/app/src/main/assets/images/v1_riseup_logo.png new file mode 100644 index 0000000..7cc7cbf Binary files /dev/null and b/app/src/main/assets/images/v1_riseup_logo.png differ diff --git a/app/src/main/assets/images/v1_story_zoom_in.png b/app/src/main/assets/images/v1_story_zoom_in.png new file mode 100644 index 0000000..55d17d6 Binary files /dev/null and b/app/src/main/assets/images/v1_story_zoom_in.png differ diff --git a/app/src/main/assets/images/v1_story_zoom_out.png b/app/src/main/assets/images/v1_story_zoom_out.png new file mode 100644 index 0000000..6c9c9c5 Binary files /dev/null and b/app/src/main/assets/images/v1_story_zoom_out.png differ diff --git a/app/src/main/assets/images/v1_unicef_logo.png b/app/src/main/assets/images/v1_unicef_logo.png new file mode 100644 index 0000000..3001e3a Binary files /dev/null and b/app/src/main/assets/images/v1_unicef_logo.png differ diff --git a/app/src/main/assets/js/jquery.js b/app/src/main/assets/js/jquery.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/app/src/main/assets/js/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0'+ ckd_on_txt +'' : '', + off_label = (ckd_off_txt) ? '
'+ ckd_off_txt +'
' : ''; + + + // default states + var disabled = ($(this).is(':disabled')) ? true : false, + active = ($(this).is(':checked')) ? true : false; + + var status_classes = ''; + status_classes += (active) ? ' lcs_on' : ' lcs_off'; + if(disabled) { + status_classes += ' lcs_disabled'; + } + + + // wrap and append + var structure = + '
' + + '
' + + on_label + off_label + + '
'; + + if( $(this).is(':input') && ($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio') ) { + + $(this).wrap('
'); + $(this).parent().append(structure); + + $(this).parent().find('.lcs_switch').addClass('lcs_'+ $(this).attr('type') +'_switch'); + } + } + }); + }; + + + + // handlers + $(document).ready(function() { + + // on click + $(document).on('click tap', '.lcs_switch:not(.lcs_disabled)', function(e) { + + if( $(this).hasClass('lcs_on') ) { + if( !$(this).hasClass('lcs_radio_switch') ) { // not for radio + $(this).lcs_off(); + } + } else { + $(this).lcs_on(); + } + }); + + + // on checkbox status change + $(document).on('change', '.lcs_wrap input', function() { + ( $(this).is(':checked') ) ? $(this).lcs_on() : $(this).lcs_off(); + }); + + }); + +})(jQuery); diff --git a/app/src/main/assets/js/vue.js b/app/src/main/assets/js/vue.js new file mode 100644 index 0000000..b72127b --- /dev/null +++ b/app/src/main/assets/js/vue.js @@ -0,0 +1,6 @@ +/*! + * Vue.js v2.6.11 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.11";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:|^#/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn}); diff --git a/app/src/main/assets/material.ttf b/app/src/main/assets/material.ttf new file mode 100644 index 0000000..4090869 Binary files /dev/null and b/app/src/main/assets/material.ttf differ diff --git a/app/src/main/assets/pages/button_click_yes.mp3 b/app/src/main/assets/pages/button_click_yes.mp3 new file mode 100644 index 0000000..9678781 Binary files /dev/null and b/app/src/main/assets/pages/button_click_yes.mp3 differ diff --git a/app/src/main/assets/pages/setting_button_change.mp3 b/app/src/main/assets/pages/setting_button_change.mp3 new file mode 100644 index 0000000..6544c0f Binary files /dev/null and b/app/src/main/assets/pages/setting_button_change.mp3 differ diff --git a/app/src/main/assets/pages/settings.html b/app/src/main/assets/pages/settings.html new file mode 100644 index 0000000..1415c4c --- /dev/null +++ b/app/src/main/assets/pages/settings.html @@ -0,0 +1,305 @@ + + + + + + + + + + + +
+
+ + +
+
+

Change Language

+
+ +
+
+ +

+ + +
+
+ +
+

Sound

+
+ +
+
+ +
+
+ +
+

Vibration

+
+ +
+
+ +
+
+ +
+ + + + + +
+ Logout + + +
+
+
+ +
+ + + + + \ No newline at end of file diff --git a/app/src/main/assets/pages/story.html b/app/src/main/assets/pages/story.html new file mode 100644 index 0000000..6e52437 --- /dev/null +++ b/app/src/main/assets/pages/story.html @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + +
+
+ +
#Title_Lang_1
+
#Title_Lang_2
+
#Title_Lang_3
+
#Body_Lang_1
+
#Body_Lang_2
+
#Body_Lang_3
+
+
+ + + + +
+
+
+
+ +
+
#DateData
+
#TitleData
+
+ +
+
+ +
+
+
+
+ + +
+ + {{line_spliter}} + + + +
+
+
+     + +     + +
+
+

+

+ + + + + \ No newline at end of file diff --git a/app/src/main/assets/pages/zoom_button_click.mp3 b/app/src/main/assets/pages/zoom_button_click.mp3 new file mode 100644 index 0000000..68c54e6 Binary files /dev/null and b/app/src/main/assets/pages/zoom_button_click.mp3 differ diff --git a/app/src/main/assets/ureport/0-index.html b/app/src/main/assets/ureport/0-index.html new file mode 100644 index 0000000..cff0274 --- /dev/null +++ b/app/src/main/assets/ureport/0-index.html @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + +
+ + +
+ +
+ +

{{q.title}}

+ +
+ + Statistics + + + Gender + + + Hub + +
+ +
+ + +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + +

+ + + +
+ + + + + + + + {{hub.label}} + + +
+ +

+ + {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+
+
+ + + + + + {{gender.label}} + + +
+ +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+ +
+
+ +
+ +
+
+ +
+ + + + \ No newline at end of file diff --git a/app/src/main/assets/ureport/audio_tick.mp3 b/app/src/main/assets/ureport/audio_tick.mp3 new file mode 100644 index 0000000..68c54e6 Binary files /dev/null and b/app/src/main/assets/ureport/audio_tick.mp3 differ diff --git a/app/src/main/assets/ureport/css/main.css b/app/src/main/assets/ureport/css/main.css new file mode 100644 index 0000000..6eb5b51 --- /dev/null +++ b/app/src/main/assets/ureport/css/main.css @@ -0,0 +1,77 @@ +#BD_District_Map { + width: 95%; + max-width: 500px; + height: auto; +} + + +/* Word Cloud */ + + +/** + * Tooltip Styles + */ + +/* Add this attribute to the element that needs a tooltip */ +[data-tooltip] { + position: relative; + z-index: 9999999; + cursor: pointer; +} + +/* Hide the tooltip content by default */ +[data-tooltip]:before, +[data-tooltip]:after { + visibility: hidden; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + pointer-events: none; +} + +/* Position tooltip above the element */ +[data-tooltip]:before { + position: absolute; + bottom: 80%; + left: 50%; + margin-bottom: 5px; + margin-left: -30px; + padding: 7px; + width: 60px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #000; + background-color: hsla(0, 0%, 20%, 0.9); + color: #fff; + content: attr(data-tooltip); + text-align: center; + font-size: 14px; + line-height: 1.2; +} + +/* Triangle hack to make tooltip look like a speech bubble */ +[data-tooltip]:after { + position: absolute; + bottom: 80%; + left: 50%; + margin-left: 1px; + width: 0; + border-top: 5px solid #000; + border-top: 5px solid hsla(0, 0%, 20%, 0.9); + border-right: 5px solid transparent; + border-left: 5px solid transparent; + content: " "; + font-size: 0; + line-height: 0; +} + +/* Show tooltip content on hover */ +[data-tooltip]:hover:before, +[data-tooltip]:hover:after { + visibility: visible; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + z-index: 9999999; +} \ No newline at end of file diff --git a/app/src/main/assets/ureport/css/w3.css b/app/src/main/assets/ureport/css/w3.css new file mode 100644 index 0000000..26837ef --- /dev/null +++ b/app/src/main/assets/ureport/css/w3.css @@ -0,0 +1,232 @@ +/* W3.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent}a:active,a:hover{outline-width:0} +abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit} +.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} +.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} +.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} +.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} +.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} +.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} +.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} +.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} +.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} +.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} +.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} +.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} +.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} +.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.w3-dropdown-hover:hover .w3-dropdown-content{display:block} +.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} +.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} +.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} +.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} +.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} +.w3-main,#main{transition:margin-left .4s} +.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} +.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} +.w3-bar .w3-button{white-space:normal} +.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} +.w3-responsive{display:block;overflow-x:auto} +.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, +.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} +.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} +.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} +.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} +.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} +@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} +.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} +.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} +@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} +.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} +.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} +.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px} +.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px} +.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} +.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} +.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} +@media (max-width:1205px){.w3-auto{max-width:95%}} +@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} +.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} +.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} +.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} +@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} +@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} +@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}} +.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} +.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} +.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} +.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} +.w3-display-position{position:absolute} +.w3-circle{border-radius:50%} +.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} +.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} +.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} +.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} +.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} +.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} +.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} +.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} +.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} +.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} +.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} +.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} +.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} +.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} +.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} +.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} +.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} +.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} +.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} +.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} +.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} +.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} +.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} +.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} +.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} +.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} +.w3-left{float:left!important}.w3-right{float:right!important} +.w3-button:hover{color:#000!important;background-color:#ccc!important} +.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} +.w3-hover-none:hover{box-shadow:none!important} +/* Colors */ +.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} +.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} +.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} +.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} +.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} +.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} +.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important} +.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} +.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} +.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} +.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} +.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} +.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} +.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} +.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} +.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} +.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} +.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} +.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} +.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important} +.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} +.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} +.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} +.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} +.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} +.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} +.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} +.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} +.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} +.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} +.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} +.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} +.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} +.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} +.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} +.w3-text-black,.w3-hover-text-black:hover{color:#000!important} +.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} +.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} +.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} +.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} +.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} +.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} +.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} +.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} +.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} +.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important} +.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} +.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} +.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} +.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} +.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} +.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} +.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} +.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} +.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} +.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} +.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} +.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} +.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} +.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} +.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} +.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} +.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important} +.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important} +.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important} +.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} +.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} \ No newline at end of file diff --git a/app/src/main/assets/ureport/index-js.html b/app/src/main/assets/ureport/index-js.html new file mode 100644 index 0000000..6299774 --- /dev/null +++ b/app/src/main/assets/ureport/index-js.html @@ -0,0 +1,954 @@ + + + + + + + + + + + + + +
+ + +
+ +
+ +

{{q.title}}

+ +
+ + + + + + + + + +
+ +
+ + +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + +

+ +
+ + + + + + {{hub.label}} + + +
+ +

+ + {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+
+
+ + + + + + {{gender.label}} + + +
+ +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+ +
+
+ +
+ +
+
+ +

+

+ +
+ + + + \ No newline at end of file diff --git a/app/src/main/assets/ureport/index.html b/app/src/main/assets/ureport/index.html new file mode 100644 index 0000000..7d82897 --- /dev/null +++ b/app/src/main/assets/ureport/index.html @@ -0,0 +1,334 @@ + + + + + + + + + + +
+ + +
+ + + +
+ + +
+ +
+ +

{{q.title}}

+ +
+ + Statistics + + + Gender + + + Hub + +
+ +
+ + + +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + +

+ +
+ + + +
+ +
+
+ + + + + + {{hub.label}} + + +
+ +

+ + {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+
+
+ + + + + + {{gender.label}} + + +
+ +

+ {{a.label}} +
+ + + + + + + {{Math.floor(a.percent)}}% + + +

+ +
+
+ +
+ +
+
+ +

+

+ +
+ + + + \ No newline at end of file diff --git a/app/src/main/assets/ureport/js/axios.min.js b/app/src/main/assets/ureport/js/axios.min.js new file mode 100644 index 0000000..b87c0e3 --- /dev/null +++ b/app/src/main/assets/ureport/js/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.19.2 | (c) 2020 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(4),a=n(22),u=n(10),c=r(u);c.Axios=s,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===j.call(e)}function o(e){return"undefined"==typeof e}function i(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function s(e){return"[object ArrayBuffer]"===j.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){return"[object Date]"===j.call(e)}function l(e){return"[object File]"===j.call(e)}function h(e){return"[object Blob]"===j.call(e)}function m(e){return"[object Function]"===j.call(e)}function y(e){return p(e)&&m(e.pipe)}function g(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function v(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function w(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){u.headers[e]={}}),i.forEach(["post","put","patch"],function(e){u.headers[e]=i.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),i=n(5),s=n(16),a=n(19),u=n(20),c=n(14);e.exports=function(e){return new Promise(function(t,f){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password||"";d.Authorization="Basic "+btoa(h+":"+m)}var y=s(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in l?a(l.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:r,status:l.status,statusText:l.statusText,headers:n,config:e,request:l};o(t,f,i),l=null}},l.onabort=function(){l&&(f(c("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){f(c("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),f(c(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=n(21),v=(e.withCredentials||u(y))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;v&&(d[e.xsrfHeaderName]=v)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),f(e),l=null)}),void 0===p&&(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;!o||o(n.status)?e(n):t(r("Request failed with status code "+n.status,n.config,null,n.request,n))}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(17),o=n(18);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?s[t]=(s[t]?s[t]:[]).concat([n]):s[t]=s[t]?s[t]+", "+n:n}}),s):s}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),s===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){t=t||{};var n={},o=["url","method","params","data"],i=["headers","auth","proxy"],s=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];r.forEach(o,function(e){"undefined"!=typeof t[e]&&(n[e]=t[e])}),r.forEach(i,function(o){r.isObject(t[o])?n[o]=r.deepMerge(e[o],t[o]):"undefined"!=typeof t[o]?n[o]=t[o]:r.isObject(e[o])?n[o]=r.deepMerge(e[o]):"undefined"!=typeof e[o]&&(n[o]=e[o])}),r.forEach(s,function(r){"undefined"!=typeof t[r]?n[r]=t[r]:"undefined"!=typeof e[r]&&(n[r]=e[r])});var a=o.concat(i).concat(s),u=Object.keys(t).filter(function(e){return a.indexOf(e)===-1});return r.forEach(u,function(r){"undefined"!=typeof t[r]?n[r]=t[r]:"undefined"!=typeof e[r]&&(n[r]=e[r])}),n}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/app/src/main/assets/ureport/js/jquery.min.js b/app/src/main/assets/ureport/js/jquery.min.js new file mode 100644 index 0000000..07c00cd --- /dev/null +++ b/app/src/main/assets/ureport/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.11";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:|^#/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn}); \ No newline at end of file diff --git a/app/src/main/assets/ureport/js/vue.word.cloud.js b/app/src/main/assets/ureport/js/vue.word.cloud.js new file mode 100644 index 0000000..7eb2329 --- /dev/null +++ b/app/src/main/assets/ureport/js/vue.word.cloud.js @@ -0,0 +1 @@ +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):t.VueWordCloud=n()}(this,function(){"use strict";function c(t){return"function"==typeof t}function E(){}var h=function(t){this.previousValue=t,this.interrupted=!1,this.interruptHandlers=new Set};h.prototype.throwIfInterrupted=function(){if(this.interrupted)throw new Error},h.prototype.interrupt=function(){this.interrupted||(this.interrupted=!0,this.interruptHandlers.forEach(function(t){try{t()}catch(t){}}))},h.prototype.onInterrupt=function(t){if(this.interrupted&&!this.interruptHandlers.has(t))try{t()}catch(t){}this.interruptHandlers.add(t)};var t="asyncComputed_",l=t+"promise_",d=t+"trigger_";function n(t){return function(){return t}}function i(){return[]}var r={words:{type:Array,default:i},text:{type:[String,Function],default:""},weight:{type:[Number,Function],default:1},rotation:{type:[Number,Function],default:0},rotationUnit:{type:[String,Function],default:"turn"},fontFamily:{type:[String,Function],default:"serif"},fontWeight:{type:[String,Function],default:"normal"},fontVariant:{type:[String,Function],default:"normal"},fontStyle:{type:[String,Function],default:"normal"},color:{type:[String,Function],default:"Black"},spacing:{type:Number,default:0},fontSizeRatio:{type:Number,default:0},enterAnimation:{type:[Object,String],default:n({opacity:0})},leaveAnimation:{type:[Object,String],default:n({opacity:0})},animationDuration:{type:Number,default:1e3},animationOverlap:{type:Number,default:1},animationEasing:{type:String,default:"ease"},createCanvas:{type:Function,default:function(){return document.createElement("canvas")}},loadFont:{type:Function,default:function(t,n,i,r){return document.fonts.load([n,i,"1px",t].join(" "),r)}},createWorker:{type:Function,default:function(t){return new Worker(URL.createObjectURL(new Blob([t])))}}};var s=n(null);function C(t){return t&&"object"==typeof t}function L(t){return"string"==typeof t}var e={animationOptions:function(){var t,r,e,n=this.enterAnimation,i=this.leaveAnimation,o=this.animationDuration;if(C(n)&&C(i)){var u=(t=Object.assign({},n,i),r=s,e={},Object.entries(t).forEach(function(t){var n=t[0],i=t[1];e[n]=r(i,n)}),e),a=function(t){Object.assign(t.style,n)},f=function(t,n){setTimeout(function(){Object.assign(t.style,u),setTimeout(n,o)},1)};return{props:{css:!1},on:{beforeAppear:a,appear:f,beforeEnter:a,enter:f,leave:function(t,n){Object.assign(t.style,i),setTimeout(n,o)}}}}return L(n)&&L(i)?{props:{duration:o,appear:!0,appearActiveClass:n,enterActiveClass:n,leaveActiveClass:i}}:{}},normalizedAnimationOverlap:function(){var t=this.animationOverlap;return(t=Math.abs(t))<1&&(t=1/t),t},separateAnimationDelay:function(){var t=this.animationDuration,n=this.cloudWords,i=this.separateAnimationDuration;return 1. + */ + +package io.rapidpro.surveyor; + +import android.util.Log; + +/** + * Convenience wrapper around the regular Android log to ensure that we always log with a tag value + */ +public class Logger { + + private static final String TAG = "Surveyor"; + + public static void e(String message, Throwable t) { + Log.e(TAG, message, t); + } + + public static void w(String message) { + Log.w(TAG, message); + } + + public static void d(String message) { + Log.d(TAG, message); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/SplashActivity.java b/app/src/main/java/io/rapidpro/surveyor/SplashActivity.java new file mode 100644 index 0000000..3065c6b --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/SplashActivity.java @@ -0,0 +1,1072 @@ +package io.rapidpro.surveyor; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.res.AssetManager; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.transition.Fade; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.widget.TextView; + +import com.github.florent37.viewanimator.ViewAnimator; +import com.google.firebase.analytics.FirebaseAnalytics; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Type; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import io.rapidpro.surveyor.activity.BaseActivity; +import io.rapidpro.surveyor.activity.LoginActivity; +import io.rapidpro.surveyor.activity.OrgChooseActivity; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.extend.api.ApkApi; +import io.rapidpro.surveyor.extend.api.StoriesApi; +import io.rapidpro.surveyor.extend.api.SurveyorApi; +import io.rapidpro.surveyor.extend.api.UreportApi; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.StoriesDao; +import io.rapidpro.surveyor.extend.entity.dao.SurveyorDao; +import io.rapidpro.surveyor.extend.entity.dao.UReportDao; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.apk_version; +import io.rapidpro.surveyor.extend.entity.model.story_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_data; +import io.rapidpro.surveyor.extend.entity.model.surveyor_api; +import io.rapidpro.surveyor.extend.entity.model.ureport_api; +import me.myatminsoe.mdetect.MDetect; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class SplashActivity extends BaseActivity { + + + private static AppDatabase database; + private static Context context; + + boolean is_story_loading = false; + boolean is_story_loading_2 = false; + boolean is_ureport_loading = false; + boolean is_ureport_loading_2 = false; + boolean is_content_loading = false; + + boolean halt_goto_next = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_splash); + + database = databaseConnection.getDatabase(this); + context = this; + + MDetect.INSTANCE.init(getApplicationContext()); + + // Animate Objects + animateObjects(); + + // Check Update + checkAPK_Update(); + + // Copy Data + // new ProcessData().execute(); + + // Add Firebase Analytics + StaticMethods.firebase = FirebaseAnalytics.getInstance(this); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("activity", "Splash"); + StaticMethods.logFirebase("app_event", logBundle); + } + + + /** + * Animates the component when launching + */ + public void animateObjects() { + + ViewAnimator + .animate(findViewById(R.id.splash_top)) + .translationY(-500, 0) + .alpha(0, 1) + .decelerate() + .duration(500) + .start(); + + ViewAnimator + .animate(findViewById(R.id.splash_bottom_left)) + .translationX(-500, 0) + .alpha(0, 1) + .decelerate() + .duration(750) + .start(); + + ViewAnimator + .animate(findViewById(R.id.splash_bottom_right)) + .translationX(500, 0) + .alpha(0, 1) + .decelerate() + .duration(750) + .start(); + + ViewAnimator + .animate(findViewById(R.id.splash_logo)) + .alpha(0, 1) + .decelerate() + .duration(1000) + .start(); + + ViewAnimator + .animate(findViewById(R.id.appName)) + .alpha(0, 1) + .decelerate() + .duration(1250) + .start(); + + ViewAnimator + .animate(findViewById(R.id.spin_kit)) + .alpha(0, 1) + .decelerate() + .duration(1500) + .start(); + } + + void showUpdate_Dialog() { + playNotification(getSurveyor(), context, R.raw.button_click_yes); + final Dialog dialog4 = new Dialog(context); + dialog4.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog4.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog4.setContentView(R.layout.v1_dialog_ui); + dialog4.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog4.findViewById(R.id.textMainText)).setText(R.string.v1_new_version); + ((TextView) dialog4.findViewById(R.id.button_yes_text)).setText("Ok"); + ((TextView) dialog4.findViewById(R.id.button_no_text)).setText("Cancel"); + + dialog4.findViewById(R.id.button_yes).setOnClickListener(view -> { + playNotification(getSurveyor(), context, R.raw.button_click_yes, view); + dialog4.dismiss(); + + try { + String file_url = getSurveyor().getPreferences().getString("apk_url", ""); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(file_url))); + finish(); + } catch (Exception e) { + // + } + + }); + + dialog4.findViewById(R.id.button_no).setOnClickListener(view -> { + playNotification(getSurveyor(), context, R.raw.button_click_no, view); + dialog4.dismiss(); + finish(); + }); + + dialog4.setCanceledOnTouchOutside(false); + dialog4.show(); + } + + void checkAPK_Update() { + String baseURL; + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = StoriesApi.BASE_URL_GV; + }else{ + baseURL = StoriesApi.BASE_URL_RV; + } + + // Check U-Report Offline Update + OkHttpClient okHttpClient0 = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Retrofit retrofit0 = new Retrofit.Builder().baseUrl(baseURL).client(okHttpClient0).addConverterFactory(GsonConverterFactory.create()).build(); + + ApkApi apkApi = retrofit0.create(ApkApi.class); + Call apk_versionCall = apkApi.getVersion(); + apk_versionCall.enqueue(new Callback() { + + @Override + public void onResponse(Call call, Response response) { + + apk_version apkVersion; + + if(response.body() != null){ + apkVersion = response.body(); + }else{ + checkUpdaterLogic(); + return; + } + + getSurveyor().setPreference("apk_version_code", apkVersion.getVersion_code()); + getSurveyor().setPreference("apk_version_name", apkVersion.getVersion_name()); + getSurveyor().setPreference("apk_is_mandatory", apkVersion.getIs_mandatory()); + getSurveyor().setPreference("apk_url", apkVersion.getFile_url()); + getSurveyor().setPreference("apk_status", apkVersion.getStatus()); + + checkUpdaterLogic(); + + } + + @Override + public void onFailure(Call call, Throwable t) { + checkUpdaterLogic(); + } + + }); + } + + void checkUpdaterLogic(){ + // Failed to Check : Check if mandatory update is pending + int currentVersion = BuildConfig.VERSION_CODE; + int availableVersion = getSurveyor().getPreferences().getInt("apk_version_code", 0); + int isMandatory = getSurveyor().getPreferences().getInt("apk_is_mandatory", 0); + int apkStatus = getSurveyor().getPreferences().getInt("apk_status", 0); + + if(availableVersion > currentVersion && apkStatus == 1){ + if(isMandatory == 0){ + // No Mandatory Update Detected: Continue Update + new ProcessData().execute(); + }else{ + // Mandatory Update Required: Show Dialog and Prevent Launch + showUpdate_Dialog(); + // Halt Background Process + halt_goto_next = true; + } + }else{ + // Update Not Available or Not Required + new ProcessData().execute(); + } + } + + /** + * Background Service which runs to download / sync + * Stories / uReport / Offline Surveyor results from it's + * server. + * + * Also this service downloads the images / videos that + * are attached to the story. + */ + private class ProcessData extends AsyncTask { + + Retrofit retrofit; + Gson gson; + + StoriesApi storiesApi; + StoriesDao storiesDao; + Call story_apiCall; + List localStories; + + UReportDao uReportDao; + UreportApi uApi; + Call call_ureport; + + SurveyorDao surveyorDao; + SurveyorApi surveyorApi; + Call call_surveyor; + + + @Override + protected String doInBackground(String... params) { + + String baseURL; + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = StoriesApi.BASE_URL_GV; + }else{ + baseURL = StoriesApi.BASE_URL_RV; + } + + // Connect Database + gson = new Gson(); + + // Update Last Updated + String is_installed = getSurveyor().getPreferences().getString("is_installed_20", "false"); + + is_story_loading = true; + if(!is_installed.equals("true")){ + //copyData(); + + // Copy Story Data + storiesDao = database.getStories(); + Type storyLocalType = new TypeToken() { }.getType(); + String storyStringData = getJsonFromAssets(getApplicationContext(), "data/story.json"); + story_api storyAPI = gson.fromJson(storyStringData, storyLocalType); + String story_new_last_update = storyAPI.getLast_updated(); + String story_last_update = getSurveyor().getPreferences().getString("story_date", ""); + + if(!story_new_last_update.equals(story_last_update)){ + List storiesLocals = storyAPI.getData(); + for(StoriesLocal s: storiesLocals) { + if(storiesDao.doesStoryExists(s.getId()) > 0){ + // Old Story: update + s.primaryKey = storiesDao.getStory_pKey(s.getId()); + storiesDao.update(s); + }else{ + // New Story: insert + storiesDao.insert(s); + } + + // Get Image + String file_image = s.getContent_image(); + String file_path = "story_image_" + getMD5(file_image); + String asset_path = "data/story_image/" + file_path; + String file_path_full = getApplicationContext().getFilesDir().getPath() + "/story_image_" + getMD5(file_image); + + if(!file_image.equals("") && isAssetExists(asset_path)){ + try { + copyFileFromAssets(getApplicationContext(), asset_path, file_path_full); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // Get Video + String file_video = s.getStory_video(); + String video_path = "story_video_" + getMD5(file_video); + String v_asset_path = "data/story_video/" + video_path; + String video_path_full = getApplicationContext().getFilesDir().getPath() + "/story_video_" + getMD5(file_video); + + if(!file_video.equals("") && isAssetExists(v_asset_path)){ + try { + copyFileFromAssets(getApplicationContext(), v_asset_path, video_path_full); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + // Copy U-Report Data + UReportDao uReportDao = database.getUReports(); + Type ureportLocalType = new TypeToken() { }.getType(); + String ureportStringData = getJsonFromAssets(context, "data/ureport.json"); + ureport_api ureportAPI = gson.fromJson(ureportStringData, ureportLocalType); + String ureport_new_last_update = ureportAPI.getLast_updated(); + String ureport_last_update = getSurveyor().getPreferences().getString("ureport_date", ""); + + if(!ureport_new_last_update.equals(ureport_last_update)){ + List ureports = ureportAPI.getData(); + for(UReportLocal x: ureports){ + if(uReportDao.doesUReportExists(x.getUreport_id()) > 0){ + // Old UReport: update + x.primaryKey = uReportDao.getUreport_pKey(x.getUreport_id()); + uReportDao.update(x); + }else{ + // New UReport: insert + uReportDao.insert(x); + } + } + } + + // Copy Offline U-Report Data + surveyorDao = database.getSurveyor(); + Type surveyorLocalType = new TypeToken() { }.getType(); + String surveyorStringData = getJsonFromAssets(context, "data/surveyor.json"); + surveyor_api surveyorAPI = gson.fromJson(surveyorStringData, surveyorLocalType); + String surveyor_new_last_update = surveyorAPI.getLast_updated(); + String surveyor_last_update = getSurveyor().getPreferences().getString("surveyor_date", ""); + + + if(!surveyor_new_last_update.equals(surveyor_last_update)){ + List ureports = surveyorAPI.getData(); + for(SurveyorLocal x: ureports){ + if(surveyorDao.doesSurveyExists(x.getFlow_id()) > 0){ + // Old UReport: update + x.primaryKey = surveyorDao.getSurvey_pKey(x.getFlow_id()); + surveyorDao.update(x); + }else{ + // New UReport: insert + surveyorDao.insert(x); + } + } + } + + if(StaticMethods.getLocalUpdateDate(getSurveyor(), "ureport_offline_last_updated_local").equals("")){ + StaticMethods.setLocalUpdateDate(getSurveyor(), "ureport_offline_last_updated_local"); + } + + getSurveyor().setPreference("is_installed_20", "true"); + } + is_story_loading = false; + + // Check Update + // Check Story Update + // Download Stories + String last_updated = getSurveyor().getPreferences().getString("story_date", ""); + storiesDao = database.getStories(); + + + + OkHttpClient okHttpClient1 = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Retrofit retrofit1 = new Retrofit.Builder().baseUrl(baseURL).client(okHttpClient1).addConverterFactory(GsonConverterFactory.create()).build(); + + storiesApi = retrofit1.create(StoriesApi.class); + story_apiCall = storiesApi.getStories(last_updated, 100); + is_story_loading = true; + story_apiCall.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + Log.d("UR_Story_Data", response.body().getLast_updated()); + + is_story_loading = false; + + if(response.body() != null){ + + if(response.body().getData().size() == 0){ + return; + } + + String new_last_updated = response.body().getLast_updated(); + List storiesLocals = response.body().getData(); + + new Thread(() -> { + for (StoriesLocal s : storiesLocals) { + if (storiesDao.doesStoryExists(s.getId()) > 0) { + // Old Story: update + s.primaryKey = storiesDao.getStory_pKey(s.getId()); + storiesDao.update(s); + } else { + // New Story: insert + storiesDao.insert(s); + } + } + }).start(); + + // Update Last Updated + getSurveyor().setPreference("story_date", new_last_updated); + + new Thread(() -> { + // Download Images + localStories = storiesDao.getStoriesList(); + + for (StoriesLocal s : localStories) { + // Download Story Image + if (s.getContent_image() == null) { + continue; + } + if (s.getContent_image().equals("")) { + continue; + } + Context context = getApplicationContext(); + String imageURL = s.getContent_image(); + + if (imageURL.equals("")) { + continue; + } + + final String file_path = "story_image_" + getMD5(imageURL); + final String file_path_full = context.getFilesDir() + "/story_image_" + getMD5(imageURL); + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 100 KB Data Exists: skip + continue; + } + } + + is_content_loading = true; + getURL(imageURL, new okhttp3.Callback() { + @Override + public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { + InputStream inputStream = response.body().byteStream(); + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + inputStream.close(); + is_content_loading = false; + } + + @Override + public void onFailure(okhttp3.Call call, IOException e) { + is_content_loading = false; + } + }); + + } + + for (StoriesLocal s : localStories) { + // Download Story Video + if (s.getStory_video() == null) { + continue; + } + if (s.getStory_video().equals("")) { + continue; + } + + Context context = getApplicationContext(); + String videoURL = s.getStory_video(); + + if (videoURL.equals("")) { + continue; + } + + final String file_path = "story_video_" + getMD5(videoURL); + String file_path_full = context.getFilesDir() + "/story_video_" + getMD5(videoURL); + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 50 KB Data Exists: skip + continue; + } + } + + is_content_loading = true; + getURL(videoURL, new okhttp3.Callback() { + + @Override + public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { + InputStream inputStream = response.body().byteStream(); + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + inputStream.close(); + is_content_loading = false; + } + + @Override + public void onFailure(okhttp3.Call call, IOException e) { + is_content_loading = false; + } + + }); + + } + }).start(); + + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("UR_Story_Data", "Error Response"); + is_story_loading = false; + } + }); + + // Check For Deleted Story + OkHttpClient okHttpClient2 = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Retrofit retrofit2 = new Retrofit.Builder().baseUrl(baseURL).client(okHttpClient2).addConverterFactory(GsonConverterFactory.create()).build(); + + final String story_delete_last_update = getSurveyor().getPreferences().getString("story_delete_last_update", ""); + StoriesApi storiesDeleteApi = retrofit2.create(StoriesApi.class); + Call storyDelete_apiCall = storiesDeleteApi.getDeletedStories(story_delete_last_update); + is_story_loading_2 = true; + storyDelete_apiCall.enqueue(new Callback() { + + @Override + public void onResponse(Call call, Response response) { + + Log.d("UR_Story_Delete", response.body().getLast_updated()); + + if(response.body().getData() == null){ + is_story_loading_2 = false; + return; + } + + List deleted_stories = response.body().getData(); + + for(story_delete_data deleted: deleted_stories) { + + new Thread(() -> { + if(storiesDao.doesStoryExists(deleted.getStory_id()) > 0){ + // Story Deleted on Server + storiesDao.deleteFromStoryById(deleted.getStory_id()); + } + }).start(); + } + + // Update Story Delete Last_Update + getSurveyor().setPreference("story_delete_last_update", response.body().getLast_updated()); + is_story_loading_2 = false; + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("UR_Story_Delete", "Error Response"); + is_story_loading_2 = false; + } + + }); + + // Check Missing Image / Video + localStories = storiesDao.getStoriesList(); + + for (StoriesLocal s : localStories) { + // Download Story Image + if (s.getContent_image() == null) { + continue; + } + if (s.getContent_image().equals("")) { + continue; + } + Context context = getApplicationContext(); + String imageURL = s.getContent_image(); + + if(imageURL.equals("")){ + continue; + } + + final String file_path = "story_image_" + getMD5(imageURL); + final String file_path_full = context.getFilesDir() + "/story_image_" + getMD5(imageURL); + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 50 KB Data Exists: skip + continue; + } + } + + is_content_loading = true; + getURL(imageURL, new okhttp3.Callback() { + @Override + public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { + InputStream inputStream = response.body().byteStream(); + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + inputStream.close(); + is_content_loading = false; + } + @Override + public void onFailure(okhttp3.Call call, IOException e) { + is_content_loading = false; + } + }); + } + + // Download Video + for (StoriesLocal s : localStories) { + // Download Story Video + if (s.getStory_video() == null) { + continue; + } + if (s.getStory_video().equals("")) { + continue; + } + + Context context = getApplicationContext(); + String videoURL = s.getStory_video(); + + if(videoURL.equals("")){ + continue; + } + + final String file_path = "story_video_" + getMD5(videoURL); + final String file_path_full = context.getFilesDir() + "/story_video_" + getMD5(videoURL); + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 50 KB Data Exists: skip + continue; + } + } + + is_content_loading = true; + getURL(videoURL, new okhttp3.Callback() { + @Override + public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { + + InputStream inputStream = response.body().byteStream(); + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + inputStream.close(); + is_content_loading = false; + } + @Override + public void onFailure(okhttp3.Call call, IOException e) { + is_content_loading = false; + } + }); + } + + + // Check U-Report Update + OkHttpClient okHttpClient3 = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Retrofit retrofit3 = new Retrofit.Builder().baseUrl(baseURL).client(okHttpClient3).addConverterFactory(GsonConverterFactory.create()).build(); + + String ureport_last_updated = getSurveyor().getPreferences().getString("ureport_date", ""); + uApi = retrofit3.create(UreportApi.class); + call_ureport = uApi.getUreport(100, 0, ureport_last_updated); + is_ureport_loading = true; + call_ureport.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + Log.d("UR_UReport_Data", response.body().getLast_updated()); + + ureport_api ureportApi = response.body(); + + if(ureportApi == null){ + is_ureport_loading = false; + return; + } + + // Save Preference + String new_last_update = ureportApi.getLast_updated(); + getSurveyor().setPreference("ureport_date", new_last_update); + + if(ureportApi.getData().size() == 0){ + is_ureport_loading = false; + return; + } + + List ureports = ureportApi.getData(); + uReportDao = database.getUReports(); + + for(UReportLocal x: ureports){ + + new Thread(() -> { + if (uReportDao.doesUReportExists(x.getUreport_id()) > 0) { + // Old UReport: update + x.primaryKey = uReportDao.getUreport_pKey(x.getUreport_id()); + uReportDao.update(x); + } else { + // New UReport: insert + uReportDao.insert(x); + } + }).start(); + + } + + is_ureport_loading = false; + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("UR_UReport_Data", "Error Response"); + is_ureport_loading = false; + } + }); + + + // Check U-Report Offline Update + OkHttpClient okHttpClient4 = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Retrofit retrofit4 = new Retrofit.Builder().baseUrl(baseURL).client(okHttpClient4).addConverterFactory(GsonConverterFactory.create()).build(); + + surveyorDao = database.getSurveyor(); + String surveyor_last_updated = getSurveyor().getPreferences().getString("surveyor_date", ""); + surveyorApi = retrofit4.create(SurveyorApi.class); + call_surveyor = surveyorApi.getSurveyor(100, 0, surveyor_last_updated); + is_ureport_loading_2 = true; + Log.d("UR_Surveyor_Data", "Requested"); + call_surveyor.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Log.d("UR_Surveyor_Data", response.body().getLast_updated()); + + surveyor_api surveyorApi = response.body(); + + if(surveyorApi == null){ + is_ureport_loading_2 = false; + return; + } + + // Save Preference + String new_last_update = surveyorApi.getLast_updated(); + getSurveyor().setPreference("surveyor_date", new_last_update); + StaticMethods.setLocalUpdateDate(getSurveyor(), "ureport_offline_last_updated_local"); + + if(surveyorApi.getData().size() == 0){ + is_ureport_loading_2 = false; + return; + } + + List surveyorLocals = surveyorApi.getData(); + + for(SurveyorLocal x: surveyorLocals){ + + new Thread(() -> { + if (surveyorDao.doesSurveyExists(x.getFlow_id()) > 0) { + // Old UReport: update + x.primaryKey = surveyorDao.getSurvey_pKey(x.getFlow_id()); + surveyorDao.update(x); + } else { + // New UReport: insert + surveyorDao.insert(x); + } + }).start(); + + } + + is_ureport_loading_2 = false; + + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("UR_Surveyor_Data", "Error Response"); + is_ureport_loading_2 = false; + } + }); + + return "splash"; + } + + @Override + protected void onPostExecute(String result) { + if (result.matches("splash")){ + final Handler handler = new Handler(); + handler.postDelayed(() -> { + checkerLoop(); + }, 1000); + } + } + + @Override + protected void onPreExecute() {} + + @Override + protected void onProgressUpdate(Void... values) {} + + /** + * Get JSON data from Assets + * + * @param context + * @param fileName + * @return JSON String + */ + String getJsonFromAssets(Context context, String fileName) { + String jsonString; + try { + InputStream is = context.getAssets().open(fileName); + + int size = is.available(); + byte[] buffer = new byte[size]; + is.read(buffer); + is.close(); + + jsonString = new String(buffer, "UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + + return jsonString; + } + + /** + * Checks if asset exists + * + * @param pathInAssetsDir + * @return true / false whether file exists or not + */ + boolean isAssetExists(String pathInAssetsDir){ + AssetManager assetManager = context.getResources().getAssets(); + InputStream inputStream = null; + try { + inputStream = assetManager.open(pathInAssetsDir); + if(null != inputStream ) { + return true; + } + } catch(Exception e) { + e.printStackTrace(); + } finally { + try { + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return false; + } + + + /** + * Copies file form Asset to Private Storage + * + * @param context + * @param file + * @param dest + * @throws Exception + */ + void copyFileFromAssets(Context context, String file, String dest) throws Exception { + InputStream in = null; + OutputStream fout = null; + int count = 0; + + try + { + in = context.getAssets().open(file); + fout = new FileOutputStream(new File(dest)); + + byte data[] = new byte[1024]; + while ((count = in.read(data, 0, 1024)) != -1) + { + fout.write(data, 0, count); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + finally + { + if (in != null) + { + try { + in.close(); + } catch (IOException e) + { + } + } + if (fout != null) + { + try { + fout.close(); + } catch (IOException e) { + } + } + } + } + + OkHttpClient client = new OkHttpClient(); + + /** + * Simplified GET request call for OKHTTP + * @param url + * @param callback + * @return + */ + okhttp3.Call getURL(String url, okhttp3.Callback callback) { + Log.d("UR_getURL", url); + Request request = new Request.Builder().url(url).build(); + okhttp3.Call call = client.newCall(request); + call.enqueue(callback); + return call; + } + + int nextTick = 0; + + Handler checkerHandler = new Handler(); + Runnable checkerRunnable = new Runnable() { + public void run() { + checkerLoop(); + } + }; + + void checkerLoop() { + + // Reset Timer if Anything is Loading + if(is_story_loading || is_story_loading_2 || is_content_loading || is_ureport_loading || is_ureport_loading_2){ + nextTick = 0; + checkerHandler.postDelayed(checkerRunnable, 1000); + Log.d("UR_Ticker", is_story_loading + " " + is_story_loading_2 + " " + is_content_loading + " " + is_ureport_loading + " " + is_ureport_loading_2); + } else { + if (nextTick < 4) { + nextTick++; + checkerHandler.postDelayed(checkerRunnable, 500); + } else { + checkerHandler.removeCallbacks(checkerRunnable); + gotoNext(); + } + } + } + } + + + + + + /** + * Goto Next Activity + */ + public void gotoNext() { + Intent intent; + + if (!isLoggedIn() && !halt_goto_next) { + intent = new Intent(SplashActivity.this, LoginActivity.class); + }else{ + intent = new Intent(SplashActivity.this, OrgChooseActivity.class); + } + + + Fade fade = new Fade(); + getWindow().setEnterTransition(fade); + getWindow().setExitTransition(fade); + + startActivity(intent); + finish(); + } + + /** + * This activity does not require login. + * It is required and checked by BaseActivity + * from Surveyor Application + * @return false + */ + @Override + public boolean requireLogin() { + return false; + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/SurveyorApplication.java b/app/src/main/java/io/rapidpro/surveyor/SurveyorApplication.java new file mode 100644 index 0000000..68f4f3c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/SurveyorApplication.java @@ -0,0 +1,257 @@ +package io.rapidpro.surveyor; + +import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; + +import androidx.core.content.FileProvider; + +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.util.Set; + +import io.rapidpro.surveyor.data.OrgService; +import io.rapidpro.surveyor.data.SubmissionService; +import io.rapidpro.surveyor.net.TembaService; +import io.rapidpro.surveyor.utils.SurveyUtils; + +/** + * Main application + */ +public class SurveyorApplication extends Application { + + /** + * The singleton instance of this application + */ + private static SurveyorApplication s_this; + + /** + * Service for network operations + */ + private TembaService tembaService = null; + + /** + * Service for local org operations + */ + private OrgService orgService = null; + + /** + * Service for local submission operations + */ + private SubmissionService submissionService = null; + + /** + * Gets the singleton instance of this application + * + * @return the instance + */ + public static SurveyorApplication get() { + return s_this; + } + + @Override + public void onCreate() { + Logger.d("Creating Surveyor application..."); + + super.onCreate(); + + Logger.d("External storage dir=" + Environment.getExternalStorageDirectory() + " state=" + Environment.getExternalStorageState() + " emulated=" + Environment.isExternalStorageEmulated()); + + s_this = this; + + tembaService = new TembaService(getTembaHost()); + + try { + orgService = new OrgService(getOrgsDirectory()); + submissionService = new SubmissionService(getSubmissionsDirectory()); + } catch (IOException e) { + Logger.e("Unable to create directory based services", e); + } + } + + /** + * Gets the name of the preferences file + * + * @return the name of the preferences + */ + public String getPreferencesName() { + return "default"; + } + + /** + * Gets the shared preferences for this application + * + * @return the preferences + */ + public SharedPreferences getPreferences() { + return s_this.getSharedPreferences(getPreferencesName(), Context.MODE_PRIVATE); + } + + /** + * Saves a string shared preference for this application + * + * @param key the preference key + * @param value the preference value + */ + public void setPreference(String key, String value) { + getPreferences().edit().putString(key, value).apply(); + } + + /** + * Saves a Integer shared preference for this application + * + * @param key the preference key + * @param value the preference value + */ + public void setPreference(String key, int value) { + getPreferences().edit().putInt(key, value).apply(); + } + + /** + * Saves a string-set shared preference for this application + * + * @param key the preference key + * @param values the preference value + */ + public void setPreference(String key, Set values) { + getPreferences().edit().putStringSet(key, values).apply(); + } + + /** + * Clears a shared preference for this application + * + * @param key the preference key + */ + public void clearPreference(String key) { + getPreferences().edit().remove(key).apply(); + } + + /** + * Gets the base URL of the Temba instance we're connected to + * + * @return the base URL + */ + public String getTembaHost() { + String host = getPreferences().getString(SurveyorPreferences.HOST, getString(R.string.pref_default_host)); + + // strip any trailing slash + if (host.endsWith("/")) { + host = host.substring(0, host.length() - 1); + } + + return host; + } + + /** + * Called when our host setting has changed + */ + public void onTembaHostChanged() { + String newHost = getTembaHost(); + + Logger.d("Host changed to " + newHost); + + clearPreference(SurveyorPreferences.AUTH_USERNAME); + clearPreference(SurveyorPreferences.AUTH_ORGS); + +// try { +// clearSubmissions(); +// } catch (IOException e) { +// Logger.e("Unable to clear submissions", e); +// } + + tembaService = new TembaService(newHost); + } + + /** + * Returns the Temba API service + * + * @return the service + */ + public TembaService getTembaService() { + return tembaService; + } + + /** + * Returns the local orgs service + * + * @return the service + */ + public OrgService getOrgService() { + return orgService; + } + + /** + * Returns the local submissions service + * + * @return the service + */ + public SubmissionService getSubmissionService() { + return submissionService; + } + + /** + * Gets the directory for org configurations + * + * @return the directory + */ + public File getOrgsDirectory() throws IOException { + return SurveyUtils.mkdir(getFilesDir(), "orgs"); + } + + /** + * Gets the directory for user collected data + * + * @return the directory + */ + public File getUserDirectory() { + return getExternalFilesDir(null); + } + + /** + * Gets the submissions storage directory + * + * @return the directory + */ + protected File getSubmissionsDirectory() throws IOException { + return SurveyUtils.mkdir(getUserDirectory(), "submissions"); + } + + /** + * Clears the submissions storage directory + */ + public void clearSubmissions() throws IOException { + FileUtils.deleteDirectory(getSubmissionsDirectory()); + } + + /** + * Gets the URI for the given file using our application's file provider + * + * @param file the file + * @return the URI + */ + public Uri getUriForFile(File file) { + return FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", file); + } + + /** + * Generate dump of the Android log + * + * @return the URI of the dump file + */ + public Uri generateLogDump() throws IOException { + // log our build and device details + Logger.d("Version: " + BuildConfig.VERSION_NAME + "; " + BuildConfig.VERSION_CODE); + Logger.d("OS: " + System.getProperty("os.version") + " (API " + Build.VERSION.SDK_INT + ")"); + Logger.d("Model: " + android.os.Build.MODEL + " (" + android.os.Build.DEVICE + ")"); + + // dump log to file and return URI + File outputFile = new File(getUserDirectory(), "bug-report.txt"); + Runtime.getRuntime().exec("logcat -d -f " + outputFile.getAbsolutePath() + " \"Surveyor:* *:E\""); + return getUriForFile(outputFile); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/SurveyorException.java b/app/src/main/java/io/rapidpro/surveyor/SurveyorException.java new file mode 100644 index 0000000..d7c8c0c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/SurveyorException.java @@ -0,0 +1,11 @@ +package io.rapidpro.surveyor; + +public class SurveyorException extends Exception { + public SurveyorException(String message) { + super(message); + } + + public SurveyorException(String message, Exception e) { + super(message, e); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/SurveyorIntent.java b/app/src/main/java/io/rapidpro/surveyor/SurveyorIntent.java new file mode 100644 index 0000000..9e53fb1 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/SurveyorIntent.java @@ -0,0 +1,15 @@ +package io.rapidpro.surveyor; + +public interface SurveyorIntent { + String EXTRA_ORG_UUID = "surveyor.extra.org_uuid"; + String EXTRA_FLOW_UUID = "surveyor.extra.flow_uuid"; + + String EXTRA_SUBMISSION_FILE = "surveyor.extra.submission_file"; + + // where media files are to be stored + String EXTRA_MEDIA_FILE = "surveyor.extra.media_file"; + + String EXTRA_ERROR = "surveyor.extra.error"; + String EXTRA_CAMERA_DIRECTION = "surveyor.extra.camera_direction"; +} + diff --git a/app/src/main/java/io/rapidpro/surveyor/SurveyorPreferences.java b/app/src/main/java/io/rapidpro/surveyor/SurveyorPreferences.java new file mode 100644 index 0000000..d2ad5ba --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/SurveyorPreferences.java @@ -0,0 +1,28 @@ +package io.rapidpro.surveyor; + +public interface SurveyorPreferences { + /** + * Host we are connected to + */ + String HOST = "host"; + + /** + * Username/email we are logged in as. If this is set, we are logged in + */ + String AUTH_USERNAME = "auth_username"; + + /** + * Username/email we were previously logged in as - used to prepopulate login form + */ + String PREV_USERNAME = "prev_username"; + + /** + * UUIDs of the orgs this user has access to + */ + String AUTH_ORGS = "auth_orgs"; + + /** + * Current Language Code + */ + String LANG_CODE = "lang_code"; +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/BaseActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/BaseActivity.java new file mode 100644 index 0000000..74f19d6 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/BaseActivity.java @@ -0,0 +1,362 @@ +package io.rapidpro.surveyor.activity; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.graphics.Typeface; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.app.ShareCompat; +import androidx.core.content.ContextCompat; + +import com.greysonparrelli.permiso.Permiso; +import com.greysonparrelli.permiso.PermisoActivity; +import com.skydoves.powermenu.MenuAnimation; +import com.skydoves.powermenu.OnMenuItemClickListener; +import com.skydoves.powermenu.PowerMenu; +import com.skydoves.powermenu.PowerMenuItem; + +import java.io.IOException; +import java.lang.invoke.ConstantCallSite; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.ui.ViewCache; + +import static io.rapidpro.surveyor.extend.StaticMethods.gotoSurveyor; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * All activities for the SurveyorApplication app extend this base activity which provides convenience methods + * for things like authentication etc. + */ +public abstract class BaseActivity extends PermisoActivity { + + private ViewCache m_viewCache; + + public List menuItems; + public PowerMenu powerMenu; + ConstraintLayout menu_view; + + + public void initHeaderBar(){ + + powerMenu = new PowerMenu.Builder(this) + .addItemList(menuItems) + .setAnimation(MenuAnimation.SHOWUP_TOP_RIGHT) // Animation start point (TOP | LEFT). + .setMenuRadius(10f) // sets the corner radius. + .setMenuShadow(10f) // sets the shadow. + .setTextColor(ContextCompat.getColor(this, R.color.black)) + .setTextGravity(Gravity.LEFT) + .setTextTypeface(Typeface.create("sans-serif-medium", Typeface.BOLD)) + .setSelectedTextColor(Color.WHITE) + .setMenuColor(Color.WHITE) + //.setSelectedMenuColor(ContextCompat.getColor(this, R.color.colorPrimary)) + .setOnMenuItemClickListener(onMenuItemClickListener) + .build(); + + menu_view = findViewById(R.id.menu_view); + menu_view.setOnClickListener(view -> powerMenu.showAsDropDown(view)); + + if(findViewById(R.id.back_button) != null){ + findViewById(R.id.back_button).setOnClickListener(view -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view); + onBackPressed(); + }); + } + } + + + public void changeTitle(String title){ + ((TextView) findViewById(R.id.activityName)).setText(title); + } + + + /** + * @see android.app.Activity#onCreate(Bundle) + */ + @Override + protected void onCreate(Bundle bundle) { + Logger.d("Creating " + getClass().getSimpleName()); + + menuItems = new ArrayList<>(); + + // so that espresso tests always have an unlocked screen + if (BuildConfig.DEBUG) { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + super.onCreate(bundle); + + // make new activity come in from right + overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); + + // if we're on an activity that requires a logged in user, and we aren't, redirect to login activity + if (requireLogin() && !isLoggedIn()) { + logout(); + } + } + + public OnMenuItemClickListener onMenuItemClickListener = new OnMenuItemClickListener() { + @Override + public void onItemClick(int position, PowerMenuItem item) { + + if(item.getTitle().equals(getString(R.string.action_bug_report))){ + // Bug Report + sendBugReport(); + } + + if(item.getTitle().equals(getString(R.string.action_logout))){ + // Bug Report + logout(); + } + + if(item.getTitle().equals(getString(R.string.action_settings))){ + // Bug Report + startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); + } + + powerMenu.dismiss(); + } + }; + + /** + * @see android.app.Activity#onCreateOptionsMenu(Menu) + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + + // show the settings menu in debug mode + if (BuildConfig.DEBUG) { + MenuItem menuItem = menu.findItem(R.id.action_settings); + if (menuItem != null) { + menuItem.setVisible(true); + } + } + + // show logout action if we're logged in + if (isLoggedIn()) { + MenuItem menuItem = menu.findItem(R.id.action_logout); + if (menuItem != null) { + menuItem.setVisible(true); + } + } + + return true; + } + + /** + * User clicked "Settings" menu option + * + * @param item the menu item + */ + public void onActionSettings(MenuItem item) { + startActivity(new Intent(this, SettingsActivity.class)); + } + + /** + * User clicked "Logout" menu option + * + * @param item the menu item + */ + public void onActionLogout(MenuItem item) { + logout(); + } + + /** + * User clicked "Bug Report" menu option + * + * @param item the menu item + */ + public void onActionBugReport(MenuItem item) { + sendBugReport(); + } + + /** + * Gets the instance of the application + * + * @return the application + */ + public SurveyorApplication getSurveyor() { + return (SurveyorApplication) getApplication(); + } + + /** + * Whether this activity requires the user to be logged in + * + * @return true if activity requires login + */ + public boolean requireLogin() { + return true; + } + + /** + * Logs in a user for the given orgs + */ + public void login(String email, Set orgUUIDs) { + Logger.d("Logging in as " + email + " with access to orgs " + TextUtils.join(",", orgUUIDs)); + + // save email which we'll need for submissions later + getSurveyor().setPreference(SurveyorPreferences.AUTH_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.PREV_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.AUTH_ORGS, orgUUIDs); + + // let the user pick an org... + startActivity(new Intent(this, OrgChooseActivity.class)); + + // play sound + + playNotification(getSurveyor(), getApplicationContext(), R.raw.sync_complete); + + // we don't want to go back to the view that sent us here (i.e. login or create account) + finish(); + } + + /** + * Logs the user out and returns them to the login page + */ + protected void logout() { + logout(-1); + } + + /** + * Logs the user out and returns them to the login page showing the given error string + */ + protected void logout(int errorResId) { + Logger.d("Logging out with error " + errorResId); + + StaticMethods.current_UUID = "invalid"; + getSurveyor().clearPreference(SurveyorPreferences.AUTH_USERNAME); + getSurveyor().setPreference(SurveyorPreferences.AUTH_ORGS, Collections.emptySet()); + +// try { +// getSurveyor().clearSubmissions(); +// } catch (IOException e) { +// Logger.e("Unable to clear submissions", e); +// } + + Intent intent = new Intent(this, LoginActivity.class); + + // clear the activity stack + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + + if (errorResId != -1) { + intent.putExtra(SurveyorIntent.EXTRA_ERROR, getString(errorResId)); + } + startActivity(intent); + //overridePendingTransition(0, 0); + finish(); + } + + public void showBugReportDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(getString(R.string.confirm_bug_report)) + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + sendBugReport(); + } + }) + .setNegativeButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + public void sendBugReport() { + try { + Uri outputUri = getSurveyor().generateLogDump(); + + ShareCompat.IntentBuilder.from(this) + .setType("message/rfc822") + .addEmailTo(getString(R.string.support_email)) + .setSubject("Surveyor Bug Report") + .setText("Please include what you were doing prior to sending this report and specific details on the error you encountered.") + .setStream(outputUri) + .setChooserTitle("Send Email") + .startChooser(); + + } catch (IOException e) { + Logger.e("Failed to generate bug report", e); + } + } + + public ViewCache getViewCache() { + if (m_viewCache == null) { + m_viewCache = new ViewCache(this, findViewById(android.R.id.content)); + } + return m_viewCache; + } + + /** + * Gets the currently authenticated username + * + * @return the username/email + */ + protected String getUsername() { + return getPreferences().getString(SurveyorPreferences.AUTH_USERNAME, null); + } + + /** + * Checks whether we are currently authenticated + * + * @return truer if we are authenticated + */ + protected boolean isLoggedIn() { + return !TextUtils.isEmpty(getUsername()); + } + + /** + * Gets the preferences for this application + * + * @return the preferences + */ + public SharedPreferences getPreferences() { + return getSurveyor().getPreferences(); + } + + public AlertDialog showAlert(int title, int body) { + AlertDialog dialog = new AlertDialog.Builder(this) + .setTitle(title) + .setMessage(body) + .setIcon(android.R.drawable.ic_dialog_alert).create(); + + dialog.show(); + return dialog; + } + + protected void showToast(int resId) { + Toast.makeText(this, resId, Toast.LENGTH_SHORT).show(); + } + + public void showRationaleDialog(int body, Permiso.IOnRationaleProvided callback) { + Permiso.getInstance().showRationaleInDialog(getString(R.string.title_permissions), getString(body), null, callback); + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/BaseSubmissionsActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/BaseSubmissionsActivity.java new file mode 100644 index 0000000..89576e1 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/BaseSubmissionsActivity.java @@ -0,0 +1,102 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Dialog; +import android.content.res.Resources; +import android.graphics.drawable.ColorDrawable; +import android.view.View; +import android.view.Window; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.task.SubmitSubmissionsTask; +import io.rapidpro.surveyor.ui.BlockingProgress; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * Base for activities that have submissions ((org and flow views) + */ +public abstract class BaseSubmissionsActivity extends BaseActivity { + + /** + * User has clicked a submit button + * + * @param view the button + */ + public void onActionSubmit(View view) { + + final Dialog dialog7 = new Dialog(this); + dialog7.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog7.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog7.setContentView(R.layout.v1_dialog_ui); + dialog7.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog7.findViewById(R.id.textMainText)).setText(getString(R.string.confirm_send_submissions)); + ((TextView) dialog7.findViewById(R.id.button_yes_text)).setText("Yes"); + ((TextView) dialog7.findViewById(R.id.button_no_text)).setText("No"); + + dialog7.findViewById(R.id.button_yes).setOnClickListener(view1 -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view1); + dialog7.dismiss(); + doSubmit(); + }); + + dialog7.findViewById(R.id.button_no).setOnClickListener(view12 -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view12); + dialog7.dismiss(); + }); + + dialog7.show(); + } + + + + /** + * Does the actual invoking of the submissions task + */ + public void doSubmit() { + final BlockingProgress progressModal = new BlockingProgress(this, R.string.one_moment, R.string.submit_body); + progressModal.show(); + + final List pending = getPendingSubmissions(); + final Submission[] asArray = pending.toArray(new Submission[0]); + final Resources res = getResources(); + + SubmitSubmissionsTask task = new SubmitSubmissionsTask(new SubmitSubmissionsTask.Listener() { + @Override + public void onProgress(int percent) { + progressModal.setProgress(percent); + } + + @Override + public void onComplete(int total) { + refresh(); + + progressModal.dismiss(); + playNotification(getSurveyor(), getApplicationContext(), R.raw.sync_complete); + + CharSequence toast = res.getQuantityString(R.plurals.submissions_sent, total, total); + Toast.makeText(BaseSubmissionsActivity.this, toast, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onFailure(int numFailed) { + progressModal.dismiss(); + + Toast.makeText(BaseSubmissionsActivity.this, getString(R.string.error_submissions_send), Toast.LENGTH_SHORT).show(); + } + }); + + task.execute(asArray); + } + + protected abstract List getPendingSubmissions(); + + protected abstract Org getOrg(); + + protected abstract void refresh(); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/CaptureAudioActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureAudioActivity.java new file mode 100644 index 0000000..c95108a --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureAudioActivity.java @@ -0,0 +1,95 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Resources; +import android.media.MediaRecorder; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.ui.IconTextView; + +/** + * Activity for capturing an audio recording + */ +public class CaptureAudioActivity extends BaseActivity { + + private boolean isRecording = false; + private MediaRecorder mediaRecorder; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_capture_audio); + } + + @Override + public boolean requireLogin() { + return false; + } + + public void recordAudio() { + isRecording = true; + + String output = getIntent().getStringExtra(SurveyorIntent.EXTRA_MEDIA_FILE); + + Logger.d("Recording audio to " + output + "..."); + + try { + mediaRecorder = new MediaRecorder(); + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); + mediaRecorder.setOutputFile(output); + mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); + mediaRecorder.prepare(); + + } catch (Exception e) { + Logger.e("Unable to create media recorder", e); + } + + mediaRecorder.start(); + } + + private void releaseMediaRecorder() { + if (mediaRecorder != null) { + mediaRecorder.reset(); + mediaRecorder.release(); + mediaRecorder = null; + } + } + + private void stopRecording() { + if (mediaRecorder != null) { + mediaRecorder.stop(); + } + releaseMediaRecorder(); + isRecording = false; + + Intent returnIntent = new Intent(); + returnIntent.putExtra(SurveyorIntent.EXTRA_MEDIA_FILE, getIntent().getStringExtra(SurveyorIntent.EXTRA_MEDIA_FILE)); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + } + + public void toggleRecording(View view) { + if (!isRecording) { + Resources res = getResources(); + + IconTextView button = (IconTextView) getViewCache().getView(R.id.button_capture); + button.setTextColor(res.getColor(R.color.recording)); + + TextView instructions = (TextView) getViewCache().getView(R.id.text_instructions); + instructions.setText(R.string.tap_to_stop); + + getViewCache().getView(R.id.content_view).setBackgroundColor(res.getColor(R.color.warning)); + recordAudio(); + } else { + stopRecording(); + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/CaptureLocationActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureLocationActivity.java new file mode 100644 index 0000000..72e7e9c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureLocationActivity.java @@ -0,0 +1,169 @@ +package io.rapidpro.surveyor.activity; + +import android.Manifest; +import android.content.Intent; +import android.location.Location; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +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.LocationCallback; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationResult; +import com.google.android.gms.location.LocationServices; +import com.greysonparrelli.permiso.Permiso; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.ui.IconTextView; + +/** + * Activity for capturing a GPS location + */ +public class CaptureLocationActivity extends BaseActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { + + private GoogleApiClient googleApiClient; + private FusedLocationProviderClient locationApiClient; + private LocationCallback locationCallback; + private Location lastLocation; + + @Override + protected void onCreate(Bundle bundle) { + super.onCreate(bundle); + + setContentView(R.layout.activity_capture_location); + + Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { + @Override + @SuppressWarnings("ResourceType") + public void onPermissionResult(Permiso.ResultSet resultSet) { + if (resultSet.areAllPermissionsGranted()) { + connectGoogleApi(); + } else { + finish(); + } + } + + @Override + public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { + CaptureLocationActivity.this.showRationaleDialog(R.string.permission_location, callback); + } + }, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION); + + locationCallback = new LocationCallback() { + @Override + public void onLocationResult(LocationResult locationResult) { + if (locationResult != null) { + onLocationUpdate(locationResult.getLastLocation()); + ; + } + } + }; + } + + @Override + public boolean requireLogin() { + return false; + } + + @Override + public void onPause() { + super.onPause(); + + stopLocationUpdates(); + } + + protected void connectGoogleApi() { + googleApiClient = new GoogleApiClient.Builder(this) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .addApi(LocationServices.API) + .build(); + + googleApiClient.connect(); + } + + /** + * Start receiving location updates + */ + @SuppressWarnings("ResourceType") + private void startLocationUpdates() { + Logger.d("Starting location updates..."); + + IconTextView button = (IconTextView) getViewCache().getView(R.id.button_capture); + button.setText(R.string.icon_gps_not_fixed); + + LocationRequest request = new LocationRequest(); + request.setInterval(2000); + request.setFastestInterval(500); + request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + + locationApiClient = LocationServices.getFusedLocationProviderClient(this); + locationApiClient.requestLocationUpdates(request, locationCallback, null); + } + + private void onLocationUpdate(Location location) { + Logger.d("Received location update: " + location.toString()); + + lastLocation = location; + + IconTextView button = (IconTextView) getViewCache().getView(R.id.button_capture); + button.setText(R.string.icon_gps_fixed); + + TextView coordinates = (TextView) getViewCache().getView(R.id.text_coordinates); + coordinates.setText(getString(R.string.latitude_longitude, location.getLatitude(), location.getLongitude())); + + TextView accuracy = (TextView) getViewCache().getView(R.id.text_accuracy); + accuracy.setVisibility(View.VISIBLE); + accuracy.setText(getString(R.string.accuracy_meters, (int) location.getAccuracy())); + } + + /** + * User clicked the capture button + * + * @param view the button + */ + public void onActionCapture(View view) { + if (lastLocation != null) { + Intent data = new Intent(); + data.putExtra("latitude", lastLocation.getLatitude()); + data.putExtra("longitude", lastLocation.getLongitude()); + setResult(RESULT_OK, data); + } else { + setResult(RESULT_CANCELED); + } + finish(); + } + + /** + * Stop receiving location updates + */ + protected void stopLocationUpdates() { + if (locationApiClient != null) { + locationApiClient.removeLocationUpdates(locationCallback); + } + } + + @Override + public void onConnected(Bundle bundle) { + Logger.d("GoogleAPI client connected"); + + startLocationUpdates(); + } + + @Override + public void onConnectionSuspended(int i) { + Logger.d("GoogleAPI client suspended"); + } + + @Override + public void onConnectionFailed(ConnectionResult connectionResult) { + Logger.d("GoogleAPI client failed"); + + showToast(R.string.error_google_api); + finish(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/CaptureVideoActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureVideoActivity.java new file mode 100644 index 0000000..a7fe454 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/CaptureVideoActivity.java @@ -0,0 +1,338 @@ +package io.rapidpro.surveyor.activity; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.hardware.Camera; +import android.hardware.Camera.CameraInfo; +import android.media.CamcorderProfile; +import android.media.MediaRecorder; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.greysonparrelli.permiso.Permiso; +import com.greysonparrelli.permiso.PermisoActivity; + +import java.io.IOException; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.ui.CameraPreview; +import io.rapidpro.surveyor.ui.CameraUtil; +import io.rapidpro.surveyor.ui.IconTextView; + +/** + * Activity for capturing a video message + */ +public class CaptureVideoActivity extends PermisoActivity { + + // camera settings + public static final int CAMERA_QUALITY = CamcorderProfile.QUALITY_480P; + public static final int MAX_DURATION = 600000; // 60s max duration + public static final int MAX_FILESIZE = 50000000; // 50MB max filesize + + private int cameraId; + private Camera camera; + private CameraPreview preview; + private MediaRecorder mediaRecorder; + private IconTextView toggleCameraButton; + private IconTextView recordButton; + + private int cameraDirection = -1; + private boolean recording = false; + + @Override + protected void onRestoreInstanceState(Bundle bundle) { + super.onRestoreInstanceState(bundle); + + cameraDirection = bundle.getInt(SurveyorIntent.EXTRA_CAMERA_DIRECTION, -1); + } + + @Override + protected void onSaveInstanceState(Bundle bundle) { + super.onSaveInstanceState(bundle); + bundle.putInt(SurveyorIntent.EXTRA_CAMERA_DIRECTION, cameraDirection); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + + setContentView(R.layout.activity_capture_video); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + recordButton = findViewById(R.id.button_capture); + toggleCameraButton = findViewById(R.id.button_switch); + preview = new CameraPreview(this); + ((LinearLayout) findViewById(R.id.camera_preview)).addView(preview); + } + + public void onResume() { + super.onResume(); + if (!hasCamera(this)) { + Toast toast = Toast.makeText(this, "Sorry, your phone does not have a camera!", Toast.LENGTH_LONG); + toast.show(); + finish(); + } + + Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { + @Override + public void onPermissionResult(Permiso.ResultSet resultSet) { + if (resultSet.areAllPermissionsGranted()) { + startCamera(); + } else { + // didn't grant us permission + finish(); + } + } + + @Override + public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { + CaptureVideoActivity.this.showRationaleDialog(R.string.permission_camera, callback); + } + }, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.MODIFY_AUDIO_SETTINGS, "android.permission.READ_PROFILE"); + + } + + private void startCamera() { + if (camera == null) { + + preview.init(); + + // if the front facing camera does not exist + if (getFrontCamera() < 0) { + Toast.makeText(CaptureVideoActivity.this, "No front facing camera found.", Toast.LENGTH_LONG).show(); + toggleCameraButton.setVisibility(View.GONE); + } else if (cameraDirection == CameraInfo.CAMERA_FACING_FRONT) { + cameraId = getFrontCamera(); + } + + // default to the back camera if one isn't set + if (cameraId == -1) { + cameraId = getBackCamera(); + cameraDirection = CameraInfo.CAMERA_FACING_BACK; + } + + try { + Logger.d("Opening camera: " + cameraId); + camera = Camera.open(cameraId); + preview.refreshCamera(camera, cameraId); + + if (camera != null) { + Camera.Parameters params = camera.getParameters(); + if (params.getSupportedFocusModes().contains( + Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { + params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); + } + camera.setParameters(params); + } + } catch (Exception e) { + Logger.e("Failed to open camera", e); + finish(); + } + } + } + + /** + * Flips from front to back camera + */ + public void toggleCamera() { + + releaseCamera(); + + // if the camera preview is the front + if (cameraDirection == CameraInfo.CAMERA_FACING_FRONT) { + cameraId = getBackCamera(); + if (cameraId >= 0) { + camera = Camera.open(cameraId); + cameraDirection = CameraInfo.CAMERA_FACING_BACK; + preview.refreshCamera(camera, cameraId); + + toggleCameraButton.setText(getString(R.string.icon_camera_front)); + } + } else { + cameraId = getFrontCamera(); + if (cameraId >= 0) { + camera = Camera.open(cameraId); + cameraDirection = CameraInfo.CAMERA_FACING_FRONT; + preview.refreshCamera(camera, cameraId); + toggleCameraButton.setText(getString(R.string.icon_camera_rear)); + } + } + } + + @Override + protected void onPause() { + super.onPause(); + // free up camera for other apps + releaseCamera(); + } + + private boolean hasCamera(Context context) { + // check if the device has camera + return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); + } + + /** + * creates a new MediaRecorder + */ + private MediaRecorder createMediaRecorder() { + + MediaRecorder mediaRecorder = new MediaRecorder(); + camera.unlock(); + mediaRecorder.setCamera(camera); + + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); + + try { + if (BuildConfig.DEBUG) { + mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW)); + } else { + mediaRecorder.setProfile(CamcorderProfile.get(CAMERA_QUALITY)); + } + } catch (Exception e) { + } + + // set our recorder to use the output file provided by our caller + String filename = getIntent().getExtras().getString(SurveyorIntent.EXTRA_MEDIA_FILE); + mediaRecorder.setOutputFile(filename); + + // set video maximums + mediaRecorder.setMaxDuration(MAX_DURATION); + mediaRecorder.setMaxFileSize(MAX_FILESIZE); + + // set our orientation hint according ot our rotation + mediaRecorder.setOrientationHint(CameraUtil.getRotationDegrees(this, cameraId, false)); + + try { + mediaRecorder.prepare(); + } catch (IllegalStateException | IOException e) { + releaseMediaRecorder(); + } + return mediaRecorder; + } + + private void releaseMediaRecorder() { + if (mediaRecorder != null) { + mediaRecorder.reset(); // clear recorder configuration + mediaRecorder.release(); // release the recorder object + mediaRecorder = null; + camera.lock(); // lock camera for later use + } + } + + private void releaseCamera() { + // stop and release camera + if (camera != null) { + camera.release(); + camera = null; + } + } + + private int getFrontCamera() { + return findCamera(CameraInfo.CAMERA_FACING_FRONT); + } + + private int getBackCamera() { + return findCamera(CameraInfo.CAMERA_FACING_BACK); + } + + private int findCamera(int direction) { + int numberOfCameras = Camera.getNumberOfCameras(); + for (int i = 0; i < numberOfCameras; i++) { + CameraInfo info = new CameraInfo(); + Camera.getCameraInfo(i, info); + if (info.facing == direction) { + return i; + } + } + return -1; + } + + /** + * Start recording using our MediaRecorder + */ + private void startRecording() { + + mediaRecorder = createMediaRecorder(); + if (mediaRecorder == null) { + Toast.makeText(CaptureVideoActivity.this, "Can't record video", Toast.LENGTH_LONG).show(); + finish(); + } + + // show our record button as red + recordButton.setTextColor(getResources().getColor(R.color.recording)); + recordButton.setText(getString(R.string.icon_stop)); + + // work on UiThread for better performance + runOnUiThread(new Runnable() { + public void run() { + try { + // and go! + mediaRecorder.start(); + } catch (Exception ignored) { + } + } + }); + + recording = true; + } + + /** + * Stops recording, finishing our activity + */ + private void stopRecording() { + + if (mediaRecorder != null) { + try { + mediaRecorder.stop(); + } catch (Exception e) { + setResult(Activity.RESULT_CANCELED); + finish(); + } + } + releaseMediaRecorder(); + recording = false; + + Intent returnIntent = new Intent(); + returnIntent.putExtra(SurveyorIntent.EXTRA_MEDIA_FILE, getIntent().getStringExtra(SurveyorIntent.EXTRA_MEDIA_FILE)); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + } + + public void toggleRecording(View view) { + if (!recording) { + startRecording(); + } else { + stopRecording(); + } + } + + public void toggleCameras(View view) { + if (!recording) { + if (Camera.getNumberOfCameras() > 1) { + toggleCamera(); + } else { + Toast toast = Toast.makeText(CaptureVideoActivity.this, + "Sorry, your phone has only one camera!", Toast.LENGTH_LONG); + toast.show(); + } + } + } + + public void showRationaleDialog(int body, Permiso.IOnRationaleProvided callback) { + Permiso.getInstance().showRationaleInDialog(getString(R.string.title_permissions), getString(body), null, callback); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/CreateAccountActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/CreateAccountActivity.java new file mode 100644 index 0000000..2226cb3 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/CreateAccountActivity.java @@ -0,0 +1,88 @@ +package io.rapidpro.surveyor.activity; + +import android.app.Activity; +import android.net.UrlQuerySanitizer; +import android.os.Bundle; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Toast; + +import java.util.Set; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.net.responses.Token; +import io.rapidpro.surveyor.task.FetchOrgsTask; + +/** + * Activity for creating a new surveyor account + */ +public class CreateAccountActivity extends BaseActivity { + + public static final String CREATE_ACCOUNT_URL = "/org/surveyor/"; + + public boolean requireLogin() { + return false; + } + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_create_account); + + // load the account creation on to our webview + WebView web = (WebView) findViewById(R.id.webview); + + final Activity activity = this; + web.setWebViewClient(new WebViewClient() { + + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + Toast.makeText(activity, getString(R.string.web_load_failure), Toast.LENGTH_SHORT).show(); + activity.finish(); + } + + public void onPageFinished(WebView view, String url) { + UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url); + String email = sanitizer.getValue("user"); + Token token = Token.fromUrl(url); + + if (email != null && token.getToken() != null) { + fetchOrgAndLogin(email, token); + } + + if (url.endsWith(CREATE_ACCOUNT_URL)) { + getViewCache().hide(R.id.web_progress); + } + } + + public void onLoadResource(WebView view, String url) { + if (url.endsWith(CREATE_ACCOUNT_URL)) { + getViewCache().show(R.id.web_progress); + } + } + }); + + String createAccountURL = SurveyorApplication.get().getTembaHost() + CREATE_ACCOUNT_URL; + + Logger.d("Connecting to " + createAccountURL + "..."); + + web.loadUrl(createAccountURL); + } + + protected void fetchOrgAndLogin(final String email, final Token token) { + + new FetchOrgsTask(new FetchOrgsTask.Listener() { + @Override + public void onComplete(Set orgUUIDs) { + login(email, orgUUIDs); + } + + @Override + public void onFailure() { + // TODO + } + }).execute(token); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/FlowActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/FlowActivity.java new file mode 100644 index 0000000..e501863 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/FlowActivity.java @@ -0,0 +1,92 @@ +package io.rapidpro.surveyor.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import java.text.NumberFormat; +import java.util.Arrays; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.ui.ViewCache; + +/** + * Home screen for a flow - shows start button and pending submissions + */ +public class FlowActivity extends BaseSubmissionsActivity { + + private Org org; + private Flow flow; + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_flow); + } + + @Override + protected void onResume() { + super.onResume(); + + //refresh(); + } + + protected void refresh() { + String orgUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + String flowUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_FLOW_UUID); + + try { + org = getSurveyor().getOrgService().get(orgUUID); + flow = org.getFlow(flowUUID); + } catch (Exception e) { + Logger.e("Unable to load org or flow", e); + showBugReportDialog(); + finish(); + return; + } + + String questionString = " Questions"; + if (flow.getQuestionCount() == 1) { + questionString = " Question"; + } + + ViewCache cache = getViewCache(); + NumberFormat nf = NumberFormat.getInstance(); + cache.setText(R.id.text_flow_name, flow.getName()); + cache.setText(R.id.text_flow_questions, nf.format(flow.getQuestionCount()) + questionString); + cache.setText(R.id.text_flow_revision, "(v" + nf.format(flow.getRevision()) + ")"); + + int pending = getSurveyor().getSubmissionService().getCompletedCount(org, flow); + + cache.setVisible(R.id.pending_submission, pending > 0); + cache.setButtonText(R.id.button_pending, nf.format(pending)); + } + + public void onActionStart(View view) { + Intent intent = new Intent(this, RunActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, org.getUuid()); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, flow.getUuid()); + startActivity(intent); + } + + /** + * @see BaseSubmissionsActivity#getPendingSubmissions() + */ + @Override + protected List getPendingSubmissions() { + return getSurveyor().getSubmissionService().getCompleted(org, flow); + } + + @Override + protected Org getOrg() { + return org; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/LoginActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/LoginActivity.java new file mode 100644 index 0000000..a4a390f --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/LoginActivity.java @@ -0,0 +1,306 @@ +package io.rapidpro.surveyor.activity; + +import android.Manifest; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AutoCompleteTextView; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.greysonparrelli.permiso.Permiso; +import com.skydoves.powermenu.PowerMenuItem; + +import java.util.List; +import java.util.Set; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.DashboardActivity; +import io.rapidpro.surveyor.net.TembaService; +import io.rapidpro.surveyor.net.responses.Token; +import io.rapidpro.surveyor.net.responses.TokenResults; +import io.rapidpro.surveyor.task.FetchOrgsTask; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * A login screen that offers login via email/password. + */ +public class LoginActivity extends BaseActivity { + + // UI references. + private AutoCompleteTextView m_emailView; + private EditText m_passwordView; + private View m_progressView; + private View m_loginFormView; + + boolean clickLock = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setEnterTransition(null); + + Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { + @Override + public void onPermissionResult(Permiso.ResultSet resultSet) { + if (!resultSet.areAllPermissionsGranted()) { + finish(); + } + } + + @Override + public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { + LoginActivity.this.showRationaleDialog(R.string.permission_storage, callback); + } + }, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE); + + // usually new activities come in from the right, but make this one opposite as we're going + // "back" to a clean activity stack + overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right); + + setContentView(R.layout.v1_activity_login); + + m_emailView = findViewById(R.id.email); + + // prepopulate with our previous username if we have one + m_emailView.setText(getPreferences().getString(SurveyorPreferences.PREV_USERNAME, "")); + + m_passwordView = findViewById(R.id.password); + m_passwordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { + if (id == R.id.login || id == EditorInfo.IME_NULL) { + attemptLogin(); + return true; + } + return false; + } + }); + + ConstraintLayout emailSignInButton = findViewById(R.id.email_sign_in_button); + emailSignInButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + hideKeyboard(LoginActivity.this); + attemptLogin(); + } + }); + + m_loginFormView = findViewById(R.id.login_form); + m_progressView = findViewById(R.id.login_progress); + + // set our error message if we have one + setErrorMessage(getIntent().getStringExtra(SurveyorIntent.EXTRA_ERROR)); + + menuItems.add(new PowerMenuItem(getString(R.string.action_bug_report))); + menuItems.add(new PowerMenuItem(getString(R.string.action_settings))); + initHeaderBar(); + + findViewById(R.id.btnSkipLogin).setOnClickListener(view -> { + + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1000); + } + + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + overridePendingTransition(0,0); + Intent intent = new Intent(LoginActivity.this, DashboardActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, "invalid"); + startActivity(intent); + overridePendingTransition(0,0); + }); + } + + public static void hideKeyboard(Activity activity) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + //Find the currently focused view, so we can grab the correct window token from it. + View view = activity.getCurrentFocus(); + //If no view currently has focus, create a new one, just so we can grab a window token from it + if (view == null) { + view = new View(activity); + } + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + public void onResume() { + super.onResume(); + } + + public boolean requireLogin() { + return false; + } + + private void setErrorMessage(String message) { + TextView errorBox = findViewById(R.id.text_error_message); + if (message != null) { + errorBox.setVisibility(View.VISIBLE); + errorBox.setText(message); + } else { + errorBox.setVisibility(View.GONE); + } + } + + /** + * Attempts to sign in or register the account specified by the login form. + * If there are form errors (invalid email, missing fields, etc.), the + * errors are presented and no actual login attempt is made. + */ + public void attemptLogin() { + + // Reset errors. + m_emailView.setError(null); + m_passwordView.setError(null); + + // Store values at the time of the login attempt. + final String email = m_emailView.getText().toString(); + final String password = m_passwordView.getText().toString(); + + boolean cancel = false; + View focusView = null; + + // Check for a valid password, if the user entered one. + if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) { + m_passwordView.setError(getString(R.string.error_invalid_password)); + focusView = m_passwordView; + cancel = true; + } + + // Check for a valid email address. + if (TextUtils.isEmpty(email)) { + m_emailView.setError(getString(R.string.error_field_required)); + focusView = m_emailView; + cancel = true; + } else if (!isEmailValid(email)) { + m_emailView.setError(getString(R.string.error_invalid_email)); + focusView = m_emailView; + cancel = true; + } + + if (cancel) { + // There was an error; don't attempt login and focus the first + // form field with an error. + focusView.requestFocus(); + } else { + // Show a progress spinner, and kick off a background task to + // perform the user login attempt. + showProgress(true); + + TembaService svc = getSurveyor().getTembaService(); + svc.authenticate(email, password, new Callback() { + @Override + public void onResponse(Call call, Response response) { + + if (response.isSuccessful()) { + List tokens = response.body().getTokens(); + + Logger.d("Authentication returned " + tokens.size() + " tokens"); + + fetchOrgsAndLogin(email, tokens); + + } else { + switch (response.code()) { + case 403: + setErrorMessage(getString(R.string.error_invalid_login)); + break; + case 404: + setErrorMessage(getString(R.string.error_server_not_found)); + break; + case 500: + setErrorMessage(getString(R.string.error_server_failure)); + break; + default: + setErrorMessage(getString(R.string.error_network)); + } + showProgress(false); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Logger.e("Failure logging in", t); + setErrorMessage(getString(R.string.error_network)); + showProgress(false); + } + }); + } + } + + private boolean isEmailValid(String email) { + return email.contains("@"); + } + + private boolean isPasswordValid(String password) { + return password.length() >= 8; + } + + protected void fetchOrgsAndLogin(final String email, final List tokens) { + new FetchOrgsTask(new FetchOrgsTask.Listener() { + @Override + public void onComplete(Set orgUUIDs) { + login(email, orgUUIDs); + } + + @Override + public void onFailure() { + setErrorMessage(getString(R.string.error_fetching_org)); + showProgress(false); + } + }).execute(tokens.toArray(new Token[0])); + } + + /** + * Shows the progress UI and hides the login form. + */ + private void showProgress(final boolean show) { + int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); + + m_loginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + m_loginFormView.animate().setDuration(shortAnimTime).alpha( + show ? 0 : 1).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + m_loginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + } + }); + + m_progressView.setVisibility(show ? View.VISIBLE : View.GONE); + m_progressView.animate().setDuration(shortAnimTime).alpha( + show ? 1 : 0).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + m_progressView.setVisibility(show ? View.VISIBLE : View.GONE); + } + }); + } + + /** + * The user clicked on the link to create a new account, + * launch our CreateAccountActivity + **/ + public void onCreateAccount(View view) { + startActivity(new Intent(this, CreateAccountActivity.class)); + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/OrgActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/OrgActivity.java new file mode 100644 index 0000000..b14b66d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/OrgActivity.java @@ -0,0 +1,243 @@ +package io.rapidpro.surveyor.activity; + +import android.app.AlertDialog; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.Toast; + +import com.vdurmont.semver4j.Semver; + +import java.text.NumberFormat; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.adapter.FlowListAdapter; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.engine.Engine; +import io.rapidpro.surveyor.fragment.FlowListFragment; +import io.rapidpro.surveyor.task.RefreshOrgTask; +import io.rapidpro.surveyor.ui.BlockingProgress; +import io.rapidpro.surveyor.ui.ViewCache; + +/** + * Home screen for an org - shows available flows and pending submissions + */ +public class OrgActivity extends BaseSubmissionsActivity implements FlowListFragment.Container { + + private Org org; + private AlertDialog confirmRefreshDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // this holds our flow list fragment which shows all available flows + setContentView(R.layout.activity_org); + + refresh(); + + if (savedInstanceState == null) { + Fragment fragment = new FlowListFragment(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.fragment_container, fragment).commit(); + } + } + + @Override + protected void onResume() { + super.onResume(); + + refresh(); + } + + @Override + protected void onPause() { + super.onPause(); + + if (confirmRefreshDialog != null) { + confirmRefreshDialog.dismiss(); + } + } + + protected void promptToUpgrade() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(getString(R.string.unsupported_version)) + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=io.rapidpro.surveyor"))); + } catch (android.content.ActivityNotFoundException e) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=io.rapidpro.surveyor"))); + } + } + }) + .setNegativeButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + protected void refresh() { + if (org == null) { + String orgUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + try { + org = getSurveyor().getOrgService().get(orgUUID); + } catch (Exception e) { + Logger.e("Unable to load org", e); + showBugReportDialog(); + finish(); + return; + } + } + + setTitle(org.getName()); + + FlowListAdapter adapter = (FlowListAdapter) getViewCache().getListViewAdapter(android.R.id.list); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + + int pending = getSurveyor().getSubmissionService().getCompletedCount(getOrg()); + + ViewCache cache = getViewCache(); + cache.setVisible(R.id.pending_submission, pending > 0); + cache.setButtonText(R.id.button_pending, NumberFormat.getInstance().format(pending)); + + if (confirmRefreshDialog == null) { + if (!org.hasAssets()) { + // if this org doesn't have downloaded assets, ask the user if we can download them now + confirmRefreshOrg(R.string.confirm_org_download); + } else { + for (Flow flow : org.getFlows()) { + if (!Engine.isSpecVersionSupported(flow.getSpecVersion())) { + Logger.w("Found flow " + flow.getUuid() + " with unsupported version " + flow.getSpecVersion()); + + Semver flowVersion = new Semver(flow.getSpecVersion(), Semver.SemverType.LOOSE); + if (flowVersion.isGreaterThan(Engine.currentSpecVersion())) { + // if this flow is a major version ahead of us... user needs to upgrade the app + promptToUpgrade(); + break; + } else { + // if it is a major version behind, they should refresh the assets + confirmRefreshOrg(R.string.confirm_org_refresh_old); + break; + } + } + } + } + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.menu_org, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + public void onActionRefresh(MenuItem item) { + confirmRefreshOrg(R.string.confirm_org_refresh); + } + + public void confirmRefreshOrg(int msgId) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + + confirmRefreshDialog = builder.setMessage(getString(msgId)) + .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + doRefresh(); + } + }) + .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }).create(); + + confirmRefreshDialog.show(); + } + + private void doRefresh() { + final BlockingProgress progressModal = new BlockingProgress(OrgActivity.this, R.string.one_moment, R.string.refresh_org); + progressModal.show(); + + new RefreshOrgTask(new RefreshOrgTask.Listener() { + @Override + public void onProgress(int percent) { + progressModal.setProgress(percent); + } + + @Override + public void onMessage(String message) { + // + } + + @Override + public void onComplete() { + refresh(); + + progressModal.dismiss(); + } + + @Override + public void onFailure() { + progressModal.dismiss(); + + Toast.makeText(OrgActivity.this, getString(R.string.error_org_refresh), Toast.LENGTH_SHORT).show(); + } + }).execute(getOrg()); + } + + /** + * @see BaseSubmissionsActivity#getPendingSubmissions() + */ + @Override + protected List getPendingSubmissions() { + return getSurveyor().getSubmissionService().getCompleted(getOrg()); + } + + @Override + public Org getOrg() { + return org; + } + + /** + * @see FlowListFragment.Container#getListItems() + */ + @Override + public List getListItems() { + return getOrg().getFlows(); + } + + /** + * @see FlowListFragment.Container#onItemClick(Flow) + */ + @Override + public void onItemClick(Flow flow) { + Intent intent = new Intent(this, FlowActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, getOrg().getUuid()); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, flow.getUuid()); + startActivity(intent); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/OrgChooseActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/OrgChooseActivity.java new file mode 100644 index 0000000..397f1ef --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/OrgChooseActivity.java @@ -0,0 +1,141 @@ +package io.rapidpro.surveyor.activity; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.extend.DashboardActivity; +import io.rapidpro.surveyor.fragment.OrgListFragment; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * Let's the user select one of the orgs they have access to + */ +public class OrgChooseActivity extends BaseActivity implements OrgListFragment.Container { + + private List getOrgs() { + Set orgUUIDs = SurveyorApplication.get().getPreferences().getStringSet(SurveyorPreferences.AUTH_ORGS, Collections.emptySet()); + List orgs = new ArrayList<>(orgUUIDs.size()); + + for (String uuid : orgUUIDs) { + try { + orgs.add(getSurveyor().getOrgService().get(uuid)); + } catch (Exception e) { + Logger.e("Unable to load org", e); + } + } + + return orgs; + } + + @Override + protected void onCreate(final Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setTitle(R.string.title_activity_org_choose); + + // the base activity may have logged us out and sent us to the login page + if (!isLoggedIn()) { + return; + } + + List orgs = getOrgs(); + + // Get Saved ORG_UUID + String saved_OrgUUID = getSurveyor().getPreferences().getString("ORG_UUID", ""); + if(!saved_OrgUUID.equals("")){ + // ORG_UUID Already Defined: Skip Selection + for(int i = 0; i < orgs.size(); i++){ + String currentUUID = orgs.get(i).getUuid(); + if(currentUUID.equals(saved_OrgUUID)){ + showOrg(orgs.get(i)); + overridePendingTransition(0, 0); + finish(); + return; + } + } + } + + // if we don't have any orgs, take us back to the login screen + if (orgs == null || orgs.size() == 0) { + logout(R.string.error_no_orgs); + overridePendingTransition(0, 0); + finish(); + } + // if we have access to a single org, then skip this entire activity + else if (orgs.size() == 1) { + Logger.d("One org found, shortcutting chooser to: " + orgs.get(0).getName()); + showOrg(orgs.get(0)); + overridePendingTransition(0, 0); + finish(); + } else { + + // this holds our org list fragment which shows all available orgs + setContentView(R.layout.activity_org_choose); + + if (savedInstanceState == null) { + Fragment fragment = new OrgListFragment(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(R.id.fragment_container, fragment).commit(); + } + } + } + + @Override + public void onBackPressed() { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no); + logout(); + super.onBackPressed(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + /** + * @see OrgListFragment.Container#getListItems() + */ + @Override + public List getListItems() { + return getOrgs(); + } + + /** + * @see OrgListFragment.Container#onItemClick(Org) + */ + @Override + public void onItemClick(Org org) { + showOrg(org); + } + + private void showOrg(Org org) { + getSurveyor().setPreference("ORG_UUID", org.getUuid()); + Intent intent = new Intent(OrgChooseActivity.this, DashboardActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, org.getUuid()); + startActivity(intent); + overridePendingTransition(0,0); + + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/RunActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/RunActivity.java new file mode 100644 index 0000000..7b706ab --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/RunActivity.java @@ -0,0 +1,925 @@ +package io.rapidpro.surveyor.activity; + +import android.Manifest; +import android.app.Activity; +import android.app.Dialog; +import android.content.ComponentName; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.PixelFormat; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.util.TypedValue; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.SurfaceView; +import android.view.View; +import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.ExoPlayerFactory; +import com.google.android.exoplayer2.source.ConcatenatingMediaSource; +import com.google.android.exoplayer2.source.MediaSource; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; +import com.google.android.exoplayer2.ui.PlayerView; +import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; +import com.google.android.exoplayer2.util.Util; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.greysonparrelli.permiso.Permiso; +import com.nyaruka.goflow.mobile.Environment; +import com.nyaruka.goflow.mobile.Event; +import com.nyaruka.goflow.mobile.Hint; +import com.nyaruka.goflow.mobile.MsgIn; +import com.nyaruka.goflow.mobile.Resume; +import com.nyaruka.goflow.mobile.SessionAssets; +import com.nyaruka.goflow.mobile.Trigger; + +import org.apache.commons.lang3.tuple.Pair; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.engine.Contact; +import io.rapidpro.surveyor.engine.Engine; +import io.rapidpro.surveyor.engine.EngineException; +import io.rapidpro.surveyor.engine.Session; +import io.rapidpro.surveyor.engine.Sprint; +import io.rapidpro.surveyor.ui.IconTextView; +import io.rapidpro.surveyor.ui.ViewCache; +import io.rapidpro.surveyor.utils.ImageUtils; +import io.rapidpro.surveyor.widget.ChatBubbleView; +import io.rapidpro.surveyor.widget.IconLinkView; + +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class RunActivity extends BaseActivity { + + // the different types of requests for media + public static final String REQUEST_IMAGE = "image"; + public static final String REQUEST_AUDIO = "audio"; + public static final String REQUEST_VIDEO = "video"; + public static final String REQUEST_GPS = "geo"; + + // custom request codes passed to media capture activities + private static final int RESULT_IMAGE = 1; + private static final int RESULT_VIDEO = 2; + private static final int RESULT_AUDIO = 3; + private static final int RESULT_GPS = 4; + + private static final int MAX_IMAGE_DIMENSION = 1024; + private static final int MAX_THUMB_DIMENSION = 600; + + private LinearLayout chatHistory; + private IconTextView sendButtom; + private EditText chatCompose; + private ScrollView scrollView; + + private Session session; + private Submission submission; + Org org = null; + Flow flow = null; + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + String orgUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + String flowUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_FLOW_UUID); + + setContentView(R.layout.activity_run); +// changeTitle("Survey"); + initUI(); + + findViewById(R.id.back_button).setOnClickListener(view -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view); + onBackPressed(); + }); + +// menuItems.add(new PowerMenuItem(getString(R.string.action_bug_report))); +// menuItems.add(new PowerMenuItem(getString(R.string.action_settings))); +// menuItems.add(new PowerMenuItem(getString(R.string.action_logout))); +// initHeaderBar(); + + try { + org = getSurveyor().getOrgService().get(orgUUID); + + // Set Language + String pref_lang = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + String lang_code; + switch(pref_lang){ + case "en": lang_code = "eng";break; + case "bn": lang_code = "ben";break; + case "my": lang_code = "mya";break; + default: lang_code = "eng";break; + } + + List languages = Arrays.asList(org.getLanguages()); + if(languages.contains(lang_code)){ + org.setPrimaryLanguage(lang_code); + }else{ + org.setPrimaryLanguage(org.initialLanguage); + } + + + SessionAssets assets = Engine.createSessionAssets(Engine.loadAssets(org.getAssets())); + Environment environment = Engine.createEnvironment(org); + + flow = org.getFlow(flowUUID); + setTitle(flow.getName()); + + changeTitle(flow.getName()); + + Trigger trigger = Engine.createManualTrigger(environment, Contact.createEmpty(assets), flow.toReference()); + + Pair ss = Engine.getInstance().newSession(assets, trigger); + session = ss.getLeft(); + submission = getSurveyor().getSubmissionService().newSubmission(org, flow); + + handleEngineSprint(ss.getRight()); + + } catch (EngineException | IOException e) { + handleProblem("Unable to start flow", e); + } + } + + @Override + protected void onResume() { + super.onResume(); + + initUI(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + // Checks whether a hardware keyboard is available + if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { + scrollView.smoothScrollTo(0, scrollView.getBottom()); + } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { + scrollView.smoothScrollTo(0, scrollView.getBottom()); + } + } + + private void initUI() { + chatHistory = findViewById(R.id.chat_history); + chatCompose = findViewById(R.id.chat_compose); + sendButtom = findViewById(R.id.button_send); + scrollView = findViewById(R.id.scroll); + + + // allow messages to be sent with the enter key + chatCompose.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { + + onActionSend(sendButtom); + return true; + } + return false; + } + }); + + // or the send button on the keyboard + chatCompose.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (event != null && actionId == EditorInfo.IME_ACTION_SEND && event.getAction() == KeyEvent.ACTION_DOWN) { + onActionSend(sendButtom); + return true; + } + return false; + } + }); + + // change the color of the send button when there is text in the compose box + chatCompose.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.length() > 0) { + sendButtom.setIconColor(R.color.magenta); + } else { + sendButtom.setIconColor(R.color.light_gray); + } + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + } + + @Override + public void onBackPressed() { + confirmDiscardRun(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.menu_run, menu); + return true; + } + + /** + * User pressed the media request button + */ + public void onActionMedia(View view) { + View media = getViewCache().getView(R.id.media_icon); + if (session.isWaiting()) { + if (REQUEST_IMAGE.equals(media.getTag())) { + captureImage(); + } else if (REQUEST_VIDEO.equals(media.getTag())) { + captureVideo(); + } else if (REQUEST_AUDIO.equals(media.getTag())) { + captureAudio(); + } else if (REQUEST_GPS.equals(media.getTag())) { + captureLocation(); + } + } + } + + /** + * Captures an image from the camera + */ + private void captureImage() { + + Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { + @Override + @SuppressWarnings("ResourceType") + public void onPermissionResult(Permiso.ResultSet resultSet) { + if (resultSet.areAllPermissionsGranted()) { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + ComponentName cameraPkg = intent.resolveActivity(getPackageManager()); + + if (cameraPkg == null) { + handleProblem("Can't find camera device", null); + return; + } + Logger.d("Camera package is " + cameraPkg.toString()); + + File cameraOutput = getCameraOutput(); + intent.putExtra(MediaStore.EXTRA_OUTPUT, getSurveyor().getUriForFile(cameraOutput)); + intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + startActivityForResult(intent, RESULT_IMAGE); + } + } + + @Override + public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { + RunActivity.this.showRationaleDialog(R.string.permission_camera, callback); + } + + }, Manifest.permission.CAMERA); + } + + /** + * Captures a video from the camera + */ + private void captureVideo() { + Intent intent = new Intent(this, CaptureVideoActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_MEDIA_FILE, getVideoOutput().getAbsolutePath()); + intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + startActivityForResult(intent, RESULT_VIDEO); + } + + /** + * Captures an audio recording from the microphone + */ + private void captureAudio() { + Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() { + @Override + @SuppressWarnings("ResourceType") + public void onPermissionResult(Permiso.ResultSet resultSet) { + if (resultSet.areAllPermissionsGranted()) { + Intent intent = new Intent(RunActivity.this, CaptureAudioActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_MEDIA_FILE, getAudioOutput().getAbsolutePath()); + intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + startActivityForResult(intent, RESULT_AUDIO); + } + } + + @Override + public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) { + RunActivity.this.showRationaleDialog(R.string.permission_record, callback); + } + + }, Manifest.permission.RECORD_AUDIO); + } + + /** + * Captures the current location + */ + private void captureLocation() { + Intent intent = new Intent(this, CaptureLocationActivity.class); + startActivityForResult(intent, RESULT_GPS); + } + + private File getCameraOutput() { + return new File(getSurveyor().getExternalCacheDir(), "camera.jpg"); + } + + private File getVideoOutput() { + return new File(getSurveyor().getExternalCacheDir(), "video.mp4"); + } + + private File getAudioOutput() { + return new File(getSurveyor().getExternalCacheDir(), "audio.m4a"); + } + + /** + * @see android.app.Activity#onActivityResult(int, int, Intent) + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode != RESULT_OK) { + return; + } + MsgIn msg = null; + try { + if (requestCode == RESULT_IMAGE) { + File output = getCameraOutput(); + if (output.exists()) { + Bitmap full = BitmapFactory.decodeFile(output.getAbsolutePath()); + Bitmap scaled = ImageUtils.scaleToMax(full, MAX_IMAGE_DIMENSION); + // correct rotation if necessary + int rotation = ImageUtils.getExifRotation(output.getAbsolutePath()); + if (rotation != 0) { + Logger.d("Correcting EXIF rotation of " + rotation + " degrees"); + scaled = ImageUtils.rotateImage(scaled, rotation); + } + // encode as JPEG and save to submission + byte[] asJpg = ImageUtils.convertToJPEG(scaled); + Uri uri = submission.saveMedia(asJpg, "jpg"); + Logger.d("Saved image capture to " + uri); + // create thumbnail and add to chat + Bitmap thumb = ImageUtils.scaleToMax(scaled, MAX_THUMB_DIMENSION); + addMedia(thumb, uri.toString(), R.string.media_image); + msg = Engine.createMsgIn("", "image/jpeg:" + uri); + output.delete(); + } + } else if (requestCode == RESULT_VIDEO) { + File output = getVideoOutput(); + if (output.exists()) { + Bitmap thumb = ImageUtils.thumbnailFromVideo(output); + Uri uri = submission.saveMedia(output); + addMedia(thumb, uri.toString(), R.string.media_video); + Logger.d("Saved video capture to " + uri); + msg = Engine.createMsgIn("", "video/mp4:" + uri); + output.delete(); + } + + } else if (requestCode == RESULT_AUDIO) { + File output = getAudioOutput(); + if (output.exists()) { + Uri uri = submission.saveMedia(output); + Logger.d("Saved audio capture to " + uri); + addMediaLink(getString(R.string.made_recording), uri.toString(), R.string.media_audio); + msg = Engine.createMsgIn("", "audio/mp4:" + uri); + output.delete(); + } + } else if (requestCode == RESULT_GPS) { + double latitude = data.getDoubleExtra("latitude", 0.0); + double longitude = data.getDoubleExtra("longitude", 0.0); + String coords = "geo:" + latitude + "," + longitude; + String url = coords + "?q=" + latitude + "," + longitude + "(Location)"; + addMediaLink(latitude + "," + longitude, url, R.string.media_location); + msg = Engine.createMsgIn("", coords); + } + } catch (IOException e) { + handleProblem("Unable capture media", e); + } + // if we have a message we can try to resume now... + if (msg != null) { + resumeSession(msg); + } + } + + /** + * Something has gone wrong... show the user the big report dialog + */ + private void handleProblem(String toastMsg, Throwable e) { + Toast.makeText(this, toastMsg, Toast.LENGTH_SHORT).show(); + + if (e != null) { + Logger.e("Error running flow", e); + showBugReportDialog(); + } + + finish(); + } + + private void resumeSession(MsgIn msg) { + try { + Resume resume = Engine.createMsgResume(null, null, msg); + Sprint sprint = session.resume(resume); + + handleEngineSprint(sprint); + + } catch (EngineException | IOException e) { + handleProblem("Couldn't handle message", e); + } + + // scroll us to the bottom + scrollView.postDelayed(new Runnable() { + @Override + public void run() { + scrollView.setSmoothScrollingEnabled(true); + scrollView.fullScroll(ScrollView.FOCUS_DOWN); + + // put the focus back on the chat box + chatCompose.requestFocus(); + } + }, 100); + + // refresh our menu + invalidateOptionsMenu(); + } + + /** + * User pressed the send button + */ + public void onActionSend(View sendButton) { + if (!session.getStatus().equals("waiting")) { + return; + } + + // Remove All Quick Response + getViewCache().hide(R.id.quick_replies); + ((LinearLayout) findViewById(R.id.quick_replies)).removeAllViews(); + getViewCache().show(R.id.chat_box); + + EditText chatBox = findViewById(R.id.chat_compose); + String message = chatBox.getText().toString(); + hideKeyboard(this); + + if (message.trim().length() > 0){ + chatBox.setText(""); + final MsgIn msg = Engine.createMsgIn(message); + addMessage(message, true); + playNotification(getSurveyor(), getApplicationContext(), R.raw.send_message_sound); + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + + resumeSession(msg); + playNotification(getSurveyor(), getApplicationContext(), R.raw.receive_message_sound); + } + }, (int)(Math.random() * 1500 + 700)); + + + } + } + + + public static void hideKeyboard(Activity activity) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + //Find the currently focused view, so we can grab the correct window token from it. + View view = activity.getCurrentFocus(); + //If no view currently has focus, create a new one, just so we can grab a window token from it + if (view == null) { + view = new View(activity); + } + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + /** + * Handles new session state and events after interaction with the flow engine + * + * @param sprint the sprint from the engine + */ + private void handleEngineSprint(Sprint sprint) throws IOException, EngineException { + for (Event event : sprint.getEvents()) { + Logger.d("Event: " + event.payload()); + + JsonObject asObj = new JsonParser().parse(event.payload()).getAsJsonObject(); + + if (event.type().equals("msg_created")) { + final JsonObject msg = asObj.get("msg").getAsJsonObject(); + addMessage(msg.get("text").getAsString(), false); + + if(msg.get("quick_replies") != null){ + JsonArray quick_replies = msg.get("quick_replies").getAsJsonArray(); + LinearLayout quick_reply_box = findViewById(R.id.quick_replies); + + for(int i = 0; i < quick_replies.size(); i++) { + String reply_data = quick_replies.get(i).getAsString(); + + View quickTemplate = LayoutInflater.from(this).inflate(R.layout.v1_quick_reply_button, null); + + int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 38, getResources().getDisplayMetrics()); + int space = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, getResources().getDisplayMetrics()); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height); + layoutParams.setMargins(0, space, 0, space); + + ((Button) quickTemplate).setText(reply_data); + quick_reply_box.addView(quickTemplate, layoutParams); + } + + getViewCache().show(R.id.quick_replies); + } + + if(msg.get("attachments") != null){ + JsonArray attachments = msg.get("attachments").getAsJsonArray(); + for(int i = 0; i < attachments.size(); i++){ + String attachment_data = attachments.get(i).getAsString(); + int x = attachment_data.indexOf(":"); + String attachment_uri = attachment_data.substring(x+1); + String attachment_type = attachment_data.substring(0, x); + final String file_name = "flow_asset_" + getMD5(attachment_uri); + final String file_path = org.getDirectory().getPath() + "/" + file_name; + + switch(attachment_type){ + case "image": + case "image/png": + case "image/jpg": + case "image/gif": + case "image/webp": + case "image/jpeg": + Glide.with(this) + .asBitmap() + .load(new File(org.getDirectory(), file_name)) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + addMedia(resource, file_path, R.string.media_image); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) {} + }); + break; + case "audio": + case "audio/mpeg": + case "audio/mp3": + Glide.with(this) + .asBitmap() + .load(R.drawable.v1_audio_thumbnail) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + addMedia(resource, file_path, R.string.media_audio); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) {} + }); + break; + case "video": + case "video/mp4": + Glide.with(this) + .asBitmap() + .load(R.drawable.v1_video_thumbnail) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + addMedia(resource, file_path, R.string.media_video); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) {} + }); + break; + } + } + + } + + } + } + + if (!session.isWaiting()) { + addLogMessage(R.string.log_flow_complete); + + ViewCache cache = getViewCache(); + cache.hide(R.id.chat_box, true); + cache.hide(R.id.container_request_media); + cache.show(R.id.completed_session_actions); + } else { + waitForInput(session.getWait().hint()); + } + + submission.saveSession(session); + submission.saveNewModifiers(sprint.getModifiers()); + submission.saveNewEvents(sprint.getEvents()); + + Logger.d("Persisted new events and modifiers after engine sprint"); + } + + private void waitForInput(Hint hint) { + ViewCache vc = getViewCache(); + TextView mediaButton = vc.getTextView(R.id.media_icon); + TextView mediaText = vc.getTextView(R.id.media_text); + + String mediaType = hint != null ? hint.type() : ""; + switch (mediaType) { + case "image": + mediaButton.setText(getString(R.string.icon_photo_camera)); + mediaButton.setTag(REQUEST_IMAGE); + mediaText.setText(getString(R.string.request_image)); + vc.hide(R.id.chat_box, true); + vc.show(R.id.container_request_media); + break; + case "video": + mediaButton.setText(getString(R.string.icon_videocam)); + mediaButton.setTag(REQUEST_VIDEO); + mediaText.setText(getString(R.string.request_video)); + vc.hide(R.id.chat_box, true); + vc.show(R.id.container_request_media); + break; + case "audio": + mediaButton.setText(getString(R.string.icon_mic)); + mediaButton.setTag(REQUEST_AUDIO); + mediaText.setText(getString(R.string.request_audio)); + vc.hide(R.id.chat_box, true); + vc.show(R.id.container_request_media); + break; + case "location": + mediaButton.setText(getString(R.string.icon_place)); + mediaButton.setTag(REQUEST_GPS); + mediaText.setText(getString(R.string.request_gps)); + vc.hide(R.id.chat_box, true); + vc.show(R.id.container_request_media); + break; + default: + vc.show(R.id.chat_box); + vc.hide(R.id.container_request_media); + break; + } + } + + private void addLogMessage(int message) { + getLayoutInflater().inflate(R.layout.item_log_message, chatHistory); + TextView view = (TextView) chatHistory.getChildAt(chatHistory.getChildCount() - 1); + view.setText(getString(message)); + } + + private void addMessage(String text, boolean inbound) { + getLayoutInflater().inflate(R.layout.item_chat_bubble, chatHistory); + ChatBubbleView bubble = (ChatBubbleView) chatHistory.getChildAt(chatHistory.getChildCount() - 1); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + bubble.setTransitionName(getString(R.string.transition_chat)); + } + + bubble.setMessage(text, inbound); + scrollToBottom(); + } + + private void addMedia(Bitmap image, String url, int type) { + getLayoutInflater().inflate(R.layout.item_chat_bubble, chatHistory); + ChatBubbleView bubble = (ChatBubbleView) chatHistory.getChildAt(chatHistory.getChildCount() - 1); + bubble.setThumbnail(image, url, type); + scrollToBottom(); + } + + private void addMediaLink(String title, String url, int type) { + getLayoutInflater().inflate(R.layout.item_icon_link, chatHistory); + IconLinkView icon = (IconLinkView) chatHistory.getChildAt(chatHistory.getChildCount() - 1); + icon.initialize(title, type, url); + scrollToBottom(); + } + + private void scrollToBottom() { + scrollView.post(new Runnable() { + @Override + public void run() { + scrollView.fullScroll(View.FOCUS_DOWN); + } + }); + } + + /** + * User pressed the save button + * + * @param view the button + */ + public void onActionSave(View view) { + try { + submission.complete(); + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes); + finish(); + } catch (IOException e) { + Logger.e("unable to complete submission", e); + } + } + + public void onActionQuickReply(View view) { + // Send Quick Reply + sendButtom = findViewById(R.id.button_send); + EditText chatBox = findViewById(R.id.chat_compose); + String reply_text = ((Button) view).getText().toString(); + + chatBox.setText(reply_text); + onActionSend(sendButtom); + + + } + + /** + * User pressed the discard button - prompt user to confirm if they want to lose this submission + * + * @param view the button + */ + public void onActionDiscard(View view) { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no); + confirmDiscardRun(); + } + + /** + * User pressed the cancel menu item - prompt user to confirm if they want to lose this submission + * + * @param item the menu item + */ + public void onActionCancel(MenuItem item) { + confirmDiscardRun(); + } + + private void confirmDiscardRun() { + + final Dialog dialog6 = new Dialog(this); + dialog6.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog6.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog6.setContentView(R.layout.v1_dialog_ui); + dialog6.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog6.findViewById(R.id.textMainText)).setText(getString(R.string.confirm_submission_discard)); + ((TextView) dialog6.findViewById(R.id.button_yes_text)).setText("Yes"); + ((TextView) dialog6.findViewById(R.id.button_no_text)).setText("No"); + + dialog6.findViewById(R.id.button_yes).setOnClickListener(view -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + submission.delete(); + dialog6.dismiss(); + finish(); + }); + + dialog6.findViewById(R.id.button_no).setOnClickListener(view -> { + + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view); + dialog6.dismiss(); + }); + + dialog6.show(); + + + } + + public void onClickMedia(View view) { + + String url = (String) view.getTag(R.string.tag_url); + int mediaType = (int) view.getTag(R.string.tag_media_type); + + // Intercept Media to Play Locally + if(mediaType == R.string.media_video){ + playMediaDialog(url, R.string.media_video); + return; + } + + if(mediaType == R.string.media_audio){ + playMediaDialog(url, R.string.media_audio); + return; + } + + if(mediaType == R.string.media_image){ + displayImage(url); + return; + } + + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + + switch (mediaType) { + case R.string.media_image: + intent.setDataAndType(Uri.parse(url), "image/*"); + break; + case R.string.media_video: + intent.setDataAndType(Uri.parse(url), "video/*"); + break; + case R.string.media_audio: + intent.setDataAndType(Uri.parse(url), "audio/*"); + break; + case R.string.media_location: + intent.setDataAndType(Uri.parse(url), null); + break; + } + + startActivity(intent); + } + + ExoPlayer exoPlayer; + + public void playMediaDialog(String media_path, int media_type) { + final Dialog dialog = new Dialog(this);// add here your class name + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + + if(media_type == R.string.media_audio){ + dialog.setContentView(R.layout.v1_audio_player_dialog); + }else{ + dialog.setContentView(R.layout.v1_video_player_dialog); + } + + dialog.setOnDismissListener(dialogInterface -> exoPlayer.release()); + dialog.show(); + +// if(media_type == R.string.media_audio){ +// WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// lp.copyFrom(dialog.getWindow().getAttributes()); +// dialog.getWindow().setAttributes(lp); +// } + + getWindow().setFormat(PixelFormat.TRANSLUCENT); + Log.v("Media-Path", media_path); + + ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(); + + PlayerView playerView = dialog.findViewById(R.id.videoPlayer); + ((SurfaceView) playerView.getVideoSurfaceView()).setZOrderOnTop(true); + exoPlayer = ExoPlayerFactory.newSimpleInstance(this); + playerView.setPlayer(exoPlayer); + + Uri uri = Uri.parse(media_path); + DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, getApplicationInfo().name)); + MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri); + concatenatingMediaSource.addMediaSource(mediaSource); + + exoPlayer.prepare(concatenatingMediaSource); + exoPlayer.setPlayWhenReady(false); + } + + + public void displayImage(String image_path) { + + AlertDialog.Builder builder = new AlertDialog.Builder(RunActivity.this); + + //Yes Button + builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + + LayoutInflater inflater = getLayoutInflater(); + View dialoglayout = inflater.inflate(R.layout.v1_imageview_popup, null); + + ImageView dialog_image = dialoglayout.findViewById(R.id.dialogImageView); + + Glide.with(this) + .load(image_path) + .into(dialog_image); + + builder.setView(dialoglayout); + builder.show(); + + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/activity/SettingsActivity.java b/app/src/main/java/io/rapidpro/surveyor/activity/SettingsActivity.java new file mode 100644 index 0000000..af70523 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/activity/SettingsActivity.java @@ -0,0 +1,43 @@ +package io.rapidpro.surveyor.activity; + +import androidx.viewpager.widget.ViewPager; + +import android.os.Bundle; + +import com.skydoves.powermenu.PowerMenuItem; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.extend.adapter.ViewPagerAdapter; +import io.rapidpro.surveyor.fragment.SettingsFragment; + +import static androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT; + +/** + * Activity for modifying app settings + */ +public class SettingsActivity extends BaseActivity { + + public boolean requireLogin() { + return false; + } + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_settings); + + //FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + //ft.replace(android.R.id.content, new SettingsFragment()).commit(); + + ViewPagerAdapter viewPagerAdapter; + ViewPager viewPager; + viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + viewPagerAdapter.addFragment(new SettingsFragment(), "Settings"); + viewPager = findViewById(R.id.viewPager); + viewPager.setAdapter(viewPagerAdapter); + + menuItems.add(new PowerMenuItem(getString(R.string.action_bug_report))); + menuItems.add(new PowerMenuItem(getString(R.string.action_settings))); + menuItems.add(new PowerMenuItem(getString(R.string.action_logout))); + initHeaderBar(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/adapter/FlowListAdapter.java b/app/src/main/java/io/rapidpro/surveyor/adapter/FlowListAdapter.java new file mode 100644 index 0000000..d3d1543 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/adapter/FlowListAdapter.java @@ -0,0 +1,97 @@ +package io.rapidpro.surveyor.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.extend.StaticMethods; + +public class FlowListAdapter extends ArrayAdapter { + + private Org org; + private String firstUUID = ""; + SurveyorApplication surveyorApplication; + + public FlowListAdapter(SurveyorApplication surveyorApplication, Context context, int resourceId, Org org, List flows, String firstUUID) { + super(context, resourceId, flows); + this.firstUUID = firstUUID; + this.org = org; + this.surveyorApplication = surveyorApplication; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + //ViewCache cache; + + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + //if (row == null) { + row = inflater.inflate(R.layout.item_flow, parent, false); + //cache = new ViewCache(); + TextView titleView = row.findViewById(R.id.text_flow_name); + TextView questionView = row.findViewById(R.id.text_flow_questions); + TextView pendingSubmissions = row.findViewById(R.id.text_pending_submissions); + TextView surveyor_last_updated = row.findViewById(R.id.surveyor_last_updated); + //row.setTag(cache); + + //} else { + //cache = (ViewCache) row.getTag(); + //} + + + Flow flow = getItem(position); + titleView.setText(flow.getName()); + + if(flow.getUuid().equals(firstUUID)){ + String last_update = StaticMethods.getLocalUpdateDate(surveyorApplication, "surveyor_last_updated_local"); + if(last_update.equals("")){ + surveyor_last_updated.setText("Pull down to refresh"); + }else{ + surveyor_last_updated.setText("Last updated: " + last_update + "\n" + "Pull down to refresh"); + } + surveyor_last_updated.setVisibility(View.VISIBLE); + //firstUUID = "-1"; + } + + int pending = SurveyorApplication.get().getSubmissionService().getCompletedCount(org, flow); + + NumberFormat nf = NumberFormat.getInstance(); + pendingSubmissions.setText(nf.format(pending)); + pendingSubmissions.setTag(flow); + pendingSubmissions.setVisibility(pending > 0 ? View.VISIBLE : View.GONE); + + int numQuestions = flow.getQuestionCount(); + String questionsString = getContext().getResources().getQuantityString(R.plurals.questions, numQuestions, numQuestions); + + questionView.setText(questionsString + " (v" + nf.format(flow.getRevision()) + ")"); + return row; + } + + + @Override + public long getItemId(int position) { + return position; //return position here + } + +// public static class ViewCache { +// TextView surveyor_last_updated; +// TextView titleView; +// TextView questionView; +// TextView pendingSubmissions; +// } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/adapter/OrgListAdapter.java b/app/src/main/java/io/rapidpro/surveyor/adapter/OrgListAdapter.java new file mode 100644 index 0000000..f755745 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/adapter/OrgListAdapter.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.data.Org; + +public class OrgListAdapter extends ArrayAdapter { + + public OrgListAdapter(Context context, int resourceId, List orgs) { + super(context, resourceId, orgs); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewCache cache; + Org org = getItem(position); + + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + convertView = inflater.inflate(R.layout.item_org, parent, false); + cache = new ViewCache(); + cache.titleView = convertView.findViewById(R.id.text_org); + convertView.setTag(cache); + } else { + cache = (ViewCache) convertView.getTag(); + } + + cache.titleView.setText(org.getName()); + return convertView; + } + + public static class ViewCache { + TextView titleView; + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/data/Flow.java b/app/src/main/java/io/rapidpro/surveyor/data/Flow.java new file mode 100644 index 0000000..7bdf382 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/data/Flow.java @@ -0,0 +1,98 @@ +package io.rapidpro.surveyor.data; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.annotations.SerializedName; +import com.nyaruka.goflow.mobile.FlowReference; + +import io.rapidpro.surveyor.utils.JsonUtils; +import io.rapidpro.surveyor.utils.RawJson; + +public class Flow { + private String uuid; + + private String name; + + @SerializedName("spec_version") + private String specVersion; + + private int revision; + + @SerializedName("question_count") + private int questionCount; + + /** + * Creates a new flow + * + * @param uuid the flow UUID + * @param name the flow name + * @param specVersion the flow spec version number + * @param revision the flow revision number + * @param questionCount the number of questions + */ + public Flow(String uuid, String name, String specVersion, int revision, int questionCount) { + this.uuid = uuid; + this.name = name; + this.specVersion = specVersion; + this.revision = revision; + this.questionCount = questionCount; + } + + /** + * Extracts a flow summary from the given flow definition + * + * @param flow the flow definition + * @return the flow summary + */ + public static Flow extract(RawJson flow) { + + // TODO use streaming for performance https://developer.android.com/reference/android/util/JsonReader + JsonObject definition = JsonUtils.unmarshal(flow.toString(), JsonObject.class); + + String uuid = definition.get("uuid").getAsString(); + String name = definition.get("name").getAsString(); + String specVersion = definition.get("spec_version").getAsString(); + int revision = definition.get("revision").getAsInt(); + int questionCount = 0; + + JsonArray nodes = definition.get("nodes").getAsJsonArray(); + for (JsonElement elem : nodes) { + JsonObject node = elem.getAsJsonObject(); + JsonElement routerElem = node.get("router"); + if (routerElem != null) { + JsonObject router = routerElem.getAsJsonObject(); + if (router.get("wait") != null) { + questionCount++; + } + } + + } + + return new Flow(uuid, name, specVersion, revision, questionCount); + } + + public String getUuid() { + return uuid; + } + + public String getName() { + return name; + } + + public String getSpecVersion() { + return specVersion; + } + + public int getRevision() { + return revision; + } + + public int getQuestionCount() { + return questionCount; + } + + public FlowReference toReference() { + return new FlowReference(uuid, name); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/data/Org.java b/app/src/main/java/io/rapidpro/surveyor/data/Org.java new file mode 100644 index 0000000..2243840 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/data/Org.java @@ -0,0 +1,390 @@ +package io.rapidpro.surveyor.data; + +import android.content.Context; +import android.util.Log; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; + +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.engine.OrgAssets; +import io.rapidpro.surveyor.net.TembaException; +import io.rapidpro.surveyor.net.TembaService; +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.Field; +import io.rapidpro.surveyor.net.responses.Group; +import io.rapidpro.surveyor.utils.JsonUtils; +import io.rapidpro.surveyor.utils.RawJson; +import okhttp3.OkHttpClient; + +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class Org { + /** + * Contains the JSON representation of this org + */ + private static final String DETAILS_FILE = "details.json"; + + /** + * Contains a goflow assets file with this org's flows, groups, fields etc + */ + private static final String ASSETS_FILE = "assets.json"; + + /** + * Contains summaries of each flow available in this org + */ + private static final String FLOWS_FILE = "flows.json"; + + private String token; + + private String name; + + @SerializedName("primary_language") + private String primaryLanguage; + + private String[] languages; + + private String timezone; + + private String country; + + @SerializedName("date_style") + private String dateStyle; + + private boolean anon; + + private String legacySubmissionsDirectory; + + private transient File directory; + + private transient List flows; + + /** + * Creates an new empty org + * + * @param directory the directory + * @param token the API token + * @return the org + */ + public static Org create(File directory, String name, String token) throws IOException { + directory.mkdirs(); + + Org org = new Org(); + org.name = name; + org.token = token; + org.directory = directory; + org.flows = new ArrayList<>(); + org.legacySubmissionsDirectory = null; + + FileUtils.writeStringToFile(new File(directory, DETAILS_FILE), "{\"name\":\"" + name + "\",\"token\":\"" + token + "\"}"); + FileUtils.writeStringToFile(new File(directory, FLOWS_FILE), "[]"); + return org; + } + + /** + * Loads an org from a directory + * + * @param directory the directory + * @return the org + */ + static Org load(File directory) throws IOException { + if (!directory.exists() || !directory.isDirectory()) { + throw new RuntimeException(directory.getPath() + " is not a valid org directory"); + } + + // read details.json + String detailsJSON = FileUtils.readFileToString(new File(directory, DETAILS_FILE)); + Org org = JsonUtils.unmarshal(detailsJSON, Org.class); + org.directory = directory; + + // read flows.json + String flowsJson = FileUtils.readFileToString(new File(directory, FLOWS_FILE)); + + TypeToken type = new TypeToken>() { + }; + org.flows = JsonUtils.unmarshal(flowsJson, type); + return org; + } + + /** + * Gets the UUID of this org (i.e. the name of its directory) + * + * @return the UUID + */ + public String getUuid() { + return directory.getName(); + } + + /** + * Gets the directory of this org + * + * @return the directory + */ + public File getDirectory() { + return directory; + } + + /** + * Gets the API token for this org + * + * @return the API token + */ + public String getToken() { + return token; + } + + /** + * Gets the name of this org + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the country code of this org + * + * @return the country code + */ + public String getCountry() { + return country; + } + + public String getPrimaryLanguage() { + return primaryLanguage; + } + + public void setPrimaryLanguage(String language) { + primaryLanguage = language; + } + + public String[] getLanguages() { + return languages; + } + + public String getTimezone() { + return timezone; + } + + public String getDateStyle() { + return dateStyle; + } + + public boolean isAnon() { + return anon; + } + + /** + * Gets the directory of legacy submissions for this org (may be null) + * + * @return the directory + */ + public String getLegacySubmissionsDirectory() { + return legacySubmissionsDirectory; + } + + public void setLegacySubmissionsDirectory(String legacySubmissionsDirectory) { + this.legacySubmissionsDirectory = legacySubmissionsDirectory; + } + + public List getFlows() { + return flows; + } + + /** + * Gets the flow with the given UUID + * + * @param uuid the flow UUID + * @return the flow or null if no such flow exists + */ + public Flow getFlow(String uuid) { + for (Flow flow : flows) { + if (flow.getUuid().equals(uuid)) { + return flow; + } + } + return null; + } + + /** + * Gets whether this org has downloaded assets + * + * @return true if org has assets + */ + public boolean hasAssets() { + return new File(directory, ASSETS_FILE).exists(); + } + + /** + * Gets this org's downloaded assets + * + * @return the assets JSON + */ + public String getAssets() throws IOException { + return FileUtils.readFileToString(new File(directory, ASSETS_FILE)); + } + + public String initialLanguage; + /** + * Refreshes this org from RapidPro + */ + public void refresh(boolean includeAssets, RefreshProgress progress) throws TembaException, IOException { + TembaService svc = SurveyorApplication.get().getTembaService(); + io.rapidpro.surveyor.net.responses.Org apiOrg = svc.getOrg(this.token); + + this.name = apiOrg.getName(); + this.initialLanguage = apiOrg.getPrimaryLanguage(); + this.primaryLanguage = apiOrg.getPrimaryLanguage(); + + this.languages = apiOrg.getLanguages(); + this.timezone = apiOrg.getTimezone(); + this.country = apiOrg.getCountry(); + this.dateStyle = apiOrg.getDateStyle(); + this.anon = apiOrg.isAnon(); + this.save(); + + if (progress != null) { + progress.reportProgress(5); + } + + if (includeAssets) { + refreshAssets(progress); + } + } + + public void save() throws IOException { + // (re)write org fields to details.json + String detailsJSON = JsonUtils.marshal(this); + FileUtils.writeStringToFile(new File(directory, DETAILS_FILE), detailsJSON); + } + + int doneFile; + int fileCount; + private void refreshAssets(RefreshProgress progress) throws TembaException, IOException { + List fields = SurveyorApplication.get().getTembaService().getFields(getToken()); + + progress.reportProgress(10); + + List groups = SurveyorApplication.get().getTembaService().getGroups(getToken()); + + progress.reportProgress(15); + + List flows = SurveyorApplication.get().getTembaService().getFlows(getToken()); + + progress.reportProgress(20); + + List definitions = SurveyorApplication.get().getTembaService().getDefinitions(getToken(), flows); + + // Download Files + progress.reportMessage("Refreshing organization details.."); + + fileCount = definitions.size(); + doneFile = 0; + int filePercent = 0; + int perFile = (int) (60 / (float)fileCount); + for(RawJson df: definitions){ + progress.reportMessage("Loading Flow Contents: " + (doneFile+1) + " / " + fileCount); + progress.reportProgress(20 + filePercent); + downloadMedia(df, progress); + doneFile++; + + filePercent = filePercent + perFile; + } + + progress.reportMessage("Refreshing organization details.."); + + progress.reportProgress(80); + + List boundaries = SurveyorApplication.get().getTembaService().getBoundaries(getToken()); + + progress.reportProgress(85); + + OrgAssets assets = OrgAssets.fromTemba(fields, groups, boundaries, definitions); + String assetsJSON = JsonUtils.marshal(assets); + + FileUtils.writeStringToFile(new File(directory, ASSETS_FILE), assetsJSON); + + progress.reportProgress(90); + + // update the flow summaries + this.flows.clear(); + this.flows.addAll(assets.getFlows()); + + // and write that to flows.json as well + String summariesJSON = JsonUtils.marshal(this.flows); + FileUtils.writeStringToFile(new File(directory, FLOWS_FILE), summariesJSON); + + progress.reportProgress(100); + + Logger.d("Refreshed assets for org " + getUuid() + " (flows=" + flows.size() + ", fields=" + fields.size() + ", groups=" + groups.size() + ")"); + } + + private void downloadMedia(RawJson definition, RefreshProgress progress){ + String flow_name = ""; + JsonObject def = new JsonParser().parse(definition.toString()).getAsJsonObject(); + if(def.get("name") != null){ + flow_name = def.get("name").getAsString(); + } + if(def.get("nodes") != null){ + JsonArray nodes = def.get("nodes").getAsJsonArray(); + for(int i = 0; i < nodes.size(); i++){ + if(nodes.get(i) != null){ + // Multiple Actions + JsonObject node = nodes.get(i).getAsJsonObject(); + if(nodes.get(i).getAsJsonObject().get("actions") != null){ + JsonArray actions = node.get("actions").getAsJsonArray(); + for(int j = 0; j < actions.size(); j++){ + if(actions.get(j).getAsJsonObject().get("attachments") != null) { + // Contains Attachments + JsonArray attachments = actions.get(j).getAsJsonObject().get("attachments").getAsJsonArray(); + for (int k = 0; k < attachments.size(); k++) { + String attachment_data = attachments.get(k).getAsString(); + String attachment_uri = ""; + Log.e("ATTACHMENTS", attachment_data); + + int x = attachment_data.indexOf(":"); + attachment_uri = attachment_data.substring(x+1); + String file_name = "flow_asset_" + getMD5(attachment_uri); + URL url = null; + try { + url = new URL(attachment_uri); + FileUtils.copyURLToFile(url, new File(directory.getAbsolutePath() + "/" + file_name)); + progress.reportMessage("Loading Flow Contents: " + (doneFile+1) + " / " + fileCount + + "\nFlow: " + flow_name + + "\nURL: " + url.getHost()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } + } + } + + } + + public interface RefreshProgress { + void reportProgress(int percent); + void reportMessage(String message); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/data/OrgService.java b/app/src/main/java/io/rapidpro/surveyor/data/OrgService.java new file mode 100644 index 0000000..fac12e4 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/data/OrgService.java @@ -0,0 +1,60 @@ +package io.rapidpro.surveyor.data; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.net.TembaException; + +/** + * Directory based service for org configurations + */ +public class OrgService { + + private File rootDir; + + private Map cache = new HashMap<>(); + + public OrgService(File rootDir) { + this.rootDir = rootDir; + + Logger.d("OrgService created for directory " + this.rootDir.getAbsolutePath()); + } + + public Org get(String uuid) throws IOException { + if (cache.containsKey(uuid)) { + Logger.d("Returning cached org " + uuid); + return cache.get(uuid); + } + + File directory = new File(rootDir, uuid); + Org org = Org.load(directory); + Logger.d("Loaded org " + uuid); + cache.put(uuid, org); + return org; + } + + /** + * Fetches an org using the given API token and saves it to the org storage + * + * @param uuid the UUID of the org + * @param name the name of the org + * @param token the API token + */ + public Org getOrFetch(String uuid, String name, String token) throws TembaException, IOException { + File directory = new File(rootDir, uuid); + if (directory.exists() && directory.isDirectory()) { + return get(uuid); + } + + Org org = Org.create(directory, name, token); + org.refresh(false, null); + return org; + } + + public void clearCache() { + cache.clear(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/data/Submission.java b/app/src/main/java/io/rapidpro/surveyor/data/Submission.java new file mode 100644 index 0000000..c842d6d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/data/Submission.java @@ -0,0 +1,257 @@ +package io.rapidpro.surveyor.data; + +import android.net.Uri; + +import com.nyaruka.goflow.mobile.Event; +import com.nyaruka.goflow.mobile.Modifier; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.engine.EngineException; +import io.rapidpro.surveyor.engine.Session; +import io.rapidpro.surveyor.net.TembaException; +import io.rapidpro.surveyor.net.requests.SubmissionPayload; +import io.rapidpro.surveyor.utils.RawJson; +import io.rapidpro.surveyor.utils.SurveyUtils; + +public class Submission { + + private static final String SESSION_FILE = "session.json"; + private static final String MODIFIERS_FILE = "modifiers.jsonl"; + private static final String EVENTS_FILE = "events.jsonl"; + private static final String COMPLETION_FILE = ".completed"; + private static final String MEDIA_DIR = "media"; + + private Org org; + private File directory; + + /** + * Creates a new submission for the given org in the given directory + * + * @param org the org + * @param directory the directory + */ + public Submission(Org org, File directory) { + this.org = org; + this.directory = directory; + } + + /** + * Gets the UUID of this org (i.e. the name of its directory) + * + * @return the UUID + */ + public String getUuid() { + return directory.getName(); + } + + /** + * Gets the org this submission belongs to + * + * @return the org + */ + public Org getOrg() { + return org; + } + + /** + * Get's the directory this submission is stored in + * + * @return the directory + */ + public File getDirectory() { + return directory; + } + + /** + * Get's the directory this submission's media is stored in + * + * @return the directory + */ + public File getMediaDirectory() throws IOException { + return SurveyUtils.mkdir(directory, MEDIA_DIR); + } + + /** + * Gets whether this submission is complete + * + * @return true if complete + */ + public boolean isCompleted() { + return new File(directory, COMPLETION_FILE).exists(); + } + + /** + * Saves the current session + * + * @param session the current session + */ + public void saveSession(Session session) throws IOException, EngineException { + FileUtils.writeStringToFile(new File(directory, SESSION_FILE), session.toJSON()); + } + + /** + * Saves new modifiers to this submission + * + * @param modifiers the modifiers to save + */ + public void saveNewModifiers(List modifiers) throws IOException { + File file = new File(directory, MODIFIERS_FILE); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file, true)); + + for (Modifier mod : modifiers) { + writer.write(mod.payload()); + writer.newLine(); + } + + writer.close(); + } + + /** + * Saves new events to this submission + * + * @param events the events to save + */ + public void saveNewEvents(List events) throws IOException { + File file = new File(directory, EVENTS_FILE); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file, true)); + + for (Event event : events) { + writer.write(event.payload()); + writer.newLine(); + } + + writer.close(); + } + + /** + * Saves a new media file to this submission + * + * @param data the media data + * @param extension the file extension + * @return the URI of the saved file + */ + public Uri saveMedia(byte[] data, String extension) throws IOException { + File file = new File(getMediaDirectory(), UUID.randomUUID().toString() + "." + extension); + FileUtils.writeByteArrayToFile(file, data); + return SurveyorApplication.get().getUriForFile(file); + } + + /** + * Saves a new media file to this submission + * + * @param src the file to copy + * @return the URI of the saved file + */ + public Uri saveMedia(File src) throws IOException { + String extension = FilenameUtils.getExtension(src.getName()); + File file = new File(getMediaDirectory(), UUID.randomUUID().toString() + "." + extension); + FileUtils.copyFile(src, file); + return SurveyorApplication.get().getUriForFile(file); + } + + /** + * Marks this submission as completed + */ + public void complete() throws IOException { + FileUtils.writeStringToFile(new File(directory, COMPLETION_FILE), ""); + } + + /** + * Deletes this submission from the file system + */ + public void delete() { + try { + FileUtils.deleteDirectory(directory); + directory = null; + } catch (IOException e) { + Logger.e("Unable to delete submission " + directory.getAbsolutePath(), e); + } + } + + public void submit() throws IOException, TembaException { + Logger.d("Submitting submission " + getUuid() + "..."); + + String session = FileUtils.readFileToString(new File(directory, SESSION_FILE)); + List modifiers = FileUtils.readLines(new File(directory, MODIFIERS_FILE)); + List events = FileUtils.readLines(new File(directory, EVENTS_FILE)); + + // upload all media and get a new remote URL for each item + Map mediaUrls = uploadMedia(); + + // convert the map to parallel arrays of strings for replacement + String[] oldUris = new String[mediaUrls.size()]; + String[] newUrls = new String[mediaUrls.size()]; + int e = 0; + for (Map.Entry entry : mediaUrls.entrySet()) { + oldUris[e] = entry.getKey().toString(); + newUrls[e] = entry.getValue(); + e++; + } + + for (int i = 0; i < oldUris.length; i++) { + Logger.d(oldUris[i] + " --> " + newUrls[i]); + } + + RawJson sessionJson = new RawJson(StringUtils.replaceEach(session, oldUris, newUrls)); + List modifiersJson = new ArrayList<>(modifiers.size()); + for (String modifier : modifiers) { + modifiersJson.add(new RawJson(modifier)); + } + List eventsJson = new ArrayList<>(events.size()); + for (String event : events) { + eventsJson.add(new RawJson(StringUtils.replaceEach(event, oldUris, newUrls))); + } + + SubmissionPayload payload = new SubmissionPayload(sessionJson, modifiersJson, eventsJson); + + SurveyorApplication.get().getTembaService().submit(org.getToken(), payload); + + delete(); + } + + /** + * Upload all media files for this submission and return a map of their new URLs + * + * @return the map of local URIs to remote URLs + */ + private Map uploadMedia() throws IOException, TembaException { + if (!hasMedia()) { + return Collections.emptyMap(); + } + + SurveyorApplication app = SurveyorApplication.get(); + Map uploads = new HashMap<>(); + + for (File mediaFile : getMediaDirectory().listFiles()) { + Uri mediaUri = app.getUriForFile(mediaFile); + String newUrl = app.getTembaService().uploadMedia(org.getToken(), mediaUri); + + uploads.put(mediaUri, newUrl); + + Logger.d("Uploaded media " + mediaUri + " to " + newUrl); + } + return uploads; + } + + private boolean hasMedia() { + return new File(directory, MEDIA_DIR).exists(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/data/SubmissionService.java b/app/src/main/java/io/rapidpro/surveyor/data/SubmissionService.java new file mode 100644 index 0000000..c4d3767 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/data/SubmissionService.java @@ -0,0 +1,130 @@ +package io.rapidpro.surveyor.data; + +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.utils.SurveyUtils; + +/** + * Directory based service for flow session submissions + */ +public class SubmissionService { + + private File rootDir; + + /** + * Creates a new submission service + * + * @param rootDir the root directory + */ + public SubmissionService(File rootDir) { + this.rootDir = rootDir; + + Logger.d("SubmissionService created for directory " + this.rootDir.getAbsolutePath()); + } + + /** + * Creates a new submission for the given flow in the given org + * + * @param org the org + * @param flow the flow + * @return the new submission + */ + public Submission newSubmission(Org org, Flow flow) throws IOException { + File flowDir = SurveyUtils.mkdir(rootDir, org.getUuid(), flow.getUuid()); + + // blow away any existing incomplete submissions for this flow + discardIncomplete(org, flow); + + File directory = new File(flowDir, UUID.randomUUID().toString()); + directory.mkdirs(); + + Logger.d("Creating new submission in " + directory.getPath()); + + return new Submission(org, directory); + } + + private void discardIncomplete(Org org, Flow flow) throws IOException { + for (Submission sub : getAll(org, flow)) { + if (!sub.isCompleted()) { + FileUtils.deleteDirectory(sub.getDirectory()); + } + } + } + + /** + * Return the completed submissions across all flows for the given org + * + * @param org the org + * @return the submissions + */ + public List getCompleted(Org org) { + List pending = new ArrayList<>(); + for (Flow flow : org.getFlows()) { + pending.addAll(getCompleted(org, flow)); + } + return pending; + } + + private List getAll(Org org, Flow flow) { + List all = new ArrayList<>(); + File orgDir = new File(rootDir, org.getUuid()); + File flowDir = new File(orgDir, flow.getUuid()); + if (flowDir.exists()) { + for (File file : flowDir.listFiles(new FileFilter() { + @Override + public boolean accept(File f) { + return f.isDirectory(); + } + })) { + all.add(new Submission(org, file)); + } + } + return all; + } + + /** + * Return the pending submissions for the given flow in the given org + * + * @param org the org + * @param flow the flow + * @return the submissions + */ + public List getCompleted(Org org, Flow flow) { + List completed = new ArrayList<>(); + for (Submission sub : getAll(org, flow)) { + if (sub.isCompleted()) { + completed.add(sub); + } + } + return completed; + } + + /** + * Return the count of completed submissions across all flows for the given org + * + * @param org the org + * @return the count of submissions + */ + public int getCompletedCount(Org org) { + return getCompleted(org).size(); + } + + /** + * Return the count of completed submissions for the given flow in the given org + * + * @param org the org + * @param flow the flow + * @return the count of submissions + */ + public int getCompletedCount(Org org, Flow flow) { + return getCompleted(org, flow).size(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/Contact.java b/app/src/main/java/io/rapidpro/surveyor/engine/Contact.java new file mode 100644 index 0000000..e817b21 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/Contact.java @@ -0,0 +1,16 @@ +package io.rapidpro.surveyor.engine; + +import com.nyaruka.goflow.mobile.Mobile; +import com.nyaruka.goflow.mobile.SessionAssets; + +public class Contact { + com.nyaruka.goflow.mobile.Contact target; + + private Contact(com.nyaruka.goflow.mobile.Contact target) { + this.target = target; + } + + public static Contact createEmpty(SessionAssets sa) { + return new Contact(Mobile.newEmptyContact(sa)); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/Engine.java b/app/src/main/java/io/rapidpro/surveyor/engine/Engine.java new file mode 100644 index 0000000..ad3b64c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/Engine.java @@ -0,0 +1,218 @@ +package io.rapidpro.surveyor.engine; + +import com.nyaruka.goflow.mobile.AssetsSource; +import com.nyaruka.goflow.mobile.Environment; +import com.nyaruka.goflow.mobile.FlowReference; +import com.nyaruka.goflow.mobile.Mobile; +import com.nyaruka.goflow.mobile.MsgIn; +import com.nyaruka.goflow.mobile.Resume; +import com.nyaruka.goflow.mobile.SessionAndSprint; +import com.nyaruka.goflow.mobile.SessionAssets; +import com.nyaruka.goflow.mobile.StringSlice; +import com.nyaruka.goflow.mobile.Trigger; +import com.vdurmont.semver4j.Semver; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import io.rapidpro.surveyor.data.Org; + +/** + * Wraps functionality in the goflow mobile library module + */ +public class Engine { + /** + * The engine singleton + */ + private static Engine engine = new Engine(); + + private com.nyaruka.goflow.mobile.Engine target; + + public static Engine getInstance() { + return engine; + } + + /** + * Creates a new engine + */ + private Engine() { + this.target = new com.nyaruka.goflow.mobile.Engine(); + } + + /** + * Returns whether the given definition is in legacy format + * + * @param definition the legacy definition + * @return true if definition is legacy + */ + public static boolean isLegacyDefinition(String definition) { + return Mobile.isLegacyDefinition(definition); + } + + /** + * Migrates a legacy flow definition to the new engine format + * + * @param definition the legacy definition + * @return the new definition + */ + public static String migrateLegacyDefinition(String definition) { + try { + return Mobile.migrateLegacyDefinition(definition); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Gets the current spec version + * + * @return the spec version + */ + public static Semver currentSpecVersion() { + return new Semver(Mobile.currentSpecVersion(), Semver.SemverType.LOOSE); + } + + /** + * Gets whether the given flow spec version is supported by the flow engine + * + * @param ver the spec version + * @return true if supported + */ + public static boolean isSpecVersionSupported(String ver) { + return Mobile.isSpecVersionSupported(ver); + } + + /** + * Creates an engine environment from the given org + * + * @param org the org + * @return the environment + */ + public static Environment createEnvironment(Org org) { + String dateFormat = org.getDateStyle().equals("day_first") ? "DD-MM-YYYY" : "MM-DD-YYYY"; + String timeformat = "tt:mm"; + StringSlice languages = listToSlice(Arrays.asList(org.getLanguages())); + String redactionPolicy = org.isAnon() ? "urns" : "none"; + return new Environment(dateFormat, timeformat, org.getTimezone(), org.getPrimaryLanguage(), languages, org.getCountry(), redactionPolicy); + } + + /** + * Loads an assets source from the given JSON + * + * @param json the assets JSON + * @return the source + */ + public static AssetsSource loadAssets(String json) throws EngineException { + try { + return new AssetsSource(json); + } catch (Exception e) { + throw new EngineException(e); + } + } + + /** + * Creates a new session assets instance from an assets source + * + * @param source the source + * @return the session assets + */ + public static SessionAssets createSessionAssets(AssetsSource source) throws EngineException { + try { + return new SessionAssets(source); + } catch (Exception e) { + throw new EngineException(e); + } + } + + /** + * Creates a new incoming message + * + * @param text the message text + * @return the message + */ + public static MsgIn createMsgIn(String text) { + return new MsgIn(UUID.randomUUID().toString(), text, null); + } + + /** + * Creates a new incoming message with an attachment + * + * @param text the message text + * @param attachment the message attachment + * @return the message + */ + public static MsgIn createMsgIn(String text, String attachment) { + return new MsgIn(UUID.randomUUID().toString(), text, listToSlice(Collections.singletonList(attachment))); + } + + /** + * Creates a new manual trigger + * + * @param env the environment + * @param contact the contact + * @param flow the flow reference + * @return the trigger + */ + public static Trigger createManualTrigger(Environment env, Contact contact, FlowReference flow) { + return Mobile.newManualTrigger(env, contact != null ? contact.target : null, flow); + } + + /** + * Creates a new message resume + * + * @param env the environment + * @param contact the contact + * @param msg the message + * @return the resume + */ + public static Resume createMsgResume(Environment env, Contact contact, MsgIn msg) { + return Mobile.newMsgResume(env, contact != null ? contact.target : null, msg); + } + + static StringSlice listToSlice(List items) { + if (items == null) { + return null; + } + StringSlice slice = new StringSlice(items.size()); + for (String item : items) { + slice.add(item); + } + return slice; + } + + /** + * Creates and starts a new session + * + * @param assets the session assets + */ + public Pair newSession(SessionAssets assets, Trigger trigger) throws EngineException { + try { + SessionAndSprint ss = this.target.newSession(assets, trigger); + return new ImmutablePair<>( + new Session(ss.session()), + Sprint.fromNative(ss.sprint()) + ); + } catch (Exception e) { + throw new EngineException(e); + } + } + + /** + * Reads an existing session from JSON + * + * @param assets the session assets + * @param json the JSON + */ + public Session readSession(SessionAssets assets, String json) throws EngineException { + try { + return new Session(this.target.readSession(assets, json)); + } catch (Exception e) { + throw new EngineException(e); + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/EngineException.java b/app/src/main/java/io/rapidpro/surveyor/engine/EngineException.java new file mode 100644 index 0000000..be8e8c1 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/EngineException.java @@ -0,0 +1,9 @@ +package io.rapidpro.surveyor.engine; + +import io.rapidpro.surveyor.SurveyorException; + +public class EngineException extends SurveyorException { + public EngineException(Exception e) { + super(e.getMessage(), e); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/FieldAsset.java b/app/src/main/java/io/rapidpro/surveyor/engine/FieldAsset.java new file mode 100644 index 0000000..c8369ea --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/FieldAsset.java @@ -0,0 +1,20 @@ +package io.rapidpro.surveyor.engine; + +import io.rapidpro.surveyor.net.responses.Field; + +public class FieldAsset { + private String key; + private String name; + private String type; + + public FieldAsset(String key, String name, String type) { + this.key = key; + this.name = name; + this.type = type; + } + + public static FieldAsset fromTemba(Field field) { + String type = field.getValueType().equals("numeric") ? "number" : field.getValueType(); + return new FieldAsset(field.getKey(), field.getLabel(), type); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/GroupAsset.java b/app/src/main/java/io/rapidpro/surveyor/engine/GroupAsset.java new file mode 100644 index 0000000..e00bc9a --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/GroupAsset.java @@ -0,0 +1,19 @@ +package io.rapidpro.surveyor.engine; + +import io.rapidpro.surveyor.net.responses.Group; + +public class GroupAsset { + private String uuid; + private String name; + private String query; + + public GroupAsset(String uuid, String name, String query) { + this.uuid = uuid; + this.name = name; + this.query = query; + } + + public static GroupAsset fromTemba(Group group) { + return new GroupAsset(group.getUuid(), group.getName(), group.getQuery()); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/LocationAsset.java b/app/src/main/java/io/rapidpro/surveyor/engine/LocationAsset.java new file mode 100644 index 0000000..8697764 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/LocationAsset.java @@ -0,0 +1,56 @@ +package io.rapidpro.surveyor.engine; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import io.rapidpro.surveyor.net.responses.Boundary; + +public class LocationAsset { + private String name; + private String[] aliases; + private List children; + + public LocationAsset(String name, String[] aliases) { + this.name = name; + this.aliases = aliases; + this.children = new ArrayList<>(); + } + + public String getName() { + return name; + } + + public String[] getAliases() { + return aliases; + } + + public List getChildren() { + return children; + } + + public static LocationAsset fromTemba(List boundaries) { + // create locations and organize by OSM ID + Map locationsByOsmid = new HashMap<>(boundaries.size()); + for (Boundary boundary : boundaries) { + locationsByOsmid.put(boundary.getOsmID(), new LocationAsset(boundary.getName(), boundary.getAliases())); + } + + LocationAsset root = null; + + // create parent-child relationships + for (Boundary boundary : boundaries) { + LocationAsset location = locationsByOsmid.get(boundary.getOsmID()); + + if (boundary.getParent() != null) { + LocationAsset parent = locationsByOsmid.get(boundary.getParent().getOsmID()); + parent.getChildren().add(location); + } else { + root = location; + } + } + + return root; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/OrgAssets.java b/app/src/main/java/io/rapidpro/surveyor/engine/OrgAssets.java new file mode 100644 index 0000000..d881638 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/OrgAssets.java @@ -0,0 +1,62 @@ +package io.rapidpro.surveyor.engine; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.Field; +import io.rapidpro.surveyor.net.responses.Group; +import io.rapidpro.surveyor.utils.RawJson; + +public class OrgAssets { + private List fields; + private List groups; + private List locations; + private List flows; + + /** + * Constructs a new set of org assets (fields, groups, locations and flows) + */ + private OrgAssets(List fields, List groups, List locations, List flows) { + this.fields = fields; + this.groups = groups; + this.locations = locations; + this.flows = flows; + } + + /** + * Constructs a new set of org assets from the data returned from the Temba API + */ + public static OrgAssets fromTemba(List fields, List groups, List boundaries, List flows) { + List fieldAssets = new ArrayList<>(fields.size()); + for (Field field : fields) { + fieldAssets.add(FieldAsset.fromTemba(field)); + } + + List groupAssets = new ArrayList<>(groups.size()); + for (Group group : groups) { + groupAssets.add(GroupAsset.fromTemba(group)); + } + + List locationAssets = new ArrayList<>(); + if (boundaries.size() > 0) { + LocationAsset location = LocationAsset.fromTemba(boundaries); + locationAssets = Collections.singletonList(location); + } + + return new OrgAssets(fieldAssets, groupAssets, locationAssets, flows); + } + + /** + * Extract the flow summaries from this set of org assets + */ + public List getFlows() { + List summaries = new ArrayList<>(this.flows.size()); + for (RawJson flow : this.flows) { + summaries.add(Flow.extract(flow)); + } + return summaries; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/Session.java b/app/src/main/java/io/rapidpro/surveyor/engine/Session.java new file mode 100644 index 0000000..c6304be --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/Session.java @@ -0,0 +1,75 @@ +package io.rapidpro.surveyor.engine; + +import com.nyaruka.goflow.mobile.Resume; +import com.nyaruka.goflow.mobile.SessionAssets; +import com.nyaruka.goflow.mobile.Trigger; +import com.nyaruka.goflow.mobile.Wait; + +public class Session { + private com.nyaruka.goflow.mobile.Session target; + + /** + * Creates a new session + */ + Session(com.nyaruka.goflow.mobile.Session target) { + this.target = target; + } + + /** + * Resumes this session with a resume + * + * @param resume the resume + * @return the events + */ + public Sprint resume(Resume resume) throws EngineException { + try { + return Sprint.fromNative(target.resume(resume)); + } catch (Exception e) { + throw new EngineException(e); + } + } + + /** + * Gets the assets used by this session + * + * @return the assets + */ + public SessionAssets getAssets() { + return target.assets(); + } + + /** + * Gets the status of this session + * + * @return the status + */ + public String getStatus() { + return target.status(); + } + + /** + * Gets whether this session is waiting for input + * + * @return true if session is waiting + */ + public boolean isWaiting() { + return getStatus().equals("waiting"); + } + + public Wait getWait() { + return target.getWait(); + } + + /** + * Marshals this session to JSON + * + * @return the JSON + */ + public String toJSON() throws EngineException { + try { + return target.toJSON(); + } catch (Exception e) { + throw new EngineException(e); + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/engine/Sprint.java b/app/src/main/java/io/rapidpro/surveyor/engine/Sprint.java new file mode 100644 index 0000000..854b4b9 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/engine/Sprint.java @@ -0,0 +1,48 @@ +package io.rapidpro.surveyor.engine; + +import com.nyaruka.goflow.mobile.Event; +import com.nyaruka.goflow.mobile.EventSlice; +import com.nyaruka.goflow.mobile.Modifier; +import com.nyaruka.goflow.mobile.ModifierSlice; + +import java.util.ArrayList; +import java.util.List; + +public class Sprint { + private List modifiers; + + private List events; + + private Sprint(List modifiers, List events) { + this.modifiers = modifiers; + this.events = events; + } + + static Sprint fromNative(com.nyaruka.goflow.mobile.Sprint s) { + return new Sprint(sliceToList(s.modifiers()), sliceToList(s.events())); + } + + public List getModifiers() { + return modifiers; + } + + public List getEvents() { + return events; + } + + private static List sliceToList(EventSlice slice) { + List list = new ArrayList<>((int) slice.length()); + for (int e = 0; e < slice.length(); e++) { + list.add(slice.get(e)); + } + return list; + } + + private static List sliceToList(ModifierSlice slice) { + List list = new ArrayList<>((int) slice.length()); + for (int e = 0; e < slice.length(); e++) { + list.add(slice.get(e)); + } + return list; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/DashboardActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/DashboardActivity.java new file mode 100644 index 0000000..3805a53 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/DashboardActivity.java @@ -0,0 +1,560 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.view.View; +import android.view.Window; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.util.Pair; +import androidx.recyclerview.widget.RecyclerView; +import android.transition.Fade; + +import com.yarolegovich.discretescrollview.DiscreteScrollView; +import com.yarolegovich.discretescrollview.transform.Pivot; +import com.yarolegovich.discretescrollview.transform.ScaleTransformer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.BaseActivity; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.extend.adapter.CustomScrollAdapter; +import io.rapidpro.surveyor.extend.adapter.DashboardList_RV; +import io.rapidpro.surveyor.ui.ViewCache; + +import static io.rapidpro.surveyor.extend.StaticMethods.AppDistribution; +import static io.rapidpro.surveyor.extend.StaticMethods.gotoSurveyor; +import static io.rapidpro.surveyor.extend.StaticMethods.pending_restart; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class DashboardActivity extends BaseActivity implements CustomScrollAdapter.ClickListener { + + // Initialize + DiscreteScrollView scrollView; + List dashboardLists = new ArrayList<>(); + CustomScrollAdapter scrollAdapter; + ConstraintLayout btn_stories, btn_opinions, btn_results, btn_settings; + ImageView updateIcon; + int selectedButton = 0; + String orgUUID = ""; + int pending; + ViewCache cache; + private Org org; + Context context; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_dashboard); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + setLang_code(lang_code); + orgUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + context = this; + + findViews(); + initDashboard(); + cache = getViewCache(); + + if(org == null && !orgUUID.equals("")) { + try { + org = getSurveyor().getOrgService().get(orgUUID); + } catch (Exception e) { + // + } + } + + if(org != null) { + cache.setText(R.id.pendingOpinion, String.valueOf(pending)); + + if(pending == 0){ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 0f, 0f, 1); + }else{ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 1f, 1f, 1); + } + }else{ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 0f, 0f, 1); + } + + if(gotoSurveyor && isLoggedIn()){ + // Fix Background Color + //findViewById(R.id.root_layout).setBackgroundColor(Color.argb(255,255,247,239)); + + new Handler().postDelayed(() -> { + scrollView.scrollToPosition(2); + new Handler().postDelayed(() -> { + // Simulate Click on Surveyor + onItemClick(2, scrollView.getViewHolder(2).itemView); + gotoSurveyor = false; + }, 300); + }, 10); + } + if(gotoSurveyor && !isLoggedIn()){ + // Fix Background Color + //findViewById(R.id.root_layout).setBackgroundColor(Color.argb(255,255,247,239)); + + new Handler().postDelayed(() -> { + // Just Scroll : No Click + scrollView.scrollToPosition(2); + new Handler().postDelayed(() -> { + gotoSurveyor = false; + }, 300); + }, 10); + } + } + + /** + * findViewById in one place + */ + void findViews() { + scrollView = findViewById(R.id.scrollView); + btn_stories = findViewById(R.id.btn_stories); + btn_opinions = findViewById(R.id.btn_opinions); + btn_results = findViewById(R.id.btn_results); + btn_settings = findViewById(R.id.btn_settings); + updateIcon = findViewById(R.id.update_icon); + } + + /** + * Checks for Pending Submission and Redraws Texts for Langauge Change + */ + @Override + public void onResume(){ + + getWindow().setEnterTransition(null); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + setLang_code(lang_code); + + if(org != null) { + pending = getSurveyor().getSubmissionService().getCompletedCount(org); + cache.setText(R.id.pendingOpinion, String.valueOf(pending)); + + if(pending == 0){ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 0f, 0f, 1); + }else{ + if(selectedButton == 2){ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 1.2f, 1.2f, 1); + }else{ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 1f, 1f, 1); + } + } + }else{ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 0f, 0f, 0f, 0f, 1); + } + + // Change Texts + ((TextView) findViewById(R.id.text_app_name)).setText(R.string.v1_welcome_to_app); + ((TextView) btn_stories.getViewById(R.id.btn_text)).setText(R.string.v1_stories); + ((TextView) btn_opinions.getViewById(R.id.btn_text)).setText(R.string.v1_ureport); + ((TextView) btn_results.getViewById(R.id.btn_text)).setText(R.string.v1_survey); + ((TextView) btn_settings.getViewById(R.id.btn_text)).setText(R.string.v1_settings); + ((TextView) btn_stories.getViewById(R.id.btn_text)).setTextColor(Color.rgb(33,33,33)); + dashboardLists.get(0).setName(getString(R.string.v1_stories)); + dashboardLists.get(1).setName(getString(R.string.v1_ureport)); + dashboardLists.get(2).setName(getString(R.string.v1_survey)); + dashboardLists.get(3).setName(getString(R.string.v1_settings)); + //scrollAdapter = new CustomScrollAdapter(dashboardLists); + scrollAdapter.notifyDataSetChanged(); + + super.onResume(); + doRestart(); + } + + /** + * Checks for Force Restart Signal + */ + void doRestart() { + // Restart Activity + if(pending_restart){ + pending_restart = false; + this.recreate(); + } + } + + /** + * Initialize Dashboard Components + */ + void initDashboard() { + + dashboardLists.add(new DashboardList_RV(getString(R.string.v1_stories), R.drawable.v1_header_image_stories, R.drawable.v1_bg_shade_stories)); + dashboardLists.add(new DashboardList_RV(getString(R.string.v1_ureport), R.drawable.v1_header_image_results, R.drawable.v1_bg_shade_results)); + dashboardLists.add(new DashboardList_RV(getString(R.string.v1_survey), R.drawable.v1_header_image_opinion, R.drawable.v1_bg_shades_opinions)); + dashboardLists.add(new DashboardList_RV(getString(R.string.v1_settings), R.drawable.v1_header_image_settings, R.drawable.v1_bg_shade_settings)); + //dashboardLists.add(new DashboardList(getString(R.string.v1_settings), "test.json", "animation/test", R.drawable.v1_card_bg_settings, R.drawable.v1_bg_shade_settings)); + scrollAdapter = new CustomScrollAdapter(dashboardLists); + scrollAdapter.setOnItemClickListener(this); + scrollView.setAdapter(scrollAdapter); + + scrollView.setItemTransformer(new ScaleTransformer.Builder() + .setMaxScale(1.05f) + .setMinScale(0.8f) + .setPivotX(Pivot.X.CENTER) // CENTER is a default one + .setPivotY(Pivot.Y.CENTER) // CENTER is a default one + .build()); + + setButtonClickLisener(btn_stories, 0); + setButtonClickLisener(btn_opinions, 1); + setButtonClickLisener(btn_results, 2); + setButtonClickLisener(btn_settings, 3); + + StaticMethods.scaleView(btn_stories.getViewById(R.id.btn_image), 1f, 1f, 1.2f, 1.2f, 0); + StaticMethods.scaleView(btn_stories.getViewById(R.id.btn_text), 1f, 1f, 1.2f, 1.2f, 0); + + scrollView.addOnItemChangedListener((viewHolder, i) -> animateButtonClick(i)); + + scrollView.addScrollStateChangeListener(new DiscreteScrollView.ScrollStateChangeListener() { + @Override + public void onScrollStart(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + playNotification(getSurveyor(), getApplicationContext(), R.raw.swipe_sound, viewHolder.itemView); + } + + @Override + public void onScrollEnd(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + // Animate Bottom Bars + setBottomBar(i); + } + + @Override + public void onScroll(float v, int i, int i1, @Nullable RecyclerView.ViewHolder viewHolder, @Nullable RecyclerView.ViewHolder t1) { + // + } + }); + + // Update Icon + int currentVersion = BuildConfig.VERSION_CODE; + int availableVersion = getSurveyor().getPreferences().getInt("apk_version_code", 0); + int apkStatus = getSurveyor().getPreferences().getInt("apk_status", 0); + + if(availableVersion > currentVersion && apkStatus == 1){ + // New Version Available: Show Download Icon + updateIcon.setVisibility(View.VISIBLE); + updateIcon.setOnClickListener(view -> { + + playNotification(getSurveyor(), context, R.raw.button_click_yes, view); + + final Dialog dialog4 = new Dialog(context); + dialog4.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog4.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog4.setContentView(R.layout.v1_dialog_ui); + dialog4.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog4.findViewById(R.id.textMainText)).setText(R.string.v1_new_version_dashboard); + ((TextView) dialog4.findViewById(R.id.button_yes_text)).setText("Ok"); + ((TextView) dialog4.findViewById(R.id.button_no_text)).setText("Cancel"); + + dialog4.findViewById(R.id.button_yes).setOnClickListener(view1 -> { + playNotification(getSurveyor(), context, R.raw.button_click_yes, view1); + dialog4.dismiss(); + + try { + String file_url = getSurveyor().getPreferences().getString("apk_url", ""); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(file_url))); + } catch (Exception e) { + // + } + + }); + + dialog4.findViewById(R.id.button_no).setOnClickListener(view2 -> { + playNotification(getSurveyor(), context, R.raw.button_click_no, view2); + dialog4.dismiss(); + }); + + dialog4.show(); + + + }); + + // Updater Zoom Animation + updaterAnimation(); + }else{ + updateIcon.setVisibility(View.GONE); + } + + } + + /** + * Updater Icon Zoom Animation + */ + void updaterAnimation() { + try { + new Handler().postDelayed(() -> { + + // Zoom In + StaticMethods.scaleView( + findViewById(R.id.update_icon), + 1.0f, 1.0f, + 1.2f, 1.2f, + 250); + + // Zoom Out + new Handler().postDelayed(() -> { + StaticMethods.scaleView(findViewById(R.id.update_icon), 1.2f, 1.2f, 1.0f, 1.0f, 200); + }, 260); + + updaterAnimation(); + }, 3000); + } catch(Exception e) { + // + } + } + + /** + * Top Button Click Listener + * @param button + * @param id + */ + void setButtonClickLisener(ConstraintLayout button, final int id){ + button.setOnClickListener(view -> { + if(selectedButton == id){ + onItemClick(id, scrollView.getViewHolder(id).itemView); + } + scrollView.smoothScrollToPosition(id); + }); + } + + /** + * Animate Buttons + * @param position + */ + void animateButtonClick(final int position){ + int newColor = 0, prevColor = 0; + + ConstraintLayout selected_button = null, previous_button = null; + + switch(position){ + case 0: + selected_button = btn_stories; newColor = Color.argb(255,239,255,247); break; + case 1: + selected_button = btn_opinions; newColor = Color.argb(255,255,253,241); break; + case 2: + selected_button = btn_results; newColor = Color.argb(255,255,247,239); break; + case 3: + selected_button = btn_settings; newColor = Color.argb(255,249,253,255); break; + } + switch(selectedButton){ + case 0: + previous_button = btn_stories; prevColor = Color.argb(255,239,255,247); break; + case 1: + previous_button = btn_opinions; prevColor = Color.argb(255,255,253,241); break; + case 2: + previous_button = btn_results; prevColor = Color.argb(255,255,247,239); break; + case 3: + previous_button = btn_settings; prevColor = Color.argb(255,249,253,255); break; + } + + if(selected_button == null || previous_button == null){return;} + + if(selectedButton == position){ // Same Button or No Click Event + return; + }else{ + //new Handler().postDelayed(() -> skipFirst = true, 1000); + } + + StaticMethods.scaleView(previous_button.getViewById(R.id.btn_image), 1.2f, 1.2f, 1f, 1f, 150); + StaticMethods.scaleView(previous_button.getViewById(R.id.btn_text), 1.2f, 1.2f, 1f, 1f, 150); + + StaticMethods.scaleView(selected_button.getViewById(R.id.btn_image), 1f, 1f, 1.2f, 1.2f, 300); + StaticMethods.scaleView(selected_button.getViewById(R.id.btn_text), 1f, 1f, 1.2f, 1.2f, 300); + + // Opinions Number Circle + if(selected_button == btn_results && pending > 0){ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 1f, 1f, 1.2f, 1.2f, 300); + } + + if(previous_button == btn_results && pending > 0){ + StaticMethods.scaleView(findViewById(R.id.pendingOpinion), 1.2f, 1.2f, 1f, 1f, 150); + } + + // Change Button Color + ((TextView) previous_button.getViewById(R.id.btn_text)).setTextColor(Color.rgb(97,97,97)); + ((TextView) selected_button.getViewById(R.id.btn_text)).setTextColor(Color.rgb(33,33,33)); + + + // Animate Color + // colorChangeAnimator(prevColor, newColor); + selectedButton = position; + } + + boolean clickLock = false; + + /** + * Start new Activity with Shared Component(s) + * @param position + * @param v + */ + @Override + public void onItemClick(int position, View v) { + + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1500); + } + + //ImageView imageSun = findViewById(R.id.image_sun); + //View bgColor = v.findViewById(R.id.bgColor); + + ImageView cardImage = v.findViewById(R.id.cardImage); + View bgShade = v.findViewById(R.id.bg_shadow); + TextView activityName = v.findViewById(R.id.activityName); + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, v); + + Intent intent = null; + + if(position == 0) {intent = new Intent(DashboardActivity.this, StoriesListActivity.class);} + + if(AppDistribution.equals("RV")){ + if(position == 1) {intent = new Intent(DashboardActivity.this, OfflineUreportListActivity.class);} + }else{ + if(position == 1) {intent = new Intent(DashboardActivity.this, UreportCategoryActivity.class);} + } + + if(position == 2) {intent = new Intent(DashboardActivity.this, SurveyorActivity.class);} + if(position == 3) {intent = new Intent(DashboardActivity.this, SettingsActivity.class);} + + if(position == 2 && !isLoggedIn()){ + gotoSurveyor = true; + logout(); + return; + } + + //Pair p1 = Pair.create((View)imageSun, imageSun.getTransitionName()); + //Pair p2 = Pair.create((View)imageLottie, imageLottie.getTransitionName()); + //Pair p3 = Pair.create((View)bgColor, bgColor.getTransitionName()); + + Pair p1 = Pair.create((View)cardImage, cardImage.getTransitionName()); + Pair p2 = Pair.create((View)bgShade, bgShade.getTransitionName()); + Pair p3 = Pair.create((View)activityName, activityName.getTransitionName()); + + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, orgUUID); + + + ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(DashboardActivity.this, p1, p2, p3); + + Fade fade = new Fade(); + fade.excludeChildren(cardImage, true); + fade.excludeChildren(bgShade, true); + fade.excludeChildren(activityName, true); + getWindow().setEnterTransition(fade); + getWindow().setExitTransition(fade); + + startActivity(intent, options.toBundle()); + + } + + String lang_code = "en"; + + /** + * Switch Language Code + * @param lang_code + */ + void setLang_code(String lang_code){ + + if(AppDistribution.equals("RV") && lang_code.equals("bn")){ + // Force English + lang_code = "en"; + } + + getSurveyor().setPreference(SurveyorPreferences.LANG_CODE, lang_code); + this.lang_code = lang_code; + Locale myLocale = new Locale("en"); + + if(lang_code.equals("bn")){ + myLocale = new Locale("bn", "BD"); + }else if(lang_code.equals("en")){ + myLocale = new Locale("en"); + }else if(lang_code.equals("my")){ + myLocale = new Locale("my"); + } + + Locale.setDefault(myLocale); + Configuration config = new Configuration(); + config.locale = myLocale; + config.setLocale(myLocale); + getResources().updateConfiguration(config, getResources().getDisplayMetrics()); + } + + View lastBottomView = null; + + /** + * Select / Move Bottom Bar in the Dashboard + * @param num + */ + public void setBottomBar(int num){ + + if(lastBottomView == null){ + lastBottomView = findViewById(R.id.bottom_bar_1); + } + + View newView = null; + + if(num == 0){newView = findViewById(R.id.bottom_bar_1);} + if(num == 1){newView = findViewById(R.id.bottom_bar_2);} + if(num == 2){newView = findViewById(R.id.bottom_bar_3);} + if(num == 3){newView = findViewById(R.id.bottom_bar_4);} + + int colorGrey = Color.argb(255, 149, 241, 122); + int colorBlack = Color.argb(255, 0, 0, 0); + + ValueAnimator colorAnim = ObjectAnimator.ofInt(lastBottomView, "backgroundColor", colorBlack, colorGrey); + colorAnim.setDuration(500); + colorAnim.setEvaluator(new ArgbEvaluator()); + colorAnim.setRepeatCount(0); + colorAnim.start(); + + ValueAnimator colorAnim2 = ObjectAnimator.ofInt(newView, "backgroundColor", colorGrey, colorBlack); + colorAnim2.setDuration(500); + colorAnim2.setEvaluator(new ArgbEvaluator()); + colorAnim2.setRepeatCount(0); + colorAnim2.start(); + + lastBottomView = newView; + } + + /** + * Change Dashboard Background Color with Animation + * @param from + * @param to + */ + public void colorChangeAnimator(int from, int to){ + if(gotoSurveyor){ + findViewById(R.id.root_layout).setBackgroundColor(Color.argb(255,255,247,239)); + return; + } + + ValueAnimator colorAnim = ObjectAnimator.ofInt(findViewById(R.id.root_layout), "backgroundColor", from, to); + colorAnim.setDuration(1000); + colorAnim.setEvaluator(new ArgbEvaluator()); + colorAnim.setRepeatCount(0); + colorAnim.start(); + } + + @Override + public boolean requireLogin() { + return false; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportDetailsActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportDetailsActivity.java new file mode 100644 index 0000000..4088a94 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportDetailsActivity.java @@ -0,0 +1,205 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.TextView; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.DecimalFormat; +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.BaseActivity; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterOpinionlist; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.SurveyorDao; +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.questions; +import io.rapidpro.surveyor.extend.entity.model.results; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class OfflineUreportDetailsActivity extends BaseActivity { + + AppDatabase database; + SurveyorDao surveyorDao; + + private TextView summaryText; + + String resultName; + String resultID; + String resultDate; + + String lang_code = "en"; + + boolean isOpen = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_ureport_offline); + getWindow().setEnterTransition(null); + + isOpen = true; + + ObjectAnimator.ofFloat(findViewById(R.id.headerLayout), "alpha", 0, 1f).setDuration(1000).start(); + ObjectAnimator.ofFloat(findViewById(R.id.uCard), "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(findViewById(R.id.backButton), "translationX", -200, 0).setDuration(1000).start(); + + findViewById(R.id.backButton).setOnClickListener(view -> onBackPressed()); + + Window window = this.getWindow(); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + Intent intent = getIntent(); + resultName = intent.getExtras().getString("ResultName"); + resultID = intent.getExtras().getString("ResultID"); + resultDate = intent.getExtras().getString("ResultDate"); + + ((TextView) findViewById(R.id.activityName)).setText(resultName); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + database = databaseConnection.getDatabase(getApplicationContext()); + surveyorDao = database.getSurveyor(); + SurveyorLocal surveyLocal = surveyorDao.getSurveyByFlowId(resultID); + String survey_string = ""; + + JsonParser parser = new JsonParser(); + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(surveyLocal.getMy_pack() != null){ + survey_string = surveyLocal.getMy_pack(); + rootObj = parser.parse(survey_string).getAsJsonObject(); + } + }else if(lang_code.equals("bn")){ + if(surveyLocal.getBn_pack() != null){ + survey_string = surveyLocal.getBn_pack(); + rootObj = parser.parse(survey_string).getAsJsonObject(); + } + }else{ + if(surveyLocal.getData_pack() != null){ + survey_string = surveyLocal.getData_pack(); + rootObj = parser.parse(survey_string).getAsJsonObject(); + } + } + + if(rootObj != null){ + int numSub = 0; + + try { + numSub = rootObj. + getAsJsonArray("questions"). + get(0).getAsJsonObject(). + getAsJsonObject("results"). + get("set").getAsInt(); + } catch (Exception e) { + // + } + + int numSup = numSub; + + TextView poll_summary = findViewById(R.id.poll_summary); + + if(numSub == 0){ + poll_summary.setText(""); + }else { + + float responseRate = 0f; + DecimalFormat df = new DecimalFormat("#.00"); + + if (numSub > 0 && numSup > 0) { + responseRate = (float) numSub / ((float) numSup / 100); + responseRate = Float.valueOf(df.format(responseRate)); + } + + poll_summary.setText( + this.getString(R.string.v1_ureport_poll_summary_off) + .replace("%sup", String.valueOf(numSub)) + .replace("%sub", String.valueOf(responseRate)) + ); + } + } + + WebView webView = findViewById(R.id.webView); + + String WebContent = LoadData("ureport/index.html");; + + WebContent = WebContent.replace("::data_pack::", survey_string); + + //webView.setWebChromeClient(new WebChromeClient()); + webView.setBackgroundColor(Color.TRANSPARENT); + webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + + WebSettings settings = webView.getSettings(); + settings.setDomStorageEnabled(true); + settings.setJavaScriptEnabled(true); + settings.setDefaultTextEncodingName("utf-8"); + + webView.loadDataWithBaseURL("file:///android_asset/ureport/index.html", WebContent, "text/html; charset=utf-8", "UTF-8", null); + + summaryText = findViewById(R.id.poll_summary); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putInt("result_id", surveyLocal.getId()); + logBundle.putString("flow_id", surveyLocal.getFlow_id()); + StaticMethods.logFirebase("result_view", logBundle); + } + + public String LoadData(String inFile) { + String tContents = ""; + + try { + InputStream stream = getAssets().open(inFile); + int size = stream.available(); + byte[] buffer = new byte[size]; + stream.read(buffer); + stream.close(); + tContents = new String(buffer); + } catch (IOException e) { + // Handle exceptions here + } + + return tContents; + + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + super.onBackPressed(); + } + + @Override + public boolean requireLogin() { + return false; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportListActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportListActivity.java new file mode 100644 index 0000000..f677e01 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/OfflineUreportListActivity.java @@ -0,0 +1,62 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class OfflineUreportListActivity extends AppCompatActivity { + + ViewGroup headerLayout; + CardView storyList; + View bgColor; + ImageView backButton; + TextView activityName; + + boolean isOpen = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_ureport_offline_list); + getWindow().setEnterTransition(null); + + isOpen = true; + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + bgColor = findViewById(R.id.bgColor); + backButton = findViewById(R.id.backButton); + activityName = findViewById(R.id.activityName); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(500).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", -500, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", 0, -500).setDuration(500).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/SettingsActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/SettingsActivity.java new file mode 100644 index 0000000..2008c73 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/SettingsActivity.java @@ -0,0 +1,61 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class SettingsActivity extends AppCompatActivity { + + ViewGroup headerLayout; + CardView storyList; + ImageView backButton; + View bgColor; + public static TextView activityName; + boolean isOpen = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_settings_new); + getWindow().setEnterTransition(null); + + isOpen = true; + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + backButton = findViewById(R.id.backButton); + bgColor = findViewById(R.id.bgColor); + activityName = findViewById(R.id.activityName); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(500).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", -500, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", 0, -500).setDuration(500).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/StaticMethods.java b/app/src/main/java/io/rapidpro/surveyor/extend/StaticMethods.java new file mode 100644 index 0000000..13a73a1 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/StaticMethods.java @@ -0,0 +1,140 @@ +package io.rapidpro.surveyor.extend; + +import android.content.Context; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Bundle; +import android.view.HapticFeedbackConstants; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.ScaleAnimation; + +import com.google.firebase.analytics.FirebaseAnalytics; + +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.SurveyorApplication; + +public class StaticMethods { + + public static boolean pending_restart = false; + public static final int NO_SOUND = -1; + public static String current_UUID = "invalid"; + + public static String AppDistribution = BuildConfig.BUILD_DISTRIBUTION; // [ RV : GV ] + public static boolean gotoSurveyor = false; + + public static FirebaseAnalytics firebase; + + public static void playNotification(SurveyorApplication surveyorApplication, Context context, int sound_id){ + playNotification(surveyorApplication, context, sound_id, null); + } + + public static void playNotification(SurveyorApplication surveyorApplication, Context context, int sound_id, View view){ + + if(surveyorApplication.getPreferences().getString("sound_on", "true").equals("true")) { + final MediaPlayer mp = MediaPlayer.create(context, sound_id); + mp.setAudioStreamType(AudioManager.STREAM_MUSIC); + mp.start(); + mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mediaPlayer) { + mp.release(); + } + }); + } + + if(view != null && surveyorApplication.getPreferences().getString("vibration_on", "true").equals("true")){ + + view.performHapticFeedback( + HapticFeedbackConstants.VIRTUAL_KEY, + HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING + ); + } + } + + public static final String getMD5(final String s) { + final String MD5 = "MD5"; + try { + // Create MD5 Hash + MessageDigest digest = java.security.MessageDigest.getInstance(MD5); + digest.update(s.getBytes()); + byte messageDigest[] = digest.digest(); + + // Create Hex String + StringBuilder hexString = new StringBuilder(); + for (byte aMessageDigest : messageDigest) { + String h = Integer.toHexString(0xFF & aMessageDigest); + while(h.length() < 2){ + h = "0" + h; + } + hexString.append(h); + } + + return hexString.toString(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return ""; + } + + public static String getLocalUpdateDate(SurveyorApplication surveyor, String tag){ + return surveyor.getPreferences().getString(tag, ""); + } + + public static String getLocalUpdateDate(SurveyorApplication surveyor, String tag, String def){ + return surveyor.getPreferences().getString(tag, def); + } + + public static void setLocalUpdateDate(SurveyorApplication surveyor, String tag) { + SimpleDateFormat sdf = new SimpleDateFormat("dd MMM, yyyy hh:mm:ss a", Locale.ENGLISH); + String date_local = sdf.format(new Date()); + surveyor.setPreference(tag, date_local); + } + + public static boolean isConnected(Context context){ + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || + connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { + //we are connected to a network + return true; + } else { + return false; + } + } + + public static void scaleView(View v, float startX, float startY, float endX, float endY, int duration) { + Animation anim = new ScaleAnimation( + startX, endX, // Start and end values for the X axis scaling + startY, endY, // Start and end values for the Y axis scaling + Animation.RELATIVE_TO_SELF, 1f, // Pivot point of X scaling + Animation.RELATIVE_TO_SELF, 1f); // Pivot point of Y scaling + anim.setFillAfter(true); // Needed to keep the result of the animation + anim.setDuration(duration); + v.startAnimation(anim); + } + + public static int dip2px(Context context, float dp) { + float scale = context.getResources().getDisplayMetrics().density; + return (int) (dp * scale + 0.5f); + } + + public static int px2dip(Context context, float px) { + float scale = context.getResources().getDisplayMetrics().density; + return (int) (px / scale + 0.5f); + } + + public static void logFirebase(String parameter_name, Bundle bundle){ + firebase.logEvent(parameter_name, bundle); + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/StoriesActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/StoriesActivity.java new file mode 100644 index 0000000..cf9589e --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/StoriesActivity.java @@ -0,0 +1,727 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.speech.tts.TextToSpeech; +import android.speech.tts.UtteranceProgressListener; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; +import android.webkit.JavascriptInterface; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import com.airbnb.lottie.LottieAnimationView; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.skydoves.powermenu.PowerMenuItem; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; + +import de.hdodenhof.circleimageview.CircleImageView; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.BaseActivity; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.StoriesDao; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogComponent; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import me.myatminsoe.mdetect.MDetect; +import me.myatminsoe.mdetect.Rabbit; + +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; +import static io.rapidpro.surveyor.extend.StaticMethods.AppDistribution; +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class StoriesActivity extends BaseActivity { + + public boolean requireLogin() { + return false; + } + WebView webStory; + String imagePath = ""; + String videoPath = ""; + String storyText = ""; + ImageView speechButton; + LottieAnimationView speechButtonAnim; + + TextToSpeech ttsEngine = null; + + String lang_code = "en"; + + boolean isOpen = false; + + void setLang_code(String lang_code){ + + if(AppDistribution.equals("RV") && lang_code.equals("bn")){ + // Force English + lang_code = "en"; + } + + getSurveyor().setPreference(SurveyorPreferences.LANG_CODE, lang_code); + this.lang_code = lang_code; + + Locale myLocale = new Locale("en");; + + if(lang_code.equals("bn")){ + myLocale = new Locale("bn", "BD"); + }else if(lang_code.equals("en")){ + myLocale = new Locale("en"); + }else if(lang_code.equals("my")){ + myLocale = new Locale("my"); + } + + Locale.setDefault(myLocale); + Configuration config = new Configuration(); + config.locale = myLocale; + config.setLocale(myLocale); + getResources().updateConfiguration(config, getResources().getDisplayMetrics()); + } + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_story); + getWindow().setEnterTransition(null); + + isOpen = true; + + // Get StoryID from Previous Request + Intent intent = getIntent(); + int storyId = intent.getIntExtra("STORY_ID", 0); + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + setLang_code(lang_code); + ((TextView) findViewById(R.id.activityName)).setText(R.string.v1_story_details); + + // Enable Hardware Acceleration + getWindow().setFlags( + WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, + WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); + + // Get StoriesLocal + StoriesLocal storiesLocal = getStory(storyId); + + // Load Views + displayStory(storiesLocal); + + // Initialize Menu + initHeader(); + + // Set Back Button + findViewById(R.id.backButton).setOnClickListener(view -> onBackPressed()); + + speechButton = findViewById(R.id.btn_tts); + speechButtonAnim = findViewById(R.id.btn_tts_lottie); + + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + + TextView storyDate = findViewById(R.id.storyDate); + TextView storyTitle = findViewById(R.id.storyTitle); + TextView storySubTitle = findViewById(R.id.storySubTitle); + TextView storyBody = findViewById(R.id.storyBody); + + + + webStory = findViewById(R.id.webStory); +// webStory.setWebViewClient(new WebViewClient() { +// public void onPageFinished(WebView view, String url) { +// // Call JS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FIX +// +// } +// }); + + webStory.setWebChromeClient(new ChromeClient()); + + webStory.setBackgroundColor(Color.TRANSPARENT); + webStory.getSettings().setDomStorageEnabled(true); + webStory.getSettings().setJavaScriptEnabled(true); + WebSettings settings = webStory.getSettings(); + settings.setDefaultTextEncodingName("utf-8"); + + String WebContent = LoadData("pages/story.html"); + WebContent = WebContent.replace("#DateData", storyDate.getText().toString()); + WebContent = WebContent.replace("#ImageFile", imagePath); + + if(lang_code.equals("my") && !MDetect.INSTANCE.isUnicode()){ + // Place Zawgyi + String burmese_title = Rabbit.uni2zg(storiesLocal.getTitle_my()); + String burmese_body = Rabbit.uni2zg(storiesLocal.getSubtitle_my() + "
" +storiesLocal.getBody_my().replace("\r\n", "
")); + + WebContent = WebContent.replace("#TitleData", burmese_title); + WebContent = WebContent.replace("#TextData", burmese_body); + }else{ + WebContent = WebContent.replace("#TitleData", storyTitle.getText().toString()); + WebContent = WebContent.replace("#TextData", storySubTitle.getText().toString() + "
" + storyBody.getText().toString().replace("\r\n", "
")); + } + + if(AppDistribution.equals("RV")){ + String burmese_title = storiesLocal.getTitle_my(); + String burmese_body = storiesLocal.getSubtitle_my() + "
" +storiesLocal.getBody_my().replace("\r\n", "
"); + + if (!MDetect.INSTANCE.isUnicode()){ + burmese_title = Rabbit.uni2zg(burmese_title); + burmese_body = Rabbit.uni2zg(burmese_body); + } + + WebContent = WebContent.replace("#Title_Lang_1", storiesLocal.getTitle_en()); + WebContent = WebContent.replace("#Title_Lang_2", burmese_title); + WebContent = WebContent.replace("#Body_Lang_1", storiesLocal.getSubtitle_en() + "
" + storiesLocal.getBody_en().replace("\r\n", "
")); + WebContent = WebContent.replace("#Body_Lang_2", burmese_body); + WebContent = WebContent.replace("::lang_2_key::", "Burmese"); + WebContent = WebContent.replace("::lang_2_text::", "ဗမာ"); + }else{ + WebContent = WebContent.replace("#Title_Lang_1", storiesLocal.getTitle_en()); + WebContent = WebContent.replace("#Title_Lang_2", storiesLocal.getTitle_bn()); + WebContent = WebContent.replace("#Title_Lang_3", storiesLocal.getTitle_my()); + WebContent = WebContent.replace("#Body_Lang_1", storiesLocal.getSubtitle_en() + "
" + storiesLocal.getBody_en().replace("\r\n", "
")); + WebContent = WebContent.replace("#Body_Lang_2", storiesLocal.getSubtitle_bn() + "
" +storiesLocal.getBody_bn().replace("\r\n", "
")); + WebContent = WebContent.replace("#Body_Lang_3", storiesLocal.getSubtitle_my() + "
" +storiesLocal.getBody_my().replace("\r\n", "
")); + + // Enable Bangla + WebContent = WebContent.replace("", ""); + WebContent = WebContent.replace(" HideBN !-->", ""); + WebContent = WebContent.replace("// HideBN ", ""); + + } + + WebContent = WebContent.replace("::current_lang::", lang_code); + WebContent = WebContent.replace("::video_path::", videoPath); + + File file = new File(videoPath); + + if(file.exists()){ + double bytes = file.length(); + Log.d("bytes", String.valueOf(bytes)); + } + + if(lang_code.equals("my")){ + ttsEngine = new TextToSpeech(this, status -> { + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(Locale.UK); + ttsInit(); + } + }, "org.saomaicenter.myanmartts"); + WebContent = WebContent.replace("::spliter::", "။"); + }else if(lang_code.equals("en")){ + ttsEngine = new TextToSpeech(this, status -> { + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(Locale.UK); + ttsInit(); + } + }, "com.google.android.tts"); + WebContent = WebContent.replace("::spliter::", "."); + }else if(lang_code.equals("bn") && AppDistribution.equals("GV")) { + ttsEngine = new TextToSpeech(this, status -> { + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(new Locale("bn")); + ttsInit(); + } + }, "com.google.android.tts"); + WebContent = WebContent.replace("::spliter::", "।"); + } + + //webStory.loadDataWithBaseURL(null, WebContent, "text/html; charset=utf-8", "UTF-8", null); + webStory.loadDataWithBaseURL("file:///android_asset/pages/story.html", WebContent, "text/html; charset=utf-8", "UTF-8", null); + webStory.setLayerType(View.LAYER_TYPE_HARDWARE, null); + webStory.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); + webStory.addJavascriptInterface(this, "SurveyorStory"); + + findViewById(R.id.btn_tts).setOnClickListener(view -> toggleSound()); + + findViewById(R.id.btn_tts_lottie).setOnClickListener(view -> toggleSound()); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putInt("story_id", storyId); + StaticMethods.logFirebase("story_view", logBundle); + + } + + public void reloadTTS() { + if(lang_code.equals("my")){ + ttsEngine = new TextToSpeech(this, new TextToSpeech.OnInitListener() { + @Override + public void onInit(int status){ + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(Locale.UK); + ttsInit(); + } + } + }, "org.saomaicenter.myanmartts"); + }else if(lang_code.equals("en")){ + ttsEngine = new TextToSpeech(this, new TextToSpeech.OnInitListener() { + @Override + public void onInit(int status){ + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(Locale.UK); + ttsInit(); + } + } + }, "com.google.android.tts"); + }else if(lang_code.equals("bn")) { + ttsEngine = new TextToSpeech(this, new TextToSpeech.OnInitListener() { + @Override + public void onInit(int status){ + if(status != TextToSpeech.ERROR) { + ttsEngine.setLanguage(new Locale("bn")); + ttsInit(); + } + } + }, "com.google.android.tts"); + } + } + + public void toggleSound() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if(ttsEngine.isSpeaking()){ + ttsEngine.stop(); + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("action", "stop_speech"); + StaticMethods.logFirebase("story_action", logBundle); + }else{ + webStory.loadUrl("javascript:vueApp.playNow()"); + speechButton.setVisibility(View.GONE); + speechButtonAnim.setVisibility(View.VISIBLE); + speechButtonAnim.playAnimation(); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("action", "play_speech"); + StaticMethods.logFirebase("story_action", logBundle); + } + } + }); + + + } + + public boolean isPackageExisted(String targetPackage){ + PackageManager pm=getPackageManager(); + try { + PackageInfo info=pm.getPackageInfo(targetPackage,PackageManager.GET_META_DATA); + } catch (PackageManager.NameNotFoundException e) { + return false; + } + return true; + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + ttsEngine.stop(); + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + super.onBackPressed(); + } + + void ttsInit() { + ttsEngine.setOnUtteranceProgressListener(new UtteranceProgressListener() + { + @Override + public void onDone(String utteranceId) + { + runOnUiThread(new Runnable() { + @Override + public void run() { + webStory.loadUrl("javascript:vueApp.playNext()"); + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + } + }); + } + + @Override + public void onError(String utteranceId) + { + runOnUiThread(new Runnable() { + @Override + public void run() { + speechButton.setVisibility(View.GONE); + speechButtonAnim.setVisibility(View.VISIBLE); + speechButtonAnim.pauseAnimation(); + } + }); + } + + @Override + public void onStart(String utteranceId) + { + runOnUiThread(new Runnable() { + @Override + public void run() { + speechButton.setVisibility(View.GONE); + speechButtonAnim.setVisibility(View.VISIBLE); + speechButtonAnim.playAnimation(); + } + }); + } + }); + } + + public String LoadData(String inFile) { + String tContents = ""; + + try { + InputStream stream = getAssets().open(inFile); + int size = stream.available(); + byte[] buffer = new byte[size]; + stream.read(buffer); + stream.close(); + tContents = new String(buffer); + } catch (IOException e) { + // Handle exceptions here + } + + return tContents; + + } + + int BN_CHECK_CODE = 12132; + int LANG_CHECK_CODE = 12311; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == BN_CHECK_CODE) { + ArrayList availableLanguages = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); + + if(availableLanguages == null){ + return; + } + + if (!availableLanguages.contains("bn")) { + + if(ttsEngine.isSpeaking()) { + ttsEngine.stop(); + + new Handler().postDelayed(() -> { + runOnUiThread(() -> { + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + }); + }, 250); + } + + // Show Prompt to Download + new CustomDialog(this).displayCustomDialog(new CustomDialogComponent() + .setSubTextVisible(View.GONE) + .setMainText(getString(R.string.v1_install_tts_bn)) + .setButtonYes("Download Now") + .setButtonNo("Cancel"), + new CustomDialogInterface() { + @Override + public void retry() { + Intent installIntent = new Intent(); + installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); + startActivity(installIntent); + } + + @Override + public void cancel() { + // None + } + }); + + return; + } + } + + if(requestCode == LANG_CHECK_CODE){ + ArrayList availableLanguages = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); + + if(availableLanguages == null){ + return; + } + + if(availableLanguages.isEmpty()){ + // Show Prompt to Download + new CustomDialog(this).displayCustomDialog(new CustomDialogComponent() + .setSubTextVisible(View.GONE) + .setMainText(getString(R.string.v1_install_tts_en)) + .setButtonYes("Download Now") + .setButtonNo("Cancel"), + new CustomDialogInterface() { + @Override + public void retry() { + Intent installIntent = new Intent(); + installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); + startActivity(installIntent); + } + + @Override + public void cancel() { + // None + } + }); + + return; + } + } + } + + boolean myCheck = false; + boolean bnCheck = false; + boolean enCheck = false; + + @JavascriptInterface + public void ttsData(String tts_text) { + +// if(lang_code.equals("bn") && !bnCheck){ +// Intent checkIntent = new Intent(); +// checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); +// startActivityForResult(checkIntent, BN_CHECK_CODE); +// bnCheck = true; +// } + + if(lang_code.equals("my") && !isPackageExisted("org.saomaicenter.myanmartts")){ + //myCheck = true; + // TTS Engine Does Not Exists + if(ttsEngine.isSpeaking()) { + ttsEngine.stop(); + } + + // Show Prompt to Download + new CustomDialog(this).displayCustomDialog(new CustomDialogComponent() + .setSubTextVisible(View.GONE) + .setMainText(getString(R.string.v1_install_tts_my)) + .setButtonYes("OK") + .setButtonNo("Cancel"), + new CustomDialogInterface() { + @Override + public void retry() { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=org.saomaicenter.myanmartts"))); + } + + @Override + public void cancel() { + // None + } + }); + + new Handler().postDelayed(() -> { + runOnUiThread(() -> { + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + }); + }, 250); + + return; + } + + String utterance_id = getMD5(tts_text); + ttsEngine.speak(tts_text, TextToSpeech.QUEUE_FLUSH, null, utterance_id); + } + + @JavascriptInterface + public void reloadLang(String lang) { + this.lang_code = lang; + if(ttsEngine.isSpeaking()) { + ttsEngine.stop(); + + new Handler().postDelayed(() -> { + runOnUiThread(() -> { + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + }); + }, 250); + + } + reloadTTS(); + } + + @JavascriptInterface + public void stopTTS() { + if(ttsEngine.isSpeaking()) { + ttsEngine.stop(); + + new Handler().postDelayed(() -> { + runOnUiThread(() -> { + speechButton.setVisibility(View.VISIBLE); + speechButtonAnim.setVisibility(View.GONE); + speechButtonAnim.pauseAnimation(); + }); + }, 100); + } + reloadTTS(); + } + + // Init Menu and Header + void initHeader(){ + menuItems.add(new PowerMenuItem(getString(R.string.action_bug_report))); + menuItems.add(new PowerMenuItem(getString(R.string.action_settings))); + menuItems.add(new PowerMenuItem(getString(R.string.action_logout))); + initHeaderBar(); + } + + // Init Database Object and Return StoriesLocal + StoriesLocal getStory(int id){ + AppDatabase database = databaseConnection.getDatabase(StoriesActivity.this); + StoriesDao storiesDao = database.getStories(); + return storiesDao.getStoryById(id); + } + + // Display StoriesLocal into Views + void displayStory(StoriesLocal storiesLocal){ + + TextView storyAuthorName = findViewById(R.id.storyAuthorName); + CircleImageView storyAuthorImage = findViewById(R.id.storyAuthorImage); + TextView storyDate = findViewById(R.id.storyDate); + ImageView storyImage = findViewById(R.id.storyContentImage); + TextView storyTitle = findViewById(R.id.storyTitle); + TextView storySubTitle = findViewById(R.id.storySubTitle); + TextView storyBody = findViewById(R.id.storyBody); + + // Assign Values to View + storyAuthorName.setText(storiesLocal.getAuthor()); + storyDate.setText(storiesLocal.getCreated_at()); + storySubTitle.setVisibility(View.GONE); + + if(lang_code.equals("bn")){ + storyTitle.setText(storiesLocal.getTitle_bn()); + storyBody.setText(storiesLocal.getBody_bn()); + if(storySubTitle != null){ + storySubTitle.setText(storiesLocal.getSubtitle_bn()); + } + }else if(lang_code.equals("my")){ + storyTitle.setText(storiesLocal.getTitle_my()); + storyBody.setText(storiesLocal.getBody_my()); + if(storySubTitle != null){ + storySubTitle.setText(storiesLocal.getSubtitle_my()); + } + } else { + storyTitle.setText(storiesLocal.getTitle_en()); + storyBody.setText(storiesLocal.getBody_en()); + + if(storySubTitle != null){ + storySubTitle.setText(storiesLocal.getSubtitle_en()); + } + } + +// Glide.with(StoriesActivity.this) +// .load(storiesLocal.getAuthor_image()) +// .diskCacheStrategy(DiskCacheStrategy.ALL) +// .centerCrop() +// .into(storyAuthorImage); + + if(storiesLocal.getContent_image() != null){ + if(!storiesLocal.getContent_image().equals("")){ + String imageURL = storiesLocal.getContent_image(); + String file_path = this.getFilesDir() + "/story_image_" + getMD5(imageURL); + imagePath = file_path; + }else{ + imagePath = "file:///android_asset/images/no-image.png"; + } + + +// Glide.with(StoriesActivity.this) +// .load(file_path) +// .diskCacheStrategy(DiskCacheStrategy.ALL) +// .fitCenter() +// .into(storyImage); + } + + if(storiesLocal.getStory_video() != null){ + String videoURL = storiesLocal.getStory_video(); + if(!videoURL.equals("")){ + videoPath = this.getFilesDir() + "/story_video_" + getMD5(videoURL) + "#t=0.2"; + }else{ + videoPath = ""; + } + + } + } + + + + + // Extend ChromeClient + private class ChromeClient extends WebChromeClient { + private View mCustomView; + private WebChromeClient.CustomViewCallback mCustomViewCallback; + protected FrameLayout mFullscreenContainer; + private int mOriginalOrientation; + private int mOriginalSystemUiVisibility; + + ChromeClient() { + + } + + public Bitmap getDefaultVideoPoster() + { + if (mCustomView == null) { + return null; + } + + return BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.v1_splash); + } + + public void onHideCustomView() + { + ((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView); + this.mCustomView = null; + getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility); + setRequestedOrientation(this.mOriginalOrientation); + this.mCustomViewCallback.onCustomViewHidden(); + this.mCustomViewCallback = null; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } + + public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback) + { + if (this.mCustomView != null) + { + onHideCustomView(); + return; + } + this.mCustomView = paramView; + this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility(); + this.mOriginalOrientation = getRequestedOrientation(); + this.mCustomViewCallback = paramCustomViewCallback; + ((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1)); + getWindow().getDecorView().setSystemUiVisibility(3846 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } + } + + + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/StoriesListActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/StoriesListActivity.java new file mode 100644 index 0000000..bed967c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/StoriesListActivity.java @@ -0,0 +1,80 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.util.Pair; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.activity.BaseActivity; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class StoriesListActivity extends BaseActivity { + + ViewGroup headerLayout; + CardView storyList; + View bgColor; + ImageView backButton; + boolean isOpen = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_stories_new); + getWindow().setEnterTransition(null); + + isOpen = true; + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + bgColor = findViewById(R.id.bgColor); + backButton = findViewById(R.id.backButton); + + ((TextView) findViewById(R.id.activityName)).setText(R.string.v1_stories); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(500).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", -500, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + + isOpen = true; + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", 0, -500).setDuration(500).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } + + public void beginTransition(View view, int story_id){ + + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + + Intent intent = new Intent(this, StoriesActivity.class); + intent.putExtra("STORY_ID", story_id); + startActivity(intent); + } + + @Override + public boolean requireLogin() { + return false; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/SurveyorActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/SurveyorActivity.java new file mode 100644 index 0000000..6139650 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/SurveyorActivity.java @@ -0,0 +1,579 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.cardview.widget.CardView; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.vdurmont.semver4j.Semver; + +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.activity.BaseSubmissionsActivity; +import io.rapidpro.surveyor.activity.RunActivity; +import io.rapidpro.surveyor.adapter.FlowListAdapter; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.engine.Engine; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogComponent; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import io.rapidpro.surveyor.fragment.FlowListFragment; +import io.rapidpro.surveyor.task.RefreshOrgTask; +import io.rapidpro.surveyor.ui.BlockingProgress; +import io.rapidpro.surveyor.ui.ViewCache; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class SurveyorActivity extends BaseSubmissionsActivity implements FlowListFragment.Container { + + ViewGroup headerLayout; + CardView storyList; + ImageView backButton; + View bgColor; + int pending = 0; + + Fragment flowListFragment; + SwipeRefreshLayout flowlistRefresh; + FragmentTransaction ft; + FragmentManager fm; + + Context context; + String orgUUID = "invalid"; + ViewCache cache; + + private Org org; + private Dialog confirmRefreshDialog; + boolean isOpen = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_survey_new); + getWindow().setEnterTransition(null); + + isOpen = true; + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + backButton = findViewById(R.id.backButton); + bgColor = findViewById(R.id.bgColor); + //flowListFragment = (FlowListFragment) getSupportFragmentManager().findFragmentById(R.id.flowFragment); + + cache = getViewCache(); + //cache.setVisible(R.id.pending_submission, false); + cache.setText(R.id.button_pending, NumberFormat.getInstance().format(pending)); + + if(pending == 0){ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 0f, 0f, 1); + }else{ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 1f, 1f, 1); + } + + orgUUID = getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + refresh(); + + + + fm = getSupportFragmentManager(); + ft = fm.beginTransaction(); + flowListFragment = new FlowListFragment(); + ft.add(R.id.frameLayout, flowListFragment, "myFragmentTag"); + ft.commit(); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(500).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", -500, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + + context = getApplicationContext(); + + + + ImageView submit_image = findViewById(R.id.submit_icon); + submit_image.setOnClickListener(view -> { + + if(StaticMethods.isConnected(this)){ + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + onActionSubmit(view); + }else{ + new CustomDialog(this).displayNoInternetDialog(new CustomDialogInterface() { + + @Override + public void retry() { + submitToServer(); + } + + @Override + public void cancel() { + // None + } + }); + } + + + }); + + // 5 Second Timer + Timer5s(); + + + } + + public void submitToServer() { + if(StaticMethods.isConnected(this)){ + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes); + doSubmit(); + }else{ + new CustomDialog(this).displayNoInternetDialog(new CustomDialogInterface() { + + @Override + public void retry() { + submitToServer(); + } + + @Override + public void cancel() { + // None + } + }); + } + } + + void Timer5s() { + try { + new Handler().postDelayed(() -> { + + pending = getSurveyor().getSubmissionService().getCompletedCount(getOrg()); + //cache.setVisible(R.id.pending_submission, pending > 0); + + if(pending == 0){ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 0f, 0f, 1); + }else{ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 1f, 1f, 1); + } + + if (pending > 0) { + // Zoom In + StaticMethods.scaleView( + cache.getView(R.id.pending_submission), + 1.0f, 1.0f, + 1.2f, 1.2f, + 250); + + // Zoom Out + new Handler().postDelayed(() -> { + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 1.2f, 1.2f, 1.0f, 1.0f, 200); + }, 260); + + } + + Timer5s(); + }, 3000); + } catch(Exception e) { + // + } + } + + @Override + public void onBackPressed() { + if(isOpen){ isOpen = false; }else{ return; } + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(bgColor, "translationY", 0, -500).setDuration(500).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } + + + + + public void refreshFlows(){ + if(StaticMethods.isConnected(this)){ + confirmRefreshOrg(R.string.confirm_org_refresh); + if(flowlistRefresh != null){flowlistRefresh.setRefreshing(false);} + }else{ + new CustomDialog(this).displayNoInternetDialog(new CustomDialogInterface() { + + @Override + public void retry() { + refreshFlows(); + } + + @Override + public void cancel() { + // None + ((SwipeRefreshLayout) flowListFragment.getView().findViewById(R.id.flowRefreshLayout)).setRefreshing(false); + } + }); + + if(flowlistRefresh != null){flowlistRefresh.setRefreshing(false);} + } + } + + private boolean skipFirst = true; + + @Override + protected void onResume() { + super.onResume(); + //refresh(); + + + pending = getSurveyor().getSubmissionService().getCompletedCount(getOrg()); + //cache.setVisible(R.id.pending_submission, pending > 0); + cache.setText(R.id.button_pending, String.valueOf(pending)); + + if(pending == 0){ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 0f, 0f, 1); + }else{ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 1f, 1f, 1); + } + + if(!skipFirst){ +// fm = getSupportFragmentManager(); +// ft = fm.beginTransaction(); +// flowListFragment = new FlowListFragment(); +// ft.add(R.id.frameLayout, flowListFragment, "myFragmentTag"); +// ft.commit(); + + + Fragment frg = null; + frg = getSupportFragmentManager().findFragmentByTag("myFragmentTag"); + final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.detach(frg); + ft.attach(frg); + ft.commit(); + } + + skipFirst = false; + } + + @Override + protected void onPause() { + super.onPause(); + + if (confirmRefreshDialog != null) { + confirmRefreshDialog.dismiss(); + } + } + + protected void promptToUpgrade() { + + final Dialog dialog1 = new Dialog(this); + dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog1.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog1.setContentView(R.layout.v1_dialog_ui); + dialog1.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog1.findViewById(R.id.textMainText)).setText(R.string.unsupported_version); + ((TextView) dialog1.findViewById(R.id.button_yes_text)).setText("Yes"); + ((TextView) dialog1.findViewById(R.id.button_no_text)).setText("No"); + + dialog1.findViewById(R.id.button_yes).setOnClickListener(view -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=io.rapidpro.surveyor"))); + } catch (android.content.ActivityNotFoundException e) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=io.rapidpro.surveyor"))); + } + + dialog1.dismiss(); + }); + + dialog1.findViewById(R.id.button_no).setOnClickListener(view -> { + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view); + dialog1.dismiss(); + }); + + dialog1.show(); + + } + + protected void refresh() { + if(orgUUID.equals("invalid")){return;} // Not Logged In + + if (org == null) { + try { + org = getSurveyor().getOrgService().get(orgUUID); + } catch (Exception e) { + Logger.e("Unable to load org", e); + showBugReportDialog(); + finish(); + return; + } + } + + setTitle(org.getName()); + + FlowListAdapter adapter = (FlowListAdapter) getViewCache().getListViewAdapter(android.R.id.list); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + + pending = getSurveyor().getSubmissionService().getCompletedCount(getOrg()); + //cache.setVisible(R.id.pending_submission, pending > 0); + cache.setText(R.id.button_pending, NumberFormat.getInstance().format(pending)); + + if(pending == 0){ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 0f, 0f, 1); + }else{ + StaticMethods.scaleView(cache.getView(R.id.pending_submission), 0f, 0f, 1f, 1f, 1); + } + + if (confirmRefreshDialog == null) { + if (!org.hasAssets()) { + // if this org doesn't have downloaded assets, ask the user if we can download them now + + + if(StaticMethods.isConnected(this)){ + confirmRefreshOrg(R.string.confirm_org_download); + }else{ + new CustomDialog(this).displayNoInternetDialog(new CustomDialogInterface() { + + @Override + public void retry() { + refresh(); + //confirmRefreshOrg(R.string.confirm_org_download); + } + + @Override + public void cancel() { + // None + } + }); + } + + + } else { + for (Flow flow : org.getFlows()) { + if (!Engine.isSpecVersionSupported(flow.getSpecVersion())) { + Logger.w("Found flow " + flow.getUuid() + " with unsupported version " + flow.getSpecVersion()); + + Semver flowVersion = new Semver(flow.getSpecVersion(), Semver.SemverType.LOOSE); + if (flowVersion.isGreaterThan(Engine.currentSpecVersion())) { + // if this flow is a major version ahead of us... user needs to upgrade the app + promptToUpgrade(); + break; + } else { + // if it is a major version behind, they should refresh the assets + + + if(StaticMethods.isConnected(this)){ + confirmRefreshOrg(R.string.confirm_org_download); + }else{ + new CustomDialog(this).displayNoInternetDialog(new CustomDialogInterface() { + + @Override + public void retry() { + confirmRefreshOrg(R.string.confirm_org_refresh_old); + } + + @Override + public void cancel() { + // None + } + }); + } + + break; + } + } + } + } + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.menu_org, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + public void onActionRefresh(MenuItem item) { + confirmRefreshOrg(R.string.confirm_org_refresh); + } + + public void confirmRefreshOrg(int msgId) { + + new CustomDialog(this).displayCustomDialog(new CustomDialogComponent() + .setSubTextVisible(View.GONE) + .setMainText(getString(msgId)) + .setButtonYes("Yes") + .setButtonNo("No"), + new CustomDialogInterface() { + @Override + public void retry() { + doRefresh(); + } + + @Override + public void cancel() { + ((SwipeRefreshLayout) flowListFragment.getView().findViewById(R.id.flowRefreshLayout)).setRefreshing(false); + } + }); + + } + + RefreshOrgTask rotx; + + private void doRefresh() { + final BlockingProgress progressModal = new BlockingProgress(SurveyorActivity.this, R.string.one_moment, R.string.refresh_org); + progressModal.setOnDismissListener(dialogInterface -> { + ((SwipeRefreshLayout) flowListFragment.getView().findViewById(R.id.flowRefreshLayout)).setRefreshing(false); + rotx.cancel(true); + }); + progressModal.show(); + + + + rotx = new RefreshOrgTask(new RefreshOrgTask.Listener() { + @Override + public void onProgress(int percent) { + progressModal.setProgress(percent); + } + public void onMessage(String message) { + runOnUiThread(() -> progressModal.setMessage(message)); + } + + @Override + public void onComplete() { + try { + playNotification(getSurveyor(), getApplicationContext(), R.raw.sync_complete); + + StaticMethods.setLocalUpdateDate(getSurveyor(), "surveyor_last_updated_local"); + + } catch (Exception e){ + // + } + refresh(); + progressModal.dismiss(); + ((SwipeRefreshLayout) flowListFragment.getView().findViewById(R.id.flowRefreshLayout)).setRefreshing(false); + } + + @Override + public void onFailure() { + progressModal.dismiss(); + Toast.makeText(SurveyorActivity.this, getString(R.string.error_org_refresh), Toast.LENGTH_SHORT).show(); + } + }); + rotx.execute(getOrg()); + } + + /** + * @see BaseSubmissionsActivity#getPendingSubmissions() + */ + @Override + protected List getPendingSubmissions() { + return getSurveyor().getSubmissionService().getCompleted(getOrg()); + } + + @Override + public Org getOrg() { + return org; + } + + /** + * @see FlowListFragment.Container#getListItems() + */ + @Override + public List getListItems() { + return getOrg().getFlows(); + } + + /** + * @see FlowListFragment.Container#onItemClick(Flow) + */ + + boolean clickLock = false; + + @Override + public void onItemClick(Flow flow) { + + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1000); + } + + final Dialog dialog3 = new Dialog(this); + dialog3.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog3.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog3.setContentView(R.layout.v1_dialog_ui); + + String questionString = " Questions"; + if (flow.getQuestionCount() == 1) { + questionString = " Question"; + } + NumberFormat nf = NumberFormat.getInstance(); + dialog3.findViewById(R.id.img_start).setVisibility(View.VISIBLE); + dialog3.findViewById(R.id.img_cancel).setVisibility(View.VISIBLE); + ((TextView) dialog3.findViewById(R.id.textMainText)).setText(flow.getName()); + ((TextView) dialog3.findViewById(R.id.textSubText)).setText( + nf.format(flow.getQuestionCount()) + questionString + " " + "(v" + nf.format(flow.getRevision()) + ")"); + + final Flow dialog_flow = flow; + + dialog3.findViewById(R.id.button_yes).setOnClickListener(view -> { + + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_yes, view); + Intent intent = new Intent(context, RunActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, getOrg().getUuid()); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, dialog_flow.getUuid()); + startActivity(intent); + dialog3.dismiss(); + }); + + dialog3.findViewById(R.id.button_no).setOnClickListener(view -> { + + playNotification(getSurveyor(), getApplicationContext(), R.raw.button_click_no, view); + dialog3.dismiss(); + }); + + dialog3.show(); + + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/UreportCategoryActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/UreportCategoryActivity.java new file mode 100644 index 0000000..e123d7d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/UreportCategoryActivity.java @@ -0,0 +1,50 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class UreportCategoryActivity extends AppCompatActivity { + + ViewGroup headerLayout; + CardView storyList; + ImageView backButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_ureport_category); + getWindow().setEnterTransition(null); + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + backButton = findViewById(R.id.backButton); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + } + + @Override + public void onBackPressed() { + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/UreportDetailsActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/UreportDetailsActivity.java new file mode 100644 index 0000000..58f5c83 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/UreportDetailsActivity.java @@ -0,0 +1,244 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.skydoves.powermenu.PowerMenuItem; + +import java.util.ArrayList; +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.BaseActivity; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterOpinionlist; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.UReportDao; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.questions; +import io.rapidpro.surveyor.extend.entity.model.results; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class UreportDetailsActivity extends BaseActivity implements CustomAdapterOpinionlist.ItemClickListener { + + CustomAdapterOpinionlist adapter; + List questionsList = new ArrayList<>(); + RecyclerView recyclerView; + AppDatabase database; + UReportDao uReportDao; + + TextView statisticsT,locationsT,genderT,ageT; + private TextView summaryText; + + String resultName; + String resultID; + String resultDate; + + String lang_code = "en"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_ureport_data_new); + + getWindow().setEnterTransition(null); + + ObjectAnimator.ofFloat(findViewById(R.id.headerLayout), "alpha", 0, 1f).setDuration(1000).start(); + ObjectAnimator.ofFloat(findViewById(R.id.uCard), "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(findViewById(R.id.backButton), "translationX", -200, 0).setDuration(1000).start(); + + findViewById(R.id.backButton).setOnClickListener(view -> onBackPressed()); + + ((TextView) findViewById(R.id.activityName)).setText("U-Report"); + + Window window = this.getWindow(); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + Intent intent = getIntent(); + resultName = intent.getExtras().getString("ResultName"); + resultID = intent.getExtras().getString("ResultID"); + resultDate = intent.getExtras().getString("ResultDate"); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + database = databaseConnection.getDatabase(getApplicationContext()); + uReportDao = database.getUReports(); + UReportLocal uReportLocal = uReportDao.getUReportById(Integer.parseInt(resultID)); + results resultsObj = null; + Gson gson = new Gson(); + + if(lang_code.equals("my")){ + if(uReportLocal.getMy_pack() != null){ + resultsObj = gson.fromJson(uReportLocal.getMy_pack(), results.class); + } + }else if(lang_code.equals("bn")){ + if(uReportLocal.getData_pack() != null){ + resultsObj = gson.fromJson(uReportLocal.getData_pack(), results.class); + } + }else{ + if(uReportLocal.getEn_pack() != null){ + resultsObj = gson.fromJson(uReportLocal.getEn_pack(), results.class); + } + } + + if(resultsObj != null){ + List questionsTemp = resultsObj.getQuestions(); + for (questions b : questionsTemp) { + questionsList.add(b); + } + + ((TextView) findViewById(R.id.activityName)).setText(resultsObj.getTitle()); + } + + recyclerView = findViewById(R.id.recyclerView); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setFocusable(false); + recyclerView.hasFixedSize(); + + summaryText = findViewById(R.id.poll_summary); + adapter = new CustomAdapterOpinionlist(UreportDetailsActivity.this, questionsList, resultDate, summaryText); + + recyclerView.setAdapter(adapter); + adapter.setClickListener(UreportDetailsActivity.this); + + } + + @Override + public void onBackPressed() { + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + super.onBackPressed(); + } + + + @Override + public void onItemClick(View view, int position) { + + switch (view.getId()) { + case R.id.textViewStatistics: + + View temp = (View) view.getParent(); + View temp2 = (View) temp.getParent(); + statisticsT=temp2.findViewById(R.id.textViewStatistics); + locationsT=temp2.findViewById(R.id.textViewlocations); + genderT=temp2.findViewById(R.id.textViewGender); + ageT=temp2.findViewById(R.id.textViewAge); + + statisticsT.setTextColor(getResources().getColor(R.color.white)); + statisticsT.setBackgroundColor(getResources().getColor(R.color.green2)); + + locationsT.setTextColor(getResources().getColor(R.color.green2)); + locationsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + genderT.setTextColor(getResources().getColor(R.color.green2)); + genderT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + ageT.setTextColor(getResources().getColor(R.color.green2)); + ageT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + temp2.findViewById(R.id.layout_statistics).setVisibility(View.VISIBLE); + temp2.findViewById(R.id.layout_gender).setVisibility(View.GONE); + temp2.findViewById(R.id.layout_age).setVisibility(View.GONE); + temp2.findViewById(R.id.layout_location).setVisibility(View.GONE); + break; + case R.id.textViewGender: + View temp3 = (View) view.getParent(); + View temp4 = (View) temp3.getParent(); + + statisticsT=temp4.findViewById(R.id.textViewStatistics); + locationsT=temp4.findViewById(R.id.textViewlocations); + genderT=temp4.findViewById(R.id.textViewGender); + ageT=temp4.findViewById(R.id.textViewAge); + + statisticsT.setTextColor(getResources().getColor(R.color.green2)); + statisticsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + locationsT.setTextColor(getResources().getColor(R.color.green2)); + locationsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + genderT.setTextColor(getResources().getColor(R.color.white)); + genderT.setBackgroundColor(getResources().getColor(R.color.green2)); + + ageT.setTextColor(getResources().getColor(R.color.green2)); + ageT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + temp4.findViewById(R.id.layout_statistics).setVisibility(View.GONE); + temp4.findViewById(R.id.layout_gender).setVisibility(View.VISIBLE); + temp4.findViewById(R.id.layout_age).setVisibility(View.GONE); + temp4.findViewById(R.id.layout_location).setVisibility(View.GONE); + break; + case R.id.textViewAge: + View temp5 = (View) view.getParent(); + View temp6 = (View) temp5.getParent(); + + statisticsT=temp6.findViewById(R.id.textViewStatistics); + locationsT=temp6.findViewById(R.id.textViewlocations); + genderT=temp6.findViewById(R.id.textViewGender); + ageT=temp6.findViewById(R.id.textViewAge); + + statisticsT.setTextColor(getResources().getColor(R.color.green2)); + statisticsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + locationsT.setTextColor(getResources().getColor(R.color.green2)); + locationsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + genderT.setTextColor(getResources().getColor(R.color.green2)); + genderT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + ageT.setTextColor(getResources().getColor(R.color.white)); + ageT.setBackgroundColor(getResources().getColor(R.color.green2)); + temp6.findViewById(R.id.layout_statistics).setVisibility(View.GONE); + temp6.findViewById(R.id.layout_gender).setVisibility(View.GONE); + temp6.findViewById(R.id.layout_age).setVisibility(View.VISIBLE); + temp6.findViewById(R.id.layout_location).setVisibility(View.GONE); + break; + + case R.id.textViewlocations: + View temp7 = (View) view.getParent(); + View temp8= (View) temp7.getParent(); + + + statisticsT=temp8.findViewById(R.id.textViewStatistics); + locationsT=temp8.findViewById(R.id.textViewlocations); + genderT=temp8.findViewById(R.id.textViewGender); + ageT=temp8.findViewById(R.id.textViewAge); + + statisticsT.setTextColor(getResources().getColor(R.color.green2)); + statisticsT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + locationsT.setTextColor(getResources().getColor(R.color.white)); + locationsT.setBackgroundColor(getResources().getColor(R.color.green2)); + + genderT.setTextColor(getResources().getColor(R.color.green2)); + genderT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + ageT.setTextColor(getResources().getColor(R.color.green2)); + ageT.setBackgroundColor(getResources().getColor(R.color.colorlightGrey)); + + temp8.findViewById(R.id.layout_statistics).setVisibility(View.GONE); + temp8.findViewById(R.id.layout_gender).setVisibility(View.GONE); + temp8.findViewById(R.id.layout_age).setVisibility(View.GONE); + temp8.findViewById(R.id.layout_location).setVisibility(View.VISIBLE); + break; + } + } + + @Override + public boolean requireLogin() { + return false; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/UreportListActivity.java b/app/src/main/java/io/rapidpro/surveyor/extend/UreportListActivity.java new file mode 100644 index 0000000..8f52b14 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/UreportListActivity.java @@ -0,0 +1,55 @@ +package io.rapidpro.surveyor.extend; + +import android.animation.ObjectAnimator; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class UreportListActivity extends AppCompatActivity { + + ViewGroup headerLayout; + CardView storyList; + ImageView backButton; + TextView activityName; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.v1_activity_ureport_list); + getWindow().setEnterTransition(null); + + headerLayout = findViewById(R.id.headerLayout); + storyList = findViewById(R.id.storyList); + backButton = findViewById(R.id.backButton); + activityName = findViewById(R.id.activityName); + + activityName.setText(getIntent().getExtras().getString("ResultName")); + + ObjectAnimator.ofFloat(storyList, "alpha", 0, 1f).setDuration(1000).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 1000, 0).setDuration(1000).start(); + ObjectAnimator.ofFloat(backButton, "translationX", -200, 0).setDuration(1000).start(); + + backButton.setOnClickListener(view -> onBackPressed()); + } + + @Override + public void onBackPressed() { + playNotification(SurveyorApplication.get(), getApplicationContext(), R.raw.button_click_no, findViewById(R.id.backButton)); + headerLayout.setBackgroundColor(Color.parseColor("#00000000")); + ObjectAnimator.ofFloat(storyList, "alpha", 1f, 0).setDuration(750).start(); + ObjectAnimator.ofFloat(storyList, "translationY", 0, 1000).setDuration(750).start(); + ObjectAnimator.ofFloat(backButton, "translationX", 0, -200).setDuration(1000).start(); + super.onBackPressed(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterOpinionlist.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterOpinionlist.java new file mode 100644 index 0000000..e0cd0fd --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterOpinionlist.java @@ -0,0 +1,2851 @@ +package io.rapidpro.surveyor.extend.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.akexorcist.roundcornerprogressbar.RoundCornerProgressBar; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; +import com.github.mikephil.charting.highlight.Highlight; +import com.github.mikephil.charting.listener.OnChartValueSelectedListener; +import com.github.mikephil.charting.utils.ColorTemplate; +import com.github.mikephil.charting.utils.MPPointF; + +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.extend.entity.model.categories; +import io.rapidpro.surveyor.extend.entity.model.questions; + +/** + * Inherited Adapter from Adolescent App + * to display U-Report on the Application. + * Scheduled for Deletion from RV version. + */ + +public class CustomAdapterOpinionlist extends RecyclerView.Adapter { + + private List mData; + private LayoutInflater mInflater; + private ItemClickListener mClickListener; + String resultDate; + String resultFormatted; + String previousDistrict="all"; + int delay = 600; + Context context; + TextView summaryText; + + public CustomAdapterOpinionlist(Context context, List data, String resultDate, TextView summaryText) { + this.mInflater = LayoutInflater.from(context); + this.mData = data; + this.resultDate=resultDate; + this.context=context; + this.summaryText=summaryText; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = mInflater.inflate(R.layout.v1_recycler_item_opinion_list, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.myTextView.setText(mData.get(position).getTitle()); + //holder.responded.setText(mData.get(position).getResults().getSet()+" responded out of "+(mData.get(position).getResults().getUnset()+mData.get(position).getResults().getSet())+" polled"); + int numSub = mData.get(position).getResults().getSet(); + int numSup = (mData.get(position).getResults().getUnset()+mData.get(position).getResults().getSet()); + holder.responded.setText( + context.getString(R.string.v1_ureport_out_of) + .replace("%sup", String.valueOf(numSup)) + .replace("%sub", String.valueOf(numSub)) + ); + if(position == 0) { + float responseRate = 0f; + DecimalFormat df = new DecimalFormat("#.00"); + + if(numSub > 0 && numSup > 0){ + responseRate = (float)numSub / ((float)numSup / 100); + responseRate = Float.valueOf(df.format(responseRate)); + } + + summaryText.setText( + context.getString(R.string.v1_ureport_poll_summary) + .replace("%sup", String.valueOf(numSub)) + .replace("%sub", String.valueOf(responseRate)) + ); + } + + holder.dateT.setText(resultFormatted); + + setupStatistics(holder, position); + + + if(mData.get(position).getResults_by_gender() != null) { + List tempf = mData.get(position).getResults_by_gender().get(0).getCategories(); + setupFemale(holder, position, tempf); + } + + + if(mData.get(position).getResults_by_gender() != null) { + List tempm = mData.get(position).getResults_by_gender().get(1).getCategories(); + setupMale(holder, position, tempm); + } + + if(mData.get(position).getResults_by_age() != null) { + List tempa0 = mData.get(position).getResults_by_age().get(0).getCategories(); + setupAge0(holder, position, tempa0); + + List tempa15 = mData.get(position).getResults_by_age().get(1).getCategories(); + setupA15(holder, position, tempa15); + + List tempa20 = mData.get(position).getResults_by_age().get(2).getCategories(); + setupAge20(holder, position, tempa20); + + List tempa25 = mData.get(position).getResults_by_age().get(3).getCategories(); + setupAge25(holder, position, tempa25); + + List tempa31 = mData.get(position).getResults_by_age().get(4).getCategories(); + setupAge31(holder, position, tempa31); + + List tempa35 = mData.get(position).getResults_by_age().get(5).getCategories(); + + setupAge35(holder, position, tempa35); + } + + int highest=0; + holder.respondedMap.setText( ""+mData.get(position).getResults().getSet()); + holder.respondedAll.setText(""+ (mData.get(position).getResults().getSet()+ mData.get(position).getResults().getUnset())); + + for (int i=0;i< mData.get(position).getResults().getCategories().size();i++){ + if(mData.get(position).getResults().getCategories().get(i).getCount()>=highest){ + highest=mData.get(position).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(position).getResults().getSet() > 0){ + percentage = (highest*100)/mData.get(position).getResults().getSet(); + } + holder.respondedPercentage.setText(""+percentage+"%"); + holder.respondedLabel.setText(""+mData.get(position).getResults().getCategories().get(i).getLabel()); + holder.respondPercentRest.setText(""+(100-percentage)+"%"); + } + } + if(mData.get(position).getResults().getCategories().size()>=5){ + holder.cardViewx.findViewById(R.id.layout_pie_chart).setVisibility(View.VISIBLE); + holder.cardViewx.findViewById(R.id.layout_statistics).setVisibility(View.GONE); + holder.cardViewx.findViewById(R.id.textViewStatistics).setVisibility(View.GONE); + holder.cardViewx.findViewById(R.id.textViewlocations).setVisibility(View.GONE); + holder.cardViewx.findViewById(R.id.textViewGender).setVisibility(View.GONE); + holder.cardViewx.findViewById(R.id.textViewAge).setVisibility(View.GONE); + holder.cardViewx.findViewById(R.id.textViewPieChart).setVisibility(View.VISIBLE); + + + + + ArrayList entries = new ArrayList(); + + + for (int i = 0; i < mData.get(position).getResults().getCategories().size(); i++) { + if(i<25){ + entries.add(new PieEntry(mData.get(position).getResults().getCategories().get(i).getCount(),mData.get(position).getResults().getCategories().get(i).getLabel())); + } + + } + + PieDataSet dataSet = new PieDataSet(entries, ""); + + dataSet.setDrawIcons(false); + + dataSet.setSliceSpace(3f); + dataSet.setIconsOffset(new MPPointF(0, 40)); + dataSet.setSelectionShift(5f); + + // add a lot of colors + + ArrayList colors = new ArrayList(); + + for (int c : ColorTemplate.VORDIPLOM_COLORS) + colors.add(c); + + for (int c : ColorTemplate.JOYFUL_COLORS) + colors.add(c); + + for (int c : ColorTemplate.COLORFUL_COLORS) + colors.add(c); + + for (int c : ColorTemplate.LIBERTY_COLORS) + colors.add(c); + + for (int c : ColorTemplate.PASTEL_COLORS) + colors.add(c); + + colors.add(ColorTemplate.getHoloBlue()); + + dataSet.setColors(colors); + //dataSet.setSelectionShift(0f); + + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter( holder.mChart)); + data.setValueTextSize(11f); + data.setValueTextColor(Color.BLACK); + + holder.mChart.setData(data); + + // undo all highlights + holder.mChart.highlightValues(null); + + + holder.mChart.invalidate(); + holder.mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { + @Override + public void onValueSelected(Entry e, Highlight h) { + PieEntry pe = (PieEntry) e; + holder.cardviewPie.setVisibility(View.VISIBLE); + holder.pieLabel.setText(""+pe.getLabel()); + holder.pieValue.setText(""+((int)pe.getValue())); + } + + @Override + public void onNothingSelected() { + holder.cardviewPie.setVisibility(View.GONE); + holder.pieLabel.setText(""); + holder.pieValue.setText(""); + } + }); + + + } + + + } + + + + + @Override + public int getItemViewType(int position) { + return position; + } + + @Override + public int getItemCount() { + return mData.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + TextView myTextView,dateT; + TextView responded; + TextView date; + TextView statistics,locations,gender,age,pie_chart_text; + PieChart mChart; + CardView cardViewx,cardviewPie; + TextView pieLabel,pieValue; + + + + TextView label1,label2,label3,label4,label5; + RoundCornerProgressBar option1,option2,option3,option4,option5; + LinearLayout l3,l4,l5; + TextView percentage1,percentage2,percentage3,percentage4,percentage5; + + + TextView label1f,label2f,label3f,label4f,label5f; + RoundCornerProgressBar option1f,option2f,option3f,option4f,option5f; + LinearLayout l3f,l4f,l5f; + TextView percentage1f,percentage2f,percentage3f,percentage4f,percentage5f; + + + TextView label1m,label2m,label3m,label4m,label5m; + RoundCornerProgressBar option1m,option2m,option3m,option4m,option5m; + LinearLayout l3m,l4m,l5m; + TextView percentage1m,percentage2m,percentage3m,percentage4m,percentage5m; + + + TextView label1a0,label2a0,label3a0,label4a0,label5a0; + RoundCornerProgressBar option1a0,option2a0,option3a0,option4a0,option5a0; + LinearLayout l3a0,l4a0,l5a0; + TextView percentage1a0,percentage2a0,percentage3a0,percentage4a0,percentage5a0; + + + TextView label1a15,label2a15,label3a15,label4a15,label5a15; + RoundCornerProgressBar option1a15,option2a15,option3a15,option4a15,option5a15; + LinearLayout l3a15,l4a15,l5a15; + TextView percentage1a15,percentage2a15,percentage3a15,percentage4a15,percentage5a15; + + + + TextView label1a20,label2a20,label3a20,label4a20,label5a20; + RoundCornerProgressBar option1a20,option2a20,option3a20,option4a20,option5a20; + LinearLayout l3a20,l4a20,l5a20; + TextView percentage1a20,percentage2a20,percentage3a20,percentage4a20,percentage5a20; + + + + + + + TextView label1a25,label2a25,label3a25,label4a25,label5a25; + RoundCornerProgressBar option1a25,option2a25,option3a25,option4a25,option5a25; + LinearLayout l3a25,l4a25,l5a25; + TextView percentage1a25,percentage2a25,percentage3a25,percentage4a25,percentage5a25; + + + + TextView label1a31,label2a31,label3a31,label4a31,label5a31; + RoundCornerProgressBar option1a31,option2a31,option3a31,option4a31,option5a31; + LinearLayout l3a31,l4a31,l5a31; + TextView percentage1a31,percentage2a31,percentage3a31,percentage4a31,percentage5a31; + + + + + + TextView label1a35,label2a35,label3a35,label4a35,label5a35; + RoundCornerProgressBar option1a35,option2a35,option3a35,option4a35,option5a35; + LinearLayout l3a35,l4a35,l5a35; + TextView percentage1a35,percentage2a35,percentage3a35,percentage4a35,percentage5a35; + + + ImageView bdmap; + View v1,v2,v3,v4,v5,v6,v7,v8; + TextView districtName,respondedMap,respondedAll,responseInZone,respondedPercentage,respondedLabel,respondPercentRest; + + + + + + + ViewHolder(View itemView) { + super(itemView); + //resultFormatted=""+resultDate.charAt(0)+resultDate.charAt(1)+resultDate.charAt(2)+resultDate.charAt(3)+resultDate.charAt(4)+resultDate.charAt(5)+resultDate.charAt(6)+resultDate.charAt(7)+resultDate.charAt(8)+resultDate.charAt(9); + //resultFormatted=""+resultDate.charAt(8)+resultDate.charAt(9)+resultDate.charAt(4)+resultDate.charAt(5)+resultDate.charAt(6)+resultDate.charAt(7)+resultDate.charAt(0)+resultDate.charAt(1)+resultDate.charAt(2)+resultDate.charAt(3); + + + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH); + try { + cal.setTime(sdf.parse(resultDate)); + } catch (ParseException e) { + e.printStackTrace(); + } + + SimpleDateFormat format = new SimpleDateFormat("MMM d, yyyy"); + resultFormatted = format.format(cal.getTime());//resultDate; + + dateT=itemView.findViewById(R.id.textViewDate); + bdmap=itemView.findViewById(R.id.imageViewMapBd); + + cardViewx=itemView.findViewById(R.id.cardviewx); + cardviewPie=itemView.findViewById(R.id.pieDisplay); + pieLabel=itemView.findViewById(R.id.pieLabel); + pieValue=itemView.findViewById(R.id.pieValue); + + v1=itemView.findViewById(R.id.rongpurClick); + v2=itemView.findViewById(R.id.rajshahiClick); + v3=itemView.findViewById(R.id.khulnaClick); + v4=itemView.findViewById(R.id.dhakaClick); + v5=itemView.findViewById(R.id.barisalClick); + v6=itemView.findViewById(R.id.sylhetClick); + v7=itemView.findViewById(R.id.chittagongClick); + v8=itemView.findViewById(R.id.mymensinghClick); + + districtName=itemView.findViewById(R.id.districtName); + respondedMap=itemView.findViewById(R.id.textViewRespondedMap); + respondedAll=itemView.findViewById(R.id.textViewRespondedAllMap); + responseInZone=itemView.findViewById(R.id.textViewResponseInZone); + respondedPercentage=itemView.findViewById(R.id.respondedPercentageMap); + respondedLabel=itemView.findViewById(R.id.respondedLabelMap); + respondPercentRest=itemView.findViewById(R.id.textViewRest); + + + + mChart = (PieChart) itemView.findViewById(R.id.chart1); + mChart.setUsePercentValues(true); + mChart.getDescription().setEnabled(false); + mChart.setExtraOffsets(5, 5, 5, 5); + + mChart.setDragDecelerationFrictionCoef(0.95f); + mChart.getLegend().setWordWrapEnabled(true); + + + Legend l = mChart.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + l.setOrientation(Legend.LegendOrientation.HORIZONTAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(0f); + l.setYOffset(0f); + + // entry label styling + mChart.setEntryLabelColor(Color.DKGRAY); + + mChart.setEntryLabelTextSize(12f); + + mChart.setDrawHoleEnabled(true); + mChart.setHoleColor(Color.WHITE); + + mChart.setTransparentCircleColor(Color.WHITE); + mChart.setTransparentCircleAlpha(110); + + mChart.setHoleRadius(38f); + mChart.setTransparentCircleRadius(45f); + + mChart.setDrawCenterText(false); + + mChart.setRotationAngle(0); + // enable rotation of the chart by touch + mChart.setRotationEnabled(true); + mChart.setHighlightPerTapEnabled(true); + mChart.setDrawSliceText(false); + mChart.setDrawEntryLabels(false); + + + + + + v1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("রংপুর বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_1); + districtName.setText(R.string.v1_ureport_division_rangpur); + + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="রংপুর বিভাগ"; + } + + + + + + } + }); + + v2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("রাজশাহী বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_2); + districtName.setText(R.string.v1_ureport_division_rajshahi); + + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="রাজশাহী বিভাগ"; + } + + + + + + + + + } + }); + + v3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("খুলনা বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_3); + districtName.setText(R.string.v1_ureport_division_khulna); + + + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="খুলনা বিভাগ"; + } + + + + + + + } + }); + + v4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("ঢাকা বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_4); + districtName.setText(R.string.v1_ureport_division_dhaka); + + + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="ঢাকা বিভাগ"; + } + + + + + + + } + }); + + v5.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("বরিশাল বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_5); + districtName.setText(R.string.v1_ureport_division_barisal); + + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="বরিশাল বিভাগ"; + } + + + + + + + + } + }); + + v6.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("সিলেট বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_6); + districtName.setText(R.string.v1_ureport_division_sylhet); + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="সিলেট বিভাগ"; + } + + + + + + + + + + + } + }); + + v7.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("চট্টগ্রাম বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_7); + districtName.setText(R.string.v1_ureport_division_chittagong); + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="চট্টগ্রাম বিভাগ"; + } + + + + + + + + + + + } + }); + + + + v8.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (previousDistrict.matches("ময়মনসিংহ বিভাগ")){ + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_0); + districtName.setText(R.string.v1_ureport_all); + + + respondedMap.setText( ""+mData.get(getAdapterPosition()).getResults().getSet()); + respondedAll.setText(""+ (mData.get(getAdapterPosition()).getResults().getSet()+ mData.get(getAdapterPosition()).getResults().getUnset())); + + + for (int i=0;i< mData.get(getAdapterPosition()).getResults().getCategories().size();i++) { + if (mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount() >= highest) { + highest = mData.get(getAdapterPosition()).getResults().getCategories().get(i).getCount(); + int percentage = 0; + if( mData.get(getAdapterPosition()).getResults().getSet() > 0){ + percentage = (highest * 100) / mData.get(getAdapterPosition()).getResults().getSet(); + } + respondedPercentage.setText("" + percentage + "%"); + respondedLabel.setText("" + mData.get(getAdapterPosition()).getResults().getCategories().get(i).getLabel()); + respondPercentRest.setText("" + (100 - percentage) + "%"); + } + + } + previousDistrict="All"; + }else{ + + + int highest=0; + bdmap.setImageResource(R.drawable.v3_bd_8); + districtName.setText(R.string.v1_ureport_division_mymensing); + for (int j=0; j =highest){ + highest=mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getCount(); + int percentage = 0; + if(mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet() > 0){ + percentage = (highest*100)/mData.get(getAdapterPosition()).getResults_by_location().get(j).getSet(); + } + respondedPercentage.setText(""+percentage+"%"); + respondedLabel.setText(""+mData.get(getAdapterPosition()).getResults_by_location().get(j).getCategories().get(i).getLabel()); + respondPercentRest.setText(""+(100-percentage)+"%"); + } + + + } + } + + } + previousDistrict="ময়মনসিংহ বিভাগ"; + } + + + + + + + + + + } + }); + + + + myTextView = itemView.findViewById(R.id.textView14); + responded=itemView.findViewById(R.id.textViewResponded); + date=itemView.findViewById(R.id.textViewDate); + + percentage1 = itemView.findViewById(R.id.textViewPercentage); + percentage2 = itemView.findViewById(R.id.textViewPercentage2); + percentage3 = itemView.findViewById(R.id.textViewPercentage3); + percentage4 = itemView.findViewById(R.id.textViewPercentage4); + percentage5 = itemView.findViewById(R.id.textViewPercentage5); + + label1=itemView.findViewById(R.id.textViewLabel1); + label2=itemView.findViewById(R.id.textViewLabel2); + label3=itemView.findViewById(R.id.textViewLabel3); + label4=itemView.findViewById(R.id.textViewLabel4); + label5=itemView.findViewById(R.id.textViewLabel5); + option1=itemView.findViewById(R.id.rounded1); + option2=itemView.findViewById(R.id.rounded2); + option3=itemView.findViewById(R.id.rounded3); + option4=itemView.findViewById(R.id.rounded4); + option5=itemView.findViewById(R.id.rounded5); + l3=itemView.findViewById(R.id.layout_3); + l4=itemView.findViewById(R.id.layout_4); + l5=itemView.findViewById(R.id.layout_5); + + + + percentage1f = itemView.findViewById(R.id.textViewPercentagef); + percentage2f = itemView.findViewById(R.id.textViewPercentage2f); + percentage3f = itemView.findViewById(R.id.textViewPercentage3f); + percentage4f = itemView.findViewById(R.id.textViewPercentage4f); + percentage5f = itemView.findViewById(R.id.textViewPercentage5f); + + label1f=itemView.findViewById(R.id.textViewLabel1f); + label2f=itemView.findViewById(R.id.textViewLabel2f); + label3f=itemView.findViewById(R.id.textViewLabel3f); + label4f=itemView.findViewById(R.id.textViewLabel4f); + label5f=itemView.findViewById(R.id.textViewLabel5f); + option1f=itemView.findViewById(R.id.rounded1f); + option2f=itemView.findViewById(R.id.rounded2f); + option3f=itemView.findViewById(R.id.rounded3f); + option4f=itemView.findViewById(R.id.rounded4f); + option5f=itemView.findViewById(R.id.rounded5f); + l3f=itemView.findViewById(R.id.layout_f_3); + l4f=itemView.findViewById(R.id.layout_f_4); + l5f=itemView.findViewById(R.id.layout_f_5); + + + + percentage1m = itemView.findViewById(R.id.textViewPercentagem); + percentage2m = itemView.findViewById(R.id.textViewPercentage2m); + percentage3m = itemView.findViewById(R.id.textViewPercentage3m); + percentage4m = itemView.findViewById(R.id.textViewPercentage4m); + percentage5m = itemView.findViewById(R.id.textViewPercentage5m); + + label1m=itemView.findViewById(R.id.textViewLabel1m); + label2m=itemView.findViewById(R.id.textViewLabel2m); + label3m=itemView.findViewById(R.id.textViewLabel3m); + label4m=itemView.findViewById(R.id.textViewLabel4m); + label5m=itemView.findViewById(R.id.textViewLabel5m); + option1m=itemView.findViewById(R.id.rounded1m); + option2m=itemView.findViewById(R.id.rounded2m); + option3m=itemView.findViewById(R.id.rounded3m); + option4m=itemView.findViewById(R.id.rounded4m); + option5m=itemView.findViewById(R.id.rounded5m); + l3m=itemView.findViewById(R.id.layout_m_3); + l4m=itemView.findViewById(R.id.layout_m_4); + l5m=itemView.findViewById(R.id.layout_m_5); + + + + + + + percentage1a0 = itemView.findViewById(R.id.textViewPercentage1a0); + percentage2a0 = itemView.findViewById(R.id.textViewPercentage2a0); + percentage3a0 = itemView.findViewById(R.id.textViewPercentage3a0); + percentage4a0 = itemView.findViewById(R.id.textViewPercentage4a0); + percentage5a0 = itemView.findViewById(R.id.textViewPercentage5a0); + + label1a0=itemView.findViewById(R.id.textViewLabel1a0); + label2a0=itemView.findViewById(R.id.textViewLabel2a0); + label3a0=itemView.findViewById(R.id.textViewLabel3a0); + label4a0=itemView.findViewById(R.id.textViewLabel4a0); + label5a0=itemView.findViewById(R.id.textViewLabel5a0); + option1a0=itemView.findViewById(R.id.rounded1a0); + option2a0=itemView.findViewById(R.id.rounded2a0); + option3a0=itemView.findViewById(R.id.rounded3a0); + option4a0=itemView.findViewById(R.id.rounded4a0); + option5a0=itemView.findViewById(R.id.rounded5a0); + l3a0=itemView.findViewById(R.id.layout_a0_3); + l4a0=itemView.findViewById(R.id.layout_a0_4); + l5a0=itemView.findViewById(R.id.layout_a0_5); + + + + + + + + percentage1a15 = itemView.findViewById(R.id.textViewPercentage1a15); + percentage2a15 = itemView.findViewById(R.id.textViewPercentage2a15); + percentage3a15 = itemView.findViewById(R.id.textViewPercentage3a15); + percentage4a15 = itemView.findViewById(R.id.textViewPercentage4a15); + percentage5a15 = itemView.findViewById(R.id.textViewPercentage5a15); + + label1a15=itemView.findViewById(R.id.textViewLabel1a15); + label2a15=itemView.findViewById(R.id.textViewLabel2a15); + label3a15=itemView.findViewById(R.id.textViewLabel3a15); + label4a15=itemView.findViewById(R.id.textViewLabel4a15); + label5a15=itemView.findViewById(R.id.textViewLabel5a15); + option1a15=itemView.findViewById(R.id.rounded1a15); + option2a15=itemView.findViewById(R.id.rounded2a15); + option3a15=itemView.findViewById(R.id.rounded3a15); + option4a15=itemView.findViewById(R.id.rounded4a15); + option5a15=itemView.findViewById(R.id.rounded5a15); + l3a15=itemView.findViewById(R.id.layout_a15_3); + l4a15=itemView.findViewById(R.id.layout_a15_4); + l5a15=itemView.findViewById(R.id.layout_a15_5); + + + + + + percentage1a20 = itemView.findViewById(R.id.textViewPercentage1a20); + percentage2a20 = itemView.findViewById(R.id.textViewPercentage2a20); + percentage3a20 = itemView.findViewById(R.id.textViewPercentage3a20); + percentage4a20 = itemView.findViewById(R.id.textViewPercentage4a20); + percentage5a20 = itemView.findViewById(R.id.textViewPercentage5a20); + + label1a20=itemView.findViewById(R.id.textViewLabel1a20); + label2a20=itemView.findViewById(R.id.textViewLabel2a20); + label3a20=itemView.findViewById(R.id.textViewLabel3a20); + label4a20=itemView.findViewById(R.id.textViewLabel4a20); + label5a20=itemView.findViewById(R.id.textViewLabel5a20); + option1a20=itemView.findViewById(R.id.rounded1a20); + option2a20=itemView.findViewById(R.id.rounded2a20); + option3a20=itemView.findViewById(R.id.rounded3a20); + option4a20=itemView.findViewById(R.id.rounded4a20); + option5a20=itemView.findViewById(R.id.rounded5a20); + l3a20=itemView.findViewById(R.id.layout_a20_3); + l4a20=itemView.findViewById(R.id.layout_a20_4); + l5a20=itemView.findViewById(R.id.layout_a20_5); + + + + + + percentage1a25 = itemView.findViewById(R.id.textViewPercentage1a25); + percentage2a25 = itemView.findViewById(R.id.textViewPercentage2a25); + percentage3a25 = itemView.findViewById(R.id.textViewPercentage3a25); + percentage4a25 = itemView.findViewById(R.id.textViewPercentage4a25); + percentage5a25 = itemView.findViewById(R.id.textViewPercentage5a25); + + label1a25=itemView.findViewById(R.id.textViewLabel1a25); + label2a25=itemView.findViewById(R.id.textViewLabel2a25); + label3a25=itemView.findViewById(R.id.textViewLabel3a25); + label4a25=itemView.findViewById(R.id.textViewLabel4a25); + label5a25=itemView.findViewById(R.id.textViewLabel5a25); + option1a25=itemView.findViewById(R.id.rounded1a25); + option2a25=itemView.findViewById(R.id.rounded2a25); + option3a25=itemView.findViewById(R.id.rounded3a25); + option4a25=itemView.findViewById(R.id.rounded4a25); + option5a25=itemView.findViewById(R.id.rounded5a25); + l3a25=itemView.findViewById(R.id.layout_a25_3); + l4a25=itemView.findViewById(R.id.layout_a25_4); + l5a25=itemView.findViewById(R.id.layout_a25_5); + + + + + + percentage1a31 = itemView.findViewById(R.id.textViewPercentage1a31); + percentage2a31 = itemView.findViewById(R.id.textViewPercentage2a31); + percentage3a31 = itemView.findViewById(R.id.textViewPercentage3a31); + percentage4a31 = itemView.findViewById(R.id.textViewPercentage4a31); + percentage5a31 = itemView.findViewById(R.id.textViewPercentage5a31); + + label1a31=itemView.findViewById(R.id.textViewLabel1a31); + label2a31=itemView.findViewById(R.id.textViewLabel2a31); + label3a31=itemView.findViewById(R.id.textViewLabel3a31); + label4a31=itemView.findViewById(R.id.textViewLabel4a31); + label5a31=itemView.findViewById(R.id.textViewLabel5a31); + option1a31=itemView.findViewById(R.id.rounded1a31); + option2a31=itemView.findViewById(R.id.rounded2a31); + option3a31=itemView.findViewById(R.id.rounded3a31); + option4a31=itemView.findViewById(R.id.rounded4a31); + option5a31=itemView.findViewById(R.id.rounded5a31); + l3a31=itemView.findViewById(R.id.layout_a31_3); + l4a31=itemView.findViewById(R.id.layout_a31_4); + l5a31=itemView.findViewById(R.id.layout_a31_5); + + + + + + percentage1a35 = itemView.findViewById(R.id.textViewPercentage1a35); + percentage2a35 = itemView.findViewById(R.id.textViewPercentage2a35); + percentage3a35 = itemView.findViewById(R.id.textViewPercentage3a35); + percentage4a35 = itemView.findViewById(R.id.textViewPercentage4a35); + percentage5a35 = itemView.findViewById(R.id.textViewPercentage5a35); + + label1a35=itemView.findViewById(R.id.textViewLabel1a35); + label2a35=itemView.findViewById(R.id.textViewLabe2a35); + label3a35=itemView.findViewById(R.id.textViewLabe3a35); + label4a35=itemView.findViewById(R.id.textViewLabe4a35); + label5a35=itemView.findViewById(R.id.textViewLabe5a35); + option1a35=itemView.findViewById(R.id.rounded1a35); + option2a35=itemView.findViewById(R.id.rounded2a35); + option3a35=itemView.findViewById(R.id.rounded3a35); + option4a35=itemView.findViewById(R.id.rounded4a35); + option5a35=itemView.findViewById(R.id.rounded5a35); + l3a35=itemView.findViewById(R.id.layout_a35_3); + l4a35=itemView.findViewById(R.id.layout_a35_4); + l5a35=itemView.findViewById(R.id.layout_a35_5); + + + + + + + + + + statistics=itemView.findViewById(R.id.textViewStatistics); + locations=itemView.findViewById(R.id.textViewlocations); + gender=itemView.findViewById(R.id.textViewGender); + age=itemView.findViewById(R.id.textViewAge); + + +// itemView.setOnClickListener(this); + statistics.setOnClickListener(this); + gender.setOnClickListener(this); + locations.setOnClickListener(this); + age.setOnClickListener(this); + + + } + + @Override + public void onClick(View view) { + if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); + } + } + + public questions getItem(int id) { + return mData.get(id); + } + + public void setClickListener(ItemClickListener itemClickListener) { + this.mClickListener = itemClickListener; + } + + public interface ItemClickListener { + void onItemClick(View view, int position); + } + private void setupAge0(ViewHolder holder, int position, List tempa0) { + if (tempa0.size() == 1) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentageTempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentageTempa0 + "%"); + holder.l3a0.setVisibility(View.GONE); + holder.l4a0.setVisibility(View.GONE); + holder.l5a0.setVisibility(View.GONE); + } + if (tempa0.size() == 2) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentageTempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentageTempa0 + "%"); + holder.label2a0.setText(tempa0.get(1).getLabel()); + holder.option2a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option2a0.setProgress(tempa0.get(1).getCount()); + int percentageTemp2a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp2a0 = ((tempa0.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage2a0.setText("" + percentageTemp2a0 + "%"); + holder.l3a0.setVisibility(View.GONE); + holder.l4a0.setVisibility(View.GONE); + holder.l5a0.setVisibility(View.GONE); + } + if (tempa0.size() == 3) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentageTempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentageTempa0 + "%"); + holder.label2a0.setText(tempa0.get(1).getLabel()); + holder.option2a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option2a0.setProgress(tempa0.get(1).getCount()); + int percentageTemp2a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp2a0 = ((tempa0.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage2a0.setText("" + percentageTemp2a0 + "%"); + holder.l3a0.setVisibility(View.VISIBLE); + holder.label3a0.setText(tempa0.get(2).getLabel()); + holder.option3a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option3a0.setProgress(tempa0.get(2).getCount()); + int percentageTemp3a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp3a0 = ((tempa0.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage3a0.setText("" + percentageTemp3a0 + "%"); + + holder.l4a0.setVisibility(View.GONE); + holder.l5a0.setVisibility(View.GONE); + + } else { + holder.l3a0.setVisibility(View.GONE); + } + if (tempa0.size() == 4) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentageTempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentageTempa0 + "%"); + holder.label2a0.setText(tempa0.get(1).getLabel()); + holder.option2a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option2a0.setProgress(tempa0.get(1).getCount()); + int percentageTemp2a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp2a0 = ((tempa0.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage2a0.setText("" + percentageTemp2a0 + "%"); + holder.l3a0.setVisibility(View.VISIBLE); + holder.label3a0.setText(tempa0.get(2).getLabel()); + holder.option3a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option3a0.setProgress(tempa0.get(2).getCount()); + holder.l4a0.setVisibility(View.VISIBLE); + holder.label4a0.setText(tempa0.get(3).getLabel()); + holder.option4a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option4a0.setProgress(tempa0.get(3).getCount()); + int percentageTemp3a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp3a0 = ((tempa0.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage3a0.setText("" + percentageTemp3a0 + "%"); + int percentageTemp4a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp4a0 = ((tempa0.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage4a0.setText("" + percentageTemp4a0 + "%"); + + + } else { + holder.l4a0.setVisibility(View.GONE); + } + if (tempa0.size() == 5) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentagetempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentagetempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentagetempa0 + "%"); + holder.label2a0.setText(tempa0.get(1).getLabel()); + holder.option2a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option2a0.setProgress(tempa0.get(1).getCount()); + int percentageTemp2a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp2a0 = ((tempa0.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage2a0.setText("" + percentageTemp2a0 + "%"); + holder.l3a0.setVisibility(View.VISIBLE); + holder.label3a0.setText(tempa0.get(2).getLabel()); + holder.option3a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option3a0.setProgress(tempa0.get(2).getCount()); + holder.l4a0.setVisibility(View.VISIBLE); + holder.label4a0.setText(tempa0.get(3).getLabel()); + holder.option4a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option4a0.setProgress(tempa0.get(3).getCount()); + holder.l5a0.setVisibility(View.VISIBLE); + holder.label5a0.setText(tempa0.get(4).getLabel()); + holder.option5a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option5a0.setProgress(tempa0.get(4).getCount()); + int percentageTemp3a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp3a0 = ((tempa0.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage3a0.setText("" + percentageTemp3a0 + "%"); + int percentageTemp4a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp4a0 = ((tempa0.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage4a0.setText("" + percentageTemp4a0 + "%"); + int percentageTemp5a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp5a0 = ((tempa0.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage5a0.setText("" + percentageTemp5a0 + "%"); + + } else { + holder.l5a0.setVisibility(View.GONE); + } + if (tempa0.size() > 5) { + holder.label1a0.setText(tempa0.get(0).getLabel()); + holder.option1a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option1a0.setProgress(tempa0.get(0).getCount()); + int percentagetempa0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentagetempa0 = ((tempa0.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage1a0.setText("" + percentagetempa0 + "%"); + holder.label2a0.setText(tempa0.get(1).getLabel()); + holder.option2a0.setMax(mData.get(position).getResults_by_age().get(0).getSet()); + holder.option2a0.setProgress(tempa0.get(1).getCount()); + int percentageTemp2a0 = 0; + if( (mData.get(position).getResults_by_age().get(0).getSet()) > 0){ + percentageTemp2a0 = ((tempa0.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(0).getSet()); + } + holder.percentage2a0.setText("" + percentageTemp2a0 + "%"); + holder.l3a0.setVisibility(View.GONE); + holder.l4a0.setVisibility(View.GONE); + holder.l5a0.setVisibility(View.GONE); + } + } + + + private void setupA15(ViewHolder holder, int position, List tempa15) { + if (tempa15.size() == 1) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.l3a15.setVisibility(View.GONE); + holder.l4a15.setVisibility(View.GONE); + holder.l5a15.setVisibility(View.GONE); + } + if (tempa15.size() == 2) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.label2a15.setText(tempa15.get(1).getLabel()); + holder.option2a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option2a15.setProgress(tempa15.get(1).getCount()); + int percentageTemp2a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp2a15 = ((tempa15.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage2a15.setText("" + percentageTemp2a15 + "%"); + holder.l3a15.setVisibility(View.GONE); + holder.l4a15.setVisibility(View.GONE); + holder.l5a15.setVisibility(View.GONE); + } + if (tempa15.size() == 3) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.label2a15.setText(tempa15.get(1).getLabel()); + holder.option2a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option2a15.setProgress(tempa15.get(1).getCount()); + int percentageTemp2a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp2a15 = ((tempa15.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage2a15.setText("" + percentageTemp2a15 + "%"); + holder.l3a15.setVisibility(View.VISIBLE); + holder.label3a15.setText(tempa15.get(2).getLabel()); + holder.option3a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option3a15.setProgress(tempa15.get(2).getCount()); + int percentageTemp3a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp3a15 = ((tempa15.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage3a15.setText("" + percentageTemp3a15 + "%"); + + holder.l4a15.setVisibility(View.GONE); + holder.l5a15.setVisibility(View.GONE); + + } else { + holder.l3a15.setVisibility(View.GONE); + } + if (tempa15.size() == 4) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.label2a15.setText(tempa15.get(1).getLabel()); + holder.option2a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option2a15.setProgress(tempa15.get(1).getCount()); + int percentageTemp2a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp2a15 = ((tempa15.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage2a15.setText("" + percentageTemp2a15 + "%"); + holder.l3a15.setVisibility(View.VISIBLE); + holder.label3a15.setText(tempa15.get(2).getLabel()); + holder.option3a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option3a15.setProgress(tempa15.get(2).getCount()); + holder.l4a15.setVisibility(View.VISIBLE); + holder.label4a15.setText(tempa15.get(3).getLabel()); + holder.option4a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option4a15.setProgress(tempa15.get(3).getCount()); + int percentageTemp3a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp3a15 = ((tempa15.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage3a15.setText("" + percentageTemp3a15 + "%"); + int percentageTemp4a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp4a15 = ((tempa15.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage4a15.setText("" + percentageTemp4a15 + "%"); + + + } else { + holder.l4a15.setVisibility(View.GONE); + } + if (tempa15.size() == 5) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.label2a15.setText(tempa15.get(1).getLabel()); + holder.option2a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option2a15.setProgress(tempa15.get(1).getCount()); + int percentageTemp2a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp2a15 = ((tempa15.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage2a15.setText("" + percentageTemp2a15 + "%"); + holder.l3a15.setVisibility(View.VISIBLE); + holder.label3a15.setText(tempa15.get(2).getLabel()); + holder.option3a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option3a15.setProgress(tempa15.get(2).getCount()); + holder.l4a15.setVisibility(View.VISIBLE); + holder.label4a15.setText(tempa15.get(3).getLabel()); + holder.option4a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option4a15.setProgress(tempa15.get(3).getCount()); + holder.l5a15.setVisibility(View.VISIBLE); + holder.label5a15.setText(tempa15.get(4).getLabel()); + holder.option5a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option5a15.setProgress(tempa15.get(4).getCount()); + int percentageTemp3a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp3a15 = ((tempa15.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage3a15.setText("" + percentageTemp3a15 + "%"); + int percentageTemp4a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp4a15 = ((tempa15.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage4a15.setText("" + percentageTemp4a15 + "%"); + int percentageTemp5a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp5a15 = ((tempa15.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage5a15.setText("" + percentageTemp5a15 + "%"); + + } else { + holder.l5a15.setVisibility(View.GONE); + } + if (tempa15.size() > 5) { + holder.label1a15.setText(tempa15.get(0).getLabel()); + holder.option1a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option1a15.setProgress(tempa15.get(0).getCount()); + int percentagetempa15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentagetempa15 = ((tempa15.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage1a15.setText("" + percentagetempa15 + "%"); + holder.label2a15.setText(tempa15.get(1).getLabel()); + holder.option2a15.setMax(mData.get(position).getResults_by_age().get(1).getSet()); + holder.option2a15.setProgress(tempa15.get(1).getCount()); + int percentageTemp2a15 = 0; + if( (mData.get(position).getResults_by_age().get(1).getSet()) > 0){ + percentageTemp2a15 = ((tempa15.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(1).getSet()); + } + holder.percentage2a15.setText("" + percentageTemp2a15 + "%"); + holder.l3a15.setVisibility(View.GONE); + holder.l4a15.setVisibility(View.GONE); + holder.l5a15.setVisibility(View.GONE); + } + } + + private void setupAge35(ViewHolder holder, int position, List tempa35) { + if (tempa35.size() == 1) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 =0; + if((mData.get(position).getResults_by_age().get(5).getSet())!=0){ + + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + + }else{ + + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.l3a35.setVisibility(View.GONE); + holder.l4a35.setVisibility(View.GONE); + holder.l5a35.setVisibility(View.GONE); + + } + if (tempa35.size() == 2) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.label2a35.setText(tempa35.get(1).getLabel()); + holder.option2a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option2a35.setProgress(tempa35.get(1).getCount()); + int percentageTemp2a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp2a35 = ((tempa35.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage2a35.setText("" + percentageTemp2a35 + "%"); + holder.l3a35.setVisibility(View.GONE); + holder.l4a35.setVisibility(View.GONE); + holder.l5a35.setVisibility(View.GONE); + } + if (tempa35.size() == 3) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.label2a35.setText(tempa35.get(1).getLabel()); + holder.option2a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option2a35.setProgress(tempa35.get(1).getCount()); + int percentageTemp2a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp2a35 = ((tempa35.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage2a35.setText("" + percentageTemp2a35 + "%"); + holder.l3a35.setVisibility(View.VISIBLE); + holder.label3a35.setText(tempa35.get(2).getLabel()); + holder.option3a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option3a35.setProgress(tempa35.get(2).getCount()); + int percentageTemp3a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp3a35 = ((tempa35.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage3a35.setText("" + percentageTemp3a35 + "%"); + holder.l4a35.setVisibility(View.GONE); + holder.l5a35.setVisibility(View.GONE); + + } else { + holder.l3a35.setVisibility(View.GONE); + } + if (tempa35.size() == 4) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.label2a35.setText(tempa35.get(1).getLabel()); + holder.option2a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option2a35.setProgress(tempa35.get(1).getCount()); + int percentageTemp2a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp2a35 = ((tempa35.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage2a35.setText("" + percentageTemp2a35 + "%"); + holder.l3a35.setVisibility(View.VISIBLE); + holder.label3a35.setText(tempa35.get(2).getLabel()); + holder.option3a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option3a35.setProgress(tempa35.get(2).getCount()); + holder.l4a35.setVisibility(View.VISIBLE); + holder.label4a35.setText(tempa35.get(3).getLabel()); + holder.option4a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option4a35.setProgress(tempa35.get(3).getCount()); + int percentageTemp3a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp3a35 = ((tempa35.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage3a35.setText("" + percentageTemp3a35 + "%"); + int percentageTemp4a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp4a35 = ((tempa35.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage4a35.setText("" + percentageTemp4a35 + "%"); + + + } else { + holder.l4a35.setVisibility(View.GONE); + } + if (tempa35.size() == 5) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.label2a35.setText(tempa35.get(1).getLabel()); + holder.option2a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option2a35.setProgress(tempa35.get(1).getCount()); + int percentageTemp2a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp2a35 = ((tempa35.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage2a35.setText("" + percentageTemp2a35 + "%"); + holder.l3a35.setVisibility(View.VISIBLE); + holder.label3a35.setText(tempa35.get(2).getLabel()); + holder.option3a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option3a35.setProgress(tempa35.get(2).getCount()); + holder.l4a35.setVisibility(View.VISIBLE); + holder.label4a35.setText(tempa35.get(3).getLabel()); + holder.option4a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option4a35.setProgress(tempa35.get(3).getCount()); + holder.l5a35.setVisibility(View.VISIBLE); + holder.label5a35.setText(tempa35.get(4).getLabel()); + holder.option5a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option5a35.setProgress(tempa35.get(4).getCount()); + int percentageTemp3a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp3a35 = ((tempa35.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage3a35.setText("" + percentageTemp3a35 + "%"); + int percentageTemp4a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp4a35 = ((tempa35.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage4a35.setText("" + percentageTemp4a35 + "%"); + int percentageTemp5a35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp5a35 = ((tempa35.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage5a35.setText("" + percentageTemp5a35 + "%"); + + } else { + holder.l5a35.setVisibility(View.GONE); + } + if (tempa35.size() > 5) { + holder.label1a35.setText(tempa35.get(0).getLabel()); + holder.option1a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option1a35.setProgress(tempa35.get(0).getCount()); + int percentagetempa35 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentagetempa35 = ((tempa35.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage1a35.setText("" + percentagetempa35 + "%"); + holder.label2a35.setText(tempa35.get(1).getLabel()); + holder.option2a35.setMax(mData.get(position).getResults_by_age().get(5).getSet()); + holder.option2a31.setProgress(tempa35.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(5).getSet()) > 0){ + percentageTemp2a31 = ((tempa35.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(5).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.GONE); + holder.l4a31.setVisibility(View.GONE); + holder.l5a31.setVisibility(View.GONE); + } + } + + private void setupAge31(ViewHolder holder, int position, List tempa31) { + if (tempa31.size() == 1) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 =0; + if((mData.get(position).getResults_by_age().get(4).getSet())!=0){ + + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + + }else{ + + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.l3a31.setVisibility(View.GONE); + holder.l4a31.setVisibility(View.GONE); + holder.l5a31.setVisibility(View.GONE); + + } + if (tempa31.size() == 2) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.label2a31.setText(tempa31.get(1).getLabel()); + holder.option2a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option2a31.setProgress(tempa31.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp2a31 = ((tempa31.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.GONE); + holder.l4a31.setVisibility(View.GONE); + holder.l5a31.setVisibility(View.GONE); + } + if (tempa31.size() == 3) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.label2a31.setText(tempa31.get(1).getLabel()); + holder.option2a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option2a31.setProgress(tempa31.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp2a31 = ((tempa31.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.VISIBLE); + holder.label3a31.setText(tempa31.get(2).getLabel()); + holder.option3a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option3a31.setProgress(tempa31.get(2).getCount()); + int percentageTemp3a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp3a31 = ((tempa31.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage3a31.setText("" + percentageTemp3a31 + "%"); + holder.l4a31.setVisibility(View.GONE); + holder.l5a31.setVisibility(View.GONE); + + } else { + holder.l3a31.setVisibility(View.GONE); + } + if (tempa31.size() == 4) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.label2a31.setText(tempa31.get(1).getLabel()); + holder.option2a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option2a31.setProgress(tempa31.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp2a31 = ((tempa31.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.VISIBLE); + holder.label3a31.setText(tempa31.get(2).getLabel()); + holder.option3a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option3a31.setProgress(tempa31.get(2).getCount()); + holder.l4a31.setVisibility(View.VISIBLE); + holder.label4a31.setText(tempa31.get(3).getLabel()); + holder.option4a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option4a31.setProgress(tempa31.get(3).getCount()); + int percentageTemp3a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp3a31 = ((tempa31.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage3a31.setText("" + percentageTemp3a31 + "%"); + int percentageTemp4a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp4a31 = ((tempa31.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage4a31.setText("" + percentageTemp4a31 + "%"); + + + } else { + holder.l4a31.setVisibility(View.GONE); + } + if (tempa31.size() == 5) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.label2a31.setText(tempa31.get(1).getLabel()); + holder.option2a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option2a31.setProgress(tempa31.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp2a31 = ((tempa31.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.VISIBLE); + holder.label3a31.setText(tempa31.get(2).getLabel()); + holder.option3a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option3a31.setProgress(tempa31.get(2).getCount()); + holder.l4a31.setVisibility(View.VISIBLE); + holder.label4a31.setText(tempa31.get(3).getLabel()); + holder.option4a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option4a31.setProgress(tempa31.get(3).getCount()); + holder.l5a31.setVisibility(View.VISIBLE); + holder.label5a31.setText(tempa31.get(4).getLabel()); + holder.option5a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option5a31.setProgress(tempa31.get(4).getCount()); + int percentageTemp3a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp3a31 = ((tempa31.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage3a31.setText("" + percentageTemp3a31 + "%"); + int percentageTemp4a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp4a31 = ((tempa31.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage4a31.setText("" + percentageTemp4a31 + "%"); + int percentageTemp5a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp5a31 = ((tempa31.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage5a31.setText("" + percentageTemp5a31 + "%"); + + } else { + holder.l5a31.setVisibility(View.GONE); + } + if (tempa31.size() > 5) { + holder.label1a31.setText(tempa31.get(0).getLabel()); + holder.option1a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option1a31.setProgress(tempa31.get(0).getCount()); + int percentagetempa31 = 0; + if( mData.get(position).getResults_by_age().get(4).getSet() > 0){ + percentagetempa31 = ((tempa31.get(0).getCount()) * 100) / mData.get(position).getResults_by_age().get(4).getSet(); + } + holder.percentage1a31.setText("" + percentagetempa31 + "%"); + holder.label2a31.setText(tempa31.get(1).getLabel()); + holder.option2a31.setMax(mData.get(position).getResults_by_age().get(4).getSet()); + holder.option2a31.setProgress(tempa31.get(1).getCount()); + int percentageTemp2a31 = 0; + if( (mData.get(position).getResults_by_age().get(4).getSet()) > 0){ + percentageTemp2a31 = ((tempa31.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(4).getSet()); + } + holder.percentage2a31.setText("" + percentageTemp2a31 + "%"); + holder.l3a31.setVisibility(View.GONE); + holder.l4a31.setVisibility(View.GONE); + holder.l5a31.setVisibility(View.GONE); + } + } + + private void setupAge20(ViewHolder holder, int position, List tempa20) { + if (tempa20.size() == 1) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.l3a20.setVisibility(View.GONE); + holder.l4a20.setVisibility(View.GONE); + holder.l5a20.setVisibility(View.GONE); + } + if (tempa20.size() == 2) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.label2a20.setText(tempa20.get(1).getLabel()); + holder.option2a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option2a20.setProgress(tempa20.get(1).getCount()); + int percentageTemp2a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp2a20 = ((tempa20.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage2a20.setText("" + percentageTemp2a20 + "%"); + holder.l3a20.setVisibility(View.GONE); + holder.l4a20.setVisibility(View.GONE); + holder.l5a20.setVisibility(View.GONE); + } + if (tempa20.size() == 3) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.label2a20.setText(tempa20.get(1).getLabel()); + holder.option2a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option2a20.setProgress(tempa20.get(1).getCount()); + int percentageTemp2a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp2a20 = ((tempa20.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage2a20.setText("" + percentageTemp2a20 + "%"); + holder.l3a20.setVisibility(View.VISIBLE); + holder.label3a20.setText(tempa20.get(2).getLabel()); + holder.option3a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option3a20.setProgress(tempa20.get(2).getCount()); + int percentageTemp3a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp3a20 = ((tempa20.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage3a20.setText("" + percentageTemp3a20 + "%"); + + holder.l4a20.setVisibility(View.GONE); + holder.l5a20.setVisibility(View.GONE); + + } else { + holder.l3a20.setVisibility(View.GONE); + } + if (tempa20.size() == 4) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.label2a20.setText(tempa20.get(1).getLabel()); + holder.option2a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option2a20.setProgress(tempa20.get(1).getCount()); + int percentageTemp2a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp2a20 = ((tempa20.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage2a20.setText("" + percentageTemp2a20 + "%"); + holder.l3a20.setVisibility(View.VISIBLE); + holder.label3a20.setText(tempa20.get(2).getLabel()); + holder.option3a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option3a20.setProgress(tempa20.get(2).getCount()); + holder.l4a20.setVisibility(View.VISIBLE); + holder.label4a20.setText(tempa20.get(3).getLabel()); + holder.option4a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option4a20.setProgress(tempa20.get(3).getCount()); + int percentageTemp3a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp3a20 = ((tempa20.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage3a20.setText("" + percentageTemp3a20 + "%"); + int percentageTemp4a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp4a20 = ((tempa20.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage4a20.setText("" + percentageTemp4a20 + "%"); + + + } else { + holder.l4a20.setVisibility(View.GONE); + } + if (tempa20.size() == 5) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.label2a20.setText(tempa20.get(1).getLabel()); + holder.option2a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option2a20.setProgress(tempa20.get(1).getCount()); + int percentageTemp2a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp2a20 = ((tempa20.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage2a20.setText("" + percentageTemp2a20 + "%"); + holder.l3a20.setVisibility(View.VISIBLE); + holder.label3a20.setText(tempa20.get(2).getLabel()); + holder.option3a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option3a20.setProgress(tempa20.get(2).getCount()); + holder.l4a20.setVisibility(View.VISIBLE); + holder.label4a20.setText(tempa20.get(3).getLabel()); + holder.option4a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option4a20.setProgress(tempa20.get(3).getCount()); + holder.l5a20.setVisibility(View.VISIBLE); + holder.label5a20.setText(tempa20.get(4).getLabel()); + holder.option5a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option5a20.setProgress(tempa20.get(4).getCount()); + int percentageTemp3a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp3a20 = ((tempa20.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage3a20.setText("" + percentageTemp3a20 + "%"); + int percentageTemp4a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp4a20 = ((tempa20.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage4a20.setText("" + percentageTemp4a20 + "%"); + int percentageTemp5a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp5a20 = ((tempa20.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage5a20.setText("" + percentageTemp5a20 + "%"); + + } else { + holder.l5a20.setVisibility(View.GONE); + } + if (tempa20.size() > 5) { + holder.label1a20.setText(tempa20.get(0).getLabel()); + holder.option1a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option1a20.setProgress(tempa20.get(0).getCount()); + int percentagetempa20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentagetempa20 = ((tempa20.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage1a20.setText("" + percentagetempa20 + "%"); + holder.label2a20.setText(tempa20.get(1).getLabel()); + holder.option2a20.setMax(mData.get(position).getResults_by_age().get(2).getSet()); + holder.option2a20.setProgress(tempa20.get(1).getCount()); + int percentageTemp2a20 = 0; + if( (mData.get(position).getResults_by_age().get(2).getSet()) > 0){ + percentageTemp2a20 = ((tempa20.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(2).getSet()); + } + holder.percentage2a20.setText("" + percentageTemp2a20 + "%"); + holder.l3a20.setVisibility(View.GONE); + holder.l4a20.setVisibility(View.GONE); + holder.l5a20.setVisibility(View.GONE); + } + } + + private void setupAge25(ViewHolder holder, int position, List tempa25) { + if (tempa25.size() == 1) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.l3a25.setVisibility(View.GONE); + holder.l4a25.setVisibility(View.GONE); + holder.l5a25.setVisibility(View.GONE); + } + if (tempa25.size() == 2) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.label2a25.setText(tempa25.get(1).getLabel()); + holder.option2a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option2a25.setProgress(tempa25.get(1).getCount()); + int percentageTemp2a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp2a25 = ((tempa25.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage2a25.setText("" + percentageTemp2a25 + "%"); + holder.l3a25.setVisibility(View.GONE); + holder.l4a25.setVisibility(View.GONE); + holder.l5a25.setVisibility(View.GONE); + } + if (tempa25.size() == 3) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.label2a25.setText(tempa25.get(1).getLabel()); + holder.option2a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option2a25.setProgress(tempa25.get(1).getCount()); + int percentageTemp2a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp2a25 = ((tempa25.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage2a25.setText("" + percentageTemp2a25 + "%"); + holder.l3a25.setVisibility(View.VISIBLE); + holder.label3a25.setText(tempa25.get(2).getLabel()); + holder.option3a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option3a25.setProgress(tempa25.get(2).getCount()); + int percentageTemp3a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp3a25 = ((tempa25.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage3a25.setText("" + percentageTemp3a25 + "%"); + holder.l4a25.setVisibility(View.GONE); + holder.l5a25.setVisibility(View.GONE); + + } else { + holder.l3a25.setVisibility(View.GONE); + } + if (tempa25.size() == 4) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.label2a25.setText(tempa25.get(1).getLabel()); + holder.option2a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option2a25.setProgress(tempa25.get(1).getCount()); + int percentageTemp2a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp2a25 = ((tempa25.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage2a25.setText("" + percentageTemp2a25 + "%"); + holder.l3a25.setVisibility(View.VISIBLE); + holder.label3a25.setText(tempa25.get(2).getLabel()); + holder.option3a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option3a25.setProgress(tempa25.get(3).getCount()); + holder.l4a25.setVisibility(View.VISIBLE); + holder.label4a25.setText(tempa25.get(3).getLabel()); + holder.option4a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option4a25.setProgress(tempa25.get(3).getCount()); + int percentageTemp3a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp3a25 = ((tempa25.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage3a25.setText("" + percentageTemp3a25 + "%"); + int percentageTemp4a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp4a25 = ((tempa25.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage4a25.setText("" + percentageTemp4a25 + "%"); + + + } else { + holder.l4a25.setVisibility(View.GONE); + } + if (tempa25.size() == 5) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.label2a25.setText(tempa25.get(1).getLabel()); + holder.option2a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option2a25.setProgress(tempa25.get(1).getCount()); + int percentageTemp2a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp2a25 = ((tempa25.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage2a25.setText("" + percentageTemp2a25 + "%"); + holder.l3a25.setVisibility(View.VISIBLE); + holder.label3a25.setText(tempa25.get(2).getLabel()); + holder.option3a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option3a25.setProgress(tempa25.get(2).getCount()); + holder.l4a25.setVisibility(View.VISIBLE); + holder.label4a25.setText(tempa25.get(3).getLabel()); + holder.option4a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option4a25.setProgress(tempa25.get(3).getCount()); + holder.l5a25.setVisibility(View.VISIBLE); + holder.label5a25.setText(tempa25.get(4).getLabel()); + holder.option5a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option5a25.setProgress(tempa25.get(4).getCount()); + int percentageTemp3a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp3a25 = ((tempa25.get(2).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage3a25.setText("" + percentageTemp3a25 + "%"); + int percentageTemp4a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp4a25 = ((tempa25.get(3).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage4a25.setText("" + percentageTemp4a25 + "%"); + int percentageTemp5a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp5a25 = ((tempa25.get(4).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage5a25.setText("" + percentageTemp5a25 + "%"); + + } else { + holder.l5a25.setVisibility(View.GONE); + } + if (tempa25.size() > 5) { + holder.label1a25.setText(tempa25.get(0).getLabel()); + holder.option1a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option1a25.setProgress(tempa25.get(0).getCount()); + int percentagetempa25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentagetempa25 = ((tempa25.get(0).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage1a25.setText("" + percentagetempa25 + "%"); + holder.label2a25.setText(tempa25.get(1).getLabel()); + holder.option2a25.setMax(mData.get(position).getResults_by_age().get(3).getSet()); + holder.option2a25.setProgress(tempa25.get(1).getCount()); + int percentageTemp2a25 = 0; + if( (mData.get(position).getResults_by_age().get(3).getSet()) > 0){ + percentageTemp2a25 = ((tempa25.get(1).getCount()) * 100) / (mData.get(position).getResults_by_age().get(3).getSet()); + } + holder.percentage2a25.setText("" + percentageTemp2a25 + "%"); + holder.l3a25.setVisibility(View.GONE); + holder.l4a25.setVisibility(View.GONE); + holder.l5a25.setVisibility(View.GONE); + } + } + + private void setupMale(ViewHolder holder, int position, List tempm) { + if (tempm.size() == 1) { + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + } + if (tempm.size() == 2) { + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + holder.label2m.setText(mData.get(position).getResults_by_age().get(1).getCategories().get(1).getLabel()); + holder.option2m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option2m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()); + int percentageTemp2m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp2m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage2m.setText("" + percentageTemp2m + "%"); + } + if (tempm.size() == 3) { + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + holder.label2m.setText(mData.get(position).getResults_by_age().get(1).getCategories().get(1).getLabel()); + holder.option2m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option2m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()); + int percentageTemp2m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp2m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage2m.setText("" + percentageTemp2m + "%"); + holder.l3m.setVisibility(View.VISIBLE); + holder.label3m.setText(tempm.get(2).getLabel()); + holder.option3m.setMax(mData.get(position).getResults().getSet()); + holder.option3m.setProgress(tempm.get(2).getCount()); + int percentageTemp3m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp3m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage3m.setText("" + percentageTemp3m + "%"); + + } else { + holder.l3m.setVisibility(View.GONE); + } + if (tempm.size() == 4) { + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + holder.label2m.setText(mData.get(position).getResults_by_age().get(1).getCategories().get(1).getLabel()); + holder.option2m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option2m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()); + int percentageTemp2m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp2m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage2m.setText("" + percentageTemp2m + "%"); + holder.l3m.setVisibility(View.VISIBLE); + holder.label3m.setText(tempm.get(2).getLabel()); + holder.option3m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option3m.setProgress(tempm.get(2).getCount()); + holder.l4m.setVisibility(View.VISIBLE); + holder.label4m.setText(tempm.get(3).getLabel()); + holder.option4m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option4m.setProgress(tempm.get(3).getCount()); + int percentageTemp3m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp3m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage3m.setText("" + percentageTemp3m + "%"); + int percentageTemp4m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp4m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage4m.setText("" + percentageTemp4m + "%"); + + } else { + holder.l4m.setVisibility(View.GONE); + } + if (tempm.size() == 5) { + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + holder.label2m.setText(mData.get(position).getResults_by_age().get(1).getCategories().get(1).getLabel()); + holder.option2m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option2m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()); + int percentageTemp2m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp2m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage2m.setText("" + percentageTemp2m + "%"); + holder.l3m.setVisibility(View.VISIBLE); + holder.label3m.setText(tempm.get(2).getLabel()); + holder.option3m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option3m.setProgress(tempm.get(2).getCount()); + holder.l4m.setVisibility(View.VISIBLE); + holder.label4m.setText(tempm.get(3).getLabel()); + holder.option4m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option4m.setProgress(tempm.get(3).getCount()); + holder.l5m.setVisibility(View.VISIBLE); + holder.label5m.setText(tempm.get(4).getLabel()); + holder.option5m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option5m.setProgress(tempm.get(4).getCount()); + int percentageTemp3m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp3m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage3m.setText("" + percentageTemp3m + "%"); + int percentageTemp4m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp4m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage4m.setText("" + percentageTemp4m + "%"); + int percentageTemp5m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp5m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(4).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage5m.setText("" + percentageTemp5m + "%"); + + } else { + holder.l5m.setVisibility(View.GONE); + } + if(tempm.size() > 5){ + holder.label1m.setText(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getLabel()); + holder.option1m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option1m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()); + int percentageTempm = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTempm = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage1m.setText("" + percentageTempm + "%"); + holder.label2m.setText(mData.get(position).getResults_by_age().get(1).getCategories().get(1).getLabel()); + holder.option2m.setMax(mData.get(position).getResults_by_gender().get(1).getSet()); + holder.option2m.setProgress(mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()); + int percentageTemp2m = 0; + if( (mData.get(position).getResults_by_gender().get(1).getSet()) > 0){ + percentageTemp2m = ((mData.get(position).getResults_by_gender().get(1).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(1).getSet()); + } + holder.percentage2m.setText("" + percentageTemp2m + "%"); + + } + } + + private void setupFemale(ViewHolder holder, int position, List tempf) { + if (tempf.size() == 1) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + } + if (tempf.size() == 2) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + holder.label2f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getLabel()); + holder.option2f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option2f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()); + int percentageTemp2f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp2f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage2f.setText("" + percentageTemp2f + "%"); + } + if (tempf.size() == 3) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + holder.label2f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getLabel()); + holder.option2f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option2f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()); + int percentageTemp2f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp2f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage2f.setText("" + percentageTemp2f + "%"); + holder.l3f.setVisibility(View.VISIBLE); + holder.label3f.setText(tempf.get(2).getLabel()); + holder.option3f.setMax(mData.get(position).getResults().getSet()); + holder.option3f.setProgress(tempf.get(2).getCount()); + int percentageTemp3f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp3f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage3f.setText("" + percentageTemp3f + "%"); + + } else { + holder.l3f.setVisibility(View.GONE); + } + if (tempf.size() == 4) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + holder.label2f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getLabel()); + holder.option2f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option2f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()); + int percentageTemp2f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp2f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage2f.setText("" + percentageTemp2f + "%"); + holder.l3f.setVisibility(View.VISIBLE); + holder.label3f.setText(tempf.get(2).getLabel()); + holder.option3f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option3f.setProgress(tempf.get(2).getCount()); + holder.l4f.setVisibility(View.VISIBLE); + holder.label4f.setText(tempf.get(3).getLabel()); + holder.option4f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option4f.setProgress(tempf.get(3).getCount()); + int percentageTemp3f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp3f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage3f.setText("" + percentageTemp3f + "%"); + int percentageTemp4f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp4f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage4f.setText("" + percentageTemp4f + "%"); + + } else { + holder.l4f.setVisibility(View.GONE); + } + if (tempf.size() == 5) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + holder.label2f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getLabel()); + holder.option2f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option2f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()); + int percentageTemp2f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp2f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage2f.setText("" + percentageTemp2f + "%"); + holder.l3f.setVisibility(View.VISIBLE); + holder.label3f.setText(tempf.get(2).getLabel()); + holder.option3f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option3f.setProgress(tempf.get(2).getCount()); + holder.l4f.setVisibility(View.VISIBLE); + holder.label4f.setText(tempf.get(3).getLabel()); + holder.option4f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option4f.setProgress(tempf.get(3).getCount()); + holder.l5f.setVisibility(View.VISIBLE); + holder.label5f.setText(tempf.get(4).getLabel()); + holder.option5f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option5f.setProgress(tempf.get(4).getCount()); + int percentageTemp3f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp3f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage3f.setText("" + percentageTemp3f + "%"); + int percentageTemp4f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp4f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage4f.setText("" + percentageTemp4f + "%"); + int percentageTemp5f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp5f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(4).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage5f.setText("" + percentageTemp5f + "%"); + + } else { + holder.l5f.setVisibility(View.GONE); + } + if (tempf.size() > 5) { + holder.label1f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getLabel()); + holder.option1f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option1f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()); + int percentageTempf = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTempf = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage1f.setText("" + percentageTempf + "%"); + holder.label2f.setText(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getLabel()); + holder.option2f.setMax(mData.get(position).getResults_by_gender().get(0).getSet()); + holder.option2f.setProgress(mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()); + int percentageTemp2f = 0; + if( (mData.get(position).getResults_by_gender().get(0).getSet()) > 0){ + percentageTemp2f = ((mData.get(position).getResults_by_gender().get(0).getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults_by_gender().get(0).getSet()); + } + holder.percentage2f.setText("" + percentageTemp2f + "%"); + } + } + + private void setupStatistics(ViewHolder holder, int position) { + List temp = mData.get(position).getResults().getCategories(); + if (temp.size() == 1) { + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + } + if (temp.size() == 2) { + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + holder.label2.setText(mData.get(position).getResults().getCategories().get(1).getLabel()); + holder.option2.setMax(mData.get(position).getResults().getSet()); + holder.option2.setProgress(mData.get(position).getResults().getCategories().get(1).getCount()); + int percentageTemp2 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp2 = ((mData.get(position).getResults().getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage2.setText("" + percentageTemp2 + "%"); + + + } else { + } + if (temp.size() == 3) { + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + holder.label2.setText(mData.get(position).getResults().getCategories().get(1).getLabel()); + holder.option2.setMax(mData.get(position).getResults().getSet()); + holder.option2.setProgress(mData.get(position).getResults().getCategories().get(1).getCount()); + int percentageTemp2 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp2 = ((mData.get(position).getResults().getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage2.setText("" + percentageTemp2 + "%"); + holder.l3.setVisibility(View.VISIBLE); + Log.d("LENGTH CHECK", "" + temp.size() + temp.get(2).getLabel()); + holder.label3.setText(temp.get(2).getLabel()); + holder.option3.setMax(mData.get(position).getResults().getSet()); + holder.option3.setProgress(temp.get(2).getCount()); + int percentageTemp3 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp3 = ((mData.get(position).getResults().getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage3.setText("" + percentageTemp3 + "%"); + + } else { + holder.l3.setVisibility(View.GONE); + } + if (temp.size() == 4) { + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + holder.label2.setText(mData.get(position).getResults().getCategories().get(1).getLabel()); + holder.option2.setMax(mData.get(position).getResults().getSet()); + holder.option2.setProgress(mData.get(position).getResults().getCategories().get(1).getCount()); + int percentageTemp2 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp2 = ((mData.get(position).getResults().getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage2.setText("" + percentageTemp2 + "%"); + holder.l3.setVisibility(View.VISIBLE); + holder.label3.setText(temp.get(2).getLabel()); + holder.option3.setMax(mData.get(position).getResults().getSet()); + holder.option3.setProgress(temp.get(2).getCount()); + holder.l4.setVisibility(View.VISIBLE); + holder.label4.setText(temp.get(3).getLabel()); + holder.option4.setMax(mData.get(position).getResults().getSet()); + holder.option4.setProgress(temp.get(3).getCount()); + int percentageTemp3 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp3 = ((mData.get(position).getResults().getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage3.setText("" + percentageTemp3 + "%"); + int percentageTemp4 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp4 = ((mData.get(position).getResults().getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage4.setText("" + percentageTemp4 + "%"); + + } else { + holder.l4.setVisibility(View.GONE); + } + if (temp.size() == 5) { + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + holder.label2.setText(mData.get(position).getResults().getCategories().get(1).getLabel()); + holder.option2.setMax(mData.get(position).getResults().getSet()); + holder.option2.setProgress(mData.get(position).getResults().getCategories().get(1).getCount()); + int percentageTemp2 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp2 = ((mData.get(position).getResults().getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage2.setText("" + percentageTemp2 + "%"); + holder.l3.setVisibility(View.VISIBLE); + holder.label3.setText(temp.get(2).getLabel()); + holder.option3.setMax(mData.get(position).getResults().getSet()); + holder.option3.setProgress(temp.get(2).getCount()); + holder.l4.setVisibility(View.VISIBLE); + holder.label4.setText(temp.get(3).getLabel()); + holder.option4.setMax(mData.get(position).getResults().getSet()); + holder.option4.setProgress(temp.get(3).getCount()); + holder.l5.setVisibility(View.VISIBLE); + holder.label5.setText(temp.get(4).getLabel()); + holder.option5.setMax(mData.get(position).getResults().getSet()); + holder.option5.setProgress(temp.get(4).getCount()); + int percentageTemp3 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp3 = ((mData.get(position).getResults().getCategories().get(2).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage3.setText("" + percentageTemp3 + "%"); + int percentageTemp4 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp4 = ((mData.get(position).getResults().getCategories().get(3).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage4.setText("" + percentageTemp4 + "%"); + int percentageTemp5 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp5 = ((mData.get(position).getResults().getCategories().get(4).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage5.setText("" + percentageTemp5 + "%"); + + } else { + holder.l5.setVisibility(View.GONE); + } + if(temp.size() > 5){ + holder.label1.setText(mData.get(position).getResults().getCategories().get(0).getLabel()); + holder.option1.setMax(mData.get(position).getResults().getSet()); + holder.option1.setProgress(mData.get(position).getResults().getCategories().get(0).getCount()); + int percentageTemp = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp = ((mData.get(position).getResults().getCategories().get(0).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage1.setText("" + percentageTemp + "%"); + holder.label2.setText(mData.get(position).getResults().getCategories().get(1).getLabel()); + holder.option2.setMax(mData.get(position).getResults().getSet()); + holder.option2.setProgress(mData.get(position).getResults().getCategories().get(1).getCount()); + int percentageTemp2 = 0; + if( (mData.get(position).getResults().getSet()) > 0){ + percentageTemp2 = ((mData.get(position).getResults().getCategories().get(1).getCount()) * 100) / (mData.get(position).getResults().getSet()); + } + holder.percentage2.setText("" + percentageTemp2 + "%"); + + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterPollList.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterPollList.java new file mode 100644 index 0000000..346ee1a --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterPollList.java @@ -0,0 +1,145 @@ +package io.rapidpro.surveyor.extend.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.StaticMethods; +import me.myatminsoe.mdetect.MDetect; +import me.myatminsoe.mdetect.Rabbit; + +public class CustomAdapterPollList extends RecyclerView.Adapter { + + private List mData, mData2, mData3; + private boolean isCategory = false; + private LayoutInflater mInflater; + private ItemClickListener mClickListener; + private int ColorPosition = -1; + int delay = 200; + Context context; + SurveyorApplication surveyorApplication; + + public CustomAdapterPollList(Context context, List data, List data2, List data3, boolean isCategory, int ColorPos) { + this.mInflater = LayoutInflater.from(context); + this.mData = data; + this.mData2 = data2; + this.mData3 = data3; + this.isCategory = isCategory; + this.ColorPosition = ColorPos; + this.context = context; + } + + public CustomAdapterPollList(SurveyorApplication surveyor, Context context, List data, List data2, List data3, boolean isCategory, int ColorPos) { + this.mInflater = LayoutInflater.from(context); + this.mData = data; + this.mData2 = data2; + this.mData3 = data3; + this.isCategory = isCategory; + this.ColorPosition = ColorPos; + this.context = context; + this.surveyorApplication = surveyor; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if(isCategory){ + View view = mInflater.inflate(R.layout.v1_recycler_item_opinions_category, parent, false); + return new ViewHolder(view); + }else{ + View view = mInflater.inflate(R.layout.v1_recycler_item_opinions, parent, false); + return new ViewHolder(view); + } + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + + + String custom_data = mData.get(position); + String lang_code = SurveyorApplication.get().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + if(lang_code.equals("my") && !MDetect.INSTANCE.isUnicode()) { + // Place Zawgyi + custom_data = Rabbit.uni2zg(custom_data); + } + holder.myTextView.setText(custom_data); + + if(position == 0){ + String myDate = StaticMethods.getLocalUpdateDate(surveyorApplication,"ureport_offline_last_updated_local"); + String myText = ""; + + if(myDate.equals("")){ + myText = "Pull down to refresh"; + }else{ + myText = "Last updated: " + myDate + "\n" + "Pull down to refresh"; + } + holder.ureportLastUpdate.setText(myText); + holder.ureportLastUpdate.setVisibility(View.VISIBLE); + } + + } + + @Override + public int getItemCount() { + return mData.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + TextView ureportLastUpdate; + TextView myTextView; + View left_color; + + View color_dot; + ImageView color_arrow; + + ViewHolder(View itemView) { + super(itemView); + myTextView = itemView.findViewById(R.id.topic_title); + ureportLastUpdate = itemView.findViewById(R.id.ureport_last_update); + + + if(ColorPosition != -1){ + color_dot = itemView.findViewById(R.id.colorDot); + color_arrow = itemView.findViewById(R.id.colorArrow); + }else{ + left_color = itemView.findViewById(R.id.left_color); + } + + itemView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); + } + } + + public String getItem(int id) { + return mData.get(id); + } + public String getId(int id) { + return mData2.get(id); + } + + public String getDate(int id) { + return mData3.get(id); + } + + public void setClickListener(ItemClickListener itemClickListener) { + this.mClickListener = itemClickListener; + } + + public interface ItemClickListener { + void onItemClick(View view, int position); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterStories.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterStories.java new file mode 100644 index 0000000..0e0cf8f --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomAdapterStories.java @@ -0,0 +1,175 @@ +package io.rapidpro.surveyor.extend.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + +import java.util.List; + +import de.hdodenhof.circleimageview.CircleImageView; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +import me.myatminsoe.mdetect.MDetect; +import me.myatminsoe.mdetect.Rabbit; + +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; + + +/** + * Custom Adapter for Story List Display + * Used in StoryListActivity -> StoriesListFragment + */ +public class CustomAdapterStories extends RecyclerView.Adapter { + + private Context context; + private List stories; + private LayoutInflater mInflater; + private ItemClickListener mClickListener; + private String lang_code; + + public CustomAdapterStories(Context context, List stories, String lang_code) { + this.context = context; + this.mInflater = LayoutInflater.from(context); + this.stories = stories; + this.lang_code = lang_code; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = mInflater.inflate(R.layout.v1_recycler_item_stories, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + + holder.storyAuthorName.setText(stories.get(position).getAuthor()); + holder.storyDate.setText(stories.get(position).getCreated_at()); + + if(lang_code.equals("bn")){ + holder.storyTitle.setText(stories.get(position).getTitle_bn()); + if(stories.get(position).getSubtitle_bn() != null){ + holder.storyBody.setText(stories.get(position).getSubtitle_bn()); + }else{ + String x = stories.get(position).getBody_bn(); + if(x.length() > 200){ + x = x.substring(0, 200) + "..."; + } + holder.storyBody.setText(x); + } + }else if(lang_code.equals("my")){ + + if (MDetect.INSTANCE.isUnicode()){ + holder.storyTitle.setText(stories.get(position).getTitle_my()); + if(stories.get(position).getSubtitle_my() != null){ + holder.storyBody.setText(stories.get(position).getSubtitle_my()); + }else{ + String x = stories.get(position).getBody_my(); + if(x.length() > 200){ + x = x.substring(0, 200) + "..."; + } + holder.storyBody.setText(x); + } + } else { + // Convert to Zawgyi + holder.storyTitle.setText(Rabbit.uni2zg(stories.get(position).getTitle_my())); + if(stories.get(position).getSubtitle_my() != null){ + holder.storyBody.setText(Rabbit.uni2zg(stories.get(position).getSubtitle_my())); + }else{ + String x = stories.get(position).getBody_my(); + if(x.length() > 200){ + x = x.substring(0, 200) + "..."; + } + holder.storyBody.setText(Rabbit.uni2zg(x)); + } + } + + + } else { + holder.storyTitle.setText(stories.get(position).getTitle_en()); + if(stories.get(position).getSubtitle_en() != null){ + holder.storyBody.setText(stories.get(position).getSubtitle_en()); + }else{ + String x = stories.get(position).getBody_en(); + if(x.length() > 200){ + x = x.substring(0, 200) + "..."; + } + holder.storyBody.setText(x); + } + } + + holder.storySeeMore.setText(R.string.v1_story_see_more); + + if(stories.get(position).getContent_image() != null){ + String imageURL = stories.get(position).getContent_image(); + String file_path = ""; + + if(!imageURL.equals("")){ + file_path = context.getFilesDir() + "/story_image_" + getMD5(imageURL); + }else{ + file_path = "file:///android_asset/images/no-image.png"; + } + + Glide.with(context) + .load(file_path) + //.diskCacheStrategy(DiskCacheStrategy.ALL) + .fitCenter() + .into(holder.storyImage); + } + + } + + @Override + public int getItemCount() { + return stories.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + CardView storyCard; + TextView storyAuthorName; + CircleImageView storyAuthorImage; + TextView storyDate; + ImageView storyImage; + TextView storyTitle; + TextView storyBody; + TextView storySeeMore; + + ViewHolder(View itemView) { + super(itemView); + storyCard = itemView.findViewById(R.id.story_card); + storyAuthorName = itemView.findViewById(R.id.storyAuthorName); + storyAuthorImage = itemView.findViewById(R.id.storyAuthorImage); + storyDate = itemView.findViewById(R.id.storyDate); + storyImage = itemView.findViewById(R.id.storyContentImage); + storyTitle = itemView.findViewById(R.id.storyTitle); + storyBody = itemView.findViewById(R.id.storyBody); + storySeeMore = itemView.findViewById(R.id.storySeeMore); + + itemView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); + } + } + + public void setClickListener(ItemClickListener itemClickListener) { + this.mClickListener = itemClickListener; + } + + public interface ItemClickListener { + void onItemClick(View view, int position); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomScrollAdapter.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomScrollAdapter.java new file mode 100644 index 0000000..b602038 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/CustomScrollAdapter.java @@ -0,0 +1,70 @@ +package io.rapidpro.surveyor.extend.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; +import io.rapidpro.surveyor.R; + +public class CustomScrollAdapter extends RecyclerView.Adapter { + + private static ClickListener clickListener; + private List data; + + public CustomScrollAdapter(List data) { + this.data = data; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + View v = inflater.inflate(R.layout.v1_item_dashboard_card_new, parent, false); + return new ViewHolder(v); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + // Animate Here + holder.activityName.setText(data.get(position).name); + holder.cardImage.setImageResource(data.get(position).cardImage); + holder.bgShadow.setImageResource(data.get(position).bgShadow); + } + + @Override + public int getItemCount() { + return data.size(); + } + + class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + + private TextView activityName; + private ImageView cardImage; + private ImageView bgShadow; + + public ViewHolder(View itemView) { + super(itemView); + itemView.setOnClickListener(this); + activityName = itemView.findViewById(R.id.activityName); + cardImage = itemView.findViewById(R.id.cardImage); + bgShadow = itemView.findViewById(R.id.bg_shadow); + } + + @Override + public void onClick(View v) { + clickListener.onItemClick(getAdapterPosition(), v); + } + } + + public void setOnItemClickListener(ClickListener clickListener) { + CustomScrollAdapter.clickListener = clickListener; + } + + public interface ClickListener { + void onItemClick(int position, View v); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList.java new file mode 100644 index 0000000..4037c0e --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList.java @@ -0,0 +1,63 @@ +package io.rapidpro.surveyor.extend.adapter; + +public class DashboardList { + + String name; + String animationName; + String animationPath; + int bgColor; + int bgShadow; + + public DashboardList(String name, String animationName, String animationPath, int bgColor, int bgShadow) { + this.name = name; + this.animationName = animationName; + this.animationPath = animationPath; + this.bgColor = bgColor; + this.bgShadow = bgShadow; + } + + public String getName() { + return name; + } + + public DashboardList setName(String name) { + this.name = name; + return this; + } + + public String getAnimationName() { + return animationName; + } + + public DashboardList setAnimationName(String animationName) { + this.animationName = animationName; + return this; + } + + public String getAnimationPath() { + return animationPath; + } + + public DashboardList setAnimationPath(String animationPath) { + this.animationPath = animationPath; + return this; + } + + public int getBgColor() { + return bgColor; + } + + public DashboardList setBgColor(int bgColor) { + this.bgColor = bgColor; + return this; + } + + public int getBgShadow() { + return bgShadow; + } + + public DashboardList setBgShadow(int bgShadow) { + this.bgShadow = bgShadow; + return this; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList_RV.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList_RV.java new file mode 100644 index 0000000..fc23470 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/DashboardList_RV.java @@ -0,0 +1,43 @@ +package io.rapidpro.surveyor.extend.adapter; + +/** + * Custom Adapter Dashboard Cards + * Used in DashboardActivity + */ + +public class DashboardList_RV { + + String name; + int cardImage; + int bgShadow; + + public DashboardList_RV(String name, int cardImage, int bgShadow) { + this.name = name; + this.cardImage = cardImage; + this.bgShadow = bgShadow; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCardImage() { + return cardImage; + } + + public void setCardImage(int cardImage) { + this.cardImage = cardImage; + } + + public int getBgShadow() { + return bgShadow; + } + + public void setBgShadow(int bgShadow) { + this.bgShadow = bgShadow; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/adapter/ViewPagerAdapter.java b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/ViewPagerAdapter.java new file mode 100644 index 0000000..2670ad2 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/adapter/ViewPagerAdapter.java @@ -0,0 +1,42 @@ +package io.rapidpro.surveyor.extend.adapter; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; + +import java.util.ArrayList; +import java.util.List; + +public class ViewPagerAdapter extends FragmentStatePagerAdapter { + + private final List mFragmentList = new ArrayList<>(); + private final List mFragmentTitleList = new ArrayList<>(); + + public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) { + super(fm, behavior); + } + + @Override + public Fragment getItem(int position) { + + return mFragmentList.get(position); + } + + public void addFragment(Fragment fragment, String title) { + mFragmentList.add(fragment); + mFragmentTitleList.add(title); + } + + @Nullable + @Override + public CharSequence getPageTitle(int position) { + return mFragmentTitleList.get(position); + } + + @Override + public int getCount() { + return mFragmentList.size(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/api/ApkApi.java b/app/src/main/java/io/rapidpro/surveyor/extend/api/ApkApi.java new file mode 100644 index 0000000..33a5f37 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/api/ApkApi.java @@ -0,0 +1,25 @@ +package io.rapidpro.surveyor.extend.api; + +import io.rapidpro.surveyor.extend.entity.model.apk_version; +import io.rapidpro.surveyor.extend.entity.model.story_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_api; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface ApkApi { + + // Base URL for General Version + String BASE_URL_GV = "https://ureport-offline-global.unicefbangladesh.org/api/"; + + // Base URL for Non-General Version + String BASE_URL_RV = "https://ureport-offline.unicefbangladesh.org/api/"; + + /** + * Loads APK Version information from server + * @return Stories as story_api + */ + @GET("apk_version") + Call getVersion(); + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/api/StoriesApi.java b/app/src/main/java/io/rapidpro/surveyor/extend/api/StoriesApi.java new file mode 100644 index 0000000..242625d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/api/StoriesApi.java @@ -0,0 +1,34 @@ +package io.rapidpro.surveyor.extend.api; + +import io.rapidpro.surveyor.extend.entity.model.story_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_api; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface StoriesApi { + + // Base URL for General Version + String BASE_URL_GV = "https://ureport-offline-global.unicefbangladesh.org/api/"; + + // Base URL for Non-General Version + String BASE_URL_RV = "https://ureport-offline.unicefbangladesh.org/api/"; + + /** + * Loads stories from server + * @param last_updated + * @param limit + * @return Stories as story_api + */ + @GET("story") + Call getStories(@Query("last_updated") String last_updated, @Query("limit") int limit); + + /** + * Get story delete log from server. + * This is used to sync deletion locally. + * @param last_updated + * @return id's of deleted contents + */ + @GET("log") + Call getDeletedStories(@Query("last_updated") String last_updated); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/api/SurveyorApi.java b/app/src/main/java/io/rapidpro/surveyor/extend/api/SurveyorApi.java new file mode 100644 index 0000000..e7febda --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/api/SurveyorApi.java @@ -0,0 +1,26 @@ +package io.rapidpro.surveyor.extend.api; + +import io.rapidpro.surveyor.extend.entity.model.surveyor_api; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface SurveyorApi { + + // Base URL for General Version + String BASE_URL_GV = "https://ureport-offline-global.unicefbangladesh.org/api/"; + + // Base URL for Non-General Version + String BASE_URL_RV = "https://ureport-offline.unicefbangladesh.org/api/"; + + /** + * This API gets Results from Offline Surveys into U-Report format + * @param limit + * @param offset + * @param last_updated + * @return Results from Offline Surveyor as surveyor_api + */ + @GET("surveyor") + Call getSurveyor(@Query("limit") int limit, @Query("offset") int offset, @Query("last_updated") String last_updated); + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/api/UreportApi.java b/app/src/main/java/io/rapidpro/surveyor/extend/api/UreportApi.java new file mode 100644 index 0000000..92418da --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/api/UreportApi.java @@ -0,0 +1,29 @@ +package io.rapidpro.surveyor.extend.api; + +import io.rapidpro.surveyor.extend.entity.model.polls; +import io.rapidpro.surveyor.extend.entity.model.ureport_api; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface UreportApi { + + // Base URL for General Version + String BASE_URL_GV = "https://ureport-offline-global.unicefbangladesh.org/api/"; + + // Base URL for Non-General Version + String BASE_URL_RV = "https://ureport-offline.unicefbangladesh.org/api/"; + + /** + * This API fetches U-Report data from server. + * In this implementation we use our server as a medium + * to implement translation functionality into U-Rpeort data. + * @param limit + * @param offset + * @param last_updated + * @return U-report data as ureport_api + */ + @GET("ureport") + Call getUreport(@Query("limit") int limit, @Query("offset") int offset, @Query("last_updated") String last_updated); + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/database/AppDatabase.java b/app/src/main/java/io/rapidpro/surveyor/extend/database/AppDatabase.java new file mode 100644 index 0000000..0176820 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/database/AppDatabase.java @@ -0,0 +1,31 @@ +package io.rapidpro.surveyor.extend.database; + +import androidx.room.Database; +import androidx.room.RoomDatabase; + +import io.rapidpro.surveyor.extend.entity.dao.StoriesDao; +import io.rapidpro.surveyor.extend.entity.dao.SurveyorDao; +import io.rapidpro.surveyor.extend.entity.dao.UReportDao; +import io.rapidpro.surveyor.extend.entity.local.PollsLocal; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; + +/** + * Standard Room Database + * Important: Always increase version number + * in-case of database schema change. + */ +@Database(entities = {PollsLocal.class, StoriesLocal.class, UReportLocal.class, SurveyorLocal.class}, + version = 12, exportSchema = false) + +/** + * Abstract Class for Room Database + */ +public abstract class AppDatabase extends RoomDatabase { + public abstract StoriesDao getStories(); + public abstract UReportDao getUReports(); + public abstract SurveyorDao getSurveyor(); +} + + diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/database/databaseConnection.java b/app/src/main/java/io/rapidpro/surveyor/extend/database/databaseConnection.java new file mode 100644 index 0000000..69d01e6 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/database/databaseConnection.java @@ -0,0 +1,42 @@ +package io.rapidpro.surveyor.extend.database; + +import android.content.Context; + +import androidx.room.Room; + +public class databaseConnection { + + // Static Database Object + static AppDatabase database = null; + + /** + * Connect to Room Database with no return + * @param context + */ + public databaseConnection(Context context){ + if(database == null){ + database = Room.databaseBuilder(context, AppDatabase.class, "com.riseuplabs.ureport") + .fallbackToDestructiveMigration() + .allowMainThreadQueries() + .build(); + } + } + + /** + * Initializes Room Database and returns object. + * @param context + * @return + */ + public static AppDatabase getDatabase(Context context){ + if(database == null){ + database = Room.databaseBuilder(context, AppDatabase.class, "com.riseuplabs.ureport") + .fallbackToDestructiveMigration() + .allowMainThreadQueries() + .build(); + return database; + }else{ + return database; + } + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/ResultsTypeConverter.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/ResultsTypeConverter.java new file mode 100644 index 0000000..e9c40db --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/ResultsTypeConverter.java @@ -0,0 +1,32 @@ +package io.rapidpro.surveyor.extend.entity; + +import androidx.room.TypeConverter; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.model.results; + +public class ResultsTypeConverter { + + static Gson gson = new Gson(); + + @TypeConverter + public static List stringToSomeObjectList(String data) { + if (data == null) { + return Collections.emptyList(); + } + Type listType = new TypeToken>() { + }.getType(); + return gson.fromJson(data, listType); + } + + @TypeConverter + public static String someObjectListToString(List someObjects) { + return gson.toJson(someObjects); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/PollsDao.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/PollsDao.java new file mode 100644 index 0000000..f4bbfa9 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/PollsDao.java @@ -0,0 +1,31 @@ +package io.rapidpro.surveyor.extend.entity.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import io.rapidpro.surveyor.extend.entity.local.PollsLocal; + +@Dao +public interface PollsDao { + + @Insert + public void insert(PollsLocal... pollsLocals); + + @Update + public void update(PollsLocal... pollsLocals); + + @Delete + public void delete(PollsLocal pollsLocals); + + @Query("SELECT * FROM polls") + public PollsLocal getPollsList(); + + @Query("SELECT * FROM polls WHERE count = :name") + public PollsLocal getPollsByCount(int name); + + @Query("DELETE FROM polls") + void deleteAllPolls(); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/StoriesDao.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/StoriesDao.java new file mode 100644 index 0000000..177df52 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/StoriesDao.java @@ -0,0 +1,43 @@ +package io.rapidpro.surveyor.extend.entity.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.PollsLocal; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; + +@Dao +public interface StoriesDao { + + @Insert + public void insert(StoriesLocal... storiesLocals); + + @Update + public void update(StoriesLocal... storiesLocals); + + @Delete + public void delete(StoriesLocal storiesLocals); + + @Query("SELECT * FROM stories WHERE status = 1 ORDER BY id DESC") + public List getStoriesList(); + + @Query("SELECT * FROM stories WHERE id = :id AND status = 1") + public StoriesLocal getStoryById(int id); + + @Query("SELECT COUNT(*) FROM stories WHERE id = :id") + int doesStoryExists(int id); + + @Query("SELECT primaryKey FROM stories WHERE id = :id") + int getStory_pKey(int id); + + @Query("DELETE FROM stories") + void deleteAllStories(); + + @Query("DELETE FROM stories WHERE id = :id") + void deleteFromStoryById(int id); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/SurveyorDao.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/SurveyorDao.java new file mode 100644 index 0000000..e52c096 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/SurveyorDao.java @@ -0,0 +1,46 @@ +package io.rapidpro.surveyor.extend.entity.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; + +@Dao +public interface SurveyorDao { + + @Insert + void insert(SurveyorLocal... surveyorLocals); + + @Update + void update(SurveyorLocal... surveyorLocals); + + @Delete + void delete(SurveyorLocal surveyorLocals); + + @Query("SELECT COUNT(*) FROM surveyor WHERE flow_id = :flow_id") + int doesSurveyExists(String flow_id); + + @Query("SELECT primaryKey FROM surveyor WHERE flow_id = :flow_id") + int getSurvey_pKey(String flow_id); + + @Query("SELECT * FROM surveyor WHERE status = 1 ORDER BY id DESC") + List getSurveys(); + + @Query("SELECT * FROM surveyor WHERE data_category = :cat AND status = 1 ORDER BY id DESC") + List getSurveysByCategory(String cat); + + @Query("SELECT * FROM surveyor WHERE flow_id = :flow_id") + SurveyorLocal getSurveyByFlowId(String flow_id); + + @Query("SELECT DISTINCT data_category FROM surveyor") + List getSurveyCategories(); + + @Query("DELETE FROM surveyor") + void deleteAllSurveyor(); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/UReportDao.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/UReportDao.java new file mode 100644 index 0000000..a153543 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/dao/UReportDao.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.extend.entity.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; + +@Dao +public interface UReportDao { + + @Insert + void insert(UReportLocal... uReportLocals); + + @Update + void update(UReportLocal... uReportLocals); + + @Delete + void delete(UReportLocal uReportLocals); + + @Query("SELECT COUNT(*) FROM ureport WHERE ureport_id = :ureport_id") + int doesUReportExists(int ureport_id); + + @Query("SELECT primaryKey FROM ureport WHERE ureport_id = :ureport_id") + int getUreport_pKey(int ureport_id); + + @Query("SELECT * FROM ureport") + List getUReports(); + + @Query("SELECT * FROM ureport WHERE data_category = :cat") + List getUReportsByCategory(String cat); + + @Query("SELECT * FROM ureport WHERE id = :id") + UReportLocal getUReportById(int id); + + @Query("SELECT DISTINCT data_category FROM ureport") + List getUreportCategories(); + + @Query("DELETE FROM ureport") + void deleteAllUReport(); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/PollsLocal.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/PollsLocal.java new file mode 100644 index 0000000..d2514a2 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/PollsLocal.java @@ -0,0 +1,57 @@ +package io.rapidpro.surveyor.extend.entity.local; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; +import androidx.room.TypeConverters; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.ResultsTypeConverter; +import io.rapidpro.surveyor.extend.entity.model.results; + +@Entity(tableName = "polls") +public class PollsLocal { + @PrimaryKey(autoGenerate = true) + public int primaryKey; + int count; + String next; + String previous; + + @TypeConverters(ResultsTypeConverter.class) + List results; + + public PollsLocal() { + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getNext() { + return next; + } + + public void setNext(String next) { + this.next = next; + } + + public String getPrevious() { + return previous; + } + + public void setPrevious(String previous) { + this.previous = previous; + } + + public List getResults() { + return results; + } + + public void setResults(List results) { + this.results = results; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/StoriesLocal.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/StoriesLocal.java new file mode 100644 index 0000000..bb84ce4 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/StoriesLocal.java @@ -0,0 +1,192 @@ +package io.rapidpro.surveyor.extend.entity.local; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "stories") +public class StoriesLocal { + @PrimaryKey(autoGenerate = true) + public int primaryKey; + int id; + String title_bn; + String title_en; + String title_my; + String subtitle_bn; + String subtitle_en; + String subtitle_my; + String body_bn; + String body_en; + String body_my; + String content_image; + String story_video; + String author; + String author_image; + int status; + String created_at; + String updated_at; + + public StoriesLocal(int primaryKey, int id, String title_bn, String title_en, String title_my, String subtitle_bn, String subtitle_en, String subtitle_my, String body_bn, String body_en, String body_my, String content_image, String story_video, String author, String author_image, int status, String created_at, String updated_at) { + this.primaryKey = primaryKey; + this.id = id; + this.title_bn = title_bn; + this.title_en = title_en; + this.title_my = title_my; + this.subtitle_bn = subtitle_bn; + this.subtitle_en = subtitle_en; + this.subtitle_my = subtitle_my; + this.body_bn = body_bn; + this.body_en = body_en; + this.body_my = body_my; + this.content_image = content_image; + this.story_video = story_video; + this.author = author; + this.author_image = author_image; + this.status = status; + this.created_at = created_at; + this.updated_at = updated_at; + } + + public int getPrimaryKey() { + return primaryKey; + } + + public void setPrimaryKey(int primaryKey) { + this.primaryKey = primaryKey; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle_bn() { + return title_bn; + } + + public void setTitle_bn(String title_bn) { + this.title_bn = title_bn; + } + + public String getTitle_en() { + return title_en; + } + + public void setTitle_en(String title_en) { + this.title_en = title_en; + } + + public String getTitle_my() { + return title_my; + } + + public void setTitle_my(String title_my) { + this.title_my = title_my; + } + + public String getSubtitle_bn() { + return subtitle_bn; + } + + public void setSubtitle_bn(String subtitle_bn) { + this.subtitle_bn = subtitle_bn; + } + + public String getSubtitle_en() { + return subtitle_en; + } + + public void setSubtitle_en(String subtitle_en) { + this.subtitle_en = subtitle_en; + } + + public String getSubtitle_my() { + return subtitle_my; + } + + public void setSubtitle_my(String subtitle_my) { + this.subtitle_my = subtitle_my; + } + + public String getBody_bn() { + return body_bn; + } + + public void setBody_bn(String body_bn) { + this.body_bn = body_bn; + } + + public String getBody_en() { + return body_en; + } + + public void setBody_en(String body_en) { + this.body_en = body_en; + } + + public String getBody_my() { + return body_my; + } + + public void setBody_my(String body_my) { + this.body_my = body_my; + } + + public String getContent_image() { + return content_image; + } + + public void setContent_image(String content_image) { + this.content_image = content_image; + } + + public String getStory_video() { + return story_video; + } + + public void setStory_video(String story_video) { + this.story_video = story_video; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getAuthor_image() { + return author_image; + } + + public void setAuthor_image(String author_image) { + this.author_image = author_image; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getCreated_at() { + return created_at; + } + + public void setCreated_at(String created_at) { + this.created_at = created_at; + } + + public String getUpdated_at() { + return updated_at; + } + + public void setUpdated_at(String updated_at) { + this.updated_at = updated_at; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/SurveyorLocal.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/SurveyorLocal.java new file mode 100644 index 0000000..06a2cab --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/SurveyorLocal.java @@ -0,0 +1,152 @@ +package io.rapidpro.surveyor.extend.entity.local; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "surveyor") +public class SurveyorLocal { + @PrimaryKey(autoGenerate = true) + public int primaryKey; + int id; + int ureport_id; + String flow_id; + String data_pack; + String my_pack; + String en_pack; + String bn_pack; + String data_category; + String my_category; + String en_category; + int status; + String created_at; + String updated_at; + + public SurveyorLocal(int primaryKey, int id, int ureport_id, String flow_id, String data_pack, String my_pack, String en_pack, String bn_pack, String data_category, String my_category, String en_category, int status, String created_at, String updated_at) { + this.primaryKey = primaryKey; + this.id = id; + this.ureport_id = ureport_id; + this.flow_id = flow_id; + this.data_pack = data_pack; + this.my_pack = my_pack; + this.en_pack = en_pack; + this.bn_pack = bn_pack; + this.data_category = data_category; + this.my_category = my_category; + this.en_category = en_category; + this.status = status; + this.created_at = created_at; + this.updated_at = updated_at; + } + + public int getPrimaryKey() { + return primaryKey; + } + + public void setPrimaryKey(int primaryKey) { + this.primaryKey = primaryKey; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getUreport_id() { + return ureport_id; + } + + public void setUreport_id(int ureport_id) { + this.ureport_id = ureport_id; + } + + public String getFlow_id() { + return flow_id; + } + + public void setFlow_id(String flow_id) { + this.flow_id = flow_id; + } + + public String getData_pack() { + return data_pack; + } + + public void setData_pack(String data_pack) { + this.data_pack = data_pack; + } + + public String getMy_pack() { + return my_pack; + } + + public void setMy_pack(String my_pack) { + this.my_pack = my_pack; + } + + public String getEn_pack() { + return en_pack; + } + + public void setEn_pack(String en_pack) { + this.en_pack = en_pack; + } + + public String getBn_pack() { + return bn_pack; + } + + public void setBn_pack(String bn_pack) { + this.bn_pack = bn_pack; + } + + public String getData_category() { + return data_category; + } + + public void setData_category(String data_category) { + this.data_category = data_category; + } + + public String getMy_category() { + return my_category; + } + + public void setMy_category(String my_category) { + this.my_category = my_category; + } + + public String getEn_category() { + return en_category; + } + + public void setEn_category(String en_category) { + this.en_category = en_category; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getCreated_at() { + return created_at; + } + + public void setCreated_at(String created_at) { + this.created_at = created_at; + } + + public String getUpdated_at() { + return updated_at; + } + + public void setUpdated_at(String updated_at) { + this.updated_at = updated_at; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/UReportLocal.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/UReportLocal.java new file mode 100644 index 0000000..d43639a --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/local/UReportLocal.java @@ -0,0 +1,142 @@ +package io.rapidpro.surveyor.extend.entity.local; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "ureport") +public class UReportLocal { + @PrimaryKey(autoGenerate = true) + public int primaryKey; + int id; + int ureport_id; + String flow_id; + String data_pack; + String my_pack; + String en_pack; + String bn_pack; + String data_category; + String my_category; + String en_category; + String created_at; + String updated_at; + + public UReportLocal(int primaryKey, int id, int ureport_id, String flow_id, String data_pack, String my_pack, String en_pack, String bn_pack, String data_category, String my_category, String en_category, String created_at, String updated_at) { + this.primaryKey = primaryKey; + this.id = id; + this.ureport_id = ureport_id; + this.flow_id = flow_id; + this.data_pack = data_pack; + this.my_pack = my_pack; + this.en_pack = en_pack; + this.bn_pack = bn_pack; + this.data_category = data_category; + this.my_category = my_category; + this.en_category = en_category; + this.created_at = created_at; + this.updated_at = updated_at; + } + + public int getPrimaryKey() { + return primaryKey; + } + + public void setPrimaryKey(int primaryKey) { + this.primaryKey = primaryKey; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getUreport_id() { + return ureport_id; + } + + public void setUreport_id(int ureport_id) { + this.ureport_id = ureport_id; + } + + public String getFlow_id() { + return flow_id; + } + + public void setFlow_id(String flow_id) { + this.flow_id = flow_id; + } + + public String getData_pack() { + return data_pack; + } + + public void setData_pack(String data_pack) { + this.data_pack = data_pack; + } + + public String getMy_pack() { + return my_pack; + } + + public void setMy_pack(String my_pack) { + this.my_pack = my_pack; + } + + public String getEn_pack() { + return en_pack; + } + + public void setEn_pack(String en_pack) { + this.en_pack = en_pack; + } + + public String getBn_pack() { + return bn_pack; + } + + public void setBn_pack(String bn_pack) { + this.bn_pack = bn_pack; + } + + public String getData_category() { + return data_category; + } + + public void setData_category(String data_category) { + this.data_category = data_category; + } + + public String getMy_category() { + return my_category; + } + + public void setMy_category(String my_category) { + this.my_category = my_category; + } + + public String getEn_category() { + return en_category; + } + + public void setEn_category(String en_category) { + this.en_category = en_category; + } + + public String getCreated_at() { + return created_at; + } + + public void setCreated_at(String created_at) { + this.created_at = created_at; + } + + public String getUpdated_at() { + return updated_at; + } + + public void setUpdated_at(String updated_at) { + this.updated_at = updated_at; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/apk_version.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/apk_version.java new file mode 100644 index 0000000..231c606 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/apk_version.java @@ -0,0 +1,72 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; + +public class apk_version { + + int id; + int version_code; + String version_name; + int status; + int is_mandatory; + String file_url; + + public apk_version(int id, int version_code, String version_name, int status, int is_mandatory, String file_url) { + this.id = id; + this.version_code = version_code; + this.version_name = version_name; + this.status = status; + this.is_mandatory = is_mandatory; + this.file_url = file_url; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getVersion_code() { + return version_code; + } + + public void setVersion_code(int version_code) { + this.version_code = version_code; + } + + public String getVersion_name() { + return version_name; + } + + public void setVersion_name(String version_name) { + this.version_name = version_name; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getIs_mandatory() { + return is_mandatory; + } + + public void setIs_mandatory(int is_mandatory) { + this.is_mandatory = is_mandatory; + } + + public String getFile_url() { + return file_url; + } + + public void setFile_url(String file_url) { + this.file_url = file_url; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/categories.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/categories.java new file mode 100644 index 0000000..5496762 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/categories.java @@ -0,0 +1,25 @@ +package io.rapidpro.surveyor.extend.entity.model; + +public class categories { + int count; + String label; + + public categories() { + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/category.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/category.java new file mode 100644 index 0000000..b60c68b --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/category.java @@ -0,0 +1,25 @@ +package io.rapidpro.surveyor.extend.entity.model; + +public class category { + String image_url; + String name; + + public category() { + } + + public String getImage_url() { + return image_url; + } + + public void setImage_url(String image_url) { + this.image_url = image_url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/polls.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/polls.java new file mode 100644 index 0000000..521fd82 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/polls.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class polls { + int count; + String next; + String previous; + List results; + + public polls() { + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getNext() { + return next; + } + + public void setNext(String next) { + this.next = next; + } + + public String getPrevious() { + return previous; + } + + public void setPrevious(String previous) { + this.previous = previous; + } + + public List getResults() { + return results; + } + + public void setResults(List results) { + this.results = results; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/questions.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/questions.java new file mode 100644 index 0000000..1556042 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/questions.java @@ -0,0 +1,72 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class questions { + int id; + String ruleset_uuid; + String title; + results2 results; + List results_by_age; + List results_by_gender; + List results_by_location; + + public questions() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getRuleset_uuid() { + return ruleset_uuid; + } + + public void setRuleset_uuid(String ruleset_uuid) { + this.ruleset_uuid = ruleset_uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public results2 getResults() { + return results; + } + + public void setResults(results2 results) { + this.results = results; + } + + public List getResults_by_age() { + return results_by_age; + } + + public void setResults_by_age(List results_by_age) { + this.results_by_age = results_by_age; + } + + public List getResults_by_gender() { + return results_by_gender; + } + + public void setResults_by_gender(List results_by_gender) { + this.results_by_gender = results_by_gender; + } + + public List getResults_by_location() { + return results_by_location; + } + + public void setResults_by_location(List results_by_location) { + this.results_by_location = results_by_location; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results.java new file mode 100644 index 0000000..0603c11 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results.java @@ -0,0 +1,74 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class results { + int id; + String flow_uuid; + String title; + int org; + io.rapidpro.surveyor.extend.entity.model.category category; + String created_on; + List questions; + + + + public results() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFlow_uuid() { + return flow_uuid; + } + + public void setFlow_uuid(String flow_uuid) { + this.flow_uuid = flow_uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getOrg() { + return org; + } + + public void setOrg(int org) { + this.org = org; + } + + public io.rapidpro.surveyor.extend.entity.model.category getCategory() { + return category; + } + + public void setCategory(io.rapidpro.surveyor.extend.entity.model.category category) { + this.category = category; + } + + public String getCreated_on() { + return created_on; + } + + public void setCreated_on(String created_on) { + this.created_on = created_on; + } + + public List getQuestions() { + return questions; + } + + public void setQuestions(List questions) { + this.questions = questions; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results2.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results2.java new file mode 100644 index 0000000..4878ce9 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results2.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class results2 { + String open_ended; + int set; + int unset; + List categories; + + public results2() { + } + + public String getOpen_ended() { + return open_ended; + } + + public void setOpen_ended(String open_ended) { + this.open_ended = open_ended; + } + + public int getSet() { + return set; + } + + public void setSet(int set) { + this.set = set; + } + + public int getUnset() { + return unset; + } + + public void setUnset(int unset) { + this.unset = unset; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_age.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_age.java new file mode 100644 index 0000000..4f89979 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_age.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class results_by_age { + int set; + int unset; + String label; + List categories; + + public results_by_age() { + } + + public int getSet() { + return set; + } + + public void setSet(int set) { + this.set = set; + } + + public int getUnset() { + return unset; + } + + public void setUnset(int unset) { + this.unset = unset; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_gender.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_gender.java new file mode 100644 index 0000000..b5ee428 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_gender.java @@ -0,0 +1,45 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class results_by_gender { + int set; + int unset; + String label; + List categories; + + public results_by_gender() { + } + + public int getSet() { + return set; + } + + public void setSet(int set) { + this.set = set; + } + + public int getUnset() { + return unset; + } + + public void setUnset(int unset) { + this.unset = unset; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_location.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_location.java new file mode 100644 index 0000000..13d787e --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/results_by_location.java @@ -0,0 +1,63 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class results_by_location { + String open_ended; + int set; + int unset; + String boundary; + String label; + List categories; + + public results_by_location() { + } + + public String getOpen_ended() { + return open_ended; + } + + public void setOpen_ended(String open_ended) { + this.open_ended = open_ended; + } + + public int getSet() { + return set; + } + + public void setSet(int set) { + this.set = set; + } + + public int getUnset() { + return unset; + } + + public void setUnset(int unset) { + this.unset = unset; + } + + public String getBoundary() { + return boundary; + } + + public void setBoundary(String boundary) { + this.boundary = boundary; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story.java new file mode 100644 index 0000000..2b4c28b --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story.java @@ -0,0 +1,158 @@ +package io.rapidpro.surveyor.extend.entity.model; + +public class story { + + int id; + String title_bn; + String title_en; + String title_my; + String subtitle_bn; + String subtitle_en; + String subtitle_my; + String body_bn; + String body_en; + String body_my; + String content_image; + String author; + String author_image; + String created_at; + String updated_at; + + public story(int id, String title_bn, String title_en, String title_my, String subtitle_bn, String subtitle_en, String subtitle_my, String body_bn, String body_en, String body_my, String content_image, String author, String author_image, String created_at, String updated_at) { + this.id = id; + this.title_bn = title_bn; + this.title_en = title_en; + this.title_my = title_my; + this.subtitle_bn = subtitle_bn; + this.subtitle_en = subtitle_en; + this.subtitle_my = subtitle_my; + this.body_bn = body_bn; + this.body_en = body_en; + this.body_my = body_my; + this.content_image = content_image; + this.author = author; + this.author_image = author_image; + this.created_at = created_at; + this.updated_at = updated_at; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle_bn() { + return title_bn; + } + + public void setTitle_bn(String title_bn) { + this.title_bn = title_bn; + } + + public String getTitle_en() { + return title_en; + } + + public void setTitle_en(String title_en) { + this.title_en = title_en; + } + + public String getTitle_my() { + return title_my; + } + + public void setTitle_my(String title_my) { + this.title_my = title_my; + } + + public String getSubtitle_bn() { + return subtitle_bn; + } + + public void setSubtitle_bn(String subtitle_bn) { + this.subtitle_bn = subtitle_bn; + } + + public String getSubtitle_en() { + return subtitle_en; + } + + public void setSubtitle_en(String subtitle_en) { + this.subtitle_en = subtitle_en; + } + + public String getSubtitle_my() { + return subtitle_my; + } + + public void setSubtitle_my(String subtitle_my) { + this.subtitle_my = subtitle_my; + } + + public String getBody_bn() { + return body_bn; + } + + public void setBody_bn(String body_bn) { + this.body_bn = body_bn; + } + + public String getBody_en() { + return body_en; + } + + public void setBody_en(String body_en) { + this.body_en = body_en; + } + + public String getBody_my() { + return body_my; + } + + public void setBody_my(String body_my) { + this.body_my = body_my; + } + + public String getContent_image() { + return content_image; + } + + public void setContent_image(String content_image) { + this.content_image = content_image; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getAuthor_image() { + return author_image; + } + + public void setAuthor_image(String author_image) { + this.author_image = author_image; + } + + public String getCreated_at() { + return created_at; + } + + public void setCreated_at(String created_at) { + this.created_at = created_at; + } + + public String getUpdated_at() { + return updated_at; + } + + public void setUpdated_at(String updated_at) { + this.updated_at = updated_at; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_api.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_api.java new file mode 100644 index 0000000..35afd91 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_api.java @@ -0,0 +1,31 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +public class story_api { + + List data; + String last_updated; + + public story_api(List data, String last_updated) { + this.data = data; + this.last_updated = last_updated; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getLast_updated() { + return last_updated; + } + + public void setLast_updated(String last_updated) { + this.last_updated = last_updated; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_api.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_api.java new file mode 100644 index 0000000..f40a8f1 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_api.java @@ -0,0 +1,30 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +public class story_delete_api { + + List data; + String last_updated; + + public story_delete_api(List data, String last_updated) { + this.data = data; + this.last_updated = last_updated; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getLast_updated() { + return last_updated; + } + + public void setLast_updated(String last_updated) { + this.last_updated = last_updated; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_data.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_data.java new file mode 100644 index 0000000..2235946 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/story_delete_data.java @@ -0,0 +1,22 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; + +public class story_delete_data { + + int story_id; + + public story_delete_data(int story_id) { + this.story_id = story_id; + } + + public int getStory_id() { + return story_id; + } + + public void setStory_id(int story_id) { + this.story_id = story_id; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/surveyor_api.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/surveyor_api.java new file mode 100644 index 0000000..0fda786 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/surveyor_api.java @@ -0,0 +1,33 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; + +public class surveyor_api { + + List data; + String last_updated; + + public surveyor_api(List data, String last_updated) { + this.data = data; + this.last_updated = last_updated; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getLast_updated() { + return last_updated; + } + + public void setLast_updated(String last_updated) { + this.last_updated = last_updated; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport.java new file mode 100644 index 0000000..523a821 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport.java @@ -0,0 +1,129 @@ +package io.rapidpro.surveyor.extend.entity.model; + +public class ureport { + + int id; + int ureport_id; + String flow_id; + String data_pack; + String my_pack; + String en_pack; + String data_category; + String my_category; + String en_category; + String created_at; + String updated_at; + + public ureport(int id, int ureport_id, String flow_id, String data_pack, String my_pack, String en_pack, String data_category, String my_category, String en_category, String created_at, String updated_at) { + this.id = id; + this.ureport_id = ureport_id; + this.flow_id = flow_id; + this.data_pack = data_pack; + this.my_pack = my_pack; + this.en_pack = en_pack; + this.data_category = data_category; + this.my_category = my_category; + this.en_category = en_category; + this.created_at = created_at; + this.updated_at = updated_at; + } + + public int getId() { + return id; + } + + public ureport setId(int id) { + this.id = id; + return this; + } + + public int getUreport_id() { + return ureport_id; + } + + public ureport setUreport_id(int ureport_id) { + this.ureport_id = ureport_id; + return this; + } + + public String getFlow_id() { + return flow_id; + } + + public ureport setFlow_id(String flow_id) { + this.flow_id = flow_id; + return this; + } + + public String getData_pack() { + return data_pack; + } + + public ureport setData_pack(String data_pack) { + this.data_pack = data_pack; + return this; + } + + public String getMy_pack() { + return my_pack; + } + + public ureport setMy_pack(String my_pack) { + this.my_pack = my_pack; + return this; + } + + public String getEn_pack() { + return en_pack; + } + + public ureport setEn_pack(String en_pack) { + this.en_pack = en_pack; + return this; + } + + public String getData_category() { + return data_category; + } + + public ureport setData_category(String data_category) { + this.data_category = data_category; + return this; + } + + public String getMy_category() { + return my_category; + } + + public ureport setMy_category(String my_category) { + this.my_category = my_category; + return this; + } + + public String getEn_category() { + return en_category; + } + + public ureport setEn_category(String en_category) { + this.en_category = en_category; + return this; + } + + public String getCreated_at() { + return created_at; + } + + public ureport setCreated_at(String created_at) { + this.created_at = created_at; + return this; + } + + public String getUpdated_at() { + return updated_at; + } + + public ureport setUpdated_at(String updated_at) { + this.updated_at = updated_at; + return this; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport_api.java b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport_api.java new file mode 100644 index 0000000..720452b --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/entity/model/ureport_api.java @@ -0,0 +1,32 @@ +package io.rapidpro.surveyor.extend.entity.model; + +import java.util.List; + +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; + +public class ureport_api { + + List data; + String last_updated; + + public ureport_api(List data, String last_updated) { + this.data = data; + this.last_updated = last_updated; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getLast_updated() { + return last_updated; + } + + public void setLast_updated(String last_updated) { + this.last_updated = last_updated; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/BaseFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/BaseFragment.java new file mode 100644 index 0000000..36de490 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/BaseFragment.java @@ -0,0 +1,238 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.core.app.ShareCompat; +import androidx.fragment.app.Fragment; + +import com.greysonparrelli.permiso.Permiso; + +import java.io.IOException; +import java.util.Collections; +import java.util.Set; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.LoginActivity; +import io.rapidpro.surveyor.activity.OrgChooseActivity; +import io.rapidpro.surveyor.ui.ViewCache; + +import static io.rapidpro.surveyor.extend.StaticMethods.gotoSurveyor; + +/** + * This is an Fragment based implementation of functionality of + * BaseActivity from Surveyor Application. + */ +public abstract class BaseFragment extends Fragment { + + private ViewCache m_viewCache; + + @Override + public void onCreate(Bundle bundle) { + Logger.d("Creating " + getClass().getSimpleName()); + + super.onCreate(bundle); + + // if we're on an activity that requires a logged in user, and we aren't, redirect to login activity + if (requireLogin() && !isLoggedIn()) { + logout(); + } + } + + public SurveyorApplication getSurveyor() { + return (SurveyorApplication) getActivity().getApplication(); + } + + public void changeTitle(String title){ + ((TextView) getActivity().findViewById(R.id.header_text)).setText(title); + } + + /** + * Whether this activity requires the user to be logged in + * + * @return true if activity requires login + */ + public boolean requireLogin() { + return true; + } + + /** + * Logs in a user for the given orgs + */ + public void login(String email, Set orgUUIDs) { + Logger.d("Logging in as " + email + " with access to orgs " + TextUtils.join(",", orgUUIDs)); + + // save email which we'll need for submissions later + getSurveyor().setPreference(SurveyorPreferences.AUTH_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.PREV_USERNAME, email); + getSurveyor().setPreference(SurveyorPreferences.AUTH_ORGS, orgUUIDs); + + // let the user pick an org... + startActivity(new Intent(getContext(), OrgChooseActivity.class)); + + // we don't want to go back to the view that sent us here (i.e. login or create account) + } + + /** + * Logs the user out and returns them to the login page + */ + protected void logout() { + logout(-1); + } + + /** + * Logs the user out and returns them to the login page showing the given error string + */ + protected void logout(int errorResId) { + Logger.d("Logging out with error " + errorResId); + + getSurveyor().setPreference("ORG_UUID", ""); + getSurveyor().clearPreference(SurveyorPreferences.AUTH_USERNAME); + getSurveyor().setPreference(SurveyorPreferences.AUTH_ORGS, Collections.emptySet()); + +// try { +// getSurveyor().clearSubmissions(); +// } catch (IOException e) { +// Logger.e("Unable to clear submissions", e); +// } + + Intent intent = new Intent(getContext(), LoginActivity.class); + + + // clear the activity stack + //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + + if (errorResId != -1) { + intent.putExtra(SurveyorIntent.EXTRA_ERROR, getString(errorResId)); + } + + startActivity(intent); + //getActivity().overridePendingTransition(0,0); + } + + public void showBugReportDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setMessage(getString(R.string.confirm_bug_report)) + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + sendBugReport(); + } + }) + .setNegativeButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + private void sendBugReport() { + try { + Uri outputUri = getSurveyor().generateLogDump(); + + ShareCompat.IntentBuilder.from(getActivity()) + .setType("message/rfc822") + .addEmailTo(getString(R.string.support_email)) + .setSubject("Surveyor Bug Report") + .setText("Please include what you were doing prior to sending this report and specific details on the error you encountered.") + .setStream(outputUri) + .setChooserTitle("Send Email") + .startChooser(); + + } catch (IOException e) { + Logger.e("Failed to generate bug report", e); + } + } + + public ViewCache getViewCache() { + if (m_viewCache == null) { + m_viewCache = new ViewCache(getContext(), getView()); + } + return m_viewCache; + } + + /** + * Gets the currently authenticated username + * + * @return the username/email + */ + protected String getUsername() { + return getPreferences().getString(SurveyorPreferences.AUTH_USERNAME, null); + } + + /** + * Checks whether we are currently authenticated + * + * @return truer if we are authenticated + */ + protected boolean isLoggedIn() { + return !TextUtils.isEmpty(getUsername()); + } + + /** + * Checkes whether sound is enabled in settings. + * @return true if sound is enabled, false otherwise + */ + protected boolean isSoundOn() { + String sound_state = getSurveyor().getPreferences().getString("sound_on", "true"); + if(sound_state.equals("true")){ + return true; + }else{ + return false; + } + } + + /** + * Checkes whether vibration is enabled in settings. + * @return true if vibration is enabled, false otherwise + */ + protected boolean isVibrationOn() { + String vibration_state = getSurveyor().getPreferences().getString("vibration_on", "true"); + if(vibration_state.equals("true")){ + return true; + }else{ + return false; + } + } + + /** + * Gets the preferences for this application + * + * @return the preferences + */ + public SharedPreferences getPreferences() { + return getSurveyor().getPreferences(); + } + + public AlertDialog showAlert(int title, int body) { + AlertDialog dialog = new AlertDialog.Builder(getContext()) + .setTitle(title) + .setMessage(body) + .setIcon(android.R.drawable.ic_dialog_alert).create(); + + dialog.show(); + return dialog; + } + + protected void showToast(int resId) { + Toast.makeText(getContext(), resId, Toast.LENGTH_SHORT).show(); + } + + public void showRationaleDialog(int body, Permiso.IOnRationaleProvided callback) { + Permiso.getInstance().showRationaleInDialog(getString(R.string.title_permissions), getString(body), null, callback); + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OfflineUreportListFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OfflineUreportListFragment.java new file mode 100644 index 0000000..4ec3985 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OfflineUreportListFragment.java @@ -0,0 +1,407 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.TimeUnit; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.OfflineUreportDetailsActivity; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterPollList; +import io.rapidpro.surveyor.extend.api.SurveyorApi; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.SurveyorDao; +import io.rapidpro.surveyor.extend.entity.local.SurveyorLocal; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.surveyor_api; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import okhttp3.OkHttpClient; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +import static io.rapidpro.surveyor.extend.StaticMethods.isConnected; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class OfflineUreportListFragment extends BaseFragment implements CustomAdapterPollList.ItemClickListener { + + CustomAdapterPollList adapter; + List pollNameList= new ArrayList<>(); + List pollIDList= new ArrayList<>(); + List pollDateList= new ArrayList<>(); + RecyclerView recyclerView; + + boolean isFirstTime=false; + boolean connected = false; + + Context context; + View mainView; + + String lang_code = "en"; + int ColorPosition = 0; + + AppDatabase database; + Retrofit retrofit; + SurveyorDao surveyorDao; + SurveyorApi api; + Call call_surveyor; + SwipeRefreshLayout surveyorRefresh; + CustomAdapterPollList.ItemClickListener itemClickListener; + + String category_name; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_ureport_list, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + context = getActivity(); + mainView = getView(); + + category_name = getActivity().getIntent().getExtras().getString("ResultName"); + ColorPosition = getActivity().getIntent().getExtras().getInt("ColorPosition"); + + // Set Layout Color + setLayoutBackground(ColorPosition); + + + mainView.findViewById(R.id.progressBg).setVisibility(View.GONE); + mainView.findViewById(R.id.progressBar).setVisibility(View.GONE); + + + database = databaseConnection.getDatabase(context); + + String baseURL; + + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = SurveyorApi.BASE_URL_GV; + }else{ + baseURL = SurveyorApi.BASE_URL_RV; + } + + final OkHttpClient okHttpClient = new OkHttpClient.Builder() + .readTimeout(60, TimeUnit.SECONDS) + .connectTimeout(60, TimeUnit.SECONDS) + .build(); + + retrofit = new Retrofit.Builder().baseUrl(baseURL).addConverterFactory(GsonConverterFactory.create()).client(okHttpClient).build(); + api = retrofit.create(SurveyorApi.class); + + surveyorDao = database.getSurveyor(); + List surveyorList = surveyorDao.getSurveys(); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + // Convert to Legacy Format + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + itemClickListener = this; + + for(SurveyorLocal x: surveyorList){ + JsonParser parser = new JsonParser(); + // Manage Language Here! + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(x.getMy_pack() != null){ + rootObj = parser.parse(x.getMy_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("en")){ + if(x.getData_pack() != null){ + rootObj = parser.parse(x.getData_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("bn")) { + if(x.getBn_pack() != null){ + rootObj = parser.parse(x.getBn_pack()).getAsJsonObject(); + } + } + + if(rootObj != null){ + pollIDList.add(String.valueOf(x.getFlow_id())); + pollNameList.add(rootObj.get("title").getAsString()); + pollDateList.add(rootObj.get("poll_date").getAsString()); + } + + } + + if(surveyorList.size() == 0){ + refreshUreport(); + } + + recyclerView = mainView.findViewById(R.id.all_topic_recyclerview); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setFocusable(false); + + adapter = new CustomAdapterPollList(getSurveyor(), context, pollNameList, pollIDList, pollDateList, false, ColorPosition); + adapter.setClickListener(itemClickListener); + recyclerView.setAdapter(adapter); + + surveyorRefresh = getView().findViewById(R.id.ureportRefreshLayout); + surveyorRefresh.setOnRefreshListener(() -> { + playNotification(getSurveyor(), getContext(), R.raw.swipe_sound); + refreshUreport(); + }); + } + + public void refreshUreport(){ + if(isConnected(getContext())){ + connected = true; + new LongOperation().execute(""); + }else{ + new CustomDialog(getContext()).displayNoInternetDialog(new CustomDialogInterface() { + @Override + public void retry() { + refreshUreport(); + } + @Override + public void cancel() { } + }); + if(surveyorRefresh != null){ + surveyorRefresh.setRefreshing(false);} + } + } + + public void setLayoutBackground(int ColorPos){ + int px = ColorPos; + + // Override: We can use multi-color + // But for now we will use single color only. + px = 2; + + if (px == 0) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(33, 159, 255)); + } + if (px == 1) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(255, 88, 53)); + } + if (px == 2) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(235, 190, 65)); + } + if (px == 3) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(67, 219, 83)); + } + if (px == 4) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(101, 101, 101)); + } + if (px == 5) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(28, 161, 162)); + } + if (px == 6) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(7, 132, 183)); + } + } + + + @Override + public void onResume() { + super.onResume(); + } + + boolean clickLock = false; + + @Override + public void onItemClick(View view, int position) { + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1500); + } + + playNotification(getSurveyor(), getContext(), R.raw.button_click_yes, view); + + Intent intent = new Intent(context, OfflineUreportDetailsActivity.class); + intent.putExtra("ResultName", "" +adapter.getItem(position)); + intent.putExtra("ResultID", "" + adapter.getId(position)); + intent.putExtra("ResultDate", "" + adapter.getDate(position)); + startActivity(intent); + + + } + + + private class LongOperation extends AsyncTask { + + @Override + protected String doInBackground(String... params) { + // Update Last Updated + String last_updated = getSurveyor().getPreferences().getString("surveyor_date", ""); + //last_updated = ""; + + call_surveyor = api.getSurveyor(1000, 0, last_updated); + call_surveyor.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + surveyor_api surveyorApi = response.body(); + if(surveyorApi == null){ + if(surveyorRefresh != null){ + surveyorRefresh.setRefreshing(false);} + return; + } + if(surveyorApi.getData().size() == 0){ + if(surveyorRefresh != null){ + surveyorRefresh.setRefreshing(false);} + return; + } + + String new_last_update = surveyorApi.getLast_updated(); + + List surveyorLocals = surveyorApi.getData(); + //surveyorDao.deleteAllSurveyor(); + + for(SurveyorLocal x: surveyorLocals){ + + //surveyorDao.insert(x); + + if(surveyorDao.doesSurveyExists(x.getFlow_id()) > 0){ + // Old UReport: update + x.primaryKey = surveyorDao.getSurvey_pKey(x.getFlow_id()); + surveyorDao.update(x); + }else{ + // New UReport: insert + surveyorDao.insert(x); + } + + } + + // Save Preference + try { + getSurveyor().setPreference("surveyor_date", new_last_update); + } catch (Exception e){ + // + } + + // Reload Recycler View + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + + List surveyorLocalsList = surveyorDao.getSurveys(); + + for(SurveyorLocal x: surveyorLocalsList){ + JsonParser parser = new JsonParser(); + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(x.getMy_pack() != null){ + rootObj = parser.parse(x.getMy_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("en")){ + if(x.getData_pack() != null){ + rootObj = parser.parse(x.getData_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("bn")) { + if(x.getBn_pack() != null){ + rootObj = parser.parse(x.getBn_pack()).getAsJsonObject(); + } + } + + if(rootObj != null){ + pollIDList.add(String.valueOf(x.getFlow_id())); + pollNameList.add(rootObj.get("title").getAsString()); + pollDateList.add(rootObj.get("poll_date").getAsString()); + } + + } + + try { + + StaticMethods.setLocalUpdateDate(getSurveyor(), "ureport_offline_last_updated_local"); + + if(adapter != null && recyclerView != null){ + adapter = new CustomAdapterPollList(getSurveyor(), context, pollNameList, pollIDList, pollDateList, false, ColorPosition); + recyclerView.setAdapter(adapter); + adapter.setClickListener(itemClickListener); + adapter.notifyDataSetChanged(); + } + + if(surveyorRefresh != null){ + surveyorRefresh.setRefreshing(false); + } + + playNotification(getSurveyor(), getContext(), R.raw.sync_complete); + adapter.notifyDataSetChanged(); + + }catch(Exception e){ + // + } + } + + @Override + public void onFailure(Call call, Throwable t) { + if(surveyorRefresh != null){ + surveyorRefresh.setRefreshing(false);} + } + }); + + return "ureport"; + } + + @Override + protected void onPostExecute(String result) { + if (result.matches("ureport")){ + final Handler handler = new Handler(); + handler.postDelayed(() -> { + + if(isFirstTime=true){ + isFirstTime=false; + } + + if(adapter != null){ + try{ + adapter.notifyDataSetChanged(); + }catch(Exception e){ + // + } + } + + }, 100); + } + } + + @Override + protected void onPreExecute() {} + + @Override + protected void onProgressUpdate(Void... values) {} + } + + @Override + public boolean requireLogin() { + return false; + } + + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OrgFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OrgFragment.java new file mode 100644 index 0000000..9bd19cd --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/OrgFragment.java @@ -0,0 +1,301 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.core.app.ShareCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + +import com.vdurmont.semver4j.Semver; + +import java.io.IOException; +import java.text.NumberFormat; +import java.util.List; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorIntent; +import io.rapidpro.surveyor.activity.FlowActivity; +import io.rapidpro.surveyor.adapter.FlowListAdapter; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.engine.Engine; +import io.rapidpro.surveyor.fragment.FlowListFragment; +import io.rapidpro.surveyor.task.RefreshOrgTask; +import io.rapidpro.surveyor.ui.BlockingProgress; +import io.rapidpro.surveyor.ui.ViewCache; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * Home screen for an org - shows available flows and pending submissions + */ +public class OrgFragment extends BaseFragment implements FlowListFragment.Container { + + private Org org; + private AlertDialog confirmRefreshDialog; + + Activity activity; + Context context; + View mainView; + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.activity_org, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + activity = getActivity(); + context = getActivity(); + mainView = getView(); + + refresh(); + + if (savedInstanceState == null) { + Fragment fragment = new FlowListFragment(); + FragmentTransaction ft = getFragmentManager().beginTransaction(); + ft.add(R.id.fragment_container, fragment).commit(); + } + } + + @Override + public void onResume() { + super.onResume(); + + //refresh(); + } + + @Override + public void onPause() { + super.onPause(); + + if (confirmRefreshDialog != null) { + confirmRefreshDialog.dismiss(); + } + } + + protected void promptToUpgrade() { + + final Dialog dialog4 = new Dialog(context); + dialog4.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog4.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog4.setContentView(R.layout.v1_dialog_ui); + dialog4.findViewById(R.id.textSubText).setVisibility(View.GONE); + ((TextView) dialog4.findViewById(R.id.textMainText)).setText(R.string.unsupported_version); + ((TextView) dialog4.findViewById(R.id.button_yes_text)).setText("Yes"); + ((TextView) dialog4.findViewById(R.id.button_no_text)).setText("No"); + + dialog4.findViewById(R.id.button_yes).setOnClickListener(view -> { + playNotification(getSurveyor(), getContext(), R.raw.button_click_yes, view); + dialog4.dismiss(); + + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=io.rapidpro.surveyor"))); + } catch (android.content.ActivityNotFoundException e) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=io.rapidpro.surveyor"))); + } + + }); + + dialog4.findViewById(R.id.button_no).setOnClickListener(view -> { + playNotification(getSurveyor(), getContext(), R.raw.button_click_no, view); + dialog4.dismiss(); + }); + + dialog4.show(); + } + + protected void refresh() { + if (org == null) { + String orgUUID = activity.getIntent().getStringExtra(SurveyorIntent.EXTRA_ORG_UUID); + try { + org = getSurveyor().getOrgService().get(orgUUID); + } catch (Exception e) { + Logger.e("Unable to load org", e); + showBugReportDialog(); + //finish(); + return; + } + } + + //setTitle(org.getName()); + FlowListAdapter adapter = (FlowListAdapter) getViewCache().getListViewAdapter(android.R.id.list); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + + int pending = getSurveyor().getSubmissionService().getCompletedCount(getOrg()); + + ViewCache cache = getViewCache(); + cache.setVisible(R.id.pending_submission, pending > 0); + cache.setButtonText(R.id.button_pending, NumberFormat.getInstance().format(pending)); + + if (confirmRefreshDialog == null) { + if (!org.hasAssets()) { + // if this org doesn't have downloaded assets, ask the user if we can download them now + confirmRefreshOrg(R.string.confirm_org_download); + } else { + for (Flow flow : org.getFlows()) { + if (!Engine.isSpecVersionSupported(flow.getSpecVersion())) { + Logger.w("Found flow " + flow.getUuid() + " with unsupported version " + flow.getSpecVersion()); + + Semver flowVersion = new Semver(flow.getSpecVersion(), Semver.SemverType.LOOSE); + if (flowVersion.isGreaterThan(Engine.currentSpecVersion())) { + // if this flow is a major version ahead of us... user needs to upgrade the app + promptToUpgrade(); + break; + } else { + // if it is a major version behind, they should refresh the assets + confirmRefreshOrg(R.string.confirm_org_refresh_old); + break; + } + } + } + } + } + } + + public void showBugReportDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage(getString(R.string.confirm_bug_report)) + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + sendBugReport(); + } + }) + .setNegativeButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .show(); + } + + private void sendBugReport() { + try { + Uri outputUri = getSurveyor().generateLogDump(); + + ShareCompat.IntentBuilder.from(activity) + .setType("message/rfc822") + .addEmailTo(getString(R.string.support_email)) + .setSubject("Surveyor Bug Report") + .setText("Please include what you were doing prior to sending this report and specific details on the error you encountered.") + .setStream(outputUri) + .setChooserTitle("Send Email") + .startChooser(); + + } catch (IOException e) { + Logger.e("Failed to generate bug report", e); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return super.onOptionsItemSelected(item); + } + + public void onActionRefresh(MenuItem item) { + confirmRefreshOrg(R.string.confirm_org_refresh); + } + + public void confirmRefreshOrg(int msgId) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + + confirmRefreshDialog = builder.setMessage(getString(msgId)) + .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + doRefresh(); + } + }) + .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }).create(); + + confirmRefreshDialog.show(); + } + + private void doRefresh() { + final BlockingProgress progressModal = new BlockingProgress(context, R.string.one_moment, R.string.refresh_org); + progressModal.show(); + + new RefreshOrgTask(new RefreshOrgTask.Listener() { + @Override + public void onProgress(int percent) { + progressModal.setProgress(percent); + } + + @Override + public void onMessage(String message) { + + } + + @Override + public void onComplete() { + refresh(); + + progressModal.dismiss(); + } + + @Override + public void onFailure() { + progressModal.dismiss(); + + Toast.makeText(context, getString(R.string.error_org_refresh), Toast.LENGTH_SHORT).show(); + } + }).execute(getOrg()); + } + + protected List getPendingSubmissions() { + return getSurveyor().getSubmissionService().getCompleted(getOrg()); + } + + @Override + public Org getOrg() { + return org; + } + + /** + * @see FlowListFragment.Container#getListItems() + */ + @Override + public List getListItems() { + return getOrg().getFlows(); + } + + /** + * @see FlowListFragment.Container#onItemClick(Flow) + */ + @Override + public void onItemClick(Flow flow) { + Intent intent = new Intent(context, FlowActivity.class); + intent.putExtra(SurveyorIntent.EXTRA_ORG_UUID, getOrg().getUuid()); + intent.putExtra(SurveyorIntent.EXTRA_FLOW_UUID, flow.getUuid()); + startActivity(intent); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment.java new file mode 100644 index 0000000..2e93f39 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment.java @@ -0,0 +1,76 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * Previous implementation of Settings fragment used by the application. + * Replaced by: SettingsFragment_WV + * Scheduled for Deletion. + */ +public class SettingsFragment extends BaseFragment { + + String lang_code = "en"; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_settings, container, false); + } + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + setLang_code(lang_code); + + if(!isLoggedIn()){ + ((TextView) getView().findViewById(R.id.textView_logout)).setText("Login"); + } + + getView().findViewById(R.id.logout_button).setOnClickListener(view13 -> logout()); + + getView().findViewById(R.id.btn_english).setOnClickListener(view12 -> { + if(lang_code.equals("en")){return;} + setLang_code("en"); + playNotification(getSurveyor(), getContext(), R.raw.setting_button_change, view12); + }); + + getView().findViewById(R.id.btn_burmese).setOnClickListener(view1 -> { + if(lang_code.equals("my")){return;} + setLang_code("my"); + playNotification(getSurveyor(), getContext(), R.raw.setting_button_change, view1); + }); + } + + void setLang_code(String lang_code){ + getSurveyor().setPreference(SurveyorPreferences.LANG_CODE, lang_code); + this.lang_code = lang_code; + if(lang_code.equals("my")){ + getView().findViewById(R.id.btn_english).setBackground(getResources().getDrawable(R.drawable.v3_dialog_button_black)); + getView().findViewById(R.id.btn_burmese).setBackground(getResources().getDrawable(R.drawable.v3_dialog_button_magenta)); + }else{ + getView().findViewById(R.id.btn_english).setBackground(getResources().getDrawable(R.drawable.v3_dialog_button_magenta)); + getView().findViewById(R.id.btn_burmese).setBackground(getResources().getDrawable(R.drawable.v3_dialog_button_black)); + } + } + + @Override + public boolean requireLogin() { + return false; + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment_WV.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment_WV.java new file mode 100644 index 0000000..7da3c29 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/SettingsFragment_WV.java @@ -0,0 +1,206 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.JavascriptInterface; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.TextView; + +import org.w3c.dom.Text; + +import java.util.Locale; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.DashboardActivity; +import io.rapidpro.surveyor.extend.SettingsActivity; +import io.rapidpro.surveyor.extend.StaticMethods; + +import static io.rapidpro.surveyor.extend.StaticMethods.AppDistribution; +import static io.rapidpro.surveyor.extend.StaticMethods.pending_restart; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class SettingsFragment_WV extends BaseFragment { + + WebView webView; + String lang_code = "en"; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_settings_wv, container, false); + } + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + //setLang_code(lang_code); + + + webView = getView().findViewById(R.id.webView); + webView.setWebViewClient(new WebViewClient() { + public void onPageFinished(WebView view, String url) { + + String is_logged_in = isLoggedIn() ? "1" : "0"; + String is_sound_on = isSoundOn() ? "1" : "0"; + String is_vibration_on = isVibrationOn() ? "1" : "0"; + String version_name = BuildConfig.VERSION_NAME; + + webView.loadUrl("javascript:current_stat('"+lang_code+"', '"+is_logged_in+"', '"+is_sound_on+"', '"+is_vibration_on+"', '" + version_name + "')"); + + + } + }); + webView.getSettings().setJavaScriptEnabled(true); + webView.addJavascriptInterface(this, "SurveyorApp"); + webView.loadUrl("file:///android_asset/pages/settings.html"); + + + } + + void setLang_code(String lang_code){ + + if(AppDistribution.equals("RV") && lang_code.equals("bn")){ + // Force English + lang_code = "en"; + } + + getSurveyor().setPreference(SurveyorPreferences.LANG_CODE, lang_code); + this.lang_code = lang_code; + Locale myLocale = new Locale("en"); + + if(lang_code.equals("bn")){ + myLocale = new Locale("bn", "BD"); + }else if(lang_code.equals("en")){ + myLocale = new Locale("en"); + }else if(lang_code.equals("my")){ + myLocale = new Locale("my"); + } + + Locale.setDefault(myLocale); + Configuration config = new Configuration(); + config.locale = myLocale; + config.setLocale(myLocale); + getContext().getResources().updateConfiguration(config, getContext().getResources().getDisplayMetrics()); + reloadTexts(); + + + } + + void setSound_State(String sound_state){ + if(sound_state.equals("0")){ + // Sound Off + getSurveyor().setPreference("sound_on", "false"); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("sound", "off"); + StaticMethods.logFirebase("settings_change", logBundle); + }else{ + getSurveyor().setPreference("sound_on", "true"); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("sound", "on"); + StaticMethods.logFirebase("settings_change", logBundle); + } + } + + void setVibration_State(String vibration_state){ + if(vibration_state.equals("0")){ + // Sound Off + getSurveyor().setPreference("vibration_on", "false"); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("vibration", "off"); + StaticMethods.logFirebase("settings_change", logBundle); + }else{ + getSurveyor().setPreference("vibration_on", "true"); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("vibration", "on"); + StaticMethods.logFirebase("settings_change", logBundle); + } + } + + public void reloadTexts() { + SettingsActivity.activityName.setText(R.string.v1_settings); + } + + @Override + public boolean requireLogin() { + return false; + } + + + @JavascriptInterface + public void changeLang(final String lang) { + // Set Language + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + setLang_code(lang); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("language", lang); + StaticMethods.logFirebase("settings_change", logBundle); + } + }); + } + + @JavascriptInterface + public void changeSound(final String sound_state) { + // Set Sound + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + setSound_State(sound_state); + } + }); + } + + @JavascriptInterface + public void changeVibration(final String vibration_state) { + // Set Vibration + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + setVibration_State(vibration_state); + } + }); + } + + @JavascriptInterface + public void toggleLogin() { + // Set Language + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + logout(); + + // Log Event + Bundle logBundle = new Bundle(); + logBundle.putString("login", "logout"); + StaticMethods.logFirebase("settings_change", logBundle); + } + }); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/StoriesListFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/StoriesListFragment.java new file mode 100644 index 0000000..54ce15d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/StoriesListFragment.java @@ -0,0 +1,436 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.StrictMode; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.extend.StoriesListActivity; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterStories; +import io.rapidpro.surveyor.extend.api.StoriesApi; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.StoriesDao; +import io.rapidpro.surveyor.extend.entity.local.StoriesLocal; +import io.rapidpro.surveyor.extend.entity.model.story_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_api; +import io.rapidpro.surveyor.extend.entity.model.story_delete_data; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import me.myatminsoe.mdetect.MDetect; +import okhttp3.OkHttpClient; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +import static io.rapidpro.surveyor.extend.StaticMethods.getMD5; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class StoriesListFragment extends BaseFragment implements CustomAdapterStories.ItemClickListener { + + + AppDatabase database; + Retrofit retrofit; + StoriesApi storiesApi; + StoriesDao storiesDao; + Call story_apiCall; + List localStories; + CustomAdapterStories storiesAdapter; + SwipeRefreshLayout storiesRefresh; + CustomAdapterStories.ItemClickListener itemClickListener; + + RecyclerView recyclerView; + String lang_code = "en"; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_stories, container, false); + } + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + // Disable Strict Mode + if (android.os.Build.VERSION.SDK_INT > 9) { + StrictMode.ThreadPolicy policy = + new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + } + + database = databaseConnection.getDatabase(getContext()); + storiesDao = database.getStories(); + + + localStories = new ArrayList<>(); + localStories = storiesDao.getStoriesList(); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + storiesAdapter = new CustomAdapterStories(getContext(), localStories, lang_code); + + recyclerView = getView().findViewById(R.id.storiesRecycler); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerView.setAdapter(storiesAdapter); + + itemClickListener = this; + storiesAdapter.setClickListener(itemClickListener); + + storiesRefresh = getView().findViewById(R.id.storiesRefreshLayout); + storiesRefresh.setOnRefreshListener(() -> { + playNotification(getSurveyor(), getContext(), R.raw.swipe_sound); + updateStories(); + }); + } + + boolean clickLock = false; + @Override + public void onItemClick(View view, int position) { + + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1500); + } + + StoriesListActivity sla = (StoriesListActivity) getActivity(); + int storyId = localStories.get(position).getId(); + sla.beginTransition(view, storyId); + + } + + public void updateStories() { + if(StaticMethods.isConnected(getContext())){ + //downloadStories(); + new LongOperation().execute(); + }else{ + new CustomDialog(getContext()).displayNoInternetDialog(new CustomDialogInterface() { + @Override + public void retry() { + updateStories(); + } + @Override + public void cancel() { } + }); + if(storiesRefresh != null){storiesRefresh.setRefreshing(false);} + } + } + + private class LongOperation extends AsyncTask { + + @Override + protected String doInBackground(String... params) { + + // Download Stories + String last_updated = getSurveyor().getPreferences().getString("story_date", ""); + + String baseURL; + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = StoriesApi.BASE_URL_GV; + }else{ + baseURL = StoriesApi.BASE_URL_RV; + } + + final OkHttpClient okHttpClient = new OkHttpClient.Builder() + .readTimeout(60, TimeUnit.SECONDS) + .connectTimeout(60, TimeUnit.SECONDS) + .build(); + + retrofit = new Retrofit.Builder().baseUrl(baseURL).addConverterFactory(GsonConverterFactory.create()).client(okHttpClient).build(); + storiesApi = retrofit.create(StoriesApi.class); + story_apiCall = storiesApi.getStories(last_updated, 100); + story_apiCall.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.body() != null){ + + + String new_last_updated = response.body().getLast_updated(); + + try { + playNotification(getSurveyor(), getContext(), R.raw.sync_complete); + getSurveyor().setPreference("story_date", new_last_updated); + } catch (Exception e) { + // + } + + if(response.body().getData().size() == 0){ + if(storiesRefresh != null){storiesRefresh.setRefreshing(false);} + + // Refresh Images + // new MiniOperation().execute(); + + return; + } + + List storiesLocals = response.body().getData(); + + for(StoriesLocal s: storiesLocals) { + if(storiesDao.doesStoryExists(s.getId()) > 0){ + // Old Story: update + s.primaryKey = storiesDao.getStory_pKey(s.getId()); + storiesDao.update(s); + }else{ + // New Story: insert + storiesDao.insert(s); + } + } + + // Update Last Updated + + try { + + if (storiesRefresh != null) { + storiesRefresh.setRefreshing(false); + } + + localStories = storiesDao.getStoriesList(); + storiesAdapter = new CustomAdapterStories(getContext(), localStories, lang_code); + storiesAdapter.setClickListener(itemClickListener); + recyclerView.setAdapter(storiesAdapter); + storiesAdapter.notifyDataSetChanged(); + + } catch(Exception e) { + // + } + }else{ + if(storiesRefresh != null){storiesRefresh.setRefreshing(false);} + playNotification(getSurveyor(), getContext(), R.raw.sync_complete); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + try { + if (storiesRefresh != null) { + storiesRefresh.setRefreshing(false); + } + playNotification(getSurveyor(), getContext(), R.raw.sync_complete); + } catch (Exception e) { + // + } + } + }); + + // Check For Deleted Story + final String story_delete_last_update = getSurveyor().getPreferences().getString("story_delete_last_update", ""); + StoriesApi storiesDeleteApi = retrofit.create(StoriesApi.class); + Call storyDelete_apiCall = storiesDeleteApi.getDeletedStories(story_delete_last_update); + storyDelete_apiCall.enqueue(new Callback() { + + @Override + public void onResponse(Call call, Response response) { + if(response.body().getData() == null){ + return; + } + + List deleted_stories = response.body().getData(); + + for(story_delete_data deleted: deleted_stories) { + if(storiesDao.doesStoryExists(deleted.getStory_id()) > 0){ + // Story Deleted on Server + storiesDao.deleteFromStoryById(deleted.getStory_id()); + } + } + + // Update Story Delete Last_Update + try { + + getSurveyor().setPreference("story_delete_last_update", response.body().getLast_updated()); + + localStories = storiesDao.getStoriesList(); + storiesAdapter = new CustomAdapterStories(getContext(), localStories, lang_code); + storiesAdapter.setClickListener(itemClickListener); + recyclerView.setAdapter(storiesAdapter); + storiesAdapter.notifyDataSetChanged(); + + if (storiesRefresh != null) { + storiesRefresh.setRefreshing(false); + } + + } catch(Exception e) { + // + } + + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + + }); + + List storiesLocals = database.getStories().getStoriesList(); + + //Collections.reverse(storiesLocals); + for(StoriesLocal s: storiesLocals){ + try { + // Download Story Image + if (s.getContent_image() == null) { + continue; + } + if (s.getContent_image().equals("")) { + continue; + } + + Context context = getSurveyor().getApplicationContext(); + String imageURL = s.getContent_image(); + + String file_path = "story_image_" + getMD5(imageURL); + String file_path_full = context.getFilesDir() + "/story_image_" + getMD5(imageURL); + + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 50 KB Data Exists: skip + continue; + } + } + + OkHttpClient okHttpClient2 = new OkHttpClient(); + okhttp3.Request okRequest = new okhttp3.Request.Builder().url(imageURL).build(); + okhttp3.Response okResponse = null; + + try { + okResponse = okHttpClient2.newCall(okRequest).execute(); + InputStream inputStream = okResponse.body().byteStream(); + + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + + inputStream.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } catch (Exception e1) { + // + } + + } + + for(StoriesLocal s: storiesLocals){ + try { + // Download Story Video + if (s.getStory_video() == null) { + continue; + } + if (s.getStory_video().equals("")) { + continue; + } + + Context context = getSurveyor().getApplicationContext(); + String videoURL = s.getStory_video(); + + String file_path = "story_video_" + getMD5(videoURL); + String file_path_full = context.getFilesDir() + "/story_video_" + getMD5(videoURL); + + File file = new File(file_path_full); + if (file.exists()) { + if (file.length() > 100 * 1024) { + // File with At Least 50 KB Data Exists: skip + continue; + } + } + + OkHttpClient okHttpClient3 = new OkHttpClient(); + okhttp3.Request okRequest = new okhttp3.Request.Builder().url(videoURL).build(); + okhttp3.Response okResponse = null; + + try { + okResponse = okHttpClient3.newCall(okRequest).execute(); + InputStream inputStream = okResponse.body().byteStream(); + + try (OutputStream output = context.openFileOutput(file_path, context.MODE_PRIVATE)) { + byte[] buffer = new byte[4 * 1024]; // or other buffer size + int read; + while ((read = inputStream.read(buffer)) != -1) { + output.write(buffer, 0, read); + } + output.flush(); + } + + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (Exception e1) { + // + } + } + + return "images"; + } + + @Override + protected void onPostExecute(String result) { + if (result.matches("images")){ + + try { + localStories = storiesDao.getStoriesList(); + storiesAdapter = new CustomAdapterStories(getContext(), localStories, lang_code); + storiesAdapter.setClickListener(itemClickListener); + recyclerView.setAdapter(storiesAdapter); + storiesAdapter.notifyDataSetChanged(); + } catch(Exception e) { + // + } + + } + } + + @Override + protected void onPreExecute() {} + + @Override + protected void onProgressUpdate(Void... values) {} + } + + @Override + public boolean requireLogin() { + return false; + } +} + diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportCategoryFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportCategoryFragment.java new file mode 100644 index 0000000..0275837 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportCategoryFragment.java @@ -0,0 +1,305 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.util.ArrayList; +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.extend.UreportListActivity; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterPollList; +import io.rapidpro.surveyor.extend.api.UreportApi; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.UReportDao; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.ureport_api; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +import static io.rapidpro.surveyor.extend.StaticMethods.isConnected; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class UreportCategoryFragment extends BaseFragment implements CustomAdapterPollList.ItemClickListener { + + CustomAdapterPollList adapter; + List pollNameList= new ArrayList<>(); + List pollIDList= new ArrayList<>(); + List pollDateList= new ArrayList<>(); + RecyclerView recyclerView; + + boolean isFirstTime=false; + boolean connected = false; + + Context context; + View mainView; + + String lang_code = "en"; + + AppDatabase database; + Retrofit retrofit; + UReportDao uReportDao; + UreportApi api; + Call call_ureport; + SwipeRefreshLayout ureportRefresh; + CustomAdapterPollList.ItemClickListener itemClickListener; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_ureport_list, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + context = getActivity(); + mainView = getView(); + + mainView.findViewById(R.id.progressBg).setVisibility(View.GONE); + mainView.findViewById(R.id.progressBar).setVisibility(View.GONE); + + String baseURL; + + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = UreportApi.BASE_URL_GV; + }else{ + baseURL = UreportApi.BASE_URL_RV; + } + + database = databaseConnection.getDatabase(context); + retrofit = new Retrofit.Builder().baseUrl(baseURL).addConverterFactory(GsonConverterFactory.create()).build(); + api = retrofit.create(UreportApi.class); + + uReportDao = database.getUReports(); + List uReportLocalList = uReportDao.getUreportCategories(); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + // Convert to Legacy Format + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + itemClickListener = this; + + for(String x: uReportLocalList){ + pollIDList.add(""); + pollNameList.add(x); + pollDateList.add(""); + } + + if(uReportLocalList.size() == 0){ + refreshUreport(); + } + + recyclerView = mainView.findViewById(R.id.all_topic_recyclerview); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setFocusable(false); + + adapter = new CustomAdapterPollList(context, pollNameList, pollIDList, pollDateList, true, -1); + adapter.setClickListener(itemClickListener); + recyclerView.setAdapter(adapter); + + ureportRefresh = getView().findViewById(R.id.ureportRefreshLayout); + ureportRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + playNotification(getSurveyor(), getContext(), R.raw.swipe_sound); + refreshUreport(); + } + }); + } + + public void refreshUreport(){ + if(isConnected(getContext())){ + connected = true; + new LongOperation().execute(""); + }else{ + new CustomDialog(getContext()).displayNoInternetDialog(new CustomDialogInterface() { + @Override + public void retry() { + refreshUreport(); + } + @Override + public void cancel() { } + }); + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + } + + + @Override + public void onResume() { + super.onResume(); + } + + boolean clickLock = false; + + @Override + public void onItemClick(View view, int position) { + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1500); + } + playNotification(getSurveyor(), getContext(), R.raw.button_click_yes, view); + + Intent intent = new Intent(context, UreportListActivity.class); + intent.putExtra("ResultName", "" +adapter.getItem(position)); + intent.putExtra("ResultID", "" + adapter.getId(position)); + intent.putExtra("ResultDate", "" + adapter.getDate(position)); + intent.putExtra("ColorPosition", (position % 7)); + + startActivity(intent); + } + + + private class LongOperation extends AsyncTask { + + @Override + protected String doInBackground(String... params) { + // Update Last Updated + String last_updated = getSurveyor().getPreferences().getString("ureport_date", ""); + + call_ureport = api.getUreport(100, 0, last_updated); + call_ureport.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + ureport_api ureportApi = response.body(); + if(ureportApi == null){ + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + return; + } + if(ureportApi.getData().size() == 0){ + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + return; + } + + String new_last_update = ureportApi.getLast_updated(); + + List ureports = ureportApi.getData(); + + for(UReportLocal x: ureports){ + + if(uReportDao.doesUReportExists(x.getUreport_id()) > 0){ + // Old UReport: update + x.primaryKey = uReportDao.getUreport_pKey(x.getUreport_id()); + uReportDao.update(x); + }else{ + // New UReport: insert + uReportDao.insert(x); + } + + } + + // Reload Recycler View + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + + List uReportLocalList = uReportDao.getUReports(); + + for(UReportLocal x: uReportLocalList){ + JsonParser parser = new JsonParser(); + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(x.getMy_pack() != null){ + rootObj = parser.parse(x.getMy_pack()).getAsJsonObject(); + } + }else{ + if(x.getEn_pack() != null){ + rootObj = parser.parse(x.getEn_pack()).getAsJsonObject(); + } + } + + if(rootObj != null){ + pollIDList.add(String.valueOf(x.getId())); + pollNameList.add(rootObj.get("title").getAsString()); + pollDateList.add(rootObj.get("poll_date").getAsString()); + } + } + + adapter = new CustomAdapterPollList(context, pollNameList, pollIDList, pollDateList, true, -1); + recyclerView.setAdapter(adapter); + adapter.setClickListener(itemClickListener); + adapter.notifyDataSetChanged(); + + // Save Preference + try { + getSurveyor().setPreference("ureport_date", new_last_update); + } catch(Exception e) { + // + } + + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + + @Override + public void onFailure(Call call, Throwable t) { + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + }); + + return "ureport"; + } + + @Override + protected void onPostExecute(String result) { + if (result.matches("ureport")){ + final Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + //mainView.findViewById(R.id.progressBg).setVisibility(View.GONE); + //mainView.findViewById(R.id.progressBar).setVisibility(View.GONE); + + if(isFirstTime=true){ + isFirstTime=false; + } + + adapter.notifyDataSetChanged(); + + } + }, 1000); + } + } + + @Override + protected void onPreExecute() {} + + @Override + protected void onProgressUpdate(Void... values) {} + } + + @Override + public boolean requireLogin() { + return false; + } + + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportListFragment.java b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportListFragment.java new file mode 100644 index 0000000..b06b1d3 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/fragment/UreportListFragment.java @@ -0,0 +1,374 @@ +package io.rapidpro.surveyor.extend.fragment; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.util.ArrayList; +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.extend.StaticMethods; +import io.rapidpro.surveyor.extend.OfflineUreportDetailsActivity; +import io.rapidpro.surveyor.extend.UreportDetailsActivity; +import io.rapidpro.surveyor.extend.adapter.CustomAdapterPollList; +import io.rapidpro.surveyor.extend.api.UreportApi; +import io.rapidpro.surveyor.extend.database.AppDatabase; +import io.rapidpro.surveyor.extend.database.databaseConnection; +import io.rapidpro.surveyor.extend.entity.dao.UReportDao; +import io.rapidpro.surveyor.extend.entity.local.UReportLocal; +import io.rapidpro.surveyor.extend.entity.model.ureport_api; +import io.rapidpro.surveyor.extend.util.CustomDialog; +import io.rapidpro.surveyor.extend.util.CustomDialogInterface; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +import static io.rapidpro.surveyor.extend.StaticMethods.isConnected; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class UreportListFragment extends BaseFragment implements CustomAdapterPollList.ItemClickListener { + + CustomAdapterPollList adapter; + List pollNameList= new ArrayList<>(); + List pollIDList= new ArrayList<>(); + List pollDateList= new ArrayList<>(); + RecyclerView recyclerView; + + boolean isFirstTime=false; + boolean connected = false; + + Context context; + View mainView; + + String lang_code = "en"; + int ColorPosition = 0; + + AppDatabase database; + Retrofit retrofit; + UReportDao uReportDao; + UreportApi api; + Call call_ureport; + SwipeRefreshLayout ureportRefresh; + CustomAdapterPollList.ItemClickListener itemClickListener; + + String category_name; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.v1_fragment_ureport_list, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + context = getActivity(); + mainView = getView(); + + category_name = getActivity().getIntent().getExtras().getString("ResultName"); + ColorPosition = getActivity().getIntent().getExtras().getInt("ColorPosition"); + + // Set Layout Color + setLayoutBackground(ColorPosition); + + + mainView.findViewById(R.id.progressBg).setVisibility(View.GONE); + mainView.findViewById(R.id.progressBar).setVisibility(View.GONE); + + + database = databaseConnection.getDatabase(context); + + String baseURL; + + if(StaticMethods.AppDistribution.equals("GV")){ + baseURL = UreportApi.BASE_URL_GV; + }else{ + baseURL = UreportApi.BASE_URL_RV; + } + + retrofit = new Retrofit.Builder().baseUrl(baseURL).addConverterFactory(GsonConverterFactory.create()).build(); + api = retrofit.create(UreportApi.class); + + uReportDao = database.getUReports(); + List uReportLocalList = uReportDao.getUReportsByCategory(category_name); + + lang_code = getSurveyor().getPreferences().getString(SurveyorPreferences.LANG_CODE, "en"); + + // Convert to Legacy Format + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + itemClickListener = this; + + for(UReportLocal x: uReportLocalList){ + JsonParser parser = new JsonParser(); + // Manage Language Here! + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(x.getMy_pack() != null){ + rootObj = parser.parse(x.getMy_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("en")){ + if(x.getEn_pack() != null){ + rootObj = parser.parse(x.getEn_pack()).getAsJsonObject(); + } + }else if(lang_code.equals("bn")) { + if(x.getData_pack() != null){ + rootObj = parser.parse(x.getData_pack()).getAsJsonObject(); + } + } + + if(rootObj != null){ + pollIDList.add(String.valueOf(x.getId())); + pollNameList.add(rootObj.get("title").getAsString()); + pollDateList.add(rootObj.get("poll_date").getAsString()); + } + + } + + if(uReportLocalList.size() == 0){ + refreshUreport(); + } + + recyclerView = mainView.findViewById(R.id.all_topic_recyclerview); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setFocusable(false); + + adapter = new CustomAdapterPollList(context, pollNameList, pollIDList, pollDateList, false, ColorPosition); + adapter.setClickListener(itemClickListener); + recyclerView.setAdapter(adapter); + + ureportRefresh = getView().findViewById(R.id.ureportRefreshLayout); + ureportRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + playNotification(getSurveyor(), getContext(), R.raw.swipe_sound); + refreshUreport(); + } + }); + } + + public void refreshUreport(){ + if(isConnected(getContext())){ + connected = true; + new LongOperation().execute(""); + }else{ + new CustomDialog(getContext()).displayNoInternetDialog(new CustomDialogInterface() { + @Override + public void retry() { + refreshUreport(); + } + @Override + public void cancel() { } + }); + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + } + + public void setLayoutBackground(int ColorPos){ + int px = ColorPos; + + // Override + px = 2; + + if (px == 0) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(33, 159, 255)); + } + if (px == 1) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(255, 88, 53)); + } + if (px == 2) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(235, 190, 65)); + } + if (px == 3) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(67, 219, 83)); + } + if (px == 4) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(101, 101, 101)); + } + if (px == 5) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(28, 161, 162)); + } + if (px == 6) { + mainView.findViewById(R.id.bg_color).setBackgroundColor(Color.rgb(7, 132, 183)); + } + } + + + @Override + public void onResume() { + super.onResume(); + } + + boolean clickLock = false; + + @Override + public void onItemClick(View view, int position) { + if(clickLock){ + return; + }else{ + clickLock = true; + // Unlock after 2 s + new Handler().postDelayed(() -> clickLock = false, 1500); + } + + playNotification(getSurveyor(), getContext(), R.raw.button_click_yes, view); + + Intent intent = new Intent(context, UreportDetailsActivity.class); + intent.putExtra("ResultName", "" +adapter.getItem(position)); + intent.putExtra("ResultID", "" + adapter.getId(position)); + intent.putExtra("ResultDate", "" + adapter.getDate(position)); + startActivity(intent); + + + } + + + private class LongOperation extends AsyncTask { + + @Override + protected String doInBackground(String... params) { + // Update Last Updated + String last_updated = getSurveyor().getPreferences().getString("ureport_date", ""); + + call_ureport = api.getUreport(100, 0, last_updated); + call_ureport.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + ureport_api ureportApi = response.body(); + if(ureportApi == null){ + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + return; + } + if(ureportApi.getData().size() == 0){ + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + return; + } + + String new_last_update = ureportApi.getLast_updated(); + + List ureports = ureportApi.getData(); + + for(UReportLocal x: ureports){ + + if(uReportDao.doesUReportExists(x.getUreport_id()) > 0){ + // Old UReport: update + x.primaryKey = uReportDao.getUreport_pKey(x.getUreport_id()); + uReportDao.update(x); + }else{ + // New UReport: insert + uReportDao.insert(x); + } + + } + + // Reload Recycler View + pollNameList = new ArrayList<>(); + pollIDList = new ArrayList<>(); + pollDateList = new ArrayList<>(); + + List uReportLocalList = uReportDao.getUReports(); + + for(UReportLocal x: uReportLocalList){ + JsonParser parser = new JsonParser(); + JsonObject rootObj = null; + + if(lang_code.equals("my")){ + if(x.getMy_pack() != null){ + rootObj = parser.parse(x.getMy_pack()).getAsJsonObject(); + } + }else{ + if(x.getEn_pack() != null){ + rootObj = parser.parse(x.getEn_pack()).getAsJsonObject(); + } + } + + if(rootObj != null){ + pollIDList.add(String.valueOf(x.getId())); + pollNameList.add(rootObj.get("title").getAsString()); + pollDateList.add(rootObj.get("poll_date").getAsString()); + } + } + + if(adapter != null && recyclerView != null) { + adapter = new CustomAdapterPollList(context, pollNameList, pollIDList, pollDateList, false, ColorPosition); + recyclerView.setAdapter(adapter); + adapter.setClickListener(itemClickListener); + adapter.notifyDataSetChanged(); + } + + // Save Preference + + try { + getSurveyor().setPreference("ureport_date", new_last_update); + } catch(Exception e) { + // + } + + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + + @Override + public void onFailure(Call call, Throwable t) { + if(ureportRefresh != null){ureportRefresh.setRefreshing(false);} + } + }); + + return "ureport"; + } + + @Override + protected void onPostExecute(String result) { + if (result.matches("ureport")){ + final Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + //mainView.findViewById(R.id.progressBg).setVisibility(View.GONE); + //mainView.findViewById(R.id.progressBar).setVisibility(View.GONE); + + if(isFirstTime=true){ + isFirstTime=false; + } + + if(adapter != null){ + adapter.notifyDataSetChanged(); + } + } + }, 1000); + } + } + + @Override + protected void onPreExecute() {} + + @Override + protected void onProgressUpdate(Void... values) {} + } + + @Override + public boolean requireLogin() { + return false; + } + + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialog.java b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialog.java new file mode 100644 index 0000000..551b9d0 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialog.java @@ -0,0 +1,111 @@ +package io.rapidpro.surveyor.extend.util; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.View; +import android.view.Window; +import android.widget.TextView; + +import androidx.cardview.widget.CardView; +import androidx.constraintlayout.widget.ConstraintLayout; +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; + +import static io.rapidpro.surveyor.extend.StaticMethods.NO_SOUND; +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +public class CustomDialog { + + Context context; + + public CustomDialog(Context context){ + this.context = context; + } + + public void displayNoInternetDialog(final CustomDialogInterface customDialogInterface) { + + // Create Dialog Window + final Dialog dialog = new Dialog(context, R.style.Theme_AppCompat_Dialog); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + dialog.setContentView(R.layout.v1_dialog_custom_layout); + + // Retry Button + ConstraintLayout retry_button = dialog.findViewById(R.id.dialog_retry_button); + retry_button.setOnClickListener(view -> { + playNotification(SurveyorApplication.get(), context, R.raw.button_click_yes, view); + customDialogInterface.retry(); + dialog.dismiss(); + }); + + // Cancel Button + ConstraintLayout cancel_button = dialog.findViewById(R.id.dialog_cancel_button); + cancel_button.setOnClickListener(view -> { + playNotification(SurveyorApplication.get(), context, R.raw.button_click_no, view); + customDialogInterface.cancel(); + dialog.dismiss(); + }); + + dialog.show(); + playNotification(SurveyorApplication.get(), context, R.raw.no_internet_alert); + + } + + public void displayCustomDialog(final CustomDialogInterface customDialogInterface){ + displayCustomDialog(new CustomDialogComponent(), customDialogInterface); + } + + public void displayCustomDialog(final CustomDialogComponent customDialogComponent, final CustomDialogInterface customDialogInterface){ + + // Create Dialog Window + final Dialog dialog = new Dialog(context, R.style.Theme_AppCompat_Dialog); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + dialog.setContentView(R.layout.v1_dialog_ui); + + dialog.findViewById(R.id.textMainText).setVisibility(customDialogComponent.getMainTextVisible()); + dialog.findViewById(R.id.textSubText).setVisibility(customDialogComponent.getSubTextVisible()); + dialog.findViewById(R.id.button_yes).setVisibility(customDialogComponent.getButtonYesVisible()); + dialog.findViewById(R.id.button_no).setVisibility(customDialogComponent.getButtonNoVisible()); + //dialog.findViewById(R.id.v3_dialog_icon).setVisibility(customDialogComponent.getImageIconVisible()); + + dialog.findViewById(R.id.img_start).setVisibility(customDialogComponent.getButtonIconVisible()); + dialog.findViewById(R.id.img_cancel).setVisibility(customDialogComponent.getButtonIconVisible()); + + ((TextView) dialog.findViewById(R.id.textMainText)).setText(customDialogComponent.getMainText()); + ((TextView) dialog.findViewById(R.id.textSubText)).setText(customDialogComponent.getSubText()); + ((TextView) dialog.findViewById(R.id.button_yes_text)).setText(customDialogComponent.getButtonYes()); + ((TextView) dialog.findViewById(R.id.button_no_text)).setText(customDialogComponent.getButtonNo()); + //((ImageView) dialog.findViewById(R.id.v3_dialog_icon)).setImageResource(customDialogComponent.getImageIcon()); + + // Retry Button + ConstraintLayout retry_button = dialog.findViewById(R.id.button_yes); + retry_button.setOnClickListener(view -> { + if(customDialogComponent.getDialogNoSound() != NO_SOUND){ + playNotification(SurveyorApplication.get(), context, customDialogComponent.getDialogYesSound(), view); + } + customDialogInterface.retry(); + dialog.dismiss(); + }); + + // Cancel Button + ConstraintLayout cancel_button = dialog.findViewById(R.id.button_no); + cancel_button.setOnClickListener(view -> { + if(customDialogComponent.getDialogNoSound() != NO_SOUND){ + playNotification(SurveyorApplication.get(), context, customDialogComponent.getDialogNoSound(), view); + } + customDialogInterface.cancel(); + dialog.dismiss(); + }); + + dialog.show(); + + if(customDialogComponent.getDialogOpenSound() != NO_SOUND){ + playNotification(SurveyorApplication.get(), context, customDialogComponent.getDialogOpenSound()); + } + + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogComponent.java b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogComponent.java new file mode 100644 index 0000000..cf54f96 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogComponent.java @@ -0,0 +1,152 @@ +package io.rapidpro.surveyor.extend.util; + +import android.view.View; + +import io.rapidpro.surveyor.R; + + +public class CustomDialogComponent { + + private int mainTextVisible = View.VISIBLE; + private int subTextVisible = View.VISIBLE; + private int buttonYesVisible = View.VISIBLE; + private int buttonNoVisible = View.VISIBLE; + private int imageIconVisible = View.VISIBLE; + private int buttonIconVisible = View.GONE; + + private String mainText = ""; + private String subText = ""; + private String buttonYes = "Yes"; + private String buttonNo = "No"; + + private int dialogOpenSound = R.raw.no_internet_alert; + private int dialogYesSound = R.raw.button_click_yes; + private int dialogNoSound = R.raw.button_click_no; + + private int imageIcon = R.drawable.v3_icon_network; + + public int getButtonIconVisible() { + return buttonIconVisible; + } + + public void setButtonIconVisible(int buttonIconVisible) { + this.buttonIconVisible = buttonIconVisible; + } + + public int getMainTextVisible() { + return mainTextVisible; + } + + public int getImageIconVisible() { + return imageIconVisible; + } + + public CustomDialogComponent setImageIconVisible(int imageIconVisible) { + this.imageIconVisible = imageIconVisible; + return this; + } + + public int getImageIcon() { + return imageIcon; + } + + public CustomDialogComponent setImageIcon(int imageIcon) { + this.imageIcon = imageIcon; + return this; + } + + public CustomDialogComponent setMainTextVisible(int mainTextVisible) { + this.mainTextVisible = mainTextVisible; + return this; + } + + public int getSubTextVisible() { + return subTextVisible; + } + + public CustomDialogComponent setSubTextVisible(int subTextVisible) { + this.subTextVisible = subTextVisible; + return this; + } + + public int getButtonYesVisible() { + return buttonYesVisible; + } + + public CustomDialogComponent setButtonYesVisible(int buttonYesVisible) { + this.buttonYesVisible = buttonYesVisible; + return this; + } + + public int getButtonNoVisible() { + return buttonNoVisible; + } + + public CustomDialogComponent setButtonNoVisible(int buttonNoVisible) { + this.buttonNoVisible = buttonNoVisible; + return this; + } + + public String getMainText() { + return mainText; + } + + public CustomDialogComponent setMainText(String mainText) { + this.mainText = mainText; + return this; + } + + public String getSubText() { + return subText; + } + + public CustomDialogComponent setSubText(String subText) { + this.subText = subText; + return this; + } + + public String getButtonYes() { + return buttonYes; + } + + public CustomDialogComponent setButtonYes(String buttonYes) { + this.buttonYes = buttonYes; + return this; + } + + public String getButtonNo() { + return buttonNo; + } + + public CustomDialogComponent setButtonNo(String buttonNo) { + this.buttonNo = buttonNo; + return this; + } + + public int getDialogOpenSound() { + return dialogOpenSound; + } + + public CustomDialogComponent setDialogOpenSound(int dialogOpenSound) { + this.dialogOpenSound = dialogOpenSound; + return this; + } + + public int getDialogYesSound() { + return dialogYesSound; + } + + public CustomDialogComponent setDialogYesSound(int dialogYesSound) { + this.dialogYesSound = dialogYesSound; + return this; + } + + public int getDialogNoSound() { + return dialogNoSound; + } + + public CustomDialogComponent setDialogNoSound(int dialogNoSound) { + this.dialogNoSound = dialogNoSound; + return this; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogInterface.java b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogInterface.java new file mode 100644 index 0000000..20f062d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/util/CustomDialogInterface.java @@ -0,0 +1,6 @@ +package io.rapidpro.surveyor.extend.util; + +public interface CustomDialogInterface { + void retry(); + void cancel(); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/extend/util/ResizeAnimation.java b/app/src/main/java/io/rapidpro/surveyor/extend/util/ResizeAnimation.java new file mode 100644 index 0000000..28c43f0 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/extend/util/ResizeAnimation.java @@ -0,0 +1,38 @@ +package io.rapidpro.surveyor.extend.util; + +import android.content.Context; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Transformation; + +import io.rapidpro.surveyor.extend.StaticMethods; + +public class ResizeAnimation extends Animation { + + final int startHeight; + final int targetHeight; + View view; + + public ResizeAnimation(Context context, View view, float newHeight) { + this.view = view; + startHeight = view.getHeight(); + this.targetHeight = StaticMethods.dip2px(context, newHeight) ; + } + + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + int newHeight = (int) (startHeight + (targetHeight - startHeight) * interpolatedTime); + view.getLayoutParams().height = newHeight; + view.requestLayout(); + } + + @Override + public void initialize(int width, int height, int parentWidth, int parentHeight) { + super.initialize(width, height, parentWidth, parentHeight); + } + + @Override + public boolean willChangeBounds() { + return true; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/fragment/FlowListFragment.java b/app/src/main/java/io/rapidpro/surveyor/fragment/FlowListFragment.java new file mode 100644 index 0000000..7e55490 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/fragment/FlowListFragment.java @@ -0,0 +1,118 @@ +package io.rapidpro.surveyor.fragment; + +import android.app.Activity; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; + +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.adapter.FlowListAdapter; +import io.rapidpro.surveyor.data.Flow; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.extend.SurveyorActivity; +import io.rapidpro.surveyor.extend.fragment.BaseFragment; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * A list of flows than can be selected from + */ +public class FlowListFragment extends BaseFragment implements AbsListView.OnItemClickListener { + + private Container containerx; + private ListAdapter adapter; + SwipeRefreshLayout flowlistRefresh; + + public FlowListFragment() { + + } + + public void stopRefresh() { + flowlistRefresh.setRefreshing(false); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //containerx = (Container) getActivity(); + + if(containerx.getOrg() == null){return;} // Not Logged In + + Org org = containerx.getOrg(); + List items = containerx.getListItems(); + + String firstUUID = ""; + if(items.size() > 0){ + firstUUID = items.get(0).getUuid(); + } + + adapter = new FlowListAdapter(getSurveyor(), getActivity(), R.layout.item_flow, org, items, firstUUID); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_list, container, false); + ListView m_listView = view.findViewById(android.R.id.list); + m_listView.setAdapter(adapter); + m_listView.setOnItemClickListener(this); + + + flowlistRefresh = view.findViewById(R.id.flowRefreshLayout); + flowlistRefresh.setOnRefreshListener(() -> { + playNotification(getSurveyor(), getContext(), R.raw.swipe_sound); + ((SurveyorActivity) containerx).refreshFlows(); + }); + + return view; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + containerx = (Container) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement FlowListFragment.Container"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + containerx = null; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + playNotification(getSurveyor(), getContext(), R.raw.button_click_yes); + containerx.onItemClick((Flow) adapter.getItem(position)); + } + + /** + * Container activity should implement this to be notified when a flow is clicked + */ + public interface Container { + Org getOrg(); + + List getListItems(); + + void onItemClick(Flow flow); + } + + @Override + public boolean requireLogin() { + return false; + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/fragment/OrgListFragment.java b/app/src/main/java/io/rapidpro/surveyor/fragment/OrgListFragment.java new file mode 100644 index 0000000..88ebc99 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/fragment/OrgListFragment.java @@ -0,0 +1,82 @@ +package io.rapidpro.surveyor.fragment; + +import android.app.Activity; +import androidx.fragment.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; + +import java.util.List; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.adapter.OrgListAdapter; +import io.rapidpro.surveyor.data.Org; + +import static io.rapidpro.surveyor.extend.StaticMethods.playNotification; + +/** + * A list of orgs than can be selected from + */ +public class OrgListFragment extends Fragment implements AbsListView.OnItemClickListener { + + private Container container; + private ListAdapter adapter; + + public OrgListFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + List items = container.getListItems(); + + adapter = new OrgListAdapter(getActivity(), R.layout.item_org, items); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_list_org, container, false); + ListView m_listView = view.findViewById(R.id.listView); + m_listView.setAdapter(adapter); + m_listView.setOnItemClickListener(this); + return view; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + container = (Container) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement OrgListFragment.Container"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + container = null; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + playNotification(SurveyorApplication.get(), getContext(), R.raw.button_click_yes, view); + container.onItemClick((Org) adapter.getItem(position)); + } + + /** + * Container activity should implement this to be notified when an org is clicked + */ + public interface Container { + List getListItems(); + + void onItemClick(Org org); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/fragment/SettingsFragment.java b/app/src/main/java/io/rapidpro/surveyor/fragment/SettingsFragment.java new file mode 100644 index 0000000..b6940a2 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/fragment/SettingsFragment.java @@ -0,0 +1,76 @@ +package io.rapidpro.surveyor.fragment; + +import android.content.SharedPreferences; +import android.os.Bundle; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import android.util.Patterns; +import android.widget.Toast; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.SurveyorPreferences; +import io.rapidpro.surveyor.activity.BaseActivity; + +/** + * Fragment to show our settings + */ +public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { + + public SettingsFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // make sure we're editing the correct preferences + getPreferenceManager().setSharedPreferencesName(getSurveyor().getPreferencesName()); + + // load the preference screen from an XML resource + addPreferencesFromResource(R.xml.preferences); + + Preference pref = findPreference(SurveyorPreferences.HOST); + pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!Patterns.WEB_URL.matcher((String) newValue).matches()) { + Toast.makeText(getActivity(), getString(R.string.error_invalid_host), Toast.LENGTH_SHORT).show(); + return false; + } + return true; + } + }); + } + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + + } + + @Override + public void onResume() { + super.onResume(); + + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onPause() { + getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + + super.onPause(); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals(SurveyorPreferences.HOST)) { + getSurveyor().onTembaHostChanged(); + } + } + + private SurveyorApplication getSurveyor() { + return ((BaseActivity) getActivity()).getSurveyor(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/APIError.java b/app/src/main/java/io/rapidpro/surveyor/net/APIError.java new file mode 100644 index 0000000..7d803fe --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/APIError.java @@ -0,0 +1,27 @@ +package io.rapidpro.surveyor.net; + +public class APIError { + + private int statusCode; + private String message; + + public APIError() { + } + + public APIError(int status, String message) { + this.statusCode = status; + this.message = message; + } + + public int getStatus() { + return statusCode; + } + + public String getMessage() { + if (message != null) { + return message; + } else { + return "Server error, please try again."; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/net/TembaAPI.java b/app/src/main/java/io/rapidpro/surveyor/net/TembaAPI.java new file mode 100644 index 0000000..903bf23 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/TembaAPI.java @@ -0,0 +1,86 @@ +package io.rapidpro.surveyor.net; + +import com.google.gson.JsonObject; + +import java.util.List; +import java.util.Map; + +import io.rapidpro.surveyor.net.requests.SubmissionPayload; +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.Definitions; +import io.rapidpro.surveyor.net.responses.Field; +import io.rapidpro.surveyor.net.responses.Flow; +import io.rapidpro.surveyor.net.responses.Group; +import io.rapidpro.surveyor.net.responses.Org; +import io.rapidpro.surveyor.net.responses.PaginatedResults; +import io.rapidpro.surveyor.net.responses.TokenResults; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Multipart; +import retrofit2.http.POST; +import retrofit2.http.PartMap; +import retrofit2.http.Query; + +public interface TembaAPI { + + @FormUrlEncoded + @POST("/api/v2/authenticate") + Call authenticate( + @retrofit2.http.Field("username") String username, + @retrofit2.http.Field("password") String password, + @retrofit2.http.Field("role") String role + ); + + @GET("/api/v2/boundaries.json") + Call> getBoundaries( + @Header("Authorization") String token, + @Query("cursor") String cursor + ); + + @GET("/api/v2/definitions.json") + Call getDefinitions( + @Header("Authorization") String token, + @Query("flow") List flowUUIDs, + @Query("dependencies") String dependencies + ); + + @GET("/api/v2/org.json") + Call getOrg(@Header("Authorization") String token); + + @GET("/api/v2/fields.json") + Call> getFields( + @Header("Authorization") String token, + @Query("cursor") String cursor + ); + + @GET("/api/v2/flows.json") + Call> getFlows( + @Header("Authorization") String token, + @Query("type") String type, + @Query("archived") Boolean archived, + @Query("cursor") String cursor + ); + + @GET("/api/v2/groups.json") + Call> getGroups( + @Header("Authorization") String token, + @Query("cursor") String cursor + ); + + @Multipart + @POST("/api/v2/media.json") + Call uploadMedia( + @Header("Authorization") String token, + @PartMap Map params + ); + + @POST("/mr/surveyor/submit") + Call submit( + @Header("Authorization") String token, + @Body SubmissionPayload submission + ); +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/TembaException.java b/app/src/main/java/io/rapidpro/surveyor/net/TembaException.java new file mode 100644 index 0000000..a10ce71 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/TembaException.java @@ -0,0 +1,16 @@ +package io.rapidpro.surveyor.net; + +import io.rapidpro.surveyor.SurveyorException; + +/** + * Exceptions that come from Temba API requests + */ +public class TembaException extends SurveyorException { + public TembaException(String message) { + super(message); + } + + public TembaException(String message, Exception e) { + super(message, e); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/TembaService.java b/app/src/main/java/io/rapidpro/surveyor/net/TembaService.java new file mode 100644 index 0000000..4f907e8 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/TembaService.java @@ -0,0 +1,327 @@ +package io.rapidpro.surveyor.net; + +import android.net.Uri; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import io.rapidpro.surveyor.BuildConfig; +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.engine.Engine; +import io.rapidpro.surveyor.net.requests.SubmissionPayload; +import io.rapidpro.surveyor.net.responses.Boundary; +import io.rapidpro.surveyor.net.responses.Definitions; +import io.rapidpro.surveyor.net.responses.Field; +import io.rapidpro.surveyor.net.responses.Flow; +import io.rapidpro.surveyor.net.responses.Group; +import io.rapidpro.surveyor.net.responses.Org; +import io.rapidpro.surveyor.net.responses.PaginatedResults; +import io.rapidpro.surveyor.net.responses.TokenResults; +import io.rapidpro.surveyor.utils.JsonUtils; +import io.rapidpro.surveyor.utils.RawJson; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.RequestBody; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class TembaService { + + private TembaAPI api; + + public TembaService(String host) { + this.api = createRetrofit(host).create(TembaAPI.class); + } + + /** + * Utility to create a Authorization header value from a token + */ + private static String asAuth(String token) { + return "Token " + token; + } + + private static Retrofit createRetrofit(String host) { + + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + + OkHttpClient.Builder builder = new OkHttpClient.Builder() + .readTimeout(60, TimeUnit.SECONDS) + .connectTimeout(60, TimeUnit.SECONDS); + + // add extra logging for debug mode + if (BuildConfig.DEBUG) { + builder.addInterceptor(interceptor); + } + + final OkHttpClient okHttpClient = builder.build(); + + try { + return new Retrofit.Builder() + .baseUrl(host) + .addConverterFactory(GsonConverterFactory.create(JsonUtils.getGson())) + .client(okHttpClient) + .build(); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } + } + + /** + * Calls RapidPro's authenticate endpoint to give us the list of tokens and orgs we can access + * + * @param username the username + * @param password the password + */ + public void authenticate(String username, String password, Callback callback) { + api.authenticate(username, password, "S").enqueue(callback); + } + + /** + * Gets all of the admin boundaries + * + * @param token the authentication token + */ + public List getBoundaries(final String token) throws TembaException { + return fetchAllPages(new PageCaller() { + @Override + public Call> createCall(String cursor) { + return api.getBoundaries(asAuth(token), cursor); + } + }); + } + + /** + * Gets the org associated with the given token + * + * @param token the authentication token + */ + public Org getOrg(String token) throws TembaException { + try { + Response response = api.getOrg(asAuth(token)).execute(); + checkResponse(response); + return response.body(); + } catch (IOException e) { + throw new TembaException("Unable to fetch org", e); + } + } + + /** + * Gets all of the contact fields + * + * @param token the authentication token + */ + public List getFields(final String token) throws TembaException { + return fetchAllPages(new PageCaller() { + @Override + public Call> createCall(String cursor) { + return api.getFields(asAuth(token), cursor); + } + }); + } + + /** + * Gets all of the non-archived surveyor flows + * + * @param token the authentication token + */ + public List getFlows(final String token) throws TembaException { + return fetchAllPages(new PageCaller() { + @Override + public Call> createCall(String cursor) { + return api.getFlows(asAuth(token), "survey", false, cursor); + } + }); + } + + /** + * Gets all of the contact groups + * + * @param token the authentication token + */ + public List getGroups(final String token) throws TembaException { + return fetchAllPages(new PageCaller() { + @Override + public Call> createCall(String cursor) { + return api.getGroups(asAuth(token), cursor); + } + }); + } + + /** + * Gets full definitions for the given flows + * + * @param token the authentication token + * @param flows the list of flows + */ + public List getDefinitions(final String token, final List flows) throws TembaException { + // gather up flow UUIDs + final List flowUUIDs = new ArrayList<>(flows.size()); + for (Flow flow : flows) { + flowUUIDs.add(flow.getUuid()); + } + + try { + Response response = api.getDefinitions(asAuth(token), flowUUIDs, "none").execute(); + checkResponse(response); + + Definitions definitions = response.body(); + List flowDefs = new ArrayList<>(definitions.getFlows().size()); + + for (RawJson rawFlow : definitions.getFlows()) { + if (Engine.isLegacyDefinition(rawFlow.toString())) { + String migrated = Engine.migrateLegacyDefinition(rawFlow.toString()); + flowDefs.add(new RawJson(migrated)); + } else { + flowDefs.add(rawFlow); + } + } + + return flowDefs; + + + } catch (IOException e) { + throw new TembaException("Unable to fetch definitions", e); + } + } + + /** + * Uploads a media file and returns the remove URL + * + * @param token the authentication token + * @param uri the local file to upload + * @return the new media URL + */ + public String uploadMedia(String token, Uri uri) throws TembaException { + String uriString = uri.toString(); + String baseName = FilenameUtils.getBaseName(uriString); + String extension = FilenameUtils.getExtension(uriString); + + // build multipart request + Map map = new HashMap<>(); + map.put("extension", RequestBody.create(MediaType.parse("text/plain"), extension)); + + try { + InputStream stream = SurveyorApplication.get().getContentResolver().openInputStream(uri); + byte[] bytes = IOUtils.toByteArray(stream); + + RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), bytes); + map.put("media_file\"; filename=\"" + baseName, fileBody); + + Response result = api.uploadMedia(asAuth(token), map).execute(); + checkResponse(result); + + return result.body().get("location").getAsString(); + + } catch (IOException e) { + throw new TembaException("Error uploading media", e); + } + } + + /** + * Submits a submission payload + * + * @param token the authentication token + * @param submission the payload + */ + public void submit(String token, SubmissionPayload submission) throws TembaException { + try { + Response result = api.submit(asAuth(token), submission).execute(); + checkResponse(result); + + } catch (IOException e) { + throw new TembaException("Error submitting", e); + } + } + + /** + * Utility for fetching all pages of a given type + */ + private List fetchAllPages(PageCaller caller) throws TembaException { + try { + List all = new ArrayList<>(); + PaginatedResults page = null; + + do { + String cursor = page != null ? page.getNextCursor() : null; + Call> call = caller.createCall(cursor); + Response> response = call.execute(); + + if (response.isSuccessful()) { + page = response.body(); + all.addAll(page.getResults()); + } else { + throw new TembaException("Server returned non-200 response for " + call.request().url().toString()); + } + + } while (page.hasNext()); + + return all; + } catch (IOException e) { + throw new TembaException("Unable to fetch page from API", e); + } + } + + private void checkResponse(Response response) throws TembaException { + + if (!response.isSuccessful()) { + + String errorBody; + try { + errorBody = response.errorBody().string(); + } catch (Exception e) { + throw new TembaException("Unable to extract error body", e); + } + + // Bypass Duplicate + if(errorBody.contains("duplicate key value violates unique constraint")){ + // Skip Duplicate Error + return; + } + + // make a note of the error in our log + Logger.w(errorBody); + + // see if the server had anything interesting to say + Gson gson = new Gson(); + JsonObject error = gson.fromJson(errorBody, JsonObject.class); + if (error != null) { + JsonElement detail = error.get("detail"); + if (detail != null) { + + String message = detail.getAsString(); + if (message.equals("Invalid token")) { + message = "Login failure, please logout and try again."; + } + throw new TembaException(message); + } + } + + throw new TembaException("Error reading response"); + } + } + + /** + * Utility for fetching all pages of a given type + */ + private interface PageCaller { + Call> createCall(String cursor); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/requests/SubmissionPayload.java b/app/src/main/java/io/rapidpro/surveyor/net/requests/SubmissionPayload.java new file mode 100644 index 0000000..d0ffe60 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/requests/SubmissionPayload.java @@ -0,0 +1,29 @@ +package io.rapidpro.surveyor.net.requests; + +import java.util.List; + +import io.rapidpro.surveyor.utils.RawJson; + +public class SubmissionPayload { + private RawJson session; + private List modifiers; + private List events; + + public SubmissionPayload(RawJson session, List modifiers, List events) { + this.session = session; + this.modifiers = modifiers; + this.events = events; + } + + public RawJson getSession() { + return session; + } + + public List getModifiers() { + return modifiers; + } + + public List getEvents() { + return events; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Boundary.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Boundary.java new file mode 100644 index 0000000..a174b3c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Boundary.java @@ -0,0 +1,48 @@ +package io.rapidpro.surveyor.net.responses; + +import com.google.gson.annotations.SerializedName; + +public class Boundary { + @SerializedName("osm_id") + private String osmID; + + private String name; + private Reference parent; + private int level; + private String[] aliases; + + public String getOsmID() { + return osmID; + } + + public String getName() { + return name; + } + + public Reference getParent() { + return parent; + } + + public int getLevel() { + return level; + } + + public String[] getAliases() { + return aliases; + } + + public static class Reference { + @SerializedName("osm_id") + private String osmID; + + private String name; + + public String getOsmID() { + return osmID; + } + + public String getName() { + return name; + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Definitions.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Definitions.java new file mode 100644 index 0000000..500ec68 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Definitions.java @@ -0,0 +1,23 @@ +package io.rapidpro.surveyor.net.responses; + +import java.util.List; + +import io.rapidpro.surveyor.utils.RawJson; + +public class Definitions { + private String version; + private String site; + private List flows; + + public String getVersion() { + return version; + } + + public String getSite() { + return site; + } + + public List getFlows() { + return flows; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Field.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Field.java new file mode 100644 index 0000000..d8b94df --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Field.java @@ -0,0 +1,23 @@ +package io.rapidpro.surveyor.net.responses; + +import com.google.gson.annotations.SerializedName; + +public class Field { + private String key; + private String label; + + @SerializedName("value_type") + private String valueType; + + public String getKey() { + return key; + } + + public String getLabel() { + return label; + } + + public String getValueType() { + return valueType; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Flow.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Flow.java new file mode 100644 index 0000000..12713de --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Flow.java @@ -0,0 +1,29 @@ +package io.rapidpro.surveyor.net.responses; + +public class Flow { + private String uuid; + private String name; + private String type; + private boolean archived; + private int expires; + + public String getUuid() { + return uuid; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public boolean isArchived() { + return archived; + } + + public int getExpires() { + return expires; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Group.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Group.java new file mode 100644 index 0000000..5178832 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Group.java @@ -0,0 +1,19 @@ +package io.rapidpro.surveyor.net.responses; + +public class Group { + private String uuid; + private String name; + private String query; + + public String getUuid() { + return uuid; + } + + public String getName() { + return name; + } + + public String getQuery() { + return query; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Org.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Org.java new file mode 100644 index 0000000..42380be --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Org.java @@ -0,0 +1,55 @@ +package io.rapidpro.surveyor.net.responses; + +import com.google.gson.annotations.SerializedName; + +public class Org { + private String uuid; + + private String name; + + private String country; + + private String[] languages; + + @SerializedName("primary_language") + private String primaryLanguage; + + private String timezone; + + @SerializedName("date_style") + private String dateStyle; + + private boolean anon; + + public String getUuid() { + return uuid; + } + + public String getName() { + return name; + } + + public String getCountry() { + return country; + } + + public String[] getLanguages() { + return languages; + } + + public String getPrimaryLanguage() { + return primaryLanguage; + } + + public String getTimezone() { + return timezone; + } + + public String getDateStyle() { + return dateStyle; + } + + public boolean isAnon() { + return anon; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/PaginatedResults.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/PaginatedResults.java new file mode 100644 index 0000000..23e0aac --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/PaginatedResults.java @@ -0,0 +1,32 @@ +package io.rapidpro.surveyor.net.responses; + +import android.net.Uri; + +import java.util.List; + +public class PaginatedResults { + private String next; + private String previous; + private List results; + + public boolean hasNext() { + return next != null && next.length() != 0; + } + + public String getNextCursor() { + Uri uri = Uri.parse(this.next); + return uri.getQueryParameter("cursor"); + } + + public String getNext() { + return next; + } + + public String getPrevious() { + return previous; + } + + public List getResults() { + return results; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/Token.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/Token.java new file mode 100644 index 0000000..7c95346 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/Token.java @@ -0,0 +1,58 @@ +package io.rapidpro.surveyor.net.responses; + +import android.net.UrlQuerySanitizer; + +public class Token { + private String token; + private OrgReference org; + + public Token() { + } + + private Token(String token, OrgReference org) { + this.token = token; + this.org = org; + } + + public static Token fromUrl(String url) { + UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url); + String token = sanitizer.getValue("token"); + String orgName = sanitizer.getValue("org"); + String orgUuid = sanitizer.getValue("uuid"); + + return new Token(token, new OrgReference(orgUuid, orgName)); + } + + public String getToken() { + return token; + } + + public OrgReference getOrg() { + return org; + } + + public void setOrg(OrgReference org) { + this.org = org; + } + + public static class OrgReference { + private String uuid; + private String name; + + public OrgReference() { + } + + private OrgReference(String uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public String getUuid() { + return uuid; + } + + public String getName() { + return name; + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/net/responses/TokenResults.java b/app/src/main/java/io/rapidpro/surveyor/net/responses/TokenResults.java new file mode 100644 index 0000000..bbe0e42 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/net/responses/TokenResults.java @@ -0,0 +1,25 @@ +package io.rapidpro.surveyor.net.responses; + +import java.util.List; + +public class TokenResults { + + private List tokens; + + public List getTokens() { + return tokens; + } + + /** + * Gets the tokens as a simple array of token strings + * + * @return the array of tokens + */ + public String[] toRawTokens() { + String[] raw = new String[this.tokens.size()]; + for (int t = 0; t < this.tokens.size(); t++) { + raw[t] = this.tokens.get(t).getToken(); + } + return raw; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/task/FetchOrgsTask.java b/app/src/main/java/io/rapidpro/surveyor/task/FetchOrgsTask.java new file mode 100644 index 0000000..d8f06ba --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/task/FetchOrgsTask.java @@ -0,0 +1,67 @@ +package io.rapidpro.surveyor.task; + +import android.os.AsyncTask; + +import java.util.HashSet; +import java.util.Set; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.SurveyorApplication; +import io.rapidpro.surveyor.data.Org; +import io.rapidpro.surveyor.data.OrgService; +import io.rapidpro.surveyor.net.responses.Token; + +/** + * Task to fetch orgs from RapidPro, create their directories, save their details, and return their UUIDs + */ +public class FetchOrgsTask extends AsyncTask> { + + private Listener listener; + private boolean failed; + + public FetchOrgsTask(Listener listener) { + this.listener = listener; + } + + @Override + protected Set doInBackground(Token... tokens) { + OrgService svc = SurveyorApplication.get().getOrgService(); + + Set orgs = new HashSet<>(); + Set orgUUIDs = new HashSet<>(); + + for (Token token : tokens) { + try { + Org org = svc.getOrFetch(token.getOrg().getUuid(), token.getOrg().getName(), token.getToken()); + + orgs.add(org); + orgUUIDs.add(org.getUuid()); + + Logger.d("Fetched org with UUID " + org.getUuid()); + } catch (Exception e) { + Logger.e("Unable to fetch org", e); + this.failed = true; + break; + } + } + + return orgUUIDs; + } + + @Override + protected void onPostExecute(Set orgUUIDs) { + super.onPostExecute(orgUUIDs); + + if (this.failed) { + this.listener.onFailure(); + } else { + this.listener.onComplete(orgUUIDs); + } + } + + public interface Listener { + void onComplete(Set orgUUIDs); + + void onFailure(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/task/RefreshOrgTask.java b/app/src/main/java/io/rapidpro/surveyor/task/RefreshOrgTask.java new file mode 100644 index 0000000..37a0c0f --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/task/RefreshOrgTask.java @@ -0,0 +1,78 @@ +package io.rapidpro.surveyor.task; + +import android.os.AsyncTask; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.data.Org; + +/** + * Task to completely refresh a single org - details and assets + */ +public class RefreshOrgTask extends AsyncTask { + + private Listener listener; + private boolean failed; + + public RefreshOrgTask(Listener listener) { + this.listener = listener; + } + + @Override + protected Void doInBackground(Org... args) { + Org org = args[0]; + + try { + org.refresh(true, new Org.RefreshProgress() { + @Override + public void reportProgress(int percent) { + publishProgress(percent); + } + + @Override + public void reportMessage(String message) { + listener.onMessage(message); + } + }); + + } catch (Exception e) { + Logger.e("Unable to refresh org", e); + this.failed = true; + } + + return null; + } + + /** + * @see AsyncTask#onProgressUpdate(Object[]) + */ + @Override + protected void onProgressUpdate(Integer... values) { + super.onProgressUpdate(values); + + listener.onProgress(values[0]); + } + + /** + * @see AsyncTask#onPostExecute(Object) + */ + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + + if (this.failed) { + this.listener.onFailure(); + } else { + this.listener.onComplete(); + } + } + + public interface Listener { + void onProgress(int percent); + + void onMessage(String message); + + void onComplete(); + + void onFailure(); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/task/SubmitSubmissionsTask.java b/app/src/main/java/io/rapidpro/surveyor/task/SubmitSubmissionsTask.java new file mode 100644 index 0000000..e0900ba --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/task/SubmitSubmissionsTask.java @@ -0,0 +1,74 @@ +package io.rapidpro.surveyor.task; + +import android.os.AsyncTask; + +import java.io.IOException; + +import io.rapidpro.surveyor.Logger; +import io.rapidpro.surveyor.data.Submission; +import io.rapidpro.surveyor.net.TembaException; + +/** + * Task for sending submissions to the server + */ +public class SubmitSubmissionsTask extends AsyncTask { + + private Listener listener; + private int numFailed = 0; + + public SubmitSubmissionsTask(Listener listener) { + this.listener = listener; + } + + @Override + protected Integer doInBackground(Submission... submissions) { + int total = submissions.length; + + int s = 0; + for (Submission submission : submissions) { + try { + submission.submit(); + } catch (IOException | TembaException e) { + Logger.e("Unable to send submission", e); + numFailed++; + } + + s++; + publishProgress(100 * s / total); + } + + return total; + } + + /** + * @see AsyncTask#onProgressUpdate(Object[]) + */ + @Override + protected void onProgressUpdate(Integer... values) { + super.onProgressUpdate(values); + + listener.onProgress(values[0]); + } + + /** + * @see AsyncTask#onPostExecute(Object) + */ + @Override + protected void onPostExecute(Integer total) { + super.onPostExecute(total); + + if (numFailed > 0) { + this.listener.onFailure(numFailed); + } else { + this.listener.onComplete(total); + } + } + + public interface Listener { + void onProgress(int percent); + + void onComplete(int total); + + void onFailure(int numFailed); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/AutoFitTextureView.java b/app/src/main/java/io/rapidpro/surveyor/ui/AutoFitTextureView.java new file mode 100644 index 0000000..a7b033d --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/AutoFitTextureView.java @@ -0,0 +1,60 @@ +package io.rapidpro.surveyor.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.TextureView; + +/** + * A {@link TextureView} that can be adjusted to a specified aspect ratio. + */ +public class AutoFitTextureView extends TextureView { + + private int mRatioWidth = 0; + private int mRatioHeight = 0; + + public AutoFitTextureView(Context context) { + this(context, null); + } + + public AutoFitTextureView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio + * calculated from the parameters. Note that the actual sizes of parameters don't matter, that + * is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result. + * + * @param width Relative horizontal size + * @param height Relative vertical size + */ + public void setAspectRatio(int width, int height) { + if (width < 0 || height < 0) { + throw new IllegalArgumentException("Size cannot be negative."); + } + mRatioWidth = width; + mRatioHeight = height; + requestLayout(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (0 == mRatioWidth || 0 == mRatioHeight) { + setMeasuredDimension(width, height); + } else { + if (width < height * mRatioWidth / mRatioHeight) { + setMeasuredDimension(width, width * mRatioHeight / mRatioWidth); + } else { + setMeasuredDimension(height * mRatioWidth / mRatioHeight, height); + } + } + } + +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/BlockingProgress.java b/app/src/main/java/io/rapidpro/surveyor/ui/BlockingProgress.java new file mode 100644 index 0000000..981621c --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/BlockingProgress.java @@ -0,0 +1,27 @@ +package io.rapidpro.surveyor.ui; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; + +/** + * A blocking progress dialog + */ +public class BlockingProgress extends ProgressDialog { + + public BlockingProgress(Context context, int title, int message) { + super(context); + + setTitle(title); + setMessage(getContext().getString(message)); + setIndeterminate(false); + setCancelable(false); + setCanceledOnTouchOutside(false); + setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", (dialog, which) -> { + dismiss(); + }); + setProgress(0); + setMax(100); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/CachedLinearLayout.java b/app/src/main/java/io/rapidpro/surveyor/ui/CachedLinearLayout.java new file mode 100644 index 0000000..113f59f --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/CachedLinearLayout.java @@ -0,0 +1,61 @@ +package io.rapidpro.surveyor.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.cardview.widget.CardView; + +/** + * LinearLayout with a ViewCache + */ +public class CachedLinearLayout extends LinearLayout { + + private ViewCache m_cache; + + public CachedLinearLayout(Context context) { + super(context); + init(); + } + + public CachedLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public CachedLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + protected void init() { + m_cache = new ViewCache(getContext(), this); + } + + public TextView getTextView(int id) { + return m_cache.getTextView(id); + } + + public CardView getCardView(int id) { + return m_cache.getCardView(id); + } + + public ImageView getImageView(int id) { + return m_cache.getImageView(id); + } + + public View getView(int id) { + return m_cache.getView(id); + } + + public void hide(int id) { + m_cache.hide(id); + } + + public void show(int id) { + m_cache.show(id); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/CameraPreview.java b/app/src/main/java/io/rapidpro/surveyor/ui/CameraPreview.java new file mode 100644 index 0000000..1727905 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/CameraPreview.java @@ -0,0 +1,126 @@ +package io.rapidpro.surveyor.ui; + +import android.app.Activity; +import android.content.Context; +import android.hardware.Camera; +import android.hardware.SensorManager; +import android.util.Log; +import android.view.Display; +import android.view.OrientationEventListener; +import android.view.Surface; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.WindowManager; + +import java.io.IOException; + +import io.rapidpro.surveyor.Logger; + +public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { + private SurfaceHolder m_surfaceHolder; + private Camera m_camera; + private int m_cameraId; + private Activity m_activity; + private boolean m_initialized; + private int m_lastRotation; + + public CameraPreview(Activity context) { + super(context); + m_activity = context; + } + + public void init() { + if (!m_initialized) { + m_surfaceHolder = getHolder(); + m_surfaceHolder.addCallback(this); + m_initialized = true; + + final WindowManager windowManager = (WindowManager) m_activity.getSystemService(Context.WINDOW_SERVICE); + m_lastRotation = -1; + + // Half rotations will change the layout from portrait to landscape and vice-versa. However, + // this won't account for 180 degree rotations since they remain in the same configuration. We + // need to listen for 180 orientation changes and update our camera orientation accordingly as well. + OrientationEventListener orientationEventListener = new OrientationEventListener(m_activity, SensorManager.SENSOR_DELAY_NORMAL) { + @Override + public void onOrientationChanged(int orientation) { + + Display display = windowManager.getDefaultDisplay(); + int rotation = display.getRotation(); + if ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && rotation != m_lastRotation) { + try { + updateOrientation(); + } catch (Exception e) { + } + m_lastRotation = rotation; + } + } + }; + + if (orientationEventListener.canDetectOrientation()) { + orientationEventListener.enable(); + } + } + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + try { + // create the surface and start camera preview + if (m_camera != null) { + m_camera.setDisplayOrientation(CameraUtil.getRotationDegrees(m_activity, m_cameraId, true)); + m_camera.setPreviewDisplay(holder); + m_camera.startPreview(); + } + } catch (IOException e) { + Log.d(VIEW_LOG_TAG, "Error setting camera preview: " + e.getMessage()); + } + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { + // inform the camera of our current orientation + updateOrientation(); + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + m_camera.release(); + } + + private void updateOrientation() { + m_camera.setDisplayOrientation(CameraUtil.getRotationDegrees(m_activity, m_cameraId, true)); + } + + /** + * Refresh the camera according to it's properties. Use for toggling between + * front and rear cameras + */ + public void refreshCamera(Camera camera, int cameraId) { + + if (m_surfaceHolder.getSurface() == null) { + return; + } + + if (m_camera != null) { + try { + m_camera.stopPreview(); + } catch (Exception e) { + // we may already be released + } + } + + m_camera = camera; + m_cameraId = cameraId; + + m_camera.setDisplayOrientation(CameraUtil.getRotationDegrees(m_activity, m_cameraId, true)); + + try { + m_camera.setPreviewDisplay(m_surfaceHolder); + m_camera.startPreview(); + } catch (Exception e) { + Logger.e("Error starting camera preview", e); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/CameraUtil.java b/app/src/main/java/io/rapidpro/surveyor/ui/CameraUtil.java new file mode 100644 index 0000000..fbd1e04 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/CameraUtil.java @@ -0,0 +1,52 @@ +package io.rapidpro.surveyor.ui; + +import android.app.Activity; +import android.hardware.Camera; +import android.view.Surface; + +/** + * Utility methods for dealing with camera. + */ +public class CameraUtil { + + /** + * Determine the rotation to apply for the preview for a given camera + * + * @param mirror whether to account for profile camera mirroring or not + */ + public static int getRotationDegrees(Activity activity, int cameraId, boolean mirror) { + int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); + int degrees = 0; + + switch (rotation) { + case Surface.ROTATION_0: + degrees = 0; + break; + case Surface.ROTATION_90: + degrees = 90; + break; + case Surface.ROTATION_180: + degrees = 180; + break; + case Surface.ROTATION_270: + degrees = 270; + break; + } + + android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); + android.hardware.Camera.getCameraInfo(cameraId, info); + + if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + + degrees = (info.orientation + degrees) % 360; + // compensate for mirrored image, useful for previews on front facing cameras + if (mirror) { + degrees = (360 - degrees) % 360; + } + } else { + degrees = (info.orientation - degrees + 360) % 360; + } + + return degrees; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/IconTextView.java b/app/src/main/java/io/rapidpro/surveyor/ui/IconTextView.java new file mode 100644 index 0000000..77bf5c7 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/IconTextView.java @@ -0,0 +1,16 @@ +package io.rapidpro.surveyor.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.TextView; + +public class IconTextView extends TextView { + public IconTextView(Context context, AttributeSet attrs) { + super(context, attrs); + setTypeface(Typefaces.get(getContext(), "material.ttf")); + } + + public void setIconColor(int color) { + setTextColor(getResources().getColor(color)); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/Typefaces.java b/app/src/main/java/io/rapidpro/surveyor/ui/Typefaces.java new file mode 100644 index 0000000..6548bab --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/Typefaces.java @@ -0,0 +1,46 @@ +/* + * RapidPro Android Channel - Relay SMS messages where MNO connections aren't practical. + * Copyright (C) 2014 Nyaruka, UNICEF + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.rapidpro.surveyor.ui; + +import android.content.Context; +import android.graphics.Typeface; + +import java.util.Hashtable; + +import io.rapidpro.surveyor.Logger; + +public class Typefaces { + + private static final Hashtable s_fontCache = new Hashtable(); + + public static Typeface get(Context c, String assetPath) { + synchronized (s_fontCache) { + if (!s_fontCache.containsKey(assetPath)) { + try { + Typeface t = Typeface.createFromAsset(c.getAssets(), assetPath); + s_fontCache.put(assetPath, t); + } catch (Exception e) { + Logger.e("Could not get typeface '" + assetPath + "' because " + e.getMessage(), e); + return null; + } + } + return s_fontCache.get(assetPath); + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/ui/ViewCache.java b/app/src/main/java/io/rapidpro/surveyor/ui/ViewCache.java new file mode 100644 index 0000000..a3d8451 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/ui/ViewCache.java @@ -0,0 +1,140 @@ +package io.rapidpro.surveyor.ui; + +import android.content.Context; +import android.util.SparseArray; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.Spinner; +import android.widget.TextView; + +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; + +/** + * Simple cache management for view lookups + */ +public class ViewCache { + + private SparseArray m_cache; + private View m_parent; + private Context m_context; + + public ViewCache(Context context, View parent) { + m_cache = new SparseArray<>(); + m_parent = parent; + m_context = context; + } + + private View getCachedView(int id) { + View view = m_cache.get(id); + if (view == null) { + view = m_parent.findViewById(id); + m_cache.put(id, view); + } + return view; + + } + + public TextView getTextView(int id) { + return (TextView) getCachedView(id); + } + + public CardView getCardView(int id) { + return (CardView) getCachedView(id); + } + + public ImageView getImageView(int id) { + return (ImageView) getCachedView(id); + } + + public Object getSelectedItem(int id) { + return ((Spinner) getCachedView(id)).getSelectedItem(); + } + + public String getText(int id) { + return getTextView(id).getText().toString().trim(); + } + + public void setError(int id, int errorMessage) { + getTextView(id).setError(m_parent.getContext().getString(errorMessage)); + } + + public void clearError(int id) { + getTextView(id).setError(null); + } + + public String getRequiredText(int id) { + clearError(id); + String text = getText(id); + if (text.length() == 0) { + setError(id, R.string.error_field_required); + return null; + } + return text; + } + + public void hide(int id) { + hide(id, false); + } + + public void hide(int id, boolean hideKeyboard) { + View view = getCachedView(id); + view.setVisibility(View.GONE); + + if (hideKeyboard) { + InputMethodManager imm = (InputMethodManager) m_context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + public void show(int id) { + getCachedView(id).setVisibility(View.VISIBLE); + } + + public void setText(int id, String text) { + getTextView(id).setText(text); + } + + public void setVisible(int id, boolean visible) { + View view = getCachedView(id); + if (view != null) { + if (visible) { + view.setVisibility(View.VISIBLE); + } else { + view.setVisibility(View.GONE); + } + } + } + + public ListView getListView(int id) { + return (ListView) getCachedView(id); + } + + public ListAdapter getListViewAdapter(int list) { + ListView listView = getListView(list); + if (listView != null) { + return listView.getAdapter(); + } + return null; + } + + public Button getButton(int id) { + return (Button) getCachedView(id); + } + + public void setButtonText(int id, String text) { + Button button = getButton(id); + if (button != null) { + button.setText(text); + } + } + + public View getView(int id) { + return getCachedView(id); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/utils/ImageUtils.java b/app/src/main/java/io/rapidpro/surveyor/utils/ImageUtils.java new file mode 100644 index 0000000..feebe48 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/utils/ImageUtils.java @@ -0,0 +1,85 @@ +package io.rapidpro.surveyor.utils; + +import android.graphics.Bitmap; +import android.graphics.Matrix; +import androidx.exifinterface.media.ExifInterface; +import io.rapidpro.surveyor.Logger; + +import android.media.ThumbnailUtils; +import android.provider.MediaStore; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; + +public class ImageUtils { + + /** + * Encodes the given bitmap as a JPEG + * @param bm the bitmap + * @return the JSON data + */ + public static byte[] convertToJPEG(Bitmap bm) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + bm.compress(Bitmap.CompressFormat.JPEG, 80, baos); + return baos.toByteArray(); + } + + /** + * Scales a bitmap so that it's longest dimension is provided value + */ + public static Bitmap scaleToMax(Bitmap bitmap, int max) { + + // landscape photos + if (bitmap.getWidth() > bitmap.getHeight()) { + double ratio = (double) max / (double) bitmap.getWidth(); + return Bitmap.createScaledBitmap(bitmap, max, (int) ((double) bitmap.getHeight() * ratio), false); + + } else { + double ratio = (double) max / (double) bitmap.getHeight(); + return Bitmap.createScaledBitmap(bitmap, (int) ((double) bitmap.getWidth() * ratio), max, false); + } + } + + /** + * Rotates a bitmap by the given number of degrees + */ + public static Bitmap rotateImage(Bitmap img, int degrees) { + Matrix matrix = new Matrix(); + matrix.postRotate(degrees); + Bitmap rotatedImg = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true); + img.recycle(); + return rotatedImg; + } + + /** + * Gets the EXIF orientation (if set) in degrees + */ + public static int getExifRotation(String path) { + try { + ExifInterface exif = new ExifInterface(path); + int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + return 90; + case ExifInterface.ORIENTATION_ROTATE_180: + return 180; + case ExifInterface.ORIENTATION_ROTATE_270: + return 270; + } + } catch (IOException e) { + Logger.d("Unable to read EXIF data from " + path); + } + return 0; + } + + /** + * Creates a thumbnail image from the given video file + * + * @param video the video file + * @return the thumbnail bitmap + */ + public static Bitmap thumbnailFromVideo(File video) { + return ThumbnailUtils.createVideoThumbnail(video.getAbsolutePath(), MediaStore.Images.Thumbnails.MINI_KIND); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/utils/JsonUtils.java b/app/src/main/java/io/rapidpro/surveyor/utils/JsonUtils.java new file mode 100644 index 0000000..edd7533 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/utils/JsonUtils.java @@ -0,0 +1,30 @@ +package io.rapidpro.surveyor.utils; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; + +public class JsonUtils { + private static Gson s_gson = new GsonBuilder() + //.setPrettyPrinting() + .registerTypeAdapter(RawJson.class, new RawJson.Adapter()) + .create(); + + public static Gson getGson() { + return s_gson; + } + + public static String marshal(Object src) { + return s_gson.toJson(src); + } + + public static T unmarshal(String json, Class clazz) { + return s_gson.fromJson(json, clazz); + } + + public static T unmarshal(String json, TypeToken type) { + return s_gson.fromJson(json, type.getType()); + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/utils/RawJson.java b/app/src/main/java/io/rapidpro/surveyor/utils/RawJson.java new file mode 100644 index 0000000..a6a3222 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/utils/RawJson.java @@ -0,0 +1,44 @@ +package io.rapidpro.surveyor.utils; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; + +/** + * Custom data type for fields which hold raw JSON + */ +public class RawJson { + private String data; + + public RawJson(String data) { + this.data = data; + } + + @Override + public String toString() { + return this.data; + } + + /** + * Type adapter to tell Gson how to use fields of this type + */ + public static class Adapter extends TypeAdapter { + @Override + public void write(JsonWriter out, RawJson value) throws IOException { + out.jsonValue(value.toString()); + } + + @Override + public RawJson read(JsonReader in) throws IOException { + // TODO ideally this wouldn't parse the entire tree into memory + // see https://github.com/google/gson/issues/1368 + JsonElement parsed = new JsonParser().parse(in); + + return new RawJson(parsed.toString()); + } + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/utils/SurveyUtils.java b/app/src/main/java/io/rapidpro/surveyor/utils/SurveyUtils.java new file mode 100644 index 0000000..8112d70 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/utils/SurveyUtils.java @@ -0,0 +1,29 @@ +package io.rapidpro.surveyor.utils; + +import java.io.File; +import java.io.IOException; + +/** + * Misc utils + */ +public class SurveyUtils { + /** + * Creates a nested directory + * + * @param root the root directory + * @param folders the nested directory names + * @return the directory + * @throws IOException if any directory couldn't be created + */ + public static File mkdir(File root, String... folders) throws IOException { + File current = root; + for (String folder : folders) { + current = new File(current, folder); + + if (!current.exists() && !current.mkdirs()) { + throw new IOException("Unable to create directory: " + current.getAbsolutePath()); + } + } + return current; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/widget/ChatBubbleView.java b/app/src/main/java/io/rapidpro/surveyor/widget/ChatBubbleView.java new file mode 100644 index 0000000..286cc1a --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/widget/ChatBubbleView.java @@ -0,0 +1,112 @@ +package io.rapidpro.surveyor.widget; + +import android.content.Context; +import android.graphics.Bitmap; +import android.text.method.LinkMovementMethod; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.cardview.widget.CardView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.ui.CachedLinearLayout; +import io.rapidpro.surveyor.ui.IconTextView; + +/** + * Represents a chat bubble for either inbound or + * outbound messages + */ +public class ChatBubbleView extends CachedLinearLayout { + + public ChatBubbleView(Context context) { + super(context); + init(); + } + + public ChatBubbleView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ChatBubbleView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + /** + * Set the message to show in our chat bubble + * + * @param inbound true if it is coming from the flow engine + * @param text the message to set on the view + */ + public void setMessage(String text, boolean inbound) { + TextView tv = getTextView(R.id.text_message); + tv.setText(text); + tv.setMovementMethod(LinkMovementMethod.getInstance()); + + if (!inbound) { + tv.setBackground(getResources().getDrawable(R.drawable.chat_bubble_out)); + tv.setTextColor(getResources().getColor(R.color.black)); + } + + addView(getSpacer(), inbound ? 1 : 0); + } + + public void setThumbnail(Bitmap image, String url, int type) { + ImageView imageView = getImageView(R.id.thumbnail); + + if (image != null) { + imageView.setImageBitmap(image); + } else { + + } + + View mediaView = getView(R.id.media_view); + mediaView.setVisibility(VISIBLE); + + mediaView.setTag(R.string.tag_url, url); + mediaView.setTag(R.string.tag_media_type, type); + + if (type == R.string.media_image) { + getTextView(R.id.media_icon).setText(R.string.icon_photo); + } else if (type == R.string.media_video) { + getTextView(R.id.media_icon).setText(R.string.icon_play_arrow); + } else if (type == R.string.media_audio || type == R.string.media_location) { + IconTextView iconView = (IconTextView) getTextView(R.id.media_icon); + + if (type == R.string.media_audio) { + iconView.setText(R.string.icon_volume_up); + } else { + iconView.setText(R.string.icon_place); + } + + iconView.setIconColor(R.color.primary_lightest); + getView(R.id.media_view).setBackground(null); + final float scale = getContext().getResources().getDisplayMetrics().density; + int pixels = (int) (70 * scale + 0.5f); + ViewGroup.LayoutParams params = mediaView.getLayoutParams(); + params.height = pixels; + mediaView.setLayoutParams(params); + } + + show(R.id.media_view); + hide(R.id.text_message); + hide(R.id.spacer); + } + + /** + * Find and remove our spacer from the current layout + */ + private View getSpacer() { + + // remove our spacer if it's in there + View spacer = findViewById(R.id.spacer); + if (spacer != null) { + removeView(spacer); + } + return spacer; + } +} diff --git a/app/src/main/java/io/rapidpro/surveyor/widget/IconLinkView.java b/app/src/main/java/io/rapidpro/surveyor/widget/IconLinkView.java new file mode 100644 index 0000000..437ec71 --- /dev/null +++ b/app/src/main/java/io/rapidpro/surveyor/widget/IconLinkView.java @@ -0,0 +1,51 @@ +package io.rapidpro.surveyor.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import io.rapidpro.surveyor.R; +import io.rapidpro.surveyor.ui.CachedLinearLayout; +import io.rapidpro.surveyor.ui.IconTextView; + + +public class IconLinkView extends CachedLinearLayout { + + public IconLinkView(Context context) { + super(context); + init(); + } + + public IconLinkView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public IconLinkView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + protected void init() { + super.init(); + } + + public void initialize(String message, int type, String url) { + + View bubble = getView(R.id.chat_bubble); + bubble.setTag(R.string.tag_url, url); + bubble.setTag(R.string.tag_media_type, type); + + TextView tv = getTextView(R.id.text_message); + tv.setText(message); + + IconTextView iconView = (IconTextView) getTextView(R.id.media_icon); + + if (type == R.string.media_audio) { + iconView.setText(R.string.icon_volume_up); + } else if (type == R.string.media_location) { + iconView.setText(R.string.icon_place); + } + } +} diff --git a/app/src/main/res/anim/in_from_left.xml b/app/src/main/res/anim/in_from_left.xml new file mode 100644 index 0000000..4bd4380 --- /dev/null +++ b/app/src/main/res/anim/in_from_left.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/in_from_right.xml b/app/src/main/res/anim/in_from_right.xml new file mode 100644 index 0000000..b5e4023 --- /dev/null +++ b/app/src/main/res/anim/in_from_right.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/out_to_left.xml b/app/src/main/res/anim/out_to_left.xml new file mode 100644 index 0000000..0fe7231 --- /dev/null +++ b/app/src/main/res/anim/out_to_left.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/out_to_right.xml b/app/src/main/res/anim/out_to_right.xml new file mode 100644 index 0000000..8dc809f --- /dev/null +++ b/app/src/main/res/anim/out_to_right.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png new file mode 100644 index 0000000..236bff5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_action_info.png b/app/src/main/res/drawable-hdpi/ic_action_info.png new file mode 100644 index 0000000..32bd1aa Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_info.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_archive_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_archive_black_24dp.png new file mode 100644 index 0000000..94d0646 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_archive_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_archive_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_archive_white_24dp.png new file mode 100644 index 0000000..bb72e89 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_archive_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_cloud_download_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..4c5d2d0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_cloud_download_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png new file mode 100644 index 0000000..c59f601 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..665ab23 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-hdpi/icon1.png b/app/src/main/res/drawable-hdpi/icon1.png new file mode 100644 index 0000000..8fee08b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon1.png differ diff --git a/app/src/main/res/drawable-hdpi/sound_off.png b/app/src/main/res/drawable-hdpi/sound_off.png new file mode 100644 index 0000000..edad405 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sound_off.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-hdpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..41a1266 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_back_button.png b/app/src/main/res/drawable-hdpi/v1_back_button.png new file mode 100644 index 0000000..06b801b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-hdpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..c6a6a54 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_map_top.png b/app/src/main/res/drawable-hdpi/v1_bg_map_top.png new file mode 100644 index 0000000..84e0acb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_shade_results.png b/app/src/main/res/drawable-hdpi/v1_bg_shade_results.png new file mode 100644 index 0000000..b0f5ec5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-hdpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..2f16999 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-hdpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..393a06d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-hdpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..556696e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_star.png b/app/src/main/res/drawable-hdpi/v1_bg_star.png new file mode 100644 index 0000000..33e2b6b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_bg_sun.png b/app/src/main/res/drawable-hdpi/v1_bg_sun.png new file mode 100644 index 0000000..49a33f7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_header_image_opinion.png b/app/src/main/res/drawable-hdpi/v1_header_image_opinion.png new file mode 100644 index 0000000..519d011 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_header_image_results.png b/app/src/main/res/drawable-hdpi/v1_header_image_results.png new file mode 100644 index 0000000..7093364 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_header_image_settings.png b/app/src/main/res/drawable-hdpi/v1_header_image_settings.png new file mode 100644 index 0000000..1bb640e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_header_image_stories.png b/app/src/main/res/drawable-hdpi/v1_header_image_stories.png new file mode 100644 index 0000000..dcd7c7f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_cancel.png b/app/src/main/res/drawable-hdpi/v1_icon_cancel.png new file mode 100644 index 0000000..435d37f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_logout.png b/app/src/main/res/drawable-hdpi/v1_icon_logout.png new file mode 100644 index 0000000..0a8533b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_message_send.png b/app/src/main/res/drawable-hdpi/v1_icon_message_send.png new file mode 100644 index 0000000..9823877 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_opinion.png b/app/src/main/res/drawable-hdpi/v1_icon_opinion.png new file mode 100644 index 0000000..cebce65 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_password.png b/app/src/main/res/drawable-hdpi/v1_icon_password.png new file mode 100644 index 0000000..b36df73 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_results.png b/app/src/main/res/drawable-hdpi/v1_icon_results.png new file mode 100644 index 0000000..4f63ec7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_settings.png b/app/src/main/res/drawable-hdpi/v1_icon_settings.png new file mode 100644 index 0000000..1cee93f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_signin.png b/app/src/main/res/drawable-hdpi/v1_icon_signin.png new file mode 100644 index 0000000..fc7e96b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_start.png b/app/src/main/res/drawable-hdpi/v1_icon_start.png new file mode 100644 index 0000000..435d37f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_stories.png b/app/src/main/res/drawable-hdpi/v1_icon_stories.png new file mode 100644 index 0000000..c3e00c7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_sync.png b/app/src/main/res/drawable-hdpi/v1_icon_sync.png new file mode 100644 index 0000000..b01e470 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..67ee280 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..a5c0df1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_icon_username.png b/app/src/main/res/drawable-hdpi/v1_icon_username.png new file mode 100644 index 0000000..fb76bb1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_item_opinion.png b/app/src/main/res/drawable-hdpi/v1_item_opinion.png new file mode 100644 index 0000000..ea907fe Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_item_opinion_category.png b/app/src/main/res/drawable-hdpi/v1_item_opinion_category.png new file mode 100644 index 0000000..450a56c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-hdpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..805e53b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-hdpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..52e8d4c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_login_bg_top.png b/app/src/main/res/drawable-hdpi/v1_login_bg_top.png new file mode 100644 index 0000000..42b20d7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-hdpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..972cd7a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_main_bg_top.png b/app/src/main/res/drawable-hdpi/v1_main_bg_top.png new file mode 100644 index 0000000..8f77054 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_org_icon.png b/app/src/main/res/drawable-hdpi/v1_org_icon.png new file mode 100644 index 0000000..c056a5b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_retry_small.png b/app/src/main/res/drawable-hdpi/v1_retry_small.png new file mode 100644 index 0000000..077c416 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_bg.png b/app/src/main/res/drawable-hdpi/v1_splash_bg.png new file mode 100644 index 0000000..a6f63be Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_bottom.png b/app/src/main/res/drawable-hdpi/v1_splash_bottom.png new file mode 100644 index 0000000..b8af647 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_footer_left.png b/app/src/main/res/drawable-hdpi/v1_splash_footer_left.png new file mode 100644 index 0000000..1fc21f6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_footer_right.png b/app/src/main/res/drawable-hdpi/v1_splash_footer_right.png new file mode 100644 index 0000000..a4ac740 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_logo.png b/app/src/main/res/drawable-hdpi/v1_splash_logo.png new file mode 100644 index 0000000..8a9d426 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-hdpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..855871f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_top.png b/app/src/main/res/drawable-hdpi/v1_splash_top.png new file mode 100644 index 0000000..c33006a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_splash_top_right.png b/app/src/main/res/drawable-hdpi/v1_splash_top_right.png new file mode 100644 index 0000000..af26c38 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_start_survey_icon.png b/app/src/main/res/drawable-hdpi/v1_start_survey_icon.png new file mode 100644 index 0000000..1aed606 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_update_app.png b/app/src/main/res/drawable-hdpi/v1_update_app.png new file mode 100644 index 0000000..515ac21 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_ureport_category.png b/app/src/main/res/drawable-hdpi/v1_ureport_category.png new file mode 100644 index 0000000..450a56c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_ureport_icon.png b/app/src/main/res/drawable-hdpi/v1_ureport_icon.png new file mode 100644 index 0000000..9643b66 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-hdpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..d05deca Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-hdpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..7ff1d29 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_ureport_splash.png b/app/src/main/res/drawable-hdpi/v1_ureport_splash.png new file mode 100644 index 0000000..e322aaf Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-hdpi/v1_video_thumbnail.png b/app/src/main/res/drawable-hdpi/v1_video_thumbnail.png new file mode 100644 index 0000000..2bc610f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_alpha_bar.png b/app/src/main/res/drawable-hdpi/v3_alpha_bar.png new file mode 100644 index 0000000..48bf643 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_back_arrow.png b/app/src/main/res/drawable-hdpi/v3_back_arrow.png new file mode 100644 index 0000000..dfd72e4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_bg_green.png b/app/src/main/res/drawable-hdpi/v3_bg_green.png new file mode 100644 index 0000000..fc849ff Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_bg_green.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_button_settings.png b/app/src/main/res/drawable-hdpi/v3_button_settings.png new file mode 100644 index 0000000..004b725 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_button_stories.png b/app/src/main/res/drawable-hdpi/v3_button_stories.png new file mode 100644 index 0000000..fc84149 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_button_survey.png b/app/src/main/res/drawable-hdpi/v3_button_survey.png new file mode 100644 index 0000000..578ba67 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_button_ureport.png b/app/src/main/res/drawable-hdpi/v3_button_ureport.png new file mode 100644 index 0000000..804258c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_logout_icon.png b/app/src/main/res/drawable-hdpi/v3_logout_icon.png new file mode 100644 index 0000000..3074012 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_mail_icon.png b/app/src/main/res/drawable-hdpi/v3_mail_icon.png new file mode 100644 index 0000000..ac778a5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_menu_dot.png b/app/src/main/res/drawable-hdpi/v3_menu_dot.png new file mode 100644 index 0000000..e147be5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_password_icon.png b/app/src/main/res/drawable-hdpi/v3_password_icon.png new file mode 100644 index 0000000..6bbc575 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_riseup_logo.png b/app/src/main/res/drawable-hdpi/v3_riseup_logo.png new file mode 100644 index 0000000..fb7bee8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_send_icon.png b/app/src/main/res/drawable-hdpi/v3_send_icon.png new file mode 100644 index 0000000..f278a6f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_submit_icon.png b/app/src/main/res/drawable-hdpi/v3_submit_icon.png new file mode 100644 index 0000000..a9c8fdb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_text_speech_off.png b/app/src/main/res/drawable-hdpi/v3_text_speech_off.png new file mode 100644 index 0000000..54b7497 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_text_speech_on.png b/app/src/main/res/drawable-hdpi/v3_text_speech_on.png new file mode 100644 index 0000000..b73b273 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_unicef_logo.png b/app/src/main/res/drawable-hdpi/v3_unicef_logo.png new file mode 100644 index 0000000..6d59dc4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-hdpi/v3_ureport_arrow.png b/app/src/main/res/drawable-hdpi/v3_ureport_arrow.png new file mode 100644 index 0000000..833f333 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable-ldpi/icon1.png b/app/src/main/res/drawable-ldpi/icon1.png new file mode 100644 index 0000000..4159cca Binary files /dev/null and b/app/src/main/res/drawable-ldpi/icon1.png differ diff --git a/app/src/main/res/drawable-ldpi/sound_off.png b/app/src/main/res/drawable-ldpi/sound_off.png new file mode 100644 index 0000000..cc37946 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/sound_off.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-ldpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..5d8c8f3 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_back_button.png b/app/src/main/res/drawable-ldpi/v1_back_button.png new file mode 100644 index 0000000..247b2e4 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-ldpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..f1a79db Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_map_top.png b/app/src/main/res/drawable-ldpi/v1_bg_map_top.png new file mode 100644 index 0000000..a94bb1e Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_shade_results.png b/app/src/main/res/drawable-ldpi/v1_bg_shade_results.png new file mode 100644 index 0000000..c064451 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-ldpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..dd86ecb Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-ldpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..83c366a Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-ldpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..535a10f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_star.png b/app/src/main/res/drawable-ldpi/v1_bg_star.png new file mode 100644 index 0000000..af8ae00 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_bg_sun.png b/app/src/main/res/drawable-ldpi/v1_bg_sun.png new file mode 100644 index 0000000..c662fec Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_header_image_opinion.png b/app/src/main/res/drawable-ldpi/v1_header_image_opinion.png new file mode 100644 index 0000000..af5a555 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_header_image_results.png b/app/src/main/res/drawable-ldpi/v1_header_image_results.png new file mode 100644 index 0000000..f3d0e29 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_header_image_settings.png b/app/src/main/res/drawable-ldpi/v1_header_image_settings.png new file mode 100644 index 0000000..7608b1b Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_header_image_stories.png b/app/src/main/res/drawable-ldpi/v1_header_image_stories.png new file mode 100644 index 0000000..e4aec6b Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_cancel.png b/app/src/main/res/drawable-ldpi/v1_icon_cancel.png new file mode 100644 index 0000000..2343632 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_logout.png b/app/src/main/res/drawable-ldpi/v1_icon_logout.png new file mode 100644 index 0000000..4475c05 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_message_send.png b/app/src/main/res/drawable-ldpi/v1_icon_message_send.png new file mode 100644 index 0000000..51b80a4 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_opinion.png b/app/src/main/res/drawable-ldpi/v1_icon_opinion.png new file mode 100644 index 0000000..3941fa3 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_password.png b/app/src/main/res/drawable-ldpi/v1_icon_password.png new file mode 100644 index 0000000..4ad1f1f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_results.png b/app/src/main/res/drawable-ldpi/v1_icon_results.png new file mode 100644 index 0000000..729c4bf Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_settings.png b/app/src/main/res/drawable-ldpi/v1_icon_settings.png new file mode 100644 index 0000000..62abb1b Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_signin.png b/app/src/main/res/drawable-ldpi/v1_icon_signin.png new file mode 100644 index 0000000..a6d6a65 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_start.png b/app/src/main/res/drawable-ldpi/v1_icon_start.png new file mode 100644 index 0000000..2343632 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_stories.png b/app/src/main/res/drawable-ldpi/v1_icon_stories.png new file mode 100644 index 0000000..c5e4749 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_sync.png b/app/src/main/res/drawable-ldpi/v1_icon_sync.png new file mode 100644 index 0000000..93127f4 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..b5648cd Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..eee3600 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_icon_username.png b/app/src/main/res/drawable-ldpi/v1_icon_username.png new file mode 100644 index 0000000..760eadc Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_item_opinion.png b/app/src/main/res/drawable-ldpi/v1_item_opinion.png new file mode 100644 index 0000000..a483f1f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_item_opinion_category.png b/app/src/main/res/drawable-ldpi/v1_item_opinion_category.png new file mode 100644 index 0000000..3b96bd1 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-ldpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..b1ebdd0 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-ldpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..c35a0a0 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_login_bg_top.png b/app/src/main/res/drawable-ldpi/v1_login_bg_top.png new file mode 100644 index 0000000..dda9e04 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-ldpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..ee9245f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_main_bg_top.png b/app/src/main/res/drawable-ldpi/v1_main_bg_top.png new file mode 100644 index 0000000..383972c Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_org_icon.png b/app/src/main/res/drawable-ldpi/v1_org_icon.png new file mode 100644 index 0000000..97f8d5d Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_retry_small.png b/app/src/main/res/drawable-ldpi/v1_retry_small.png new file mode 100644 index 0000000..b2cb0e4 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_bg.png b/app/src/main/res/drawable-ldpi/v1_splash_bg.png new file mode 100644 index 0000000..cbe57ee Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_bottom.png b/app/src/main/res/drawable-ldpi/v1_splash_bottom.png new file mode 100644 index 0000000..93b4158 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_footer_left.png b/app/src/main/res/drawable-ldpi/v1_splash_footer_left.png new file mode 100644 index 0000000..ec20427 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_footer_right.png b/app/src/main/res/drawable-ldpi/v1_splash_footer_right.png new file mode 100644 index 0000000..b325c74 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_logo.png b/app/src/main/res/drawable-ldpi/v1_splash_logo.png new file mode 100644 index 0000000..22fc31c Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-ldpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..a2b70e6 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_top.png b/app/src/main/res/drawable-ldpi/v1_splash_top.png new file mode 100644 index 0000000..374402d Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_splash_top_right.png b/app/src/main/res/drawable-ldpi/v1_splash_top_right.png new file mode 100644 index 0000000..879b84d Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_start_survey_icon.png b/app/src/main/res/drawable-ldpi/v1_start_survey_icon.png new file mode 100644 index 0000000..31420d0 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_update_app.png b/app/src/main/res/drawable-ldpi/v1_update_app.png new file mode 100644 index 0000000..33f566a Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_ureport_category.png b/app/src/main/res/drawable-ldpi/v1_ureport_category.png new file mode 100644 index 0000000..3b96bd1 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_ureport_icon.png b/app/src/main/res/drawable-ldpi/v1_ureport_icon.png new file mode 100644 index 0000000..2a1906c Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-ldpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..1bff38c Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-ldpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..df1b738 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_ureport_splash.png b/app/src/main/res/drawable-ldpi/v1_ureport_splash.png new file mode 100644 index 0000000..a00654d Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-ldpi/v1_video_thumbnail.png b/app/src/main/res/drawable-ldpi/v1_video_thumbnail.png new file mode 100644 index 0000000..4fcdf13 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_alpha_bar.png b/app/src/main/res/drawable-ldpi/v3_alpha_bar.png new file mode 100644 index 0000000..f8f8623 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_back_arrow.png b/app/src/main/res/drawable-ldpi/v3_back_arrow.png new file mode 100644 index 0000000..5b43332 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_button_settings.png b/app/src/main/res/drawable-ldpi/v3_button_settings.png new file mode 100644 index 0000000..89f0832 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_button_stories.png b/app/src/main/res/drawable-ldpi/v3_button_stories.png new file mode 100644 index 0000000..128bc5f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_button_survey.png b/app/src/main/res/drawable-ldpi/v3_button_survey.png new file mode 100644 index 0000000..cbb6b07 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_button_ureport.png b/app/src/main/res/drawable-ldpi/v3_button_ureport.png new file mode 100644 index 0000000..c95c6c0 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_logout_icon.png b/app/src/main/res/drawable-ldpi/v3_logout_icon.png new file mode 100644 index 0000000..a977d54 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_mail_icon.png b/app/src/main/res/drawable-ldpi/v3_mail_icon.png new file mode 100644 index 0000000..0bf48a6 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_menu_dot.png b/app/src/main/res/drawable-ldpi/v3_menu_dot.png new file mode 100644 index 0000000..4e41b6b Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_password_icon.png b/app/src/main/res/drawable-ldpi/v3_password_icon.png new file mode 100644 index 0000000..fdf1031 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_riseup_logo.png b/app/src/main/res/drawable-ldpi/v3_riseup_logo.png new file mode 100644 index 0000000..4b22dc5 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_send_icon.png b/app/src/main/res/drawable-ldpi/v3_send_icon.png new file mode 100644 index 0000000..d8c7722 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_submit_icon.png b/app/src/main/res/drawable-ldpi/v3_submit_icon.png new file mode 100644 index 0000000..e621e58 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_text_speech_off.png b/app/src/main/res/drawable-ldpi/v3_text_speech_off.png new file mode 100644 index 0000000..aa98406 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_text_speech_on.png b/app/src/main/res/drawable-ldpi/v3_text_speech_on.png new file mode 100644 index 0000000..9099917 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_unicef_logo.png b/app/src/main/res/drawable-ldpi/v3_unicef_logo.png new file mode 100644 index 0000000..2946b9f Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-ldpi/v3_ureport_arrow.png b/app/src/main/res/drawable-ldpi/v3_ureport_arrow.png new file mode 100644 index 0000000..9439dcc Binary files /dev/null and b/app/src/main/res/drawable-ldpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable-mdpi/drawer_shadow.9.png b/app/src/main/res/drawable-mdpi/drawer_shadow.9.png new file mode 100644 index 0000000..ffe3a28 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_archive_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_archive_black_24dp.png new file mode 100644 index 0000000..bdcd478 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_archive_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_archive_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_archive_white_24dp.png new file mode 100644 index 0000000..f6aa3f9 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_archive_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_cloud_download_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..0c6978c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_cloud_download_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_drawer.png b/app/src/main/res/drawable-mdpi/ic_drawer.png new file mode 100644 index 0000000..1ed2c56 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..665ab23 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-mdpi/icon1.png b/app/src/main/res/drawable-mdpi/icon1.png new file mode 100644 index 0000000..8183339 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon1.png differ diff --git a/app/src/main/res/drawable-mdpi/primary_button.xml b/app/src/main/res/drawable-mdpi/primary_button.xml new file mode 100644 index 0000000..99d27ef --- /dev/null +++ b/app/src/main/res/drawable-mdpi/primary_button.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-mdpi/sound_off.png b/app/src/main/res/drawable-mdpi/sound_off.png new file mode 100644 index 0000000..a80964d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sound_off.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-mdpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..75b318f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_back_button.png b/app/src/main/res/drawable-mdpi/v1_back_button.png new file mode 100644 index 0000000..bb19b00 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-mdpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..6cd528c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_map_top.png b/app/src/main/res/drawable-mdpi/v1_bg_map_top.png new file mode 100644 index 0000000..070c451 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_shade_results.png b/app/src/main/res/drawable-mdpi/v1_bg_shade_results.png new file mode 100644 index 0000000..f5262ca Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-mdpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..5efb0d5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-mdpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..576daf2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-mdpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..2ccc197 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_star.png b/app/src/main/res/drawable-mdpi/v1_bg_star.png new file mode 100644 index 0000000..7684189 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_bg_sun.png b/app/src/main/res/drawable-mdpi/v1_bg_sun.png new file mode 100644 index 0000000..343b516 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_header_image_opinion.png b/app/src/main/res/drawable-mdpi/v1_header_image_opinion.png new file mode 100644 index 0000000..9e366da Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_header_image_results.png b/app/src/main/res/drawable-mdpi/v1_header_image_results.png new file mode 100644 index 0000000..b80a60b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_header_image_settings.png b/app/src/main/res/drawable-mdpi/v1_header_image_settings.png new file mode 100644 index 0000000..ea8ca84 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_header_image_stories.png b/app/src/main/res/drawable-mdpi/v1_header_image_stories.png new file mode 100644 index 0000000..1d21deb Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_cancel.png b/app/src/main/res/drawable-mdpi/v1_icon_cancel.png new file mode 100644 index 0000000..401d530 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_logout.png b/app/src/main/res/drawable-mdpi/v1_icon_logout.png new file mode 100644 index 0000000..c7bf338 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_message_send.png b/app/src/main/res/drawable-mdpi/v1_icon_message_send.png new file mode 100644 index 0000000..e5a26dc Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_opinion.png b/app/src/main/res/drawable-mdpi/v1_icon_opinion.png new file mode 100644 index 0000000..c9d472e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_password.png b/app/src/main/res/drawable-mdpi/v1_icon_password.png new file mode 100644 index 0000000..fa6cc93 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_results.png b/app/src/main/res/drawable-mdpi/v1_icon_results.png new file mode 100644 index 0000000..f5ba9d3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_settings.png b/app/src/main/res/drawable-mdpi/v1_icon_settings.png new file mode 100644 index 0000000..79fb6fa Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_signin.png b/app/src/main/res/drawable-mdpi/v1_icon_signin.png new file mode 100644 index 0000000..a53bd05 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_start.png b/app/src/main/res/drawable-mdpi/v1_icon_start.png new file mode 100644 index 0000000..401d530 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_stories.png b/app/src/main/res/drawable-mdpi/v1_icon_stories.png new file mode 100644 index 0000000..b8f588c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_sync.png b/app/src/main/res/drawable-mdpi/v1_icon_sync.png new file mode 100644 index 0000000..ba74682 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..87f6868 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..6890b27 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_icon_username.png b/app/src/main/res/drawable-mdpi/v1_icon_username.png new file mode 100644 index 0000000..ebbebc0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_item_opinion.png b/app/src/main/res/drawable-mdpi/v1_item_opinion.png new file mode 100644 index 0000000..d57501f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_item_opinion_category.png b/app/src/main/res/drawable-mdpi/v1_item_opinion_category.png new file mode 100644 index 0000000..a1801b8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-mdpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..d103aff Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-mdpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..7b514e4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_login_bg_top.png b/app/src/main/res/drawable-mdpi/v1_login_bg_top.png new file mode 100644 index 0000000..1287772 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-mdpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..eb172bd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_main_bg_top.png b/app/src/main/res/drawable-mdpi/v1_main_bg_top.png new file mode 100644 index 0000000..d5e647f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_org_icon.png b/app/src/main/res/drawable-mdpi/v1_org_icon.png new file mode 100644 index 0000000..85b86f4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_retry_small.png b/app/src/main/res/drawable-mdpi/v1_retry_small.png new file mode 100644 index 0000000..50c1c95 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_bg.png b/app/src/main/res/drawable-mdpi/v1_splash_bg.png new file mode 100644 index 0000000..e95170e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_bottom.png b/app/src/main/res/drawable-mdpi/v1_splash_bottom.png new file mode 100644 index 0000000..39a7e3f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_footer_left.png b/app/src/main/res/drawable-mdpi/v1_splash_footer_left.png new file mode 100644 index 0000000..425f6e8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_footer_right.png b/app/src/main/res/drawable-mdpi/v1_splash_footer_right.png new file mode 100644 index 0000000..7ba07d3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_logo.png b/app/src/main/res/drawable-mdpi/v1_splash_logo.png new file mode 100644 index 0000000..3e97785 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-mdpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..1386e65 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_top.png b/app/src/main/res/drawable-mdpi/v1_splash_top.png new file mode 100644 index 0000000..6ae70f1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_splash_top_right.png b/app/src/main/res/drawable-mdpi/v1_splash_top_right.png new file mode 100644 index 0000000..2831b65 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_start_survey_icon.png b/app/src/main/res/drawable-mdpi/v1_start_survey_icon.png new file mode 100644 index 0000000..31a8e34 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_update_app.png b/app/src/main/res/drawable-mdpi/v1_update_app.png new file mode 100644 index 0000000..6a07462 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_ureport_category.png b/app/src/main/res/drawable-mdpi/v1_ureport_category.png new file mode 100644 index 0000000..a1801b8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_ureport_icon.png b/app/src/main/res/drawable-mdpi/v1_ureport_icon.png new file mode 100644 index 0000000..09f1e8d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-mdpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..67a3539 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-mdpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..f0c98f8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_ureport_splash.png b/app/src/main/res/drawable-mdpi/v1_ureport_splash.png new file mode 100644 index 0000000..4e7fd69 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-mdpi/v1_video_thumbnail.png b/app/src/main/res/drawable-mdpi/v1_video_thumbnail.png new file mode 100644 index 0000000..c945348 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_alpha_bar.png b/app/src/main/res/drawable-mdpi/v3_alpha_bar.png new file mode 100644 index 0000000..a935a34 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_back_arrow.png b/app/src/main/res/drawable-mdpi/v3_back_arrow.png new file mode 100644 index 0000000..17140ee Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_bg_green.png b/app/src/main/res/drawable-mdpi/v3_bg_green.png new file mode 100644 index 0000000..611929f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_bg_green.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_button_settings.png b/app/src/main/res/drawable-mdpi/v3_button_settings.png new file mode 100644 index 0000000..5e1c2f3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_button_stories.png b/app/src/main/res/drawable-mdpi/v3_button_stories.png new file mode 100644 index 0000000..e848c74 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_button_survey.png b/app/src/main/res/drawable-mdpi/v3_button_survey.png new file mode 100644 index 0000000..58a047e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_button_ureport.png b/app/src/main/res/drawable-mdpi/v3_button_ureport.png new file mode 100644 index 0000000..815cb5c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_logout_icon.png b/app/src/main/res/drawable-mdpi/v3_logout_icon.png new file mode 100644 index 0000000..b05ab2c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_mail_icon.png b/app/src/main/res/drawable-mdpi/v3_mail_icon.png new file mode 100644 index 0000000..1c11931 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_menu_dot.png b/app/src/main/res/drawable-mdpi/v3_menu_dot.png new file mode 100644 index 0000000..387b73a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_password_icon.png b/app/src/main/res/drawable-mdpi/v3_password_icon.png new file mode 100644 index 0000000..be518d2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_riseup_logo.png b/app/src/main/res/drawable-mdpi/v3_riseup_logo.png new file mode 100644 index 0000000..d077363 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_send_icon.png b/app/src/main/res/drawable-mdpi/v3_send_icon.png new file mode 100644 index 0000000..a1bd379 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_submit_icon.png b/app/src/main/res/drawable-mdpi/v3_submit_icon.png new file mode 100644 index 0000000..112cdd6 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_text_speech_off.png b/app/src/main/res/drawable-mdpi/v3_text_speech_off.png new file mode 100644 index 0000000..72f7f04 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_text_speech_on.png b/app/src/main/res/drawable-mdpi/v3_text_speech_on.png new file mode 100644 index 0000000..9a49964 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_unicef_logo.png b/app/src/main/res/drawable-mdpi/v3_unicef_logo.png new file mode 100644 index 0000000..d188e2a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-mdpi/v3_ureport_arrow.png b/app/src/main/res/drawable-mdpi/v3_ureport_arrow.png new file mode 100644 index 0000000..55591c9 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png new file mode 100644 index 0000000..fabe9d9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_archive_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_archive_black_24dp.png new file mode 100644 index 0000000..9b88218 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_archive_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_archive_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_archive_white_24dp.png new file mode 100644 index 0000000..3513bd9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_archive_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_cloud_download_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..d1a0573 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_cloud_download_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png new file mode 100644 index 0000000..a5fa74d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..971f0cb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon1.png b/app/src/main/res/drawable-xhdpi/icon1.png new file mode 100644 index 0000000..19e5781 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon1.png differ diff --git a/app/src/main/res/drawable-xhdpi/sound_off.png b/app/src/main/res/drawable-xhdpi/sound_off.png new file mode 100644 index 0000000..8d645c4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sound_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/splash.png b/app/src/main/res/drawable-xhdpi/splash.png new file mode 100644 index 0000000..c57e157 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/splash.png differ diff --git a/app/src/main/res/drawable-xhdpi/splash_dark.png b/app/src/main/res/drawable-xhdpi/splash_dark.png new file mode 100644 index 0000000..bc8d6e0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/splash_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-xhdpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..64a21b7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_back_button.png b/app/src/main/res/drawable-xhdpi/v1_back_button.png new file mode 100644 index 0000000..df41346 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-xhdpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..5110a66 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_map_top.png b/app/src/main/res/drawable-xhdpi/v1_bg_map_top.png new file mode 100644 index 0000000..b7b6706 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_shade_results.png b/app/src/main/res/drawable-xhdpi/v1_bg_shade_results.png new file mode 100644 index 0000000..8322631 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-xhdpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..f87b664 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-xhdpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..60f4324 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-xhdpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..acc2e9b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_star.png b/app/src/main/res/drawable-xhdpi/v1_bg_star.png new file mode 100644 index 0000000..6aadbb8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_bg_sun.png b/app/src/main/res/drawable-xhdpi/v1_bg_sun.png new file mode 100644 index 0000000..e526a8d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_header_image_opinion.png b/app/src/main/res/drawable-xhdpi/v1_header_image_opinion.png new file mode 100644 index 0000000..a2b1441 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_header_image_results.png b/app/src/main/res/drawable-xhdpi/v1_header_image_results.png new file mode 100644 index 0000000..70c65b3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_header_image_settings.png b/app/src/main/res/drawable-xhdpi/v1_header_image_settings.png new file mode 100644 index 0000000..a6b2a2f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_header_image_stories.png b/app/src/main/res/drawable-xhdpi/v1_header_image_stories.png new file mode 100644 index 0000000..099987d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_cancel.png b/app/src/main/res/drawable-xhdpi/v1_icon_cancel.png new file mode 100644 index 0000000..bcb5302 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_logout.png b/app/src/main/res/drawable-xhdpi/v1_icon_logout.png new file mode 100644 index 0000000..e01cf2c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_message_send.png b/app/src/main/res/drawable-xhdpi/v1_icon_message_send.png new file mode 100644 index 0000000..59a9513 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_opinion.png b/app/src/main/res/drawable-xhdpi/v1_icon_opinion.png new file mode 100644 index 0000000..d6fc604 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_password.png b/app/src/main/res/drawable-xhdpi/v1_icon_password.png new file mode 100644 index 0000000..8ca3bed Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_results.png b/app/src/main/res/drawable-xhdpi/v1_icon_results.png new file mode 100644 index 0000000..5e20e1f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_settings.png b/app/src/main/res/drawable-xhdpi/v1_icon_settings.png new file mode 100644 index 0000000..3cf6175 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_signin.png b/app/src/main/res/drawable-xhdpi/v1_icon_signin.png new file mode 100644 index 0000000..211cf9b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_start.png b/app/src/main/res/drawable-xhdpi/v1_icon_start.png new file mode 100644 index 0000000..bcb5302 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_stories.png b/app/src/main/res/drawable-xhdpi/v1_icon_stories.png new file mode 100644 index 0000000..85592cf Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_sync.png b/app/src/main/res/drawable-xhdpi/v1_icon_sync.png new file mode 100644 index 0000000..4bffce9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..b0f0dd1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..9b01322 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_icon_username.png b/app/src/main/res/drawable-xhdpi/v1_icon_username.png new file mode 100644 index 0000000..833c02b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_item_opinion.png b/app/src/main/res/drawable-xhdpi/v1_item_opinion.png new file mode 100644 index 0000000..1f32c87 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_item_opinion_category.png b/app/src/main/res/drawable-xhdpi/v1_item_opinion_category.png new file mode 100644 index 0000000..d2a7eec Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-xhdpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..3e3d9df Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-xhdpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..c8acce5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_login_bg_top.png b/app/src/main/res/drawable-xhdpi/v1_login_bg_top.png new file mode 100644 index 0000000..f24aac2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-xhdpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..2691d26 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_main_bg_top.png b/app/src/main/res/drawable-xhdpi/v1_main_bg_top.png new file mode 100644 index 0000000..a52a438 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_org_icon.png b/app/src/main/res/drawable-xhdpi/v1_org_icon.png new file mode 100644 index 0000000..02538ab Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_retry_small.png b/app/src/main/res/drawable-xhdpi/v1_retry_small.png new file mode 100644 index 0000000..b8163a6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_bg.png b/app/src/main/res/drawable-xhdpi/v1_splash_bg.png new file mode 100644 index 0000000..74e3540 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_bottom.png b/app/src/main/res/drawable-xhdpi/v1_splash_bottom.png new file mode 100644 index 0000000..f5d66f0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_footer_left.png b/app/src/main/res/drawable-xhdpi/v1_splash_footer_left.png new file mode 100644 index 0000000..c629d64 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_footer_right.png b/app/src/main/res/drawable-xhdpi/v1_splash_footer_right.png new file mode 100644 index 0000000..c30b8c3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_logo.png b/app/src/main/res/drawable-xhdpi/v1_splash_logo.png new file mode 100644 index 0000000..aa0ea9d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-xhdpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..1dec745 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_top.png b/app/src/main/res/drawable-xhdpi/v1_splash_top.png new file mode 100644 index 0000000..18bb3da Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_splash_top_right.png b/app/src/main/res/drawable-xhdpi/v1_splash_top_right.png new file mode 100644 index 0000000..1a3c9a9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_start_survey_icon.png b/app/src/main/res/drawable-xhdpi/v1_start_survey_icon.png new file mode 100644 index 0000000..3a19ac7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_update_app.png b/app/src/main/res/drawable-xhdpi/v1_update_app.png new file mode 100644 index 0000000..43e6b8d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_ureport_category.png b/app/src/main/res/drawable-xhdpi/v1_ureport_category.png new file mode 100644 index 0000000..6ef6731 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_ureport_icon.png b/app/src/main/res/drawable-xhdpi/v1_ureport_icon.png new file mode 100644 index 0000000..2078d72 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-xhdpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..b88f701 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-xhdpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..1175a4e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_ureport_splash.png b/app/src/main/res/drawable-xhdpi/v1_ureport_splash.png new file mode 100644 index 0000000..639832e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-xhdpi/v1_video_thumbnail.png b/app/src/main/res/drawable-xhdpi/v1_video_thumbnail.png new file mode 100644 index 0000000..a9de9db Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_alpha_bar.png b/app/src/main/res/drawable-xhdpi/v3_alpha_bar.png new file mode 100644 index 0000000..839e5b5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_back_arrow.png b/app/src/main/res/drawable-xhdpi/v3_back_arrow.png new file mode 100644 index 0000000..af5f6cb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_bg_green.png b/app/src/main/res/drawable-xhdpi/v3_bg_green.png new file mode 100644 index 0000000..4aa4c4e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_bg_green.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_button_settings.png b/app/src/main/res/drawable-xhdpi/v3_button_settings.png new file mode 100644 index 0000000..3163e06 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_button_stories.png b/app/src/main/res/drawable-xhdpi/v3_button_stories.png new file mode 100644 index 0000000..6ab5507 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_button_survey.png b/app/src/main/res/drawable-xhdpi/v3_button_survey.png new file mode 100644 index 0000000..9606477 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_button_ureport.png b/app/src/main/res/drawable-xhdpi/v3_button_ureport.png new file mode 100644 index 0000000..bf99f06 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_logout_icon.png b/app/src/main/res/drawable-xhdpi/v3_logout_icon.png new file mode 100644 index 0000000..ec9a9f1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_mail_icon.png b/app/src/main/res/drawable-xhdpi/v3_mail_icon.png new file mode 100644 index 0000000..dd9f8c7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_menu_dot.png b/app/src/main/res/drawable-xhdpi/v3_menu_dot.png new file mode 100644 index 0000000..56bb94e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_password_icon.png b/app/src/main/res/drawable-xhdpi/v3_password_icon.png new file mode 100644 index 0000000..83a40fa Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_riseup_logo.png b/app/src/main/res/drawable-xhdpi/v3_riseup_logo.png new file mode 100644 index 0000000..5361c79 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_send_icon.png b/app/src/main/res/drawable-xhdpi/v3_send_icon.png new file mode 100644 index 0000000..e9ee597 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_submit_icon.png b/app/src/main/res/drawable-xhdpi/v3_submit_icon.png new file mode 100644 index 0000000..d224bf5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_text_speech_off.png b/app/src/main/res/drawable-xhdpi/v3_text_speech_off.png new file mode 100644 index 0000000..2e01453 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_text_speech_on.png b/app/src/main/res/drawable-xhdpi/v3_text_speech_on.png new file mode 100644 index 0000000..0dd0c4b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_unicef_logo.png b/app/src/main/res/drawable-xhdpi/v3_unicef_logo.png new file mode 100644 index 0000000..21501e6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-xhdpi/v3_ureport_arrow.png b/app/src/main/res/drawable-xhdpi/v3_ureport_arrow.png new file mode 100644 index 0000000..4467d62 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png new file mode 100644 index 0000000..b91e9d7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_archive_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_archive_black_24dp.png new file mode 100644 index 0000000..d6d60f6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_archive_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_archive_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_archive_white_24dp.png new file mode 100644 index 0000000..00e04e4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_archive_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_cloud_download_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..3392d97 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_cloud_download_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png new file mode 100644 index 0000000..9c4685d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon1.png b/app/src/main/res/drawable-xxhdpi/icon1.png new file mode 100644 index 0000000..5480210 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon1.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sound_off.png b/app/src/main/res/drawable-xxhdpi/sound_off.png new file mode 100644 index 0000000..c8631d5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sound_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-xxhdpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..9f0c141 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_back_button.png b/app/src/main/res/drawable-xxhdpi/v1_back_button.png new file mode 100644 index 0000000..ab805d1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-xxhdpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..5f65538 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_map_top.png b/app/src/main/res/drawable-xxhdpi/v1_bg_map_top.png new file mode 100644 index 0000000..dedcc36 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_shade_results.png b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_results.png new file mode 100644 index 0000000..0feed86 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..76a786e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..a646d4d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-xxhdpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..f27ca46 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_star.png b/app/src/main/res/drawable-xxhdpi/v1_bg_star.png new file mode 100644 index 0000000..cb74a39 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_bg_sun.png b/app/src/main/res/drawable-xxhdpi/v1_bg_sun.png new file mode 100644 index 0000000..45d2554 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_header_image_opinion.png b/app/src/main/res/drawable-xxhdpi/v1_header_image_opinion.png new file mode 100644 index 0000000..0da141e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_header_image_results.png b/app/src/main/res/drawable-xxhdpi/v1_header_image_results.png new file mode 100644 index 0000000..691588f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_header_image_settings.png b/app/src/main/res/drawable-xxhdpi/v1_header_image_settings.png new file mode 100644 index 0000000..aa4d545 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_header_image_stories.png b/app/src/main/res/drawable-xxhdpi/v1_header_image_stories.png new file mode 100644 index 0000000..2e3bac3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_cancel.png b/app/src/main/res/drawable-xxhdpi/v1_icon_cancel.png new file mode 100644 index 0000000..5996687 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_logout.png b/app/src/main/res/drawable-xxhdpi/v1_icon_logout.png new file mode 100644 index 0000000..4453869 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_message_send.png b/app/src/main/res/drawable-xxhdpi/v1_icon_message_send.png new file mode 100644 index 0000000..bfb67a9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_opinion.png b/app/src/main/res/drawable-xxhdpi/v1_icon_opinion.png new file mode 100644 index 0000000..87bf948 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_password.png b/app/src/main/res/drawable-xxhdpi/v1_icon_password.png new file mode 100644 index 0000000..16e6644 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_results.png b/app/src/main/res/drawable-xxhdpi/v1_icon_results.png new file mode 100644 index 0000000..ea901d4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_settings.png b/app/src/main/res/drawable-xxhdpi/v1_icon_settings.png new file mode 100644 index 0000000..1ccb7ae Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_signin.png b/app/src/main/res/drawable-xxhdpi/v1_icon_signin.png new file mode 100644 index 0000000..cb11506 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_start.png b/app/src/main/res/drawable-xxhdpi/v1_icon_start.png new file mode 100644 index 0000000..5996687 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_stories.png b/app/src/main/res/drawable-xxhdpi/v1_icon_stories.png new file mode 100644 index 0000000..e6d759e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_sync.png b/app/src/main/res/drawable-xxhdpi/v1_icon_sync.png new file mode 100644 index 0000000..1c1eb6c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..a34e023 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..ea7e26f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_icon_username.png b/app/src/main/res/drawable-xxhdpi/v1_icon_username.png new file mode 100644 index 0000000..b942ed0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_item_opinion.png b/app/src/main/res/drawable-xxhdpi/v1_item_opinion.png new file mode 100644 index 0000000..79b9dc5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_item_opinion_category.png b/app/src/main/res/drawable-xxhdpi/v1_item_opinion_category.png new file mode 100644 index 0000000..37928d3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-xxhdpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..9a8fd36 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-xxhdpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..f2a66dd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_login_bg_top.png b/app/src/main/res/drawable-xxhdpi/v1_login_bg_top.png new file mode 100644 index 0000000..ab2b2a4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-xxhdpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..45b4dce Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_main_bg_top.png b/app/src/main/res/drawable-xxhdpi/v1_main_bg_top.png new file mode 100644 index 0000000..7ff7b57 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_org_icon.png b/app/src/main/res/drawable-xxhdpi/v1_org_icon.png new file mode 100644 index 0000000..7d57c61 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_retry_small.png b/app/src/main/res/drawable-xxhdpi/v1_retry_small.png new file mode 100644 index 0000000..4176560 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_bg.png b/app/src/main/res/drawable-xxhdpi/v1_splash_bg.png new file mode 100644 index 0000000..185c6a4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_bottom.png b/app/src/main/res/drawable-xxhdpi/v1_splash_bottom.png new file mode 100644 index 0000000..7d0e7d9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_footer_left.png b/app/src/main/res/drawable-xxhdpi/v1_splash_footer_left.png new file mode 100644 index 0000000..bbdc711 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_footer_right.png b/app/src/main/res/drawable-xxhdpi/v1_splash_footer_right.png new file mode 100644 index 0000000..e4cbe2d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_logo.png b/app/src/main/res/drawable-xxhdpi/v1_splash_logo.png new file mode 100644 index 0000000..ecbe276 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-xxhdpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..9de830b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_top.png b/app/src/main/res/drawable-xxhdpi/v1_splash_top.png new file mode 100644 index 0000000..03d9745 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_splash_top_right.png b/app/src/main/res/drawable-xxhdpi/v1_splash_top_right.png new file mode 100644 index 0000000..4671994 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_start_survey_icon.png b/app/src/main/res/drawable-xxhdpi/v1_start_survey_icon.png new file mode 100644 index 0000000..91da524 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_update_app.png b/app/src/main/res/drawable-xxhdpi/v1_update_app.png new file mode 100644 index 0000000..02283bd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_ureport_category.png b/app/src/main/res/drawable-xxhdpi/v1_ureport_category.png new file mode 100644 index 0000000..77f575e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_ureport_icon.png b/app/src/main/res/drawable-xxhdpi/v1_ureport_icon.png new file mode 100644 index 0000000..3baed40 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-xxhdpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..3d7ee5b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-xxhdpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..c3a3e9c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_ureport_splash.png b/app/src/main/res/drawable-xxhdpi/v1_ureport_splash.png new file mode 100644 index 0000000..d0ed589 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v1_video_thumbnail.png b/app/src/main/res/drawable-xxhdpi/v1_video_thumbnail.png new file mode 100644 index 0000000..1e2f014 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_alpha_bar.png b/app/src/main/res/drawable-xxhdpi/v3_alpha_bar.png new file mode 100644 index 0000000..af9feb4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_back_arrow.png b/app/src/main/res/drawable-xxhdpi/v3_back_arrow.png new file mode 100644 index 0000000..62a073f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_bg_green.png b/app/src/main/res/drawable-xxhdpi/v3_bg_green.png new file mode 100644 index 0000000..1f5bfe8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_bg_green.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_button_settings.png b/app/src/main/res/drawable-xxhdpi/v3_button_settings.png new file mode 100644 index 0000000..40fffd9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_button_stories.png b/app/src/main/res/drawable-xxhdpi/v3_button_stories.png new file mode 100644 index 0000000..2230f5a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_button_survey.png b/app/src/main/res/drawable-xxhdpi/v3_button_survey.png new file mode 100644 index 0000000..55b008d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_button_ureport.png b/app/src/main/res/drawable-xxhdpi/v3_button_ureport.png new file mode 100644 index 0000000..4cdf947 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_logout_icon.png b/app/src/main/res/drawable-xxhdpi/v3_logout_icon.png new file mode 100644 index 0000000..b12def3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_mail_icon.png b/app/src/main/res/drawable-xxhdpi/v3_mail_icon.png new file mode 100644 index 0000000..1af430d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_menu_dot.png b/app/src/main/res/drawable-xxhdpi/v3_menu_dot.png new file mode 100644 index 0000000..5438531 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_password_icon.png b/app/src/main/res/drawable-xxhdpi/v3_password_icon.png new file mode 100644 index 0000000..b653176 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_riseup_logo.png b/app/src/main/res/drawable-xxhdpi/v3_riseup_logo.png new file mode 100644 index 0000000..41f6923 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_send_icon.png b/app/src/main/res/drawable-xxhdpi/v3_send_icon.png new file mode 100644 index 0000000..378d861 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_submit_icon.png b/app/src/main/res/drawable-xxhdpi/v3_submit_icon.png new file mode 100644 index 0000000..db31bf7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_text_speech_off.png b/app/src/main/res/drawable-xxhdpi/v3_text_speech_off.png new file mode 100644 index 0000000..3272350 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_text_speech_on.png b/app/src/main/res/drawable-xxhdpi/v3_text_speech_on.png new file mode 100644 index 0000000..22cb0b1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_unicef_logo.png b/app/src/main/res/drawable-xxhdpi/v3_unicef_logo.png new file mode 100644 index 0000000..a929033 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-xxhdpi/v3_ureport_arrow.png b/app/src/main/res/drawable-xxhdpi/v3_ureport_arrow.png new file mode 100644 index 0000000..d9c84af Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_archive_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_archive_black_24dp.png new file mode 100644 index 0000000..b8c0376 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_archive_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_archive_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_archive_white_24dp.png new file mode 100644 index 0000000..34cd3fd Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_archive_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_cloud_download_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..b24e573 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_cloud_download_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon1.png b/app/src/main/res/drawable-xxxhdpi/icon1.png new file mode 100644 index 0000000..138f474 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon1.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sound_off.png b/app/src/main/res/drawable-xxxhdpi/sound_off.png new file mode 100644 index 0000000..de27183 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sound_off.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_audio_thumbnail.png b/app/src/main/res/drawable-xxxhdpi/v1_audio_thumbnail.png new file mode 100644 index 0000000..db18e08 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_audio_thumbnail.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_back_button.png b/app/src/main/res/drawable-xxxhdpi/v1_back_button.png new file mode 100644 index 0000000..8adb9fc Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_back_button.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_map_bottom.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_map_bottom.png new file mode 100644 index 0000000..77c39d0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_map_bottom.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_map_top.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_map_top.png new file mode 100644 index 0000000..a7f9845 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_map_top.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_results.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_results.png new file mode 100644 index 0000000..01ae4f5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_results.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_settings.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_settings.png new file mode 100644 index 0000000..6a5441f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_settings.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_stories.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_stories.png new file mode 100644 index 0000000..2ef4d23 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_shade_stories.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_shades_opinions.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_shades_opinions.png new file mode 100644 index 0000000..bc1702b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_shades_opinions.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_star.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_star.png new file mode 100644 index 0000000..9fb6b7b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_star.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_bg_sun.png b/app/src/main/res/drawable-xxxhdpi/v1_bg_sun.png new file mode 100644 index 0000000..92836de Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_bg_sun.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_header_image_opinion.png b/app/src/main/res/drawable-xxxhdpi/v1_header_image_opinion.png new file mode 100644 index 0000000..6f6f975 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_header_image_opinion.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_header_image_results.png b/app/src/main/res/drawable-xxxhdpi/v1_header_image_results.png new file mode 100644 index 0000000..22b3ba1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_header_image_results.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_header_image_settings.png b/app/src/main/res/drawable-xxxhdpi/v1_header_image_settings.png new file mode 100644 index 0000000..ccd464a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_header_image_settings.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_header_image_stories.png b/app/src/main/res/drawable-xxxhdpi/v1_header_image_stories.png new file mode 100644 index 0000000..8619a2e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_header_image_stories.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_cancel.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_cancel.png new file mode 100644 index 0000000..1a85ea0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_cancel.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_logout.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_logout.png new file mode 100644 index 0000000..2611bd8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_logout.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_message_send.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_message_send.png new file mode 100644 index 0000000..efda5e8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_message_send.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_opinion.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_opinion.png new file mode 100644 index 0000000..04bf777 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_opinion.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_password.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_password.png new file mode 100644 index 0000000..aaacf8d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_password.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_results.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_results.png new file mode 100644 index 0000000..19f1a6d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_results.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_settings.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_settings.png new file mode 100644 index 0000000..a16a18c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_settings.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_signin.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_signin.png new file mode 100644 index 0000000..1156744 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_signin.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_start.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_start.png new file mode 100644 index 0000000..1a85ea0 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_start.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_stories.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_stories.png new file mode 100644 index 0000000..b1eeec4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_stories.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_sync.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_sync.png new file mode 100644 index 0000000..dbe0c10 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_sync.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech.png new file mode 100644 index 0000000..6d30ce8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech_off.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech_off.png new file mode 100644 index 0000000..da05a6f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_text_to_speech_off.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_icon_username.png b/app/src/main/res/drawable-xxxhdpi/v1_icon_username.png new file mode 100644 index 0000000..47a65cb Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_icon_username.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_item_opinion.png b/app/src/main/res/drawable-xxxhdpi/v1_item_opinion.png new file mode 100644 index 0000000..291171f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_item_opinion.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_item_opinion_category.png b/app/src/main/res/drawable-xxxhdpi/v1_item_opinion_category.png new file mode 100644 index 0000000..44896e5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_item_opinion_category.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_item_stories_see_more.png b/app/src/main/res/drawable-xxxhdpi/v1_item_stories_see_more.png new file mode 100644 index 0000000..41291f7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_item_stories_see_more.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_login_bg_bottom.png b/app/src/main/res/drawable-xxxhdpi/v1_login_bg_bottom.png new file mode 100644 index 0000000..73e3783 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_login_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_login_bg_top.png b/app/src/main/res/drawable-xxxhdpi/v1_login_bg_top.png new file mode 100644 index 0000000..be58bb2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_login_bg_top.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_main_bg_bottom.png b/app/src/main/res/drawable-xxxhdpi/v1_main_bg_bottom.png new file mode 100644 index 0000000..dcb2d38 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_main_bg_bottom.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_main_bg_top.png b/app/src/main/res/drawable-xxxhdpi/v1_main_bg_top.png new file mode 100644 index 0000000..65f83e8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_main_bg_top.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_org_icon.png b/app/src/main/res/drawable-xxxhdpi/v1_org_icon.png new file mode 100644 index 0000000..cf154dc Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_org_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_retry_small.png b/app/src/main/res/drawable-xxxhdpi/v1_retry_small.png new file mode 100644 index 0000000..f52bf81 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_retry_small.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_bg.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_bg.png new file mode 100644 index 0000000..41ca0e4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_bg.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_bottom.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_bottom.png new file mode 100644 index 0000000..6a593d6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_bottom.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_left.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_left.png new file mode 100644 index 0000000..204a85d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_left.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_right.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_right.png new file mode 100644 index 0000000..c1136b4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_footer_right.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_logo.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_logo.png new file mode 100644 index 0000000..7ee5841 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_logo.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_logo_bg.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_logo_bg.png new file mode 100644 index 0000000..d422818 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_logo_bg.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_top.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_top.png new file mode 100644 index 0000000..826a5f2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_top.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_splash_top_right.png b/app/src/main/res/drawable-xxxhdpi/v1_splash_top_right.png new file mode 100644 index 0000000..4d05d59 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_splash_top_right.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_start_survey_icon.png b/app/src/main/res/drawable-xxxhdpi/v1_start_survey_icon.png new file mode 100644 index 0000000..b47f21e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_start_survey_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_update_app.png b/app/src/main/res/drawable-xxxhdpi/v1_update_app.png new file mode 100644 index 0000000..76ba492 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_update_app.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_ureport_category.png b/app/src/main/res/drawable-xxxhdpi/v1_ureport_category.png new file mode 100644 index 0000000..aec1b47 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_ureport_category.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_ureport_icon.png b/app/src/main/res/drawable-xxxhdpi/v1_ureport_icon.png new file mode 100644 index 0000000..413c134 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_ureport_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_arrow.png b/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_arrow.png new file mode 100644 index 0000000..f926f81 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_arrow.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_dot.png b/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_dot.png new file mode 100644 index 0000000..2c1d38b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_ureport_item_dot.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_ureport_splash.png b/app/src/main/res/drawable-xxxhdpi/v1_ureport_splash.png new file mode 100644 index 0000000..ded4398 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_ureport_splash.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v1_video_thumbnail.png b/app/src/main/res/drawable-xxxhdpi/v1_video_thumbnail.png new file mode 100644 index 0000000..d26e4a1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v1_video_thumbnail.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_alpha_bar.png b/app/src/main/res/drawable-xxxhdpi/v3_alpha_bar.png new file mode 100644 index 0000000..f2692a2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_alpha_bar.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_back_arrow.png b/app/src/main/res/drawable-xxxhdpi/v3_back_arrow.png new file mode 100644 index 0000000..cdd94c1 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_back_arrow.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_bg_green.png b/app/src/main/res/drawable-xxxhdpi/v3_bg_green.png new file mode 100644 index 0000000..68cb275 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_bg_green.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_button_settings.png b/app/src/main/res/drawable-xxxhdpi/v3_button_settings.png new file mode 100644 index 0000000..25f8f6f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_button_settings.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_button_stories.png b/app/src/main/res/drawable-xxxhdpi/v3_button_stories.png new file mode 100644 index 0000000..133a88c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_button_stories.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_button_survey.png b/app/src/main/res/drawable-xxxhdpi/v3_button_survey.png new file mode 100644 index 0000000..651154e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_button_survey.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_button_ureport.png b/app/src/main/res/drawable-xxxhdpi/v3_button_ureport.png new file mode 100644 index 0000000..ee75514 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_button_ureport.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_icon_network.png b/app/src/main/res/drawable-xxxhdpi/v3_icon_network.png new file mode 100644 index 0000000..ddd1d22 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_icon_network.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_logout_icon.png b/app/src/main/res/drawable-xxxhdpi/v3_logout_icon.png new file mode 100644 index 0000000..7b618b4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_logout_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_mail_icon.png b/app/src/main/res/drawable-xxxhdpi/v3_mail_icon.png new file mode 100644 index 0000000..178293c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_mail_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_menu_dot.png b/app/src/main/res/drawable-xxxhdpi/v3_menu_dot.png new file mode 100644 index 0000000..3284d20 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_menu_dot.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_password_icon.png b/app/src/main/res/drawable-xxxhdpi/v3_password_icon.png new file mode 100644 index 0000000..362bc9f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_password_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_refresh_button.png b/app/src/main/res/drawable-xxxhdpi/v3_refresh_button.png new file mode 100644 index 0000000..c42950f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_refresh_button.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_riseup_logo.png b/app/src/main/res/drawable-xxxhdpi/v3_riseup_logo.png new file mode 100644 index 0000000..7cc7cbf Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_riseup_logo.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_send_icon.png b/app/src/main/res/drawable-xxxhdpi/v3_send_icon.png new file mode 100644 index 0000000..1b8e54c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_send_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_submit_icon.png b/app/src/main/res/drawable-xxxhdpi/v3_submit_icon.png new file mode 100644 index 0000000..c1c947a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_submit_icon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_text_speech_off.png b/app/src/main/res/drawable-xxxhdpi/v3_text_speech_off.png new file mode 100644 index 0000000..f9158fe Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_text_speech_off.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_text_speech_on.png b/app/src/main/res/drawable-xxxhdpi/v3_text_speech_on.png new file mode 100644 index 0000000..8595ff9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_text_speech_on.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_unicef_logo.png b/app/src/main/res/drawable-xxxhdpi/v3_unicef_logo.png new file mode 100644 index 0000000..3001e3a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_unicef_logo.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/v3_ureport_arrow.png b/app/src/main/res/drawable-xxxhdpi/v3_ureport_arrow.png new file mode 100644 index 0000000..d99f0b8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/v3_ureport_arrow.png differ diff --git a/app/src/main/res/drawable/chat_bubble_in.xml b/app/src/main/res/drawable/chat_bubble_in.xml new file mode 100644 index 0000000..455390d --- /dev/null +++ b/app/src/main/res/drawable/chat_bubble_in.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/chat_bubble_out.xml b/app/src/main/res/drawable/chat_bubble_out.xml new file mode 100644 index 0000000..54437e9 --- /dev/null +++ b/app/src/main/res/drawable/chat_bubble_out.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/header.xml b/app/src/main/res/drawable/header.xml new file mode 100644 index 0000000..474c42e --- /dev/null +++ b/app/src/main/res/drawable/header.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_v1_background.xml b/app/src/main/res/drawable/ic_launcher_v1_background.xml new file mode 100644 index 0000000..c34bd26 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_v1_background.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/image_border.xml b/app/src/main/res/drawable/image_border.xml new file mode 100644 index 0000000..3ee6e76 --- /dev/null +++ b/app/src/main/res/drawable/image_border.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_button.xml b/app/src/main/res/drawable/rounded_button.xml new file mode 100644 index 0000000..92857cb --- /dev/null +++ b/app/src/main/res/drawable/rounded_button.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_image.jpg b/app/src/main/res/drawable/sample_image.jpg new file mode 100644 index 0000000..67840b1 Binary files /dev/null and b/app/src/main/res/drawable/sample_image.jpg differ diff --git a/app/src/main/res/drawable/splash_background.xml b/app/src/main/res/drawable/splash_background.xml new file mode 100644 index 0000000..6e3952b --- /dev/null +++ b/app/src/main/res/drawable/splash_background.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/drawable/tertiary_button.xml b/app/src/main/res/drawable/tertiary_button.xml new file mode 100644 index 0000000..5c74084 --- /dev/null +++ b/app/src/main/res/drawable/tertiary_button.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_card_background.xml b/app/src/main/res/drawable/v1_card_background.xml new file mode 100644 index 0000000..ca53bfb --- /dev/null +++ b/app/src/main/res/drawable/v1_card_background.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_card_bg_opinions.xml b/app/src/main/res/drawable/v1_card_bg_opinions.xml new file mode 100644 index 0000000..c0a279a --- /dev/null +++ b/app/src/main/res/drawable/v1_card_bg_opinions.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_card_bg_reports.xml b/app/src/main/res/drawable/v1_card_bg_reports.xml new file mode 100644 index 0000000..5239c9e --- /dev/null +++ b/app/src/main/res/drawable/v1_card_bg_reports.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_card_bg_settings.xml b/app/src/main/res/drawable/v1_card_bg_settings.xml new file mode 100644 index 0000000..c6d3b24 --- /dev/null +++ b/app/src/main/res/drawable/v1_card_bg_settings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_card_bg_stories.xml b/app/src/main/res/drawable/v1_card_bg_stories.xml new file mode 100644 index 0000000..c0fbfb6 --- /dev/null +++ b/app/src/main/res/drawable/v1_card_bg_stories.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_layout_bg_opinions.xml b/app/src/main/res/drawable/v1_layout_bg_opinions.xml new file mode 100644 index 0000000..2ff6938 --- /dev/null +++ b/app/src/main/res/drawable/v1_layout_bg_opinions.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_layout_bg_reports.xml b/app/src/main/res/drawable/v1_layout_bg_reports.xml new file mode 100644 index 0000000..22460e1 --- /dev/null +++ b/app/src/main/res/drawable/v1_layout_bg_reports.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_layout_bg_settings.xml b/app/src/main/res/drawable/v1_layout_bg_settings.xml new file mode 100644 index 0000000..f53aa3e --- /dev/null +++ b/app/src/main/res/drawable/v1_layout_bg_settings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_layout_bg_stories.xml b/app/src/main/res/drawable/v1_layout_bg_stories.xml new file mode 100644 index 0000000..8e0b07a --- /dev/null +++ b/app/src/main/res/drawable/v1_layout_bg_stories.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_message_green.xml b/app/src/main/res/drawable/v1_message_green.xml new file mode 100644 index 0000000..1310c23 --- /dev/null +++ b/app/src/main/res/drawable/v1_message_green.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v1_splash.xml b/app/src/main/res/drawable/v1_splash.xml new file mode 100644 index 0000000..4f0c245 --- /dev/null +++ b/app/src/main/res/drawable/v1_splash.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_bd_0.png b/app/src/main/res/drawable/v3_bd_0.png new file mode 100644 index 0000000..0ff90f5 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_0.png differ diff --git a/app/src/main/res/drawable/v3_bd_1.png b/app/src/main/res/drawable/v3_bd_1.png new file mode 100644 index 0000000..6f8da33 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_1.png differ diff --git a/app/src/main/res/drawable/v3_bd_2.png b/app/src/main/res/drawable/v3_bd_2.png new file mode 100644 index 0000000..1c25ee9 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_2.png differ diff --git a/app/src/main/res/drawable/v3_bd_3.png b/app/src/main/res/drawable/v3_bd_3.png new file mode 100644 index 0000000..8084004 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_3.png differ diff --git a/app/src/main/res/drawable/v3_bd_4.png b/app/src/main/res/drawable/v3_bd_4.png new file mode 100644 index 0000000..831b01c Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_4.png differ diff --git a/app/src/main/res/drawable/v3_bd_5.png b/app/src/main/res/drawable/v3_bd_5.png new file mode 100644 index 0000000..aed013c Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_5.png differ diff --git a/app/src/main/res/drawable/v3_bd_6.png b/app/src/main/res/drawable/v3_bd_6.png new file mode 100644 index 0000000..a3068e1 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_6.png differ diff --git a/app/src/main/res/drawable/v3_bd_7.png b/app/src/main/res/drawable/v3_bd_7.png new file mode 100644 index 0000000..e7ba271 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_7.png differ diff --git a/app/src/main/res/drawable/v3_bd_8.png b/app/src/main/res/drawable/v3_bd_8.png new file mode 100644 index 0000000..8647490 Binary files /dev/null and b/app/src/main/res/drawable/v3_bd_8.png differ diff --git a/app/src/main/res/drawable/v3_dialog_box_white.xml b/app/src/main/res/drawable/v3_dialog_box_white.xml new file mode 100644 index 0000000..1fe7b6a --- /dev/null +++ b/app/src/main/res/drawable/v3_dialog_box_white.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_dialog_button_black.xml b/app/src/main/res/drawable/v3_dialog_button_black.xml new file mode 100644 index 0000000..93238a4 --- /dev/null +++ b/app/src/main/res/drawable/v3_dialog_button_black.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_dialog_button_magenta.xml b/app/src/main/res/drawable/v3_dialog_button_magenta.xml new file mode 100644 index 0000000..844aacb --- /dev/null +++ b/app/src/main/res/drawable/v3_dialog_button_magenta.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_dialog_button_purple.xml b/app/src/main/res/drawable/v3_dialog_button_purple.xml new file mode 100644 index 0000000..e2f379e --- /dev/null +++ b/app/src/main/res/drawable/v3_dialog_button_purple.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_dialog_header_magenta.xml b/app/src/main/res/drawable/v3_dialog_header_magenta.xml new file mode 100644 index 0000000..fafc463 --- /dev/null +++ b/app/src/main/res/drawable/v3_dialog_header_magenta.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_footer_alpha_bar.xml b/app/src/main/res/drawable/v3_footer_alpha_bar.xml new file mode 100644 index 0000000..0c37b6b --- /dev/null +++ b/app/src/main/res/drawable/v3_footer_alpha_bar.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_header_alpha_bar.xml b/app/src/main/res/drawable/v3_header_alpha_bar.xml new file mode 100644 index 0000000..47525c7 --- /dev/null +++ b/app/src/main/res/drawable/v3_header_alpha_bar.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v3_header_bar_round_solid.xml b/app/src/main/res/drawable/v3_header_bar_round_solid.xml new file mode 100644 index 0000000..3640746 --- /dev/null +++ b/app/src/main/res/drawable/v3_header_bar_round_solid.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/white_circle.xml b/app/src/main/res/drawable/white_circle.xml new file mode 100644 index 0000000..03e22c7 --- /dev/null +++ b/app/src/main/res/drawable/white_circle.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_rounded.xml b/app/src/main/res/drawable/white_rounded.xml new file mode 100644 index 0000000..53eb390 --- /dev/null +++ b/app/src/main/res/drawable/white_rounded.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_capture_video.xml b/app/src/main/res/layout-land/activity_capture_video.xml new file mode 100644 index 0000000..db7574d --- /dev/null +++ b/app/src/main/res/layout-land/activity_capture_video.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_capture_audio.xml b/app/src/main/res/layout/activity_capture_audio.xml new file mode 100644 index 0000000..6c8ce5f --- /dev/null +++ b/app/src/main/res/layout/activity_capture_audio.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_capture_location.xml b/app/src/main/res/layout/activity_capture_location.xml new file mode 100644 index 0000000..ad293af --- /dev/null +++ b/app/src/main/res/layout/activity_capture_location.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_capture_video.xml b/app/src/main/res/layout/activity_capture_video.xml new file mode 100644 index 0000000..f775ca0 --- /dev/null +++ b/app/src/main/res/layout/activity_capture_video.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_create_account.xml b/app/src/main/res/layout/activity_create_account.xml new file mode 100644 index 0000000..7862869 --- /dev/null +++ b/app/src/main/res/layout/activity_create_account.xml @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_flow.xml b/app/src/main/res/layout/activity_flow.xml new file mode 100644 index 0000000..07a1e1e --- /dev/null +++ b/app/src/main/res/layout/activity_flow.xml @@ -0,0 +1,106 @@ + + + + + + + +