diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index 92fde8a4b9c2..e8027674442d 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -281,7 +281,8 @@ jobs: content_android="${content_android//'%'/'%25'}" content_android="${content_android//$'\n'/'%0A'}" content_android="${content_android//$'\r'/'%0D'}" - echo "android_paths=$content_android" >> "$GITHUB_OUTPUT" + android_path=$(echo "$content_android" | jq -r '.html_path') + echo "android_path=$android_path" >> "$GITHUB_OUTPUT" - name: Read JSONs with iOS paths id: get_ios_path @@ -291,7 +292,8 @@ jobs: content_ios="${content_ios//'%'/'%25'}" content_ios="${content_ios//$'\n'/'%0A'}" content_ios="${content_ios//$'\r'/'%0D'}" - echo "ios_paths=$content_ios" >> "$GITHUB_OUTPUT" + ios_path=$(echo "$content_ios" | jq -r '.html_path') + echo "ios_path=$ios_path" >> "$GITHUB_OUTPUT" # This step removes previous comments with links connected to the PR - name: maintain-comment @@ -313,7 +315,7 @@ jobs: DESKTOP: ${{ needs.desktop.result }} IOS: ${{ needs.iOS.result }} WEB: ${{ needs.web.result }} - ANDROID_LINK: ${{fromJson(steps.get_android_path.outputs.android_paths).html_path}} + ANDROID_LINK: ${{steps.get_android_path.outputs.android_path}} DESKTOP_LINK: https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ env.PULL_REQUEST_NUMBER }}/NewExpensify.dmg - IOS_LINK: ${{ fromJson(steps.get_ios_path.outputs.ios_paths).html_path }} + IOS_LINK: ${{steps.get_ios_path.outputs.ios_path}} WEB_LINK: https://${{ env.PULL_REQUEST_NUMBER }}.pr-testing.expensify.com diff --git a/__mocks__/react-native-key-command.js b/__mocks__/react-native-key-command.js new file mode 100644 index 000000000000..092ab120a142 --- /dev/null +++ b/__mocks__/react-native-key-command.js @@ -0,0 +1,13 @@ +const registerKeyCommands = () => {}; +const unregisterKeyCommands = () => {}; +const constants = {}; +const eventEmitter = () => {}; +const addListener = () => {}; + +export { + registerKeyCommands, + unregisterKeyCommands, + constants, + eventEmitter, + addListener, +}; diff --git a/android/app/src/main/java/com/expensify/chat/MainActivity.java b/android/app/src/main/java/com/expensify/chat/MainActivity.java index bd90ee9abd02..b4eb483f8de6 100644 --- a/android/app/src/main/java/com/expensify/chat/MainActivity.java +++ b/android/app/src/main/java/com/expensify/chat/MainActivity.java @@ -2,7 +2,9 @@ import android.os.Bundle; import android.content.pm.ActivityInfo; +import android.view.KeyEvent; import com.expensify.chat.bootsplash.BootSplash; +import com.expensify.reactnativekeycommand.KeyCommandModule; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; @@ -44,4 +46,34 @@ protected void onCreate(Bundle savedInstanceState) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } + + /** + * This method is called when a key down event has occurred. + * Forwards the event to the KeyCommandModule + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // Disabling hardware ESCAPE support which is handled by Android + if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { + return false; + } + KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + // Disabling hardware ESCAPE support which is handled by Android + if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { return false; } + KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); + return super.onKeyLongPress(keyCode, event); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + // Disabling hardware ESCAPE support which is handled by Android + if (event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) { return false; } + KeyCommandModule.getInstance().onKeyDownEvent(keyCode, event); + return super.onKeyUp(keyCode, event); + } } \ No newline at end of file diff --git a/contributingGuides/CONTRIBUTING.md b/contributingGuides/CONTRIBUTING.md index 3c6bcd30e6bc..530739306aec 100644 --- a/contributingGuides/CONTRIBUTING.md +++ b/contributingGuides/CONTRIBUTING.md @@ -81,6 +81,7 @@ Please follow these steps to propose a job: 4. If there is no existing GitHub issue or Upwork job, check if the issue is happening on prod (as opposed to only happening on dev) 5. If the issue is just in dev then it means it's a new issue and has not been deployed to production. In this case, you should try to find the offending PR and comment in the issue tied to the PR and ask the assigned users to add the `DeployBlockerCash` label. If you can't find it, follow the reporting instructions in the next item, but note that the issue is a regression only found in dev and not in prod. 6. If the issue happens in main, staging, or production then report the issue(s) in the #expensify-bugs Slack channel, prefixed with `Bug:` or `Feature Request:`. Please use the templates for bugs and feature requests that are bookmarked in the #expensify-bugs channel. View [this guide](https://github.com/Expensify/App/blob/main/contributingGuides/HOW_TO_CREATE_A_PLAN.md) for help creating a plan when proposing a feature request. + - **Important note/reminder**: never share any information pertaining to a customer of Expensify when describing the bug. This includes, and is not limited to, a customer's name, email, and contact information. 7. The Expensify team will review your job proposal in the appropriate slack channel. If you've provided a quality proposal that we choose to implement, a GitHub issue will be created and your Slack handle will be included in the original post after `Issue reported by:` 8. If an external contributor other than yourself is hired to work on the issue, you will also be hired for the same job in Upwork to receive your payout. No additional work is required. If the issue is fixed internally, a dedicated job will be created to hire and pay you after the issue is fixed. 9. Payment will be made 7 days after code is deployed to production if there are no regressions. If a regression is discovered, payment will be issued 7 days after all regressions are fixed. @@ -177,3 +178,12 @@ Follow all the above above steps and processes. When you find a job you'd like t - If no proposals have been submitted by other contributors, BugZero (BZ) team member or an internal engineer will assign the issue to you. - If there are existing proposals, BZ will put the issue on hold. Contributor+ (C+) will review the existing proposals. If a contributor’s proposal is accepted then contributor will be assigned to the issue. If not the issue will be assigned to the agency-employee. - Once assigned follow the steps [here](https://github.com/Expensify/App/blob/main/contributingGuides/CONTRIBUTING.md#propose-a-solution-for-the-job) to submit your proposal + +#### Guide on Acronyms used within Expensify Communication +During communication with Expensify, you will come across a variety of acronyms used by our team. While acronyms can be useful, they cease to be the moment they are not known to the receiver. As such, we wanted to create a list here of our most commonly used acronyms and what they're referring to. Lastly, please never hesitate to ask in slack or the GH issue if there are any that are not understood/known! +- BZ: Bug Zero (Expensify internal team in charge of managing the GH issues related to our open-source project) +- LHN: Left Hand Navigation (Primary navigation modal in Expensify Chat, docked on the left hand side) +- OP: Original Post (Most commonly the post in E/App GH issues that reports the bug) +- GBR: Green Brick Road (UX Design Principle that utlizes green indicators on action items to encourage the user down the optimal path for a given process or task) +- VBA: Verified Bank Account (Bank account that has been verified as real and belonging to the correct business/individual) +- NAB: Not a Blocker (An issue that doesn't block progress, but would be nice to not have) diff --git a/docs/_includes/article-card.html b/docs/_includes/article-card.html index 644863c83d04..a088e5e406db 100644 --- a/docs/_includes/article-card.html +++ b/docs/_includes/article-card.html @@ -3,6 +3,6 @@

{{ include.title }}

- +
diff --git a/docs/_includes/lhn-template.html b/docs/_includes/lhn-template.html index cbc5f3bae539..8389ccc7fc93 100644 --- a/docs/_includes/lhn-template.html +++ b/docs/_includes/lhn-template.html @@ -13,7 +13,7 @@ {% if hub.href == activeHub %}