diff --git a/android/app/build.gradle b/android/app/build.gradle index fb2e3387..013b7b62 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -120,8 +120,8 @@ android { applicationId "com.betterrail" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 73 - versionName "2.2.0" + versionCode 74 + versionName "2.2.1" missingDimensionStrategy "store", "play" } diff --git a/app/components/announcements/announcement-card.tsx b/app/components/announcements/announcement-card.tsx index 8681954a..aaf24de3 100644 --- a/app/components/announcements/announcement-card.tsx +++ b/app/components/announcements/announcement-card.tsx @@ -3,6 +3,7 @@ import TouchableScale from "react-native-touchable-scale" import { fontScale, spacing, color } from "../../theme" import { Text } from "../text/text" import { openLink } from "../../utils/helpers/open-link" +import { removeHtmlTagsAndEntities } from "./announcements-utils" const ANNOUNCEMENT_CARD: ViewStyle = { minHeight: 80 * fontScale, @@ -12,7 +13,7 @@ const ANNOUNCEMENT_CARD: ViewStyle = { paddingHorizontal: spacing[3], borderRadius: Platform.select({ ios: 12, android: 8 }), - backgroundColor: Platform.select({ ios: color.tertiaryBackground, android: color.inputBackground }), + backgroundColor: Platform.select({ ios: color.secondaryBackground, android: color.inputBackground }), shadowColor: color.palette.black, shadowOffset: { height: 0, width: 0 }, shadowOpacity: 0.05, @@ -21,7 +22,7 @@ const ANNOUNCEMENT_CARD: ViewStyle = { const TITLE_STYLE: TextStyle = { fontFamily: "Heebo", - color: color.primary, + color: color.primaryLighter, fontSize: 16, marginBottom: spacing[0], } @@ -41,7 +42,8 @@ export const AnnouncementCard = ({ title, body, link }: AnnouncementCardProps) = openLink(link)}> {title && {title}} - {body} + + {removeHtmlTagsAndEntities(body)} ) diff --git a/app/components/announcements/announcements-utils.tsx b/app/components/announcements/announcements-utils.tsx new file mode 100644 index 00000000..e81a2dc0 --- /dev/null +++ b/app/components/announcements/announcements-utils.tsx @@ -0,0 +1,6 @@ +/** + * Remove HTML tags and HTML entities from a given string. + */ +export function removeHtmlTagsAndEntities(input: string) { + return input.replace(/<[^>]+>|&[^;]+;/g, "") +} diff --git a/app/components/announcements/urgent-announcements.tsx b/app/components/announcements/urgent-announcements.tsx index 7efe5cbe..9e2b4b98 100644 --- a/app/components/announcements/urgent-announcements.tsx +++ b/app/components/announcements/urgent-announcements.tsx @@ -8,6 +8,7 @@ import { Text } from "../text/text" import { Screen } from "../screen/screen" import { useIsDarkMode } from "../../hooks" import { AnnouncementCard } from "./announcement-card" +import { removeHtmlTagsAndEntities } from "./announcements-utils" export const UrgentAnnouncements = () => { const isDarkMode = useIsDarkMode() @@ -17,8 +18,8 @@ export const UrgentAnnouncements = () => { 📣 - {messages?.map((m) => ( - + {messages?.map((message, index) => ( + ))} diff --git a/app/screens/planner/Important-announcement-bar.tsx b/app/screens/planner/Important-announcement-bar.tsx index 4b98331d..0c0b2c05 100644 --- a/app/screens/planner/Important-announcement-bar.tsx +++ b/app/screens/planner/Important-announcement-bar.tsx @@ -4,6 +4,7 @@ import Animated, { useAnimatedStyle, useSharedValue, withDelay, withTiming } fro import { color, fontScale } from "../../theme" import { useNavigation } from "@react-navigation/native" import analytics from "@react-native-firebase/analytics" +import { removeHtmlTagsAndEntities } from "../../components/announcements/announcements-utils" const TEXT_STYLE: TextStyle = { color: color.whiteText, @@ -63,8 +64,23 @@ export function ImportantAnnouncementBar({ title }: { title: string }) { onPress={navigateToAnnouncements} > - {title} + {truncateString(removeHtmlTagsAndEntities(title), 5)} ) } + +function truncateString(inputString, numWords) { + // Split the input string into an array of words + const words = inputString.split(" ") + + // Take the first 'numWords' words and join them back into a string + const truncatedString = words.slice(0, numWords).join(" ") + + // Add "..." to the end if there are more words in the original string + if (words.length > numWords) { + return truncatedString + " ..." + } else { + return truncatedString + } +} diff --git a/ios/BetterRail.xcodeproj/project.pbxproj b/ios/BetterRail.xcodeproj/project.pbxproj index d87d3abb..c3a21287 100644 --- a/ios/BetterRail.xcodeproj/project.pbxproj +++ b/ios/BetterRail.xcodeproj/project.pbxproj @@ -1156,14 +1156,14 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = BetterRail/BetterRailDebug.entitlements; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; ENABLE_BITCODE = NO; INFOPLIST_FILE = BetterRail/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1196,13 +1196,13 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; INFOPLIST_FILE = BetterRail/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1359,14 +1359,14 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; "CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=watchos*]" = UE6BVYPPFX; GCC_C_LANGUAGE_STANDARD = gnu11; IBSC_MODULE = WatchBetterRail_Extension; INFOPLIST_FILE = WatchBetterRail/Info.plist; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; @@ -1401,14 +1401,14 @@ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=watchos*]" = UE6BVYPPFX; GCC_C_LANGUAGE_STANDARD = gnu11; IBSC_MODULE = WatchBetterRail_Extension; INFOPLIST_FILE = WatchBetterRail/Info.plist; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = "il.co.better-rail.watchkitapp"; @@ -1437,7 +1437,7 @@ CODE_SIGN_ENTITLEMENTS = "WatchBetterRail Extension/WatchBetterRail Extension.entitlements"; "CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=watchos*]" = UE6BVYPPFX; @@ -1445,7 +1445,7 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "WatchBetterRail Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; @@ -1478,7 +1478,7 @@ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=watchos*]" = UE6BVYPPFX; @@ -1486,7 +1486,7 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "WatchBetterRail Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = "il.co.better-rail.watchkitapp.watchkitextension"; @@ -1516,7 +1516,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = BetterRailWidgetExtensionDebug.entitlements; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; @@ -1524,7 +1524,7 @@ INFOPLIST_FILE = BetterRailWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; @@ -1557,7 +1557,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; @@ -1565,7 +1565,7 @@ INFOPLIST_FILE = BetterRailWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = "il.co.better-rail.BetterRailWidget"; @@ -1590,7 +1590,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = StationIntent/StationIntentDebug.entitlements; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; @@ -1598,7 +1598,7 @@ INFOPLIST_FILE = StationIntent/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; @@ -1629,7 +1629,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = UE6BVYPPFX; @@ -1637,7 +1637,7 @@ INFOPLIST_FILE = StationIntent/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 2.2.0; + MARKETING_VERSION = 2.2.1; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = "il.co.better-rail.StationIntent"; diff --git a/ios/BetterRail/Info.plist b/ios/BetterRail/Info.plist index 392e5594..2d8daff4 100644 --- a/ios/BetterRail/Info.plist +++ b/ios/BetterRail/Info.plist @@ -23,7 +23,7 @@ CFBundleSignature ???? CFBundleVersion - 10 + 3 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/BetterRailWidget/Info.plist b/ios/BetterRailWidget/Info.plist index ed8aa94e..2dc31726 100644 --- a/ios/BetterRailWidget/Info.plist +++ b/ios/BetterRailWidget/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 10 + 3 NSExtension NSExtensionPointIdentifier diff --git a/ios/StationIntent/Info.plist b/ios/StationIntent/Info.plist index f6966602..8531d803 100644 --- a/ios/StationIntent/Info.plist +++ b/ios/StationIntent/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 10 + 3 NSExtension NSExtensionAttributes diff --git a/ios/WatchBetterRail Extension/Info.plist b/ios/WatchBetterRail Extension/Info.plist index 98e07170..e688a98d 100644 --- a/ios/WatchBetterRail Extension/Info.plist +++ b/ios/WatchBetterRail Extension/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 10 + 3 CLKComplicationPrincipalClass $(PRODUCT_MODULE_NAME).ComplicationController NSExtension diff --git a/ios/WatchBetterRail/Info.plist b/ios/WatchBetterRail/Info.plist index eef7ee52..d053b690 100644 --- a/ios/WatchBetterRail/Info.plist +++ b/ios/WatchBetterRail/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 10 + 3 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait