From a2fdc7ad8d0471fc67241848a881043ceb709dd0 Mon Sep 17 00:00:00 2001 From: PRAFUL BANDRE <109658545+prafulbbandre@users.noreply.github.com> Date: Thu, 20 Jul 2023 17:37:21 +0530 Subject: [PATCH 1/6] Fix : #4793 (#5092) ## Explanation Fixes #4793 ## Essential Checklist - [X] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [X] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [X] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [X] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [X] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [X] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## For UI-specific PRs only https://github.com/oppia/oppia-android/assets/109658545/e542f6fc-02fc-43de-a413-93fe1e49bc04 If your PR includes UI-related changes, then: - Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes - For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see [RTL guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines)) - Add a video showing the full UX flow with a screen reader enabled (see [accessibility guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide)) - Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cad5b0772ed..714be87502e 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -453,7 +453,7 @@ No new hint available Show hints and solution Hint %s - Navigate up + Close Hints Show solution Show Solution From df820f7364b1383993f47fc3f9b320c3557d5835 Mon Sep 17 00:00:00 2001 From: Abinash <110354418+Abinash6000@users.noreply.github.com> Date: Tue, 25 Jul 2023 16:20:30 +0530 Subject: [PATCH 2/6] Fixes #4736: revision card textViews line wraps instead of ellipsize and solves accessibility scanner issue (#5095) ## Explanation Fixes #4736: This PR increases the number of lines of ```prev_subtopic_title``` and ```next_subtopic_title``` if the text doesn't fit within 3 lines for large texts. And solves the accessiblity scanner issue. ![image](https://github.com/oppia/oppia-android/assets/110354418/c6006977-45fb-4115-9e1e-298c613294e8)![image](https://github.com/oppia/oppia-android/assets/110354418/1c106d95-f618-4104-8e31-76d58c0ba490) ## Essential Checklist - [x] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [x] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## For UI-specific PRs only If your PR includes UI-related changes, then: - Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes - (before) - ![image](https://github.com/oppia/oppia-android/assets/110354418/4ffd95c3-f445-4142-a2b2-0e4fd8f743d9) - ![image](https://github.com/oppia/oppia-android/assets/110354418/33e813a4-f404-4f93-86a6-e8075688d2e4) - (after) - ![image](https://github.com/oppia/oppia-android/assets/110354418/54356eef-4a60-49c3-a721-70000437879e) - ![image](https://github.com/oppia/oppia-android/assets/110354418/d07b7511-a682-4a27-acaa-5788cff1d08c) - For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see [RTL guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines)) - ![image](https://github.com/oppia/oppia-android/assets/110354418/5ded08c7-058d-4aaf-a806-a4239851fbe6) - ![image](https://github.com/oppia/oppia-android/assets/110354418/13efd801-ec31-4adb-9c0d-9e0fdc60b88b) - Add a video showing the full UX flow with a screen reader enabled (see [accessibility guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide)) - Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing --- .../res/layout-sw600dp/revision_card_fragment.xml | 12 ++++++++---- app/src/main/res/layout/revision_card_fragment.xml | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/layout-sw600dp/revision_card_fragment.xml b/app/src/main/res/layout-sw600dp/revision_card_fragment.xml index e10815ad3e1..a7a2dc5081f 100644 --- a/app/src/main/res/layout-sw600dp/revision_card_fragment.xml +++ b/app/src/main/res/layout-sw600dp/revision_card_fragment.xml @@ -59,8 +59,9 @@ Date: Tue, 25 Jul 2023 13:12:59 -0600 Subject: [PATCH 3/6] Fix some typo in string file (#5105) ## Explanation Fix some typo in string file ## Essential Checklist - [ ] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [ ] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## For UI-specific PRs only If your PR includes UI-related changes, then: - Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes - For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see [RTL guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines)) - Add a video showing the full UX flow with a screen reader enabled (see [accessibility guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide)) - Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing --- .../hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-pcm-rNG/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-sw/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt index c7581956509..670afb8c3c5 100644 --- a/app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt +++ b/app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt @@ -92,7 +92,7 @@ class HintsAndSolutionDialogFragmentPresenter @Inject constructor( HintsAndSolutionFragmentBinding.inflate(inflater, container, /* attachToRoot= */ false) binding.hintsAndSolutionToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp) binding.hintsAndSolutionToolbar.setNavigationContentDescription( - R.string.hints_andSolution_close_icon_description + R.string.hints_and_solution_close_icon_description ) binding.hintsAndSolutionToolbar.setNavigationOnClickListener { (fragment.requireActivity() as? HintsAndSolutionListener)?.dismiss() diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3e771dcccde..8561ab8aea0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -418,7 +418,7 @@ لا يوجد تلميح جديد متاح إظهار الملاحظات والحل تلميح %s - العودة للسابق + العودة للسابق الملاحظات عرض الحل عرض الحل diff --git a/app/src/main/res/values-pcm-rNG/strings.xml b/app/src/main/res/values-pcm-rNG/strings.xml index 41dea5c3849..f9039a39324 100644 --- a/app/src/main/res/values-pcm-rNG/strings.xml +++ b/app/src/main/res/values-pcm-rNG/strings.xml @@ -392,7 +392,7 @@ No new hint dey Show hints and solution Hint %s - Go up + Go up Hints Show solution Show Solution diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a9fa5c5220b..41cf187340b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -380,7 +380,7 @@ Nova dica disponível Nova dica disponível Mostrar dicas e solução - Navegar para cima + Navegar para cima Dicas Exibir Revelar Solução diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index 5ab6efddf76..a2c45731ef9 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -356,7 +356,7 @@ Je, unavutiwa na:\n%s? Kidokezo kipya kinapatikana Onyesha vidokezo na suluhisho - Nenda juu + Nenda juu Vidokezo Fichua Suluhisho Fichua Kidokezo diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 714be87502e..cc6da97c717 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -453,7 +453,7 @@ No new hint available Show hints and solution Hint %s - Close + Close Hints Show solution Show Solution From 67fb399745c0b33cca88561d96e0e41dfd999722 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 27 Jul 2023 18:38:48 +0530 Subject: [PATCH 4/6] Localisation updates from https://translatewiki.net. (#5109) Translation updates --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-pcm-rNG/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-sw/strings.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 8561ab8aea0..938f0dbc081 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -418,7 +418,7 @@ لا يوجد تلميح جديد متاح إظهار الملاحظات والحل تلميح %s - العودة للسابق + العودة للسابق الملاحظات عرض الحل عرض الحل diff --git a/app/src/main/res/values-pcm-rNG/strings.xml b/app/src/main/res/values-pcm-rNG/strings.xml index f9039a39324..616d6e03f76 100644 --- a/app/src/main/res/values-pcm-rNG/strings.xml +++ b/app/src/main/res/values-pcm-rNG/strings.xml @@ -392,7 +392,7 @@ No new hint dey Show hints and solution Hint %s - Go up + Go up Hints Show solution Show Solution diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 41cf187340b..9cb7c841127 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -380,7 +380,7 @@ Nova dica disponível Nova dica disponível Mostrar dicas e solução - Navegar para cima + Navegar para cima Dicas Exibir Revelar Solução diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index a2c45731ef9..1cf7fc4433c 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -356,7 +356,7 @@ Je, unavutiwa na:\n%s? Kidokezo kipya kinapatikana Onyesha vidokezo na suluhisho - Nenda juu + Funga Vidokezo Fichua Suluhisho Fichua Kidokezo From faf148b24241b37636d8f39bcdedc15bf480dd49 Mon Sep 17 00:00:00 2001 From: MOHIT GUPTA <76530270+MohitGupta121@users.noreply.github.com> Date: Fri, 28 Jul 2023 05:47:54 -0600 Subject: [PATCH 5/6] Fix #5017 : Updated example screenshots in wiki as per new oppia-android ui (#5107) ## Explanation Fix #5017 : Updated example screenshots in wiki as per new oppia-android ui ## Essential Checklist - [x] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [ ] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## For UI-specific PRs only If your PR includes UI-related changes, then: - Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes - For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see [RTL guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines)) - Add a video showing the full UX flow with a screen reader enabled (see [accessibility guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide)) - Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing --- ...Oppia-Android-codebase-and-architecture.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/wiki/Overview-of-the-Oppia-Android-codebase-and-architecture.md b/wiki/Overview-of-the-Oppia-Android-codebase-and-architecture.md index 692e243066a..31c790b5aca 100644 --- a/wiki/Overview-of-the-Oppia-Android-codebase-and-architecture.md +++ b/wiki/Overview-of-the-Oppia-Android-codebase-and-architecture.md @@ -152,33 +152,33 @@ Following these steps would lead to completing the entire task with all the code **Task:** -Finding code from a string ( e g., topic description under topic info tab) that you see in UI when running the app all the way to the UI components, domain controllers and the tests ultimately behind that text appearing. +Finding code from a string ( e g., story name under lessons tab) that you see in UI when running the app all the way to the UI components, domain controllers and the tests ultimately behind that text appearing. -example 2 task image +example 2 task image **Walkthrough:** -**Finding the UI component (topic description)** +**Finding the UI component (story name)** 1. The first step is to identify the id of the UI component that is responsible for displaying the text. We can do this by using the layout inspector of the android studio. -2. To do this, run the app on an emulator. Now navigate to the screen that displays the UI component, i.e. the topic info tab. +2. To do this, run the app on an emulator. Now navigate to the screen that displays the UI component, i.e. the lessons tab. -3. Next, open the layout inspector from the android studio, and click on the UI component displaying the topic description. Now all the attributes of this UI component are displayed on the right side of the layout inspector. Here, you can see this UI component's id, i.e. topic_description text_view. +3. Next, open the layout inspector from the android studio, and click on the UI component displaying the story name. Now all the attributes of this UI component are displayed on the right side of the layout inspector. Here, you can see this UI component's id, i.e. story_name_text_view. -example 2 layout inspector screenshot +example 2 layout inspector screenshot -4. Now we have to find the file with a UI component with this id. We can do this by pressing double shift and then typing the id. Doing this, we see the id is the id of a text view present in the file topic_info_fragment.xml. +4. Now we have to find the file with a UI component with this id. We can do this by pressing double shift and then typing the id. Doing this, we see the id is the id of a text view present in the file topic_lessons_story_summary.xml. -5. Now that we know that the text view is present in topic_info_fragment.xml, according to the app architecture, we know that the name of this fragment is TopicInfoFragment. The files responsible for displaying this fragment are TopicInfoFragment.kt and TopicInfoFragmentPresenter.kt. +5. Now that we know that the text view is present in topic_lessons_story_summary.xml, according to the app architecture, we know that the name of this fragment is TopicLessonsFragment. The files responsible for displaying this fragment are TopicLessonsFragment.kt and TopicLessonsFragmentPresenter.kt. -6. Looking at the XML code for topic_description_text_view, we can see that TopicInfoViewModel sets the text in the text view using databinding. +6. Looking at the XML code for story_name_text_view, we can see that StorySummaryViewModel sets the text in the text view using databinding. **Finding the business logic for the UI component, i.e. domain controllers** -1. Following the app architecture used by Oppia, TopicInfoViewModel should be initialized in the TopicInfoFragmentPresenter. +1. Following the app architecture used by Oppia, StorySummaryViewModel should be initialized in the TopicLessonsFragmentPresenter. -2. Here we can see that the topic description is being updated in the viewModel by the TopicController. Therefore the business logic for getting the topic description will be present in the file TopicController. +2. Here we can see that the story name is being updated in the viewModel by the TranslationController. Therefore the business logic for getting the story name will be present in the file TranslationController. **Finding the tests** @@ -186,9 +186,9 @@ There are two sets of tests: - Tests to test the UI component - Tests to test the business logic of the UI component -Since the UI component is present in the TopicInfoFramgnet, the UI component tests are present in the file TopicInfoFragmentTest. +Since the UI component is present in the TopicLessonsFragment, the UI component tests are present in the file TopicLessonsFragmentTest. -Similarly, since the business logic is present in the file TopicController, the tests for this controller can be found in the file TopicControllerTest. +Similarly, since the business logic is present in the file TranslationController, the tests for this controller can be found in the file TranslationControllerTest. ## Dependency Injection From 3e81ff6a19e61df69348336fef2c7c7be0e77597 Mon Sep 17 00:00:00 2001 From: MOHIT GUPTA <76530270+MohitGupta121@users.noreply.github.com> Date: Fri, 28 Jul 2023 14:46:12 -0600 Subject: [PATCH 6/6] Fix part of #3690 : Wiki update - How to run static CI check locally (#5108) ## Explanation Fix part of #3690 : Wiki Update - How to run static CI check locally ## Essential Checklist - [x] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [ ] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## For UI-specific PRs only If your PR includes UI-related changes, then: - Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes - For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see [RTL guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines)) - Add a video showing the full UX flow with a screen reader enabled (see [accessibility guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide)) - Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing --- scripts/assets/todo_open_exemptions.textproto | 24 +++++++++---------- wiki/Static-Analysis-Checks.md | 9 +++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/scripts/assets/todo_open_exemptions.textproto b/scripts/assets/todo_open_exemptions.textproto index 187cb76308c..0fa81fd297d 100644 --- a/scripts/assets/todo_open_exemptions.textproto +++ b/scripts/assets/todo_open_exemptions.textproto @@ -294,16 +294,16 @@ todo_open_exemption { todo_open_exemption { exempted_file_path: "wiki/Static-Analysis-Checks.md" - line_number: 169 - line_number: 177 - line_number: 182 - line_number: 186 - line_number: 190 - line_number: 192 - line_number: 207 - line_number: 217 - line_number: 220 - line_number: 223 - line_number: 226 - line_number: 229 + line_number: 170 + line_number: 178 + line_number: 183 + line_number: 187 + line_number: 191 + line_number: 193 + line_number: 208 + line_number: 218 + line_number: 221 + line_number: 224 + line_number: 227 + line_number: 230 } diff --git a/wiki/Static-Analysis-Checks.md b/wiki/Static-Analysis-Checks.md index 5b82308601d..75acc335fba 100644 --- a/wiki/Static-Analysis-Checks.md +++ b/wiki/Static-Analysis-Checks.md @@ -11,6 +11,7 @@ - [KDoc validity check](#kdoc-validity-check) - [TODO open checks](#todo-open-checks) - [TODO issue resolved check](#todo-issue-resolved-check) + - [How to run static checks locally](#how-to-run-static-checks-locally) # Background Static analysis is a method of debugging by examining source code before a program is run. It’s done by analyzing a set of code against a set (or multiple sets) of coding rules. @@ -227,3 +228,11 @@ To fix the failures for this check: resolve the TODO items and then close the is # How to add a new Static analysis check // TODO([#3690](https://github.com/oppia/oppia-android/issues/3690)): Complete static checks Wiki + +# How to run static checks locally + +- Go to the failing CI check in your GitHub PR. +- Scroll to the top of the failing CI check logs, and find the Bazel command that was run for this script. +- Alternatively, in Android Studio, go to the `.github` folder and find the [static_checks.yml](https://github.com/oppia/oppia-android/blob/develop/.github/workflows/static_checks.yml) file. Search for the line that corresponds to the name of the job that failed. You can then run the same script on your local terminal. + +Note: Before running the script command in your local terminal, make sure you have Bazel installed. To learn how to set up Bazel for Oppia Android, follow these [instructions](https://github.com/oppia/oppia-android/wiki/Oppia-Bazel-Setup-Instructions).