diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index a16aa1846..c076c21be 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -15,8 +15,10 @@ jobs: strategy: matrix: version: - - "StableFullRelease" - - "StableFdroidRelease" + - "OoniStableFullRelease" + - "OoniStableFdroidRelease" + - "DwStableFullRelease" + - "DwStableFdroidRelease" steps: - name: Set up JDK 17 @@ -47,14 +49,14 @@ jobs: uses: actions/checkout@v4 - name: Run unit tests - run: ./gradlew testStableFullRelease + run: ./gradlew testOoniStableFullRelease - name: Uploads test reports uses: actions/upload-artifact@v4 if: failure() with: name: test-report - path: app/build/test-results/testStableFullDebugUnitTest + path: app/build/test-results/testOoniStableFullReleaseUnitTest instrumented-test: name: Run instrumented tests @@ -85,14 +87,14 @@ jobs: profile: pixel_3_xl ram-size: 4096M disable-animations: true - script: ./gradlew connectedStableFullDebugAndroidTest + script: ./gradlew connectedOoniStableFullDebugAndroidTest - name: uploads test reports uses: actions/upload-artifact@v4 if: failure() with: name: emulator-test-reports - path: app/build/reports/androidTests/connected/debug/flavors/stableFull/ + path: app/build/reports/androidTests/connected/debug/flavors/ooniStableFull/ assemble-archive: name: Archive APKs @@ -101,10 +103,13 @@ jobs: strategy: matrix: version: - - "StableFullDebug" - - "StableFdroidDebug" - - "DevFullDebug" - - "DevFullDebugAndroidTest" + - "OoniStableFullDebug" + - "OoniStableFdroidDebug" + - "OoniDevFullDebug" + - "OoniDevFullDebugAndroidTest" + - "DwStableFullDebug" + - "DwStableFdroidDebug" + - "DwDevFullDebug" needs: [ build ] steps: @@ -148,10 +153,13 @@ jobs: with: name: ${{ matrix.version }}Apk path: | - app/build/outputs/apk/devFull/debug/app-dev-full-debug.apk - app/build/outputs/apk/androidTest/devFull/debug/app-dev-full-debug-androidTest.apk - app/build/outputs/apk/stableFull/debug/app-stable-full-debug.apk - app/build/outputs/apk/stableFdroid/debug/app-stable-fdroid-debug.apk + app/build/outputs/apk/ooniStableFull/debug/app-ooni-stable-full-debug.apk + app/build/outputs/apk/ooniStableFdroid/debug/app-ooni-stable-fdroid-debug.apk + app/build/outputs/apk/ooniDevFull/debug/app-ooni-dev-full-debug.apk + app/build/outputs/apk/androidTest/ooniDevFull/debug/app-ooni-dev-full-debug-androidTest.apk + app/build/outputs/apk/dwStableFull/debug/app-dw-stable-full-debug.apk + app/build/outputs/apk/dwStableFdroid/debug/app-dw-stable-fdroid-debug.apk + app/build/outputs/apk/dwDevFull/debug/app-dw-dev-full-debug.apk distribute: name: Upload artifact to Firebase App Distribution @@ -165,7 +173,7 @@ jobs: - name: Download app APK uses: actions/download-artifact@v4 with: - name: DevFullDebugApk + name: OoniDevFullDebugApk - name: Upload artifact to Firebase App Distribution uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 @@ -174,7 +182,7 @@ jobs: appId: ${{secrets.FIREBASE_APP_ID}} serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }} groups: testers - file: devFull/debug/app-dev-full-debug.apk + file: ooniDevFull/debug/app-ooni-dev-full-debug.apk - name: Write Summary run: | echo "View this release in the Firebase console: ${{ steps.uploadArtifact.outputs.FIREBASE_CONSOLE_URI }}" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/README.md b/README.md index f2053aabb..1f5ae7346 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ implement the following flavours: - `full` and `fdroid` (dimension: `license`). +- `ooni` and `dw` (dimension: `brand`). + The `testing` dimension controls whether we're building a release or a more unstable version. We build releases using the `stable` flavour. The `dev` flavour builds the version of the app that should @@ -68,78 +70,75 @@ be released on the store as the beta channel. The `experimental` flavour, instead, allows a developer to build a one-off version of the app that uses a custom build of the `oonimkall` library. -For `stable` and `dev`, we fetch `oonimkall` from the -[Maven central](https://search.maven.org/artifact/org.ooni/oonimkall) -repository. The `experimental` flavour, instead, requires you to -put the `oonimkall.aar` you built inside `engine-experimental`. - The `license` dimension controls which proprietary libraries to include into the build. The `full` flavour includes all such dependencies, while the `fdroid` flavour does not include any of them. -The variant names are therefore: +The `brand` dimension controls the branding of the application. The `ooni` flavour is the default branding, while the `dw` flavour is for the "News Media Scan" branding. -- `experimentalFullDebug` -- `experimentalFullRelease` -- `devFullDebug` -- `devFullRelease` -- `stableFullDebug` -- `stableFullRelease` +The variant names are therefore: -We additionally have `stableFdroidDebug` and `stableFdroidRelease`. +- `ooniExperimentalFullDebug` +- `ooniExperimentalFullRelease` +- `ooniDevFullDebug` +- `ooniDevFullRelease` +- `ooniStableFullDebug` +- `ooniStableFullRelease` +- `dwExperimentalFullDebug` +- `dwExperimentalFullRelease` +- `dwDevFullDebug` +- `dwDevFullRelease` +- `dwStableFullDebug` +- `dwStableFullRelease` + +We additionally have `ooniStableFdroidDebug`, `ooniStableFdroidRelease`, `dwStableFdroidDebug` and `dwStableFdroidRelease`. All of this is controlled by [app/build.gradle](app/build.gradle). ## Gradle modules - [app](app) contains the mobile app; -- [engine](engine) contains wrappers for `oonimkall`, the -measurement engine library; -- [engine-experimental](engine-experimental) allows us -to implement the `experimental` build flavour where you -put the `oonimkall.aar` file you built inside `engine-experimental` -rather than downloading it from Maven Central. +- [engine](engine) contains wrappers for `oonimkall`, the measurement engine library; +- [engine-experimental](engine-experimental) allows us to implement the `experimental` build flavour where you put the `oonimkall.aar` file you built inside `engine-experimental` rather than downloading it from Maven Central. ## Building an apk -Ensure you have Android Studio and Android SDK installed. Build the `devFullRelease` +Ensure you have Android Studio and Android SDK installed. Build the `ooniDevFullRelease` variant using Android Studio or this command line: -``` -./gradlew assembleDevFullRelease +```sh +./gradlew assembleOoniDevFullRelease ``` ## Building the app for f-droid -Instead to build the app to stay compliant to F-Droid use `fdroid`, which -contains small tweaks required to have the app accepted by [f-droid](https://f-droid.org/). +Instead to build the app to stay compliant to F-Droid use `fdroid`, which contains small tweaks required to have the app accepted by [f-droid](https://f-droid.org/). -``` -./gradlew assembleFdroid +```sh +./gradlew assembleOoniDevFullRelease ``` ## Testing -Run unit tests +Run unit tests/ -``` -./gradlew testStableFullDebug +```sh +./gradlew testOoniStableFullDebug ``` Run instrumented tests -_Note: To also run the automation tests (to generate screenshots), set the Build Config flag -`RUN_AUTOMATION` as true._ +_Note: To also run the automation tests (to generate screenshots), set the Build Config flag `RUN_AUTOMATION` as true._ -``` -./gradlew connectedStableFullDebugAndroidTest +```sh +./gradlew connectedOoniStableFullDebugAndroidTest ``` Generate code coverage report (after all unit and instrumented tests successfully passed) -``` +```sh ./gradlew jacocoAndroidTestReport -``` +``` ## Managing translations diff --git a/app/build.gradle b/app/build.gradle index 9e71efbb1..bb2209c71 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,6 +23,7 @@ android { buildConfigField 'String', 'SOFTWARE_NAME', 'BASE_SOFTWARE_NAME+IS_DEBUG' buildConfigField 'String', 'COUNTLY_KEY', '"146836f41172f9e3287cab6f2cc347de3f5ddf3b"' buildConfigField "boolean", "RUN_AUTOMATION", "false" + buildConfigField "boolean", "SHOW_DISABLED_CARDS", "true" } buildTypes { @@ -46,8 +47,21 @@ android { } } - flavorDimensions 'testing', 'license' + flavorDimensions = ['brand', 'testing', 'license'] + productFlavors { + ooni { + getIsDefault().set(true) + dimension 'brand' + } + dw { + dimension 'brand' + applicationId 'com.dw.ooniprobe' + resValue "string", "APP_ID", 'com.dw.ooniprobe' + resValue "string", "APP_NAME", "News Media Scan" + buildConfigField 'String', 'BASE_SOFTWARE_NAME', '"news-media-scan-android"' + buildConfigField "boolean", "SHOW_DISABLED_CARDS", "false" + } stable { dimension 'testing' buildConfigField 'String', 'BASE_SOFTWARE_NAME', '"ooniprobe-android"' @@ -58,7 +72,6 @@ android { versionNameSuffix resolveVersionSuffix('beta') versionCode resolveVersionCode() buildConfigField 'String', 'BASE_SOFTWARE_NAME', '"ooniprobe-android-dev"' - resValue "string", "APP_ID", 'org.openobservatory.ooniprobe.dev' resValue "string", "APP_NAME", "OONI Dev" buildConfigField 'String', 'COUNTLY_KEY', '"e6c2cfe53e85951d50567467cef3f9fa2eab32c3"' } @@ -68,7 +81,6 @@ android { versionNameSuffix resolveVersionSuffix('experimental') versionCode resolveVersionCode() buildConfigField 'String', 'BASE_SOFTWARE_NAME', '"ooniprobe-android-experimental"' - resValue "string", "APP_ID", 'org.openobservatory.ooniprobe.experimental' resValue "string", "APP_NAME", "OONI Exp" buildConfigField 'String', 'COUNTLY_KEY', '"e6c2cfe53e85951d50567467cef3f9fa2eab32c3"' } @@ -79,6 +91,16 @@ android { dimension 'license' } } + + bundle { + language { + enableSplit = false + } + } + + applicationVariants.all { variant -> + variant.resValue "string", "APP_ID", "\"${applicationId}\"" + } variantFilter { variant -> def names = variant.flavors*.name if (names.contains("fdroid") && (names.contains("experimental") || names.contains("dev"))) { diff --git a/app/src/dw/AndroidManifest.xml b/app/src/dw/AndroidManifest.xml new file mode 100644 index 000000000..28e5acf9b --- /dev/null +++ b/app/src/dw/AndroidManifest.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/dw/README.md b/app/src/dw/README.md new file mode 100644 index 000000000..a282682f0 --- /dev/null +++ b/app/src/dw/README.md @@ -0,0 +1,4 @@ +# Changes required. + +- [] Translation updates +- [] Onboarding override \ No newline at end of file diff --git a/app/src/dw/assets/anim/websites.json b/app/src/dw/assets/anim/websites.json new file mode 100644 index 000000000..191d14e4f --- /dev/null +++ b/app/src/dw/assets/anim/websites.json @@ -0,0 +1 @@ +{"v":"5.1.1","fr":30,"ip":0,"op":90,"w":1125,"h":1125,"nm":"Websites","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 2/Animations Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[566,560,0],"ix":2},"a":{"a":0,"k":[81,81,0],"ix":1},"s":{"a":0,"k":[272.84,272.84,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[44.57,0],[0,-44.433],[-44.433,0],[0,44.433]],"o":[[-44.433,0],[0,44.433],[44.57,0],[0,-44.433]],"v":[[-0.137,-80.475],[-80.474,0.001],[-0.137,80.475],[80.474,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-7.705,-13.344],[0,0],[4.815,8.942]],"o":[[0,0],[-2.614,-10.042],[14.858,5.09]],"v":[[55.714,-32.189],[31.915,-32.189],[20.772,-60.803]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-6.741,9.767],[-3.439,-11.556],[0,0]],"o":[[6.74,9.63],[0,0],[3.439,-11.556]],"v":[[0.001,-64.104],[15.407,-32.189],[-15.407,-32.189]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,5.503],[-1.238,5.09],[0,0],[0,-5.503],[-0.55,-5.364]],"o":[[-1.238,-5.089],[0,-5.503],[0,0],[-0.688,5.365],[0,5.503],[0,0]],"v":[[-62.316,16.094],[-64.379,0.001],[-62.316,-16.094],[-35.078,-16.094],[-36.179,0.001],[-35.078,16.094]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[7.704,13.344],[0,0],[-4.814,-8.942]],"o":[[0,0],[2.613,10.042],[-14.856,-5.09]],"v":[[-55.713,32.191],[-31.914,32.191],[-20.772,60.803]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[2.476,-10.042],[0,0],[-14.719,5.09]],"o":[[0,0],[7.704,-13.344],[-4.815,8.942]],"v":[[-31.914,-32.189],[-55.713,-32.189],[-20.909,-60.803]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[6.74,-9.766],[3.439,11.555],[0,0]],"o":[[-6.741,-9.629],[0,0],[-3.302,11.555]],"v":[[0.001,64.104],[-15.407,32.191],[15.27,32.191]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.688,-5.364],[0,0],[0,5.503],[-0.688,5.227],[0,0],[0,-5.503]],"o":[[0,0],[-0.688,-5.364],[0,-5.503],[0,0],[0.688,5.227],[0,5.503]],"v":[[18.846,16.094],[-18.845,16.094],[-20.084,0.001],[-18.845,-16.094],[18.846,-16.094],[20.085,0.001]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[14.72,-5.09],[-2.613,10.042],[0,0]],"o":[[4.814,-8.942],[0,0],[-7.705,13.344]],"v":[[20.91,60.803],[32.052,32.191],[55.714,32.191]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0,0],[0,5.503],[0.551,5.365],[0,0],[0,-5.503],[1.238,-5.089]],"o":[[0.687,-5.364],[0,-5.503],[0,0],[1.238,5.09],[0,5.503],[0,0]],"v":[[35.079,16.094],[36.179,0.001],[35.079,-16.094],[62.316,-16.094],[64.38,0.001],[62.316,16.094]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-200.124,258.76],[1729.926,258.76],[1729.926,-199.874],[-200.124,-199.874]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-200.124,-199.874],[1729.921,-199.874],[1729.921,258.76],[-200.124,258.76]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","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":"Group 1","np":2,"cix":2,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.724,80.725],"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":"Group 1","np":14,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":90,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Bottom Right","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[79.5,65.5],[51.5,187.5],[141.5,155.5],[167.5,81.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":14,"st":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Bottom Center","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-62.5,71.5],[-10.5,211.5],[53.5,81.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":18,"op":31,"st":19,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Bottom Left","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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 2","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-174.5,75.5],[-151.816,134.922],[-76.5,191.5],[-48.5,161.5],[-88.5,79.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":74,"op":88,"st":74,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Center Right","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[81.5,-62.5],[81.5,59.5],[189.5,53.5],[183.5,-58.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":61,"op":75,"st":63,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Center","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[69.5,-50.5],[-70.5,-50.5],[-68.5,53.5],[67.5,59.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":39,"st":19,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Center Left","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-86.5,-56.5],[-196.5,-54.5],[-188.5,59.5],[-88.5,49.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":45,"op":61,"st":51,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Top Right","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[45.5,-180.5],[71.5,-82.5],[167.5,-78.5],[93.5,-190.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":34,"op":46,"st":14,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Middle Top","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[5.5,-196.5],[-38.5,-154.5],[-50.5,-84.5],[51.5,-80.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":21,"st":-24,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Top Left","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[562.5,562.5,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":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-96.5,-182.5],[-176.5,-78.5],[-82.5,-74.5],[-38.5,-178.5]],"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,"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","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":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":67,"op":77,"st":15,"bm":0},{"ddd":0,"ind":11,"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":[562.5,562.5,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":[1241,1147.094],"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":2,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.827,0.149,0.145,0],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2.562,-4.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100.585,103.871],"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,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":90,"st":0,"bm":0}],"markers":[]} diff --git a/app/src/dw/dev/README.md b/app/src/dw/dev/README.md new file mode 100644 index 000000000..0a5ecbd1f --- /dev/null +++ b/app/src/dw/dev/README.md @@ -0,0 +1,3 @@ +# News Media Scan Dev +This is a collection of resources to be used by the News Media Scan specific flavors of the application. +A corresponding directory exits in [app/src/ooni](../../ooni). \ No newline at end of file diff --git a/app/src/dw/dev/google-services.json b/app/src/dw/dev/google-services.json new file mode 100644 index 000000000..23ae6af0f --- /dev/null +++ b/app/src/dw/dev/google-services.json @@ -0,0 +1,56 @@ +{ + "project_info": { + "project_number": "951667061699", + "firebase_url": "https://ooniprobe-android.firebaseio.com", + "project_id": "ooniprobe-android", + "storage_bucket": "ooniprobe-android.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:951667061699:android:6293922d7e8d4180374376", + "android_client_info": { + "package_name": "com.dw.ooniprobe.dev" + } + }, + "oauth_client": [ + { + "client_id": "951667061699-6ijvga26pl048jrqfnd33o60bqcn0g7c.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.dw.ooniprobe.dev", + "certificate_hash": "a8f4bc5bef49e43d386647bdffdad32c07a8d3b8" + } + }, + { + "client_id": "951667061699-2aq9bnbot04qdjbed2bpnl9ee4ro0c39.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBsbX_pOQoqlyOOyZ6yf7CJf0lZZn6O1yg" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "951667061699-2aq9bnbot04qdjbed2bpnl9ee4ro0c39.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "951667061699-tuprsdjjv9eje6506lkvkski1p6v87lp.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "org.openobservatory.ooniprobe", + "app_store_id": "1199566366" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/dw/experimental/google-services.json b/app/src/dw/experimental/google-services.json new file mode 100644 index 000000000..ea8eb8a3e --- /dev/null +++ b/app/src/dw/experimental/google-services.json @@ -0,0 +1,56 @@ +{ + "project_info": { + "project_number": "951667061699", + "firebase_url": "https://ooniprobe-android.firebaseio.com", + "project_id": "ooniprobe-android", + "storage_bucket": "ooniprobe-android.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:951667061699:android:6293922d7e8d4180374376", + "android_client_info": { + "package_name": "com.dw.ooniprobe.experimental" + } + }, + "oauth_client": [ + { + "client_id": "951667061699-6ijvga26pl048jrqfnd33o60bqcn0g7c.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.dw.ooniprobe.experimental", + "certificate_hash": "a8f4bc5bef49e43d386647bdffdad32c07a8d3b8" + } + }, + { + "client_id": "951667061699-2aq9bnbot04qdjbed2bpnl9ee4ro0c39.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBsbX_pOQoqlyOOyZ6yf7CJf0lZZn6O1yg" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "951667061699-2aq9bnbot04qdjbed2bpnl9ee4ro0c39.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "951667061699-tuprsdjjv9eje6506lkvkski1p6v87lp.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "org.openobservatory.ooniprobe", + "app_store_id": "1199566366" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/dw/ic_launcher-playstore.png b/app/src/dw/ic_launcher-playstore.png new file mode 100644 index 000000000..6c0f273d6 Binary files /dev/null and b/app/src/dw/ic_launcher-playstore.png differ diff --git a/app/src/dw/res/drawable-xxxhdpi/info_banner.png b/app/src/dw/res/drawable-xxxhdpi/info_banner.png new file mode 100644 index 000000000..a5eac374b Binary files /dev/null and b/app/src/dw/res/drawable-xxxhdpi/info_banner.png differ diff --git a/app/src/dw/res/drawable/button_dialog_false.xml b/app/src/dw/res/drawable/button_dialog_false.xml new file mode 100644 index 000000000..7940fd35a --- /dev/null +++ b/app/src/dw/res/drawable/button_dialog_false.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/dw/res/drawable/button_dialog_true.xml b/app/src/dw/res/drawable/button_dialog_true.xml new file mode 100644 index 000000000..d44622869 --- /dev/null +++ b/app/src/dw/res/drawable/button_dialog_true.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/dw/res/drawable/dialog_quiz.xml b/app/src/dw/res/drawable/dialog_quiz.xml new file mode 100644 index 000000000..afc306e8c --- /dev/null +++ b/app/src/dw/res/drawable/dialog_quiz.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/dw/res/drawable/logo.png b/app/src/dw/res/drawable/logo.png new file mode 100644 index 000000000..1652b9e23 Binary files /dev/null and b/app/src/dw/res/drawable/logo.png differ diff --git a/app/src/dw/res/drawable/ooni_bw.xml b/app/src/dw/res/drawable/ooni_bw.xml new file mode 100644 index 000000000..a8b409b1d --- /dev/null +++ b/app/src/dw/res/drawable/ooni_bw.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/dw/res/drawable/ooni_logo.xml b/app/src/dw/res/drawable/ooni_logo.xml new file mode 100644 index 000000000..dac2aa518 --- /dev/null +++ b/app/src/dw/res/drawable/ooni_logo.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/dw/res/drawable/ooniprobe_logo.xml b/app/src/dw/res/drawable/ooniprobe_logo.xml new file mode 100644 index 000000000..122a1508a --- /dev/null +++ b/app/src/dw/res/drawable/ooniprobe_logo.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/app/src/dw/res/drawable/outline_info.xml b/app/src/dw/res/drawable/outline_info.xml new file mode 100644 index 000000000..fc4f1222f --- /dev/null +++ b/app/src/dw/res/drawable/outline_info.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/dw/res/drawable/test_websites.xml b/app/src/dw/res/drawable/test_websites.xml new file mode 100644 index 000000000..6a86d4752 --- /dev/null +++ b/app/src/dw/res/drawable/test_websites.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/app/src/dw/res/layout/activity_info.xml b/app/src/dw/res/layout/activity_info.xml new file mode 100644 index 000000000..06b5a7bf9 --- /dev/null +++ b/app/src/dw/res/layout/activity_info.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + +