Skip to content

Commit

Permalink
Merge branch 'main' into adjust-fastlane-to-hybridapp-dotenv
Browse files Browse the repository at this point in the history
  • Loading branch information
mateuuszzzzz committed Jan 8, 2025
2 parents abe8118 + 26fe49d commit 2dbdb96
Show file tree
Hide file tree
Showing 129 changed files with 7,077 additions and 5,857 deletions.
3,371 changes: 2,074 additions & 1,297 deletions .github/actions/javascript/authorChecklist/index.js

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions .github/actions/javascript/checkAndroidStatus/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9771,14 +9771,16 @@ function useColors() {
return false;
}

let m;

// Is webkit? http://stackoverflow.com/a/16459606/376773
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
// Is firebug? http://stackoverflow.com/a/398120/376773
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
// Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
// Double check webkit in userAgent just in case we are in a worker
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}
Expand Down Expand Up @@ -10407,11 +10409,11 @@ function getDate() {
}

/**
* Invokes `util.format()` with the specified arguments and writes to stderr.
* Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.
*/

function log(...args) {
return process.stderr.write(util.format(...args) + '\n');
return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n');
}

/**
Expand Down Expand Up @@ -729342,7 +729344,7 @@ var y = d * 365.25;
* @api public
*/

module.exports = function(val, options) {
module.exports = function (val, options) {
options = options || {};
var type = typeof val;
if (type === 'string' && val.length > 0) {
Expand Down
10 changes: 6 additions & 4 deletions .github/actions/javascript/getAndroidRolloutPercentage/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5097,14 +5097,16 @@ function useColors() {
return false;
}

let m;

// Is webkit? http://stackoverflow.com/a/16459606/376773
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
// Is firebug? http://stackoverflow.com/a/398120/376773
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
// Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
// Double check webkit in userAgent just in case we are in a worker
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}
Expand Down Expand Up @@ -5733,11 +5735,11 @@ function getDate() {
}

/**
* Invokes `util.format()` with the specified arguments and writes to stderr.
* Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.
*/

function log(...args) {
return process.stderr.write(util.format(...args) + '\n');
return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n');
}

/**
Expand Down Expand Up @@ -724594,7 +724596,7 @@ var y = d * 365.25;
* @api public
*/

module.exports = function(val, options) {
module.exports = function (val, options) {
options = options || {};
var type = typeof val;
if (type === 'string' && val.length > 0) {
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/javascript/proposalPoliceComment/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8150,7 +8150,7 @@ var y = d * 365.25;
* @api public
*/

module.exports = function(val, options) {
module.exports = function (val, options) {
options = options || {};
var type = typeof val;
if (type === 'string' && val.length > 0) {
Expand Down
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ ruby ">= 3.3.4"

gem "cocoapods", "= 1.15.2"
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
gem 'xcodeproj', '< 1.26.0'
gem "fastlane", "~> 2", ">= 2.222.0"
gem "xcpretty", "~> 0"

Expand Down
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ DEPENDENCIES
cocoapods (= 1.15.2)
fastlane (~> 2, >= 2.222.0)
fastlane-plugin-aws_s3
xcodeproj (< 1.26.0)
xcpretty (~> 0)

RUBY VERSION
Expand Down
2 changes: 1 addition & 1 deletion Mobile-Expensify
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009008103
versionName "9.0.81-3"
versionCode 1009008200
versionName "9.0.82-0"
// Supported language variants must be declared here to avoid from being removed during the compilation.
// This also helps us to not include unnecessary language variants in the APK.
resConfigs "en", "es"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
import com.facebook.react.defaults.DefaultReactNativeHost
import com.facebook.react.modules.i18nmanager.I18nUtil
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.oblador.performance.RNPerformance
Expand Down Expand Up @@ -63,10 +64,10 @@ class MainApplication : MultiDexApplication(), ReactApplication {
return
}

SoLoader.init(this, /* native exopackage */false)
SoLoader.init(this, OpenSourceMergedSoMapping)
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
load(bridgelessEnabled = false)
load()
}
if (BuildConfig.DEBUG) {
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,9 @@
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.UIBlock;
import com.facebook.react.uimanager.NativeViewHierarchyManager;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import android.view.inputmethod.InputMethodManager;
import android.util.Log;

public class RNTextInputResetModule extends ReactContextBaseJavaModule {

Expand All @@ -31,13 +25,12 @@ public String getName() {
// https://github.com/facebook/react-native/pull/12462#issuecomment-298812731
@ReactMethod
public void resetKeyboardInput(final int reactTagToReset) {
UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
reactContext.runOnUiQueueThread(new Runnable() {
@Override
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
public void run() {
InputMethodManager imm = (InputMethodManager) getReactApplicationContext().getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
View viewToReset = nativeViewHierarchyManager.resolveView(reactTagToReset);
View viewToReset = reactContext.getFabricUIManager().resolveView(reactTagToReset);
imm.restartInput(viewToReset);
}
}
Expand Down
8 changes: 3 additions & 5 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

buildscript {
ext {
buildToolsVersion = "34.0.0"
minSdkVersion = 23
compileSdkVersion = 34
buildToolsVersion = "35.0.0"
minSdkVersion = 24
compileSdkVersion = 35
targetSdkVersion = 34
ndkVersion = "26.1.10909125"

Expand Down Expand Up @@ -42,8 +42,6 @@ allprojects {
configurations.all {
resolutionStrategy {
force 'org.xerial:sqlite-jdbc:3.34.0'
//Fix Investigate App Crash MainActivity.onCreate #35655
force "com.facebook.soloader:soloader:0.10.4+"

eachDependency { dependency ->
if (dependency.requested.group == 'org.bouncycastle') {
Expand Down
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
5 changes: 4 additions & 1 deletion android/gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
Expand Down Expand Up @@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down
2 changes: 2 additions & 0 deletions android/gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
Expand Down
18 changes: 18 additions & 0 deletions config/webpack/webpack.common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import dotenv from 'dotenv';
import fs from 'fs';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import path from 'path';
import TerserPlugin from 'terser-webpack-plugin';
import type {Class} from 'type-fest';
import type {Configuration, WebpackPluginInstance} from 'webpack';
import {DefinePlugin, EnvironmentPlugin, IgnorePlugin, ProvidePlugin} from 'webpack';
Expand Down Expand Up @@ -38,7 +39,10 @@ const includeModules = [
'react-native-qrcode-svg',
'react-native-view-shot',
'@react-native/assets',
'expo',
'expo-av',
'expo-image-manipulator',
'expo-modules-core',
].join('|');

const environmentToLogoSuffixMap: Record<string, string> = {
Expand Down Expand Up @@ -283,6 +287,20 @@ const getCommonConfiguration = ({file = '.env', platform = 'web'}: Environment):
},

optimization: {
minimizer: [
// default settings accordint to https://webpack.js.org/configuration/optimization/#optimizationminimizer
// with addition of preserving the class name for ImageManipulator (expo module)
new TerserPlugin({
terserOptions: {
compress: {
passes: 2,
},
// eslint-disable-next-line @typescript-eslint/naming-convention
keep_classnames: /ImageManipulator|ImageModule/,
},
}),
'...',
],
runtimeChunk: 'single',
splitChunks: {
cacheGroups: {
Expand Down
14 changes: 14 additions & 0 deletions docs/_sass/_fonts.scss
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,20 @@
src: url('/assets/fonts/ExpensifyNewKansas-MediumItalic.woff2') format('woff2'), url('/assets/fonts/ExpensifyNewKansas-MediumItalic.woff') format('woff');
}

@font-face {
font-family: Expensify Mono;
font-weight: 400;
font-style: normal;
src: url('/assets/fonts/ExpensifyMono-Regular.woff2') format('woff2'), url('/assets/fonts/ExpensifyMono-Regular.woff') format('woff');
}

@font-face {
font-family: Expensify Mono;
font-weight: 700;
font-style: normal;
src: url('/assets/fonts/ExpensifyMono-Bold.woff2') format('woff2'), url('/assets/fonts/ExpensifyMono-Bold.woff') format('woff');
}

* {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
Expand Down
17 changes: 16 additions & 1 deletion docs/_sass/_main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ details[open] > summary {

h1,
summary {
font-family: 'Expensify New Kansas', 'Helvetica Neue', 'Helvetica', Arial, sans-serif;
font-family: 'Expensify Mono', 'SFMono-Regular', monospace, Arial, sans-serif;
font-weight: 500;
font-size: larger;
}
Expand All @@ -144,6 +144,21 @@ p {
padding-bottom: 20px;
}

code {
font-family: 'Expensify Mono', 'Helvetica Neue', 'Helvetica', Arial, sans-serif;
border-width: 1px;
border-style: solid;
border-radius: 5px;
border-color: var(--color-borders);
background-color: var(--color-highlightBG);
line-height: 20px;
padding-left: 5px;
padding-right: 5px;
font-size: 13px;
margin-top: 0px;
margin-bottom: 0px;
}

body,
button,
input,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
---
title: Billing and Subscriptions
description: Billing Page Overview
description: Expensify Billing Overview
---

# Expensify Billing Overview

At the beginning of each month, the Billing Owner for the workspace will be billed for the previous month’s activity.
Your Expensify bill is determined by:
At the beginning of each month, the workspace's Billing Owner is billed for the previous month’s activity.
Your Expensify bill is determined by the following:
- The number of active members in your workspace
- Whether you have a Collect or Control plan
- Whether you’re on pay-per-use or an annual subscription
- Whether you’re using the Expensify Visa® Commercial Card

An active member is anyone who creates, submits, approves, reimburses, or exports a report in Expensify in any given month. This includes Copilots and automatic actions by Concierge.
An active member is any member who creates, submits, approves, reimburses, or exports a report in Expensify in a given month. This includes Copilots and automatic actions by Concierge.

Your billing receipts can be viewed under **Settings** > **Account** > **Payments** > **Billing History**. We recommend appointing a single billing owner for each Group Workspace.

Expand All @@ -25,7 +23,7 @@ Save the most money on Expensify by pairing an annual subscription with the Expe
- **Collect Plan:** $5 per active member per month
- **Control Plan:** $9 per active member per month

**You also get cash back!** Earn 1% cash back on all Expensify Card purchases or 2% if card spending reaches $250,000 or more monthly (for U.S. purchases only). Cash back first applies to your Expensify bill, with any remainder deposited directly into your bank account.
**You also get cash back!** Earn 1% cash back on all Expensify Card purchases or 2% if card spending reaches $250,000 or more monthly (for US purchases only). Cash back first applies to your Expensify bill, with any remainder deposited directly into your bank account.

Use Expensify’s [savings calculator](https://use.expensify.com/resource-center/tools/savings-calculator) to see your potential savings with the Expensify Card.

Expand All @@ -46,3 +44,9 @@ Rates for pay-per-use plans are applied at full price:

- **Collect plan:** $20 per active member per month
- **Control plan:** $36 per active member per month

# Transfer Ownership of Billing

If another member needs to own the billing on a given workspace, they must first be a Workspace Admin. Then, from their account, the Admin will head to **Settings > Workspaces > [Workspace Name] > Members > [Current Workspace Owner] > Transfer Ownership**.

From there, the new billing owner will add a payment card and be charged for the member activity on the workspace on the first of the month.
Binary file added docs/assets/fonts/ExpensifyMono-Bold.woff
Binary file not shown.
Binary file added docs/assets/fonts/ExpensifyMono-Bold.woff2
Binary file not shown.
Binary file added docs/assets/fonts/ExpensifyMono-Regular.woff
Binary file not shown.
Binary file added docs/assets/fonts/ExpensifyMono-Regular.woff2
Binary file not shown.
Loading

0 comments on commit 2dbdb96

Please sign in to comment.