fix ios patch refact
This commit is contained in:
@@ -12,7 +12,17 @@
|
|||||||
// When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port.
|
// When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port.
|
||||||
...(IS_DEV || IS_TESTFLIGHT ? [] : []),
|
...(IS_DEV || IS_TESTFLIGHT ? [] : []),
|
||||||
]
|
]
|
||||||
@@ -38,27 +35,25 @@
|
@@ -35,34 +32,28 @@
|
||||||
|
|
||||||
|
const USE_SENTRY = Boolean(process.env.SENTRY_AUTH_TOKEN)
|
||||||
|
|
||||||
|
- const IOS_ICON_FILE =
|
||||||
|
- PLATFORM === 'web' // web build doesn't like .icon files
|
||||||
|
- ? './assets/app-icons/ios_icon_default_next.png'
|
||||||
|
- : IS_TESTFLIGHT
|
||||||
|
- ? './assets/app-icons/ios_icon_testflight.icon'
|
||||||
|
- : './assets/app-icons/ios_icon_default.icon'
|
||||||
|
-
|
||||||
return {
|
return {
|
||||||
expo: {
|
expo: {
|
||||||
version: VERSION,
|
version: VERSION,
|
||||||
@@ -39,15 +49,12 @@
|
|||||||
config: {
|
config: {
|
||||||
usesNonExemptEncryption: false,
|
usesNonExemptEncryption: false,
|
||||||
},
|
},
|
||||||
- icon:
|
- icon: IOS_ICON_FILE,
|
||||||
- PLATFORM === 'web' // web build doesn't like .icon files
|
|
||||||
- ? './assets/app-icons/ios_icon_default_next.png'
|
|
||||||
- : './assets/app-icons/ios_icon_default.icon',
|
|
||||||
+ icon: './assets/app-icon.png',
|
+ icon: './assets/app-icon.png',
|
||||||
infoPlist: {
|
infoPlist: {
|
||||||
UIBackgroundModes: ['remote-notification'],
|
UIBackgroundModes: ['remote-notification'],
|
||||||
NSCameraUsageDescription:
|
NSCameraUsageDescription:
|
||||||
@@ -118,7 +113,7 @@
|
@@ -121,7 +112,7 @@
|
||||||
entitlements: {
|
entitlements: {
|
||||||
'com.apple.developer.kernel.increased-memory-limit': true,
|
'com.apple.developer.kernel.increased-memory-limit': true,
|
||||||
'com.apple.developer.kernel.extended-virtual-addressing': true,
|
'com.apple.developer.kernel.extended-virtual-addressing': true,
|
||||||
@@ -56,7 +63,7 @@
|
|||||||
// 'com.apple.developer.device-information.user-assigned-device-name': true,
|
// 'com.apple.developer.device-information.user-assigned-device-name': true,
|
||||||
},
|
},
|
||||||
privacyManifests: {
|
privacyManifests: {
|
||||||
@@ -181,14 +176,14 @@
|
@@ -184,14 +175,14 @@
|
||||||
barStyle: 'light-content',
|
barStyle: 'light-content',
|
||||||
},
|
},
|
||||||
android: {
|
android: {
|
||||||
@@ -73,7 +80,7 @@
|
|||||||
intentFilters: [
|
intentFilters: [
|
||||||
{
|
{
|
||||||
action: 'VIEW',
|
action: 'VIEW',
|
||||||
@@ -196,7 +191,7 @@
|
@@ -199,7 +190,7 @@
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
scheme: 'https',
|
scheme: 'https',
|
||||||
@@ -82,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
...(IS_DEV
|
...(IS_DEV
|
||||||
? [
|
? [
|
||||||
@@ -280,7 +275,6 @@
|
@@ -290,7 +281,6 @@
|
||||||
networkInstrumentation: true,
|
networkInstrumentation: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -90,7 +97,7 @@
|
|||||||
'./plugins/withGradleJVMHeapSizeIncrease.js',
|
'./plugins/withGradleJVMHeapSizeIncrease.js',
|
||||||
'./plugins/withAndroidManifestLargeHeapPlugin.js',
|
'./plugins/withAndroidManifestLargeHeapPlugin.js',
|
||||||
'./plugins/withAndroidManifestFCMIconPlugin.js',
|
'./plugins/withAndroidManifestFCMIconPlugin.js',
|
||||||
@@ -288,8 +282,6 @@
|
@@ -298,8 +288,6 @@
|
||||||
'./plugins/withAndroidStylesAccentColorPlugin.js',
|
'./plugins/withAndroidStylesAccentColorPlugin.js',
|
||||||
'./plugins/withAndroidDayNightThemePlugin.js',
|
'./plugins/withAndroidDayNightThemePlugin.js',
|
||||||
'./plugins/withAndroidNoJitpackPlugin.js',
|
'./plugins/withAndroidNoJitpackPlugin.js',
|
||||||
@@ -99,7 +106,7 @@
|
|||||||
[
|
[
|
||||||
'expo-font',
|
'expo-font',
|
||||||
{
|
{
|
||||||
@@ -417,30 +409,7 @@
|
@@ -427,30 +415,7 @@
|
||||||
build: {
|
build: {
|
||||||
experimental: {
|
experimental: {
|
||||||
ios: {
|
ios: {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
diff --git a/src/Splash.tsx b/src/Splash.tsx
|
|
||||||
index 47e70b375..616f351ed 100644
|
|
||||||
--- a/src/Splash.tsx
|
--- a/src/Splash.tsx
|
||||||
+++ b/src/Splash.tsx
|
+++ b/src/Splash.tsx
|
||||||
@@ -15,8 +15,8 @@ import Animated, {
|
@@ -15,8 +15,8 @@
|
||||||
withTiming,
|
withTiming,
|
||||||
} from 'react-native-reanimated'
|
} from 'react-native-reanimated'
|
||||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||||
@@ -12,14 +10,14 @@ index 47e70b375..616f351ed 100644
|
|||||||
import * as SplashScreen from 'expo-splash-screen'
|
import * as SplashScreen from 'expo-splash-screen'
|
||||||
|
|
||||||
import {Logotype} from '#/view/icons/Logotype'
|
import {Logotype} from '#/view/icons/Logotype'
|
||||||
@@ -29,21 +29,18 @@ const darkSplashImageUri = RNImage.resolveAssetSource(
|
@@ -29,21 +29,18 @@
|
||||||
darkSplashImagePointer,
|
darkSplashImagePointer,
|
||||||
).uri
|
).uri
|
||||||
|
|
||||||
-export const Logo = React.forwardRef(function LogoImpl(props: SvgProps, ref) {
|
-export const Logo = forwardRef(function LogoImpl(props: SvgProps, ref) {
|
||||||
- const width = 1000
|
- const width = 1000
|
||||||
- const height = width * (67 / 64)
|
- const height = width * (67 / 64)
|
||||||
+export const Logo = React.forwardRef(function LogoImpl(props: SvgProps & {fill?: string}, ref) {
|
+export const Logo = forwardRef(function LogoImpl(props: SvgProps & {fill?: string}, ref) {
|
||||||
+ const size = 1000
|
+ const size = 1000
|
||||||
+ // @ts-ignore
|
+ // @ts-ignore
|
||||||
return (
|
return (
|
||||||
@@ -44,12 +42,10 @@ index 47e70b375..616f351ed 100644
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx
|
|
||||||
index 8a9e51a33..65d643b89 100644
|
|
||||||
--- a/src/view/com/util/UserAvatar.tsx
|
--- a/src/view/com/util/UserAvatar.tsx
|
||||||
+++ b/src/view/com/util/UserAvatar.tsx
|
+++ b/src/view/com/util/UserAvatar.tsx
|
||||||
@@ -444,7 +444,7 @@ let EditableUserAvatar = ({
|
@@ -446,7 +446,7 @@
|
||||||
<HighPriorityImage
|
<ExpoImage
|
||||||
testID="userAvatarImage"
|
testID="userAvatarImage"
|
||||||
style={aviStyle}
|
style={aviStyle}
|
||||||
- source={{uri: avatar}}
|
- source={{uri: avatar}}
|
||||||
@@ -57,157 +53,13 @@ index 8a9e51a33..65d643b89 100644
|
|||||||
accessibilityRole="image"
|
accessibilityRole="image"
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@@ -618,9 +618,8 @@ export {PreviewableUserAvatar}
|
@@ -617,7 +617,8 @@
|
||||||
// manually string-replace to use the smaller ones
|
// manually string-replace to use the smaller ones
|
||||||
// -prf
|
// -prf
|
||||||
function hackModifyThumbnailPath(uri: string, isEnabled: boolean): string {
|
function hackModifyThumbnailPath(uri: string, isEnabled: boolean): string {
|
||||||
- return isEnabled
|
- return isEnabled ? convertCdnPreset(uri, 'avatar_thumbnail') : uri
|
||||||
- ? uri.replace('/img/avatar/plain/', '/img/avatar_thumbnail/plain/')
|
|
||||||
- : uri
|
|
||||||
+ // syu.is: avatars are served directly from bsky.syu.is, no CDN transformation needed
|
+ // syu.is: avatars are served directly from bsky.syu.is, no CDN transformation needed
|
||||||
+ return uri
|
+ return uri
|
||||||
}
|
}
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
diff --git a/src/view/icons/Logo.tsx b/src/view/icons/Logo.tsx
|
|
||||||
index d7208df13..2763800ac 100644
|
|
||||||
--- a/src/view/icons/Logo.tsx
|
|
||||||
+++ b/src/view/icons/Logo.tsx
|
|
||||||
@@ -1,75 +1,17 @@
|
|
||||||
import React from 'react'
|
|
||||||
-import {type TextProps} from 'react-native'
|
|
||||||
-import Svg, {
|
|
||||||
- Defs,
|
|
||||||
- LinearGradient,
|
|
||||||
- Path,
|
|
||||||
- type PathProps,
|
|
||||||
- Stop,
|
|
||||||
- type SvgProps,
|
|
||||||
-} from 'react-native-svg'
|
|
||||||
import {Image} from 'expo-image'
|
|
||||||
+import {flatten} from '#/alf'
|
|
||||||
|
|
||||||
-import {useKawaiiMode} from '#/state/preferences/kawaii'
|
|
||||||
-import {flatten, useTheme} from '#/alf'
|
|
||||||
-
|
|
||||||
-const ratio = 57 / 64
|
|
||||||
-
|
|
||||||
-type Props = {
|
|
||||||
- fill?: PathProps['fill']
|
|
||||||
- style?: TextProps['style']
|
|
||||||
-} & Omit<SvgProps, 'style'>
|
|
||||||
-
|
|
||||||
-export const Logo = React.forwardRef(function LogoImpl(props: Props, ref) {
|
|
||||||
- const t = useTheme()
|
|
||||||
- const {fill, ...rest} = props
|
|
||||||
- const gradient = fill === 'sky'
|
|
||||||
- const styles = flatten(props.style)
|
|
||||||
- const _fill = gradient
|
|
||||||
- ? 'url(#sky)'
|
|
||||||
- : fill || styles?.color || t.palette.primary_500
|
|
||||||
- // @ts-ignore it's fiiiiine
|
|
||||||
- const size = parseInt(rest.width || 32, 10)
|
|
||||||
-
|
|
||||||
- const isKawaii = useKawaiiMode()
|
|
||||||
-
|
|
||||||
- if (isKawaii) {
|
|
||||||
- return (
|
|
||||||
- <Image
|
|
||||||
- source={
|
|
||||||
- size > 100
|
|
||||||
- ? require('../../../assets/kawaii.png')
|
|
||||||
- : require('../../../assets/kawaii_smol.png')
|
|
||||||
- }
|
|
||||||
- accessibilityLabel="Bluesky"
|
|
||||||
- accessibilityHint=""
|
|
||||||
- accessibilityIgnoresInvertColors
|
|
||||||
- style={[{height: size, aspectRatio: 1.4}]}
|
|
||||||
- />
|
|
||||||
- )
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
+export const Logo = React.forwardRef(function LogoImpl(props: any, ref) {
|
|
||||||
+ const {width, style} = props
|
|
||||||
+ // @ts-ignore
|
|
||||||
+ const size = parseInt(width || 32, 10)
|
|
||||||
return (
|
|
||||||
- <Svg
|
|
||||||
- fill="none"
|
|
||||||
- // @ts-ignore it's fiiiiine
|
|
||||||
- ref={ref}
|
|
||||||
- viewBox="0 0 64 57"
|
|
||||||
- {...rest}
|
|
||||||
- style={[{width: size, height: size * ratio}, styles]}>
|
|
||||||
- {gradient && (
|
|
||||||
- <Defs>
|
|
||||||
- <LinearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
|
|
||||||
- <Stop offset="0" stopColor="#0A7AFF" stopOpacity="1" />
|
|
||||||
- <Stop offset="1" stopColor="#59B9FF" stopOpacity="1" />
|
|
||||||
- </LinearGradient>
|
|
||||||
- </Defs>
|
|
||||||
- )}
|
|
||||||
-
|
|
||||||
- <Path
|
|
||||||
- fill={_fill}
|
|
||||||
- d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
|
|
||||||
- />
|
|
||||||
- </Svg>
|
|
||||||
+ <Image
|
|
||||||
+ source={require('../../../assets/logo.png')}
|
|
||||||
+ style={[{width: size, height: size}, flatten(style)]}
|
|
||||||
+ contentFit="contain"
|
|
||||||
+ accessibilityLabel="Logo"
|
|
||||||
+ />
|
|
||||||
)
|
|
||||||
})
|
|
||||||
diff --git a/src/view/icons/Logotype.tsx b/src/view/icons/Logotype.tsx
|
|
||||||
index 270c913fc..a60ffe07c 100644
|
|
||||||
--- a/src/view/icons/Logotype.tsx
|
|
||||||
+++ b/src/view/icons/Logotype.tsx
|
|
||||||
@@ -1,28 +1,22 @@
|
|
||||||
-import Svg, {Path, type PathProps, type SvgProps} from 'react-native-svg'
|
|
||||||
-
|
|
||||||
-import {usePalette} from '#/lib/hooks/usePalette'
|
|
||||||
-
|
|
||||||
-const ratio = 17 / 64
|
|
||||||
-
|
|
||||||
-export function Logotype({
|
|
||||||
- fill,
|
|
||||||
- ...rest
|
|
||||||
-}: {fill?: PathProps['fill']} & SvgProps) {
|
|
||||||
- const pal = usePalette('default')
|
|
||||||
- // @ts-ignore it's fiiiiine
|
|
||||||
- const size = parseInt(rest.width || 32)
|
|
||||||
+import React from 'react'
|
|
||||||
+import {Text} from 'react-native'
|
|
||||||
+import {useTheme, atoms as a} from '#/alf'
|
|
||||||
|
|
||||||
+export function Logotype({width, fill, style}: any) {
|
|
||||||
+ const t = useTheme()
|
|
||||||
+ const fontSize = width ? parseInt(width) / 3.5 : 22
|
|
||||||
+
|
|
||||||
return (
|
|
||||||
- <Svg
|
|
||||||
- fill="none"
|
|
||||||
- viewBox="0 0 64 17"
|
|
||||||
- {...rest}
|
|
||||||
- width={size}
|
|
||||||
- height={Number(size) * ratio}>
|
|
||||||
- <Path
|
|
||||||
- fill={fill || pal.text.color}
|
|
||||||
- d="M8.478 6.252c1.503.538 2.3 1.78 2.3 3.172 0 2.356-1.576 3.785-4.6 3.785H0V0h5.974c2.875 0 4.267 1.466 4.267 3.413 0 1.3-.594 2.245-1.763 2.839Zm-2.69-4.193H2.504v3.45h3.284c1.28 0 1.967-.667 1.967-1.78 0-1.02-.705-1.67-1.967-1.67Zm-3.284 9.072h3.544c1.41 0 2.17-.65 2.17-1.818 0-1.224-.723-1.837-2.17-1.837H2.504v3.655ZM14.251 13.209h-2.337V0h2.337v13.209ZM22.001 8.998V3.636h2.338v9.573h-2.263v-1.392c-.724 1.076-1.726 1.614-3.006 1.614-2.022 0-3.34-1.224-3.34-3.45V3.636h2.338v5.955c0 1.206.594 1.818 1.8 1.818 1.132 0 2.133-.835 2.133-2.411ZM34.979 8.59v.556h-7.161c.167 1.651 1.076 2.467 2.486 2.467 1.076 0 1.8-.463 2.189-1.372h2.244c-.5 1.947-2.17 3.19-4.452 3.19-1.428 0-2.579-.463-3.45-1.372-.872-.91-1.318-2.115-1.318-3.637 0-1.502.427-2.708 1.299-3.636.872-.909 2.004-1.372 3.432-1.372 1.447 0 2.597.482 3.45 1.428.854.946 1.28 2.208 1.28 3.747Zm-4.75-3.358c-1.28 0-2.17.742-2.393 2.281h4.805c-.204-1.391-1.057-2.281-2.411-2.281ZM40.16 13.469c-2.783 0-4.249-1.095-4.379-3.303h2.282c.13 1.188.724 1.633 2.134 1.633 1.261 0 1.892-.39 1.892-1.15 0-.687-.445-1.02-1.874-1.262l-1.094-.185c-2.097-.353-3.136-1.318-3.136-2.894 0-1.8 1.429-2.894 3.97-2.894 2.728 0 4.138 1.075 4.23 3.246h-2.207c-.056-1.169-.742-1.577-2.023-1.577-1.113 0-1.67.371-1.67 1.113 0 .668.483.965 1.596 1.169l1.206.186c2.32.426 3.32 1.28 3.32 2.912 0 1.93-1.557 3.006-4.247 3.006ZM54.667 13.209h-2.671l-2.783-4.453-1.447 1.447v3.006h-2.3V0h2.3v7.606l3.896-3.97h2.783l-3.618 3.618 3.84 5.955ZM60.772 6.048l.78-2.412H64l-3.692 10.352c-.39 1.057-.872 1.818-1.484 2.245-.612.426-1.484.63-2.634.63-.39 0-.724-.018-1.02-.055V14.97h.89c1.057 0 1.577-.65 1.577-1.54 0-.445-.149-1.094-.446-1.929l-2.746-7.866h2.487l.779 2.393c.575 1.8 1.076 3.58 1.521 5.343.408-1.521.928-3.302 1.54-5.324Z"
|
|
||||||
- />
|
|
||||||
- </Svg>
|
|
||||||
+ <Text style={[
|
|
||||||
+ a.font_bold,
|
|
||||||
+ {
|
|
||||||
+ fontSize,
|
|
||||||
+ color: fill || t.palette.primary_500,
|
|
||||||
+ letterSpacing: -0.5
|
|
||||||
+ },
|
|
||||||
+ style
|
|
||||||
+ ]}>
|
|
||||||
+ Aiat
|
|
||||||
+ </Text>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -34,191 +34,22 @@
|
|||||||
</SimpleInlineLinkText>
|
</SimpleInlineLinkText>
|
||||||
. You have been sent an email outlining the specific violation
|
. You have been sent an email outlining the specific violation
|
||||||
and suspension period, if applicable. You can appeal this
|
and suspension period, if applicable. You can appeal this
|
||||||
--- a/src/view/screens/PrivacyPolicy.tsx
|
--- a/src/view/shell/desktop/RightNav.tsx
|
||||||
+++ b/src/view/screens/PrivacyPolicy.tsx
|
+++ b/src/view/shell/desktop/RightNav.tsx
|
||||||
@@ -1,52 +1,49 @@
|
@@ -112,14 +112,14 @@
|
||||||
import React from 'react'
|
</>
|
||||||
-import {View} from 'react-native'
|
)}
|
||||||
-import {msg} from '@lingui/core/macro'
|
<InlineLinkText
|
||||||
-import {useLingui} from '@lingui/react'
|
- to="https://bsky.social/about/support/privacy-policy"
|
||||||
-import {Trans} from '@lingui/react/macro'
|
+ to="/support/privacy-policy"
|
||||||
-import {useFocusEffect} from '@react-navigation/native'
|
style={[t.atoms.text_contrast_medium]}
|
||||||
-
|
label={_(msg`Privacy`)}>
|
||||||
-import {usePalette} from '#/lib/hooks/usePalette'
|
{_(msg`Privacy`)}
|
||||||
-import {
|
</InlineLinkText>
|
||||||
- type CommonNavigatorParams,
|
<Text style={[t.atoms.text_contrast_low]}>{' ∙ '}</Text>
|
||||||
- type NativeStackScreenProps,
|
<InlineLinkText
|
||||||
-} from '#/lib/routes/types'
|
- to="https://bsky.social/about/support/tos"
|
||||||
-import {s} from '#/lib/styles'
|
+ to="/support/tos"
|
||||||
-import {useSetMinimalShellMode} from '#/state/shell'
|
style={[t.atoms.text_contrast_medium]}
|
||||||
-import {TextLink} from '#/view/com/util/Link'
|
label={_(msg`Terms`)}>
|
||||||
-import {Text} from '#/view/com/util/text/Text'
|
{_(msg`Terms`)}
|
||||||
-import {ScrollView} from '#/view/com/util/Views'
|
|
||||||
+import {ScrollView} from 'react-native'
|
|
||||||
import * as Layout from '#/components/Layout'
|
|
||||||
-import {ViewHeader} from '../com/util/ViewHeader'
|
|
||||||
+import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
|
||||||
+import {atoms as a, useTheme} from '#/alf'
|
|
||||||
+import {Text} from '#/components/Typography'
|
|
||||||
|
|
||||||
-type Props = NativeStackScreenProps<CommonNavigatorParams, 'PrivacyPolicy'>
|
|
||||||
-export const PrivacyPolicyScreen = (_props: Props) => {
|
|
||||||
- const pal = usePalette('default')
|
|
||||||
- const {_} = useLingui()
|
|
||||||
- const setMinimalShellMode = useSetMinimalShellMode()
|
|
||||||
+export function PrivacyPolicyScreen() {
|
|
||||||
+ useSetTitle('Privacy Policy')
|
|
||||||
+ const t = useTheme()
|
|
||||||
|
|
||||||
- useFocusEffect(
|
|
||||||
- React.useCallback(() => {
|
|
||||||
- setMinimalShellMode(false)
|
|
||||||
- }, [setMinimalShellMode]),
|
|
||||||
- )
|
|
||||||
-
|
|
||||||
return (
|
|
||||||
<Layout.Screen>
|
|
||||||
- <ViewHeader title={_(msg`Privacy Policy`)} />
|
|
||||||
- <ScrollView style={[s.hContentRegion, pal.view]}>
|
|
||||||
- <View style={[s.p20]}>
|
|
||||||
- <Text style={pal.text}>
|
|
||||||
- <Trans>
|
|
||||||
- The Privacy Policy has been moved to{' '}
|
|
||||||
- <TextLink
|
|
||||||
- style={pal.link}
|
|
||||||
- href="https://bsky.social/about/support/privacy-policy"
|
|
||||||
- text="bsky.social/about/support/privacy-policy"
|
|
||||||
- />
|
|
||||||
- </Trans>
|
|
||||||
- </Text>
|
|
||||||
- </View>
|
|
||||||
- <View style={s.footerSpacer} />
|
|
||||||
+ <ScrollView
|
|
||||||
+ style={[a.flex_1, {backgroundColor: t.palette.white}]}
|
|
||||||
+ contentContainerStyle={[a.p_lg, a.pt_5xl, a.pb_5xl]}>
|
|
||||||
+ <Text style={[a.text_2xl, a.font_bold, a.mb_lg]}>Privacy Policy</Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Data Collection</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ syu.is collects minimal data necessary to provide the service. This includes your account information, posts, and interactions on the AT Protocol network.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Data Storage</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ Your data is stored on the AT Protocol network. Posts and profile information are public by default as part of the decentralized social network.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Third Parties</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ We do not sell your personal information to third parties. Your data may be visible to other users and services on the AT Protocol network.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Contact</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ For privacy-related questions, please contact the administrator.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_xl, a.mb_md]}>日本語</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ syu.isはサービス提供に必要な最小限のデータのみを収集します。投稿やプロフィール情報はAT Protocolネットワーク上で公開されます。個人情報を第三者に販売することはありません。
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_sm, a.mt_xl, {color: t.palette.contrast_500}]}>
|
|
||||||
+ Last updated: 2026
|
|
||||||
+ </Text>
|
|
||||||
</ScrollView>
|
|
||||||
</Layout.Screen>
|
|
||||||
)
|
|
||||||
--- a/src/view/screens/TermsOfService.tsx
|
|
||||||
+++ b/src/view/screens/TermsOfService.tsx
|
|
||||||
@@ -1,50 +1,49 @@
|
|
||||||
import React from 'react'
|
|
||||||
-import {View} from 'react-native'
|
|
||||||
-import {msg} from '@lingui/core/macro'
|
|
||||||
-import {useLingui} from '@lingui/react'
|
|
||||||
-import {Trans} from '@lingui/react/macro'
|
|
||||||
-import {useFocusEffect} from '@react-navigation/native'
|
|
||||||
-
|
|
||||||
-import {usePalette} from '#/lib/hooks/usePalette'
|
|
||||||
-import {
|
|
||||||
- type CommonNavigatorParams,
|
|
||||||
- type NativeStackScreenProps,
|
|
||||||
-} from '#/lib/routes/types'
|
|
||||||
-import {s} from '#/lib/styles'
|
|
||||||
-import {useSetMinimalShellMode} from '#/state/shell'
|
|
||||||
-import {TextLink} from '#/view/com/util/Link'
|
|
||||||
-import {Text} from '#/view/com/util/text/Text'
|
|
||||||
-import {ScrollView} from '#/view/com/util/Views'
|
|
||||||
+import {ScrollView} from 'react-native'
|
|
||||||
import * as Layout from '#/components/Layout'
|
|
||||||
-import {ViewHeader} from '../com/util/ViewHeader'
|
|
||||||
+import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
|
||||||
+import {atoms as a, useTheme} from '#/alf'
|
|
||||||
+import {Text} from '#/components/Typography'
|
|
||||||
|
|
||||||
-type Props = NativeStackScreenProps<CommonNavigatorParams, 'TermsOfService'>
|
|
||||||
-export const TermsOfServiceScreen = (_props: Props) => {
|
|
||||||
- const pal = usePalette('default')
|
|
||||||
- const setMinimalShellMode = useSetMinimalShellMode()
|
|
||||||
- const {_} = useLingui()
|
|
||||||
+export function TermsOfServiceScreen() {
|
|
||||||
+ useSetTitle('Terms of Service')
|
|
||||||
+ const t = useTheme()
|
|
||||||
|
|
||||||
- useFocusEffect(
|
|
||||||
- React.useCallback(() => {
|
|
||||||
- setMinimalShellMode(false)
|
|
||||||
- }, [setMinimalShellMode]),
|
|
||||||
- )
|
|
||||||
-
|
|
||||||
return (
|
|
||||||
<Layout.Screen>
|
|
||||||
- <ViewHeader title={_(msg`Terms of Service`)} />
|
|
||||||
- <ScrollView style={[s.hContentRegion, pal.view]}>
|
|
||||||
- <View style={[s.p20]}>
|
|
||||||
- <Text style={pal.text}>
|
|
||||||
- <Trans>The Terms of Service have been moved to</Trans>{' '}
|
|
||||||
- <TextLink
|
|
||||||
- style={pal.link}
|
|
||||||
- href="https://bsky.social/about/support/tos"
|
|
||||||
- text="bsky.social/about/support/tos"
|
|
||||||
- />
|
|
||||||
- </Text>
|
|
||||||
- </View>
|
|
||||||
- <View style={s.footerSpacer} />
|
|
||||||
+ <ScrollView
|
|
||||||
+ style={[a.flex_1, {backgroundColor: t.palette.white}]}
|
|
||||||
+ contentContainerStyle={[a.p_lg, a.pt_5xl, a.pb_5xl]}>
|
|
||||||
+ <Text style={[a.text_2xl, a.font_bold, a.mb_lg]}>Terms of Service</Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Acceptance</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ By using syu.is, you agree to these terms. If you do not agree, please do not use the service.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Prohibited Content</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ Do not post illegal content, spam, or harass others. Do not impersonate others or spread misinformation.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Account Termination</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ The administrator reserves the right to suspend or terminate accounts that violate these terms.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Disclaimer</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ This service is provided "as is" without warranty of any kind.
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_lg, a.font_bold, a.mt_xl, a.mb_md]}>日本語</Text>
|
|
||||||
+ <Text style={[a.mb_md]}>
|
|
||||||
+ syu.isを利用することで、これらの利用規約に同意したものとみなします。違法なコンテンツの投稿、スパム、他者への嫌がらせは禁止です。管理者は規約違反のアカウントを停止する権利を有します。本サービスは現状のまま提供され、いかなる保証もありません。
|
|
||||||
+ </Text>
|
|
||||||
+
|
|
||||||
+ <Text style={[a.text_sm, a.mt_xl, {color: t.palette.contrast_500}]}>
|
|
||||||
+ Last updated: 2026
|
|
||||||
+ </Text>
|
|
||||||
</ScrollView>
|
|
||||||
</Layout.Screen>
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
--- a/src/view/com/posts/FollowingEmptyState.tsx
|
--- a/src/view/com/posts/FollowingEmptyState.tsx
|
||||||
+++ b/src/view/com/posts/FollowingEmptyState.tsx
|
+++ b/src/view/com/posts/FollowingEmptyState.tsx
|
||||||
@@ -1,38 +1,15 @@
|
@@ -1,38 +1,15 @@
|
||||||
import React from 'react'
|
import {useCallback} from 'react'
|
||||||
import {StyleSheet, View} from 'react-native'
|
import {StyleSheet, View} from 'react-native'
|
||||||
-import {
|
-import {
|
||||||
- FontAwesomeIcon,
|
- FontAwesomeIcon,
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
- const palInverted = usePalette('inverted')
|
- const palInverted = usePalette('inverted')
|
||||||
- const navigation = useNavigation<NavigationProp>()
|
- const navigation = useNavigation<NavigationProp>()
|
||||||
|
|
||||||
- const onPressFindAccounts = React.useCallback(() => {
|
- const onPressFindAccounts = useCallback(() => {
|
||||||
- if (IS_WEB) {
|
- if (IS_WEB) {
|
||||||
- navigation.navigate('Search', {})
|
- navigation.navigate('Search', {})
|
||||||
- } else {
|
- } else {
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
- }
|
- }
|
||||||
- }, [navigation])
|
- }, [navigation])
|
||||||
-
|
-
|
||||||
- const onPressDiscoverFeeds = React.useCallback(() => {
|
- const onPressDiscoverFeeds = useCallback(() => {
|
||||||
- navigation.navigate('Feeds')
|
- navigation.navigate('Feeds')
|
||||||
- }, [navigation])
|
- }, [navigation])
|
||||||
-
|
-
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
--- a/src/view/com/posts/FollowingEndOfFeed.tsx
|
--- a/src/view/com/posts/FollowingEndOfFeed.tsx
|
||||||
+++ b/src/view/com/posts/FollowingEndOfFeed.tsx
|
+++ b/src/view/com/posts/FollowingEndOfFeed.tsx
|
||||||
@@ -1,37 +1,14 @@
|
@@ -1,37 +1,14 @@
|
||||||
import React from 'react'
|
import {useCallback} from 'react'
|
||||||
import {Dimensions, StyleSheet, View} from 'react-native'
|
import {Dimensions, StyleSheet, View} from 'react-native'
|
||||||
-import {
|
-import {
|
||||||
- FontAwesomeIcon,
|
- FontAwesomeIcon,
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
- const palInverted = usePalette('inverted')
|
- const palInverted = usePalette('inverted')
|
||||||
- const navigation = useNavigation<NavigationProp>()
|
- const navigation = useNavigation<NavigationProp>()
|
||||||
|
|
||||||
- const onPressFindAccounts = React.useCallback(() => {
|
- const onPressFindAccounts = useCallback(() => {
|
||||||
- if (IS_WEB) {
|
- if (IS_WEB) {
|
||||||
- navigation.navigate('Search', {})
|
- navigation.navigate('Search', {})
|
||||||
- } else {
|
- } else {
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
- }
|
- }
|
||||||
- }, [navigation])
|
- }, [navigation])
|
||||||
-
|
-
|
||||||
- const onPressDiscoverFeeds = React.useCallback(() => {
|
- const onPressDiscoverFeeds = useCallback(() => {
|
||||||
- navigation.navigate('Feeds')
|
- navigation.navigate('Feeds')
|
||||||
- }, [navigation])
|
- }, [navigation])
|
||||||
-
|
-
|
||||||
@@ -230,7 +230,55 @@
|
|||||||
})
|
})
|
||||||
--- a/src/view/com/posts/PostFeed.tsx
|
--- a/src/view/com/posts/PostFeed.tsx
|
||||||
+++ b/src/view/com/posts/PostFeed.tsx
|
+++ b/src/view/com/posts/PostFeed.tsx
|
||||||
@@ -765,7 +765,7 @@
|
@@ -520,16 +520,17 @@
|
||||||
|
key: 'liveEventFeedsAndTrendingBanner-' + sliceIndex,
|
||||||
|
})
|
||||||
|
// Show composer prompt for Discover and Following feeds
|
||||||
|
- if (
|
||||||
|
- hasSession &&
|
||||||
|
- (feedUriOrActorDid === DISCOVER_FEED_URI ||
|
||||||
|
- feed === 'following')
|
||||||
|
- ) {
|
||||||
|
- arr.push({
|
||||||
|
- type: 'composerPrompt',
|
||||||
|
- key: 'composerPrompt-' + sliceIndex,
|
||||||
|
- })
|
||||||
|
- }
|
||||||
|
+ // Disabled: hide composer prompt
|
||||||
|
+ // if (
|
||||||
|
+ // hasSession &&
|
||||||
|
+ // (feedUriOrActorDid === DISCOVER_FEED_URI ||
|
||||||
|
+ // feed === 'following')
|
||||||
|
+ // ) {
|
||||||
|
+ // arr.push({
|
||||||
|
+ // type: 'composerPrompt',
|
||||||
|
+ // key: 'composerPrompt-' + sliceIndex,
|
||||||
|
+ // })
|
||||||
|
+ // }
|
||||||
|
} else if (sliceIndex === 15) {
|
||||||
|
if (areVideoFeedsEnabled && !trendingVideoDisabled) {
|
||||||
|
arr.push({
|
||||||
|
@@ -546,12 +547,13 @@
|
||||||
|
} else if (feedKind === 'following') {
|
||||||
|
if (sliceIndex === 0) {
|
||||||
|
// Show composer prompt for Following feed
|
||||||
|
- if (hasSession) {
|
||||||
|
- arr.push({
|
||||||
|
- type: 'composerPrompt',
|
||||||
|
- key: 'composerPrompt-' + sliceIndex,
|
||||||
|
- })
|
||||||
|
- }
|
||||||
|
+ // Disabled: hide composer prompt
|
||||||
|
+ // if (hasSession) {
|
||||||
|
+ // arr.push({
|
||||||
|
+ // type: 'composerPrompt',
|
||||||
|
+ // key: 'composerPrompt-' + sliceIndex,
|
||||||
|
+ // })
|
||||||
|
+ // }
|
||||||
|
}
|
||||||
|
} else if (feedKind === 'profile') {
|
||||||
|
if (sliceIndex === 5) {
|
||||||
|
@@ -771,7 +773,7 @@
|
||||||
} else if (row.type === 'feedShutdownMsg') {
|
} else if (row.type === 'feedShutdownMsg') {
|
||||||
return <FeedShutdownMsg feedUri={feedUriOrActorDid} />
|
return <FeedShutdownMsg feedUri={feedUriOrActorDid} />
|
||||||
} else if (row.type === 'interstitialFollows') {
|
} else if (row.type === 'interstitialFollows') {
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
--- a/bskyweb/cmd/bskyweb/server.go
|
|
||||||
+++ b/bskyweb/cmd/bskyweb/server.go
|
|
||||||
@@ -317,6 +317,14 @@ func serve(cctx *cli.Context) error {
|
|
||||||
e.GET("/support/tos", server.WebGeneric)
|
|
||||||
e.GET("/support/community-guidelines", server.WebGeneric)
|
|
||||||
e.GET("/support/copyright", server.WebGeneric)
|
|
||||||
+ e.GET("/support/privacy-policy", server.WebGeneric)
|
|
||||||
+ e.GET("/support/license", server.WebGeneric)
|
|
||||||
+ e.GET("/support/app", server.WebGeneric)
|
|
||||||
+ e.GET("/support/help", server.WebGeneric)
|
|
||||||
+ // /about/support/ paths (for web compatibility)
|
|
||||||
+ e.GET("/about/support/tos", server.WebGeneric)
|
|
||||||
+ e.GET("/about/support/privacy-policy", server.WebGeneric)
|
|
||||||
+ e.GET("/about/support/license", server.WebGeneric)
|
|
||||||
e.GET("/intent/compose", server.WebGeneric)
|
|
||||||
e.GET("/intent/verify-email", server.WebGeneric)
|
|
||||||
e.GET("/intent/age-assurance", server.WebGeneric)
|
|
||||||
@@ -1,4 +1,20 @@
|
|||||||
diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
|
--- a/bskyweb/cmd/bskyweb/server.go
|
||||||
|
+++ b/bskyweb/cmd/bskyweb/server.go
|
||||||
|
@@ -317,6 +317,14 @@
|
||||||
|
e.GET("/support/tos", server.WebGeneric)
|
||||||
|
e.GET("/support/community-guidelines", server.WebGeneric)
|
||||||
|
e.GET("/support/copyright", server.WebGeneric)
|
||||||
|
+ e.GET("/support/privacy-policy", server.WebGeneric)
|
||||||
|
+ e.GET("/support/license", server.WebGeneric)
|
||||||
|
+ e.GET("/support/app", server.WebGeneric)
|
||||||
|
+ e.GET("/support/help", server.WebGeneric)
|
||||||
|
+ // /about/support/ paths (for web compatibility)
|
||||||
|
+ e.GET("/about/support/tos", server.WebGeneric)
|
||||||
|
+ e.GET("/about/support/privacy-policy", server.WebGeneric)
|
||||||
|
+ e.GET("/about/support/license", server.WebGeneric)
|
||||||
|
e.GET("/intent/compose", server.WebGeneric)
|
||||||
|
e.GET("/intent/verify-email", server.WebGeneric)
|
||||||
|
e.GET("/intent/age-assurance", server.WebGeneric)
|
||||||
--- a/bskyweb/templates/base.html
|
--- a/bskyweb/templates/base.html
|
||||||
+++ b/bskyweb/templates/base.html
|
+++ b/bskyweb/templates/base.html
|
||||||
@@ -7,9 +7,9 @@
|
@@ -7,9 +7,9 @@
|
||||||
@@ -14,7 +30,7 @@ diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
|
|||||||
|
|
||||||
<!-- Hello Humans! API docs at https://atproto.com -->
|
<!-- Hello Humans! API docs at https://atproto.com -->
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@
|
@@ -158,7 +158,7 @@
|
||||||
<noscript>
|
<noscript>
|
||||||
<h1 lang="en">JavaScript Required</h1>
|
<h1 lang="en">JavaScript Required</h1>
|
||||||
<p lang="en">This is a heavily interactive web application, and JavaScript is required. Simple HTML interfaces are possible, but that is not what this is.
|
<p lang="en">This is a heavily interactive web application, and JavaScript is required. Simple HTML interfaces are possible, but that is not what this is.
|
||||||
@@ -23,10 +39,9 @@ diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
|
|||||||
{% block noscript_extra %}{% endblock %}
|
{% block noscript_extra %}{% endblock %}
|
||||||
</noscript>
|
</noscript>
|
||||||
{% endblock -%}
|
{% endblock -%}
|
||||||
diff --git a/bskyweb/templates/home.html b/bskyweb/templates/home.html
|
|
||||||
--- a/bskyweb/templates/home.html
|
--- a/bskyweb/templates/home.html
|
||||||
+++ b/bskyweb/templates/home.html
|
+++ b/bskyweb/templates/home.html
|
||||||
@@ -1,17 +1,17 @@
|
@@ -1,18 +1,18 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
-{% block head_title %}Bluesky{% endblock %}
|
-{% block head_title %}Bluesky{% endblock %}
|
||||||
@@ -50,7 +65,7 @@ diff --git a/bskyweb/templates/home.html b/bskyweb/templates/home.html
|
|||||||
+ <link rel="canonical" href="https://syu.is" />
|
+ <link rel="canonical" href="https://syu.is" />
|
||||||
|
|
||||||
<meta property="og:image" content="https://bsky.app/static/social-card-default-gradient.png" />
|
<meta property="og:image" content="https://bsky.app/static/social-card-default-gradient.png" />
|
||||||
diff --git a/bskyweb/templates/error.html b/bskyweb/templates/error.html
|
<meta property="twitter:image" content="https://bsky.app/static/social-card-default-gradient.png" />
|
||||||
--- a/bskyweb/templates/error.html
|
--- a/bskyweb/templates/error.html
|
||||||
+++ b/bskyweb/templates/error.html
|
+++ b/bskyweb/templates/error.html
|
||||||
@@ -1,6 +1,6 @@
|
@@ -1,6 +1,6 @@
|
||||||
@@ -61,7 +76,6 @@ diff --git a/bskyweb/templates/error.html b/bskyweb/templates/error.html
|
|||||||
|
|
||||||
{% block noscript_extra %}
|
{% block noscript_extra %}
|
||||||
{%- if statusCode == 404 %}
|
{%- if statusCode == 404 %}
|
||||||
diff --git a/bskyweb/templates/starterpack.html b/bskyweb/templates/starterpack.html
|
|
||||||
--- a/bskyweb/templates/starterpack.html
|
--- a/bskyweb/templates/starterpack.html
|
||||||
+++ b/bskyweb/templates/starterpack.html
|
+++ b/bskyweb/templates/starterpack.html
|
||||||
@@ -17,8 +17,8 @@
|
@@ -17,8 +17,8 @@
|
||||||
@@ -75,7 +89,6 @@ diff --git a/bskyweb/templates/starterpack.html b/bskyweb/templates/starterpack.
|
|||||||
{% endif -%}
|
{% endif -%}
|
||||||
<meta name="description" content="Join the conversation" />
|
<meta name="description" content="Join the conversation" />
|
||||||
<meta name="og:description" content="Join the conversation" />
|
<meta name="og:description" content="Join the conversation" />
|
||||||
diff --git a/web/index.html b/web/index.html
|
|
||||||
--- a/web/index.html
|
--- a/web/index.html
|
||||||
+++ b/web/index.html
|
+++ b/web/index.html
|
||||||
@@ -14,8 +14,8 @@
|
@@ -14,8 +14,8 @@
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/src/screens/Signup/StepInfo/index.tsx
|
--- a/src/screens/Signup/StepInfo/index.tsx
|
||||||
+++ b/src/screens/Signup/StepInfo/index.tsx
|
+++ b/src/screens/Signup/StepInfo/index.tsx
|
||||||
@@ -8,46 +8,18 @@
|
@@ -9,46 +9,18 @@
|
||||||
import {isEmailMaybeInvalid} from '#/lib/strings/email'
|
import {isEmailMaybeInvalid} from '#/lib/strings/email'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {useSignupContext} from '#/screens/Signup/state'
|
import {useSignupContext} from '#/screens/Signup/state'
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
export function StepInfo({
|
export function StepInfo({
|
||||||
onPressBack,
|
onPressBack,
|
||||||
isServerError,
|
isServerError,
|
||||||
@@ -72,22 +44,7 @@
|
@@ -73,22 +45,7 @@
|
||||||
|
|
||||||
const emailInputRef = useRef<TextInput>(null)
|
const emailInputRef = useRef<TextInput>(null)
|
||||||
const passwordInputRef = useRef<TextInput>(null)
|
const passwordInputRef = useRef<TextInput>(null)
|
||||||
@@ -67,10 +67,10 @@
|
|||||||
- : true
|
- : true
|
||||||
- const isDeviceGeolocationGranted = useIsDeviceGeolocationGranted()
|
- const isDeviceGeolocationGranted = useIsDeviceGeolocationGranted()
|
||||||
-
|
-
|
||||||
const [hasWarnedEmail, setHasWarnedEmail] = React.useState<boolean>(false)
|
const [hasWarnedEmail, setHasWarnedEmail] = useState<boolean>(false)
|
||||||
|
|
||||||
const tldtsRef = React.useRef<typeof tldts>(undefined)
|
const tldtsRef = useRef<typeof tldts>(undefined)
|
||||||
@@ -107,10 +64,6 @@
|
@@ -108,10 +65,6 @@
|
||||||
const emailChanged = prevEmailValueRef.current !== email
|
const emailChanged = prevEmailValueRef.current !== email
|
||||||
const password = passwordValueRef.current
|
const password = passwordValueRef.current
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
if (state.serviceDescription?.inviteCodeRequired && !inviteCode) {
|
if (state.serviceDescription?.inviteCodeRequired && !inviteCode) {
|
||||||
return dispatch({
|
return dispatch({
|
||||||
type: 'setError',
|
type: 'setError',
|
||||||
@@ -273,107 +226,16 @@
|
@@ -274,107 +227,16 @@
|
||||||
secureTextEntry
|
secureTextEntry
|
||||||
autoComplete="new-password"
|
autoComplete="new-password"
|
||||||
autoCapitalize="none"
|
autoCapitalize="none"
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
diff --git a/src/screens/Search/Explore.tsx b/src/screens/Search/Explore.tsx
|
|
||||||
--- a/src/screens/Search/Explore.tsx
|
|
||||||
+++ b/src/screens/Search/Explore.tsx
|
|
||||||
@@ -687,12 +687,7 @@ export function Explore({
|
|
||||||
|
|
||||||
if (useFullExperience) {
|
|
||||||
i.push(trendingTopicsModule)
|
|
||||||
- i.push(...suggestedFeedsModule)
|
|
||||||
- i.push(...suggestedFollowsModule)
|
|
||||||
- i.push(...suggestedStarterPacksModule)
|
|
||||||
i.push(...feedPreviewsModule)
|
|
||||||
- } else {
|
|
||||||
- i.push(...suggestedFollowsModule)
|
|
||||||
}
|
|
||||||
|
|
||||||
return i
|
|
||||||
@@ -1,7 +1,21 @@
|
|||||||
diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx
|
--- a/src/screens/Search/Explore.tsx
|
||||||
|
+++ b/src/screens/Search/Explore.tsx
|
||||||
|
@@ -726,12 +726,7 @@
|
||||||
|
|
||||||
|
if (useFullExperience) {
|
||||||
|
i.push(trendingTopicsModule)
|
||||||
|
- i.push(...suggestedFeedsModule)
|
||||||
|
- i.push(...suggestedFollowsModule)
|
||||||
|
- i.push(...suggestedStarterPacksModule)
|
||||||
|
i.push(...feedPreviewsModule)
|
||||||
|
- } else {
|
||||||
|
- i.push(...suggestedFollowsModule)
|
||||||
|
}
|
||||||
|
|
||||||
|
return i
|
||||||
--- a/src/view/screens/Feeds.tsx
|
--- a/src/view/screens/Feeds.tsx
|
||||||
+++ b/src/view/screens/Feeds.tsx
|
+++ b/src/view/screens/Feeds.tsx
|
||||||
@@ -288,80 +288,7 @@ export function FeedsScreen(_props: Props) {
|
@@ -289,80 +289,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx
|
|
||||||
--- a/src/view/com/home/HomeHeader.tsx
|
--- a/src/view/com/home/HomeHeader.tsx
|
||||||
+++ b/src/view/com/home/HomeHeader.tsx
|
+++ b/src/view/com/home/HomeHeader.tsx
|
||||||
@@ -3,7 +3,6 @@ import {useNavigation} from '@react-navigation/native'
|
@@ -3,7 +3,6 @@
|
||||||
|
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
import {type FeedSourceInfo} from '#/state/queries/feed'
|
import {type FeedSourceInfo} from '#/state/queries/feed'
|
||||||
@@ -9,13 +8,14 @@ diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx
|
|||||||
import {type RenderTabBarFnProps} from '#/view/com/pager/Pager'
|
import {type RenderTabBarFnProps} from '#/view/com/pager/Pager'
|
||||||
import {TabBar} from '../pager/TabBar'
|
import {TabBar} from '../pager/TabBar'
|
||||||
import {HomeHeaderLayout} from './HomeHeaderLayout'
|
import {HomeHeaderLayout} from './HomeHeaderLayout'
|
||||||
@@ -16,17 +15,15 @@ export function HomeHeader(
|
@@ -16,16 +15,14 @@
|
||||||
|
},
|
||||||
) {
|
) {
|
||||||
const {feeds, onSelect: onSelectProp} = props
|
const {feeds, onSelect: onSelectProp} = props
|
||||||
- const {hasSession} = useSession()
|
- const {hasSession} = useSession()
|
||||||
const navigation = useNavigation<NavigationProp>()
|
const navigation = useNavigation<NavigationProp>()
|
||||||
|
|
||||||
const hasPinnedCustom = React.useMemo<boolean>(() => {
|
const hasPinnedCustom = useMemo<boolean>(() => {
|
||||||
- if (!hasSession) return false
|
- if (!hasSession) return false
|
||||||
return feeds.some(tab => {
|
return feeds.some(tab => {
|
||||||
const isFollowing = tab.uri === 'following'
|
const isFollowing = tab.uri === 'following'
|
||||||
@@ -24,5 +24,5 @@ diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx
|
|||||||
- }, [feeds, hasSession])
|
- }, [feeds, hasSession])
|
||||||
+ }, [feeds])
|
+ }, [feeds])
|
||||||
|
|
||||||
const items = React.useMemo(() => {
|
const items = useMemo(() => {
|
||||||
const pinnedNames = feeds.map(f => f.displayName)
|
const pinnedNames = feeds.map(f => f.displayName)
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
@@ -47,6 +50,103 @@
|
@@ -45,8 +48,106 @@
|
||||||
|
import {ProfileHeaderHandle} from './Handle'
|
||||||
|
import {ProfileHeaderMetrics} from './Metrics'
|
||||||
import {ProfileHeaderShell} from './Shell'
|
import {ProfileHeaderShell} from './Shell'
|
||||||
|
+import {ProfileAtLinks} from './ProfileAtLinks'
|
||||||
import {ProfileHeaderSuggestedFollows} from './SuggestedFollows'
|
import {ProfileHeaderSuggestedFollows} from './SuggestedFollows'
|
||||||
|
|
||||||
+const SERVICE_FAVICONS: Record<string, any> = {
|
+const SERVICE_FAVICONS: Record<string, any> = {
|
||||||
@@ -122,11 +125,12 @@
|
|||||||
interface Props {
|
interface Props {
|
||||||
profile: AppBskyActorDefs.ProfileViewDetailed
|
profile: AppBskyActorDefs.ProfileViewDetailed
|
||||||
descriptionRT: RichTextAPI | null
|
descriptionRT: RichTextAPI | null
|
||||||
@@ -152,6 +252,7 @@
|
@@ -152,6 +253,8 @@
|
||||||
{!isPlaceholderProfile && !isBlockedUser && (
|
{!isPlaceholderProfile && !isBlockedUser && (
|
||||||
<View style={a.gap_md}>
|
<View style={a.gap_md}>
|
||||||
<ProfileHeaderMetrics profile={profile} />
|
<ProfileHeaderMetrics profile={profile} />
|
||||||
+ <ProfileServiceLinks profile={profile} />
|
+ <ProfileServiceLinks profile={profile} />
|
||||||
|
+ <ProfileAtLinks profile={profile} />
|
||||||
{descriptionRT && !moderation.ui('profileView').blur ? (
|
{descriptionRT && !moderation.ui('profileView').blur ? (
|
||||||
<View pointerEvents="auto">
|
<View pointerEvents="auto">
|
||||||
<RichText
|
<RichText
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
--- a/src/view/com/posts/PostFeed.tsx 2026-02-16 02:19:59
|
|
||||||
+++ b/src/view/com/posts/PostFeed.tsx 2026-02-16 02:20:13
|
|
||||||
@@ -519,16 +519,17 @@
|
|
||||||
key: 'liveEventFeedsAndTrendingBanner-' + sliceIndex,
|
|
||||||
})
|
|
||||||
// Show composer prompt for Discover and Following feeds
|
|
||||||
- if (
|
|
||||||
- hasSession &&
|
|
||||||
- (feedUriOrActorDid === DISCOVER_FEED_URI ||
|
|
||||||
- feed === 'following')
|
|
||||||
- ) {
|
|
||||||
- arr.push({
|
|
||||||
- type: 'composerPrompt',
|
|
||||||
- key: 'composerPrompt-' + sliceIndex,
|
|
||||||
- })
|
|
||||||
- }
|
|
||||||
+ // Disabled: hide composer prompt
|
|
||||||
+ // if (
|
|
||||||
+ // hasSession &&
|
|
||||||
+ // (feedUriOrActorDid === DISCOVER_FEED_URI ||
|
|
||||||
+ // feed === 'following')
|
|
||||||
+ // ) {
|
|
||||||
+ // arr.push({
|
|
||||||
+ // type: 'composerPrompt',
|
|
||||||
+ // key: 'composerPrompt-' + sliceIndex,
|
|
||||||
+ // })
|
|
||||||
+ // }
|
|
||||||
} else if (sliceIndex === 15) {
|
|
||||||
if (areVideoFeedsEnabled && !trendingVideoDisabled) {
|
|
||||||
arr.push({
|
|
||||||
@@ -545,12 +546,13 @@
|
|
||||||
} else if (feedKind === 'following') {
|
|
||||||
if (sliceIndex === 0) {
|
|
||||||
// Show composer prompt for Following feed
|
|
||||||
- if (hasSession) {
|
|
||||||
- arr.push({
|
|
||||||
- type: 'composerPrompt',
|
|
||||||
- key: 'composerPrompt-' + sliceIndex,
|
|
||||||
- })
|
|
||||||
- }
|
|
||||||
+ // Disabled: hide composer prompt
|
|
||||||
+ // if (hasSession) {
|
|
||||||
+ // arr.push({
|
|
||||||
+ // type: 'composerPrompt',
|
|
||||||
+ // key: 'composerPrompt-' + sliceIndex,
|
|
||||||
+ // })
|
|
||||||
+ // }
|
|
||||||
}
|
|
||||||
} else if (feedKind === 'profile') {
|
|
||||||
if (sliceIndex === 5) {
|
|
||||||
@@ -58,3 +58,15 @@
|
|||||||
|
|
||||||
<Animated.View
|
<Animated.View
|
||||||
entering={FadeIn.duration(90)}
|
entering={FadeIn.duration(90)}
|
||||||
|
@@ -119,8 +140,9 @@
|
||||||
|
accessibilityHint={_(
|
||||||
|
msg`Opens flow to sign in to your existing Bluesky account`,
|
||||||
|
)}
|
||||||
|
- size="large">
|
||||||
|
- <ButtonText style={{color: 'white'}}>
|
||||||
|
+ size="large"
|
||||||
|
+ color="primary">
|
||||||
|
+ <ButtonText>
|
||||||
|
<Trans>Sign in</Trans>
|
||||||
|
</ButtonText>
|
||||||
|
</Button>
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
--- a/src/view/com/auth/SplashScreen.tsx 2026-02-16 02:55:08
|
|
||||||
+++ b/src/view/com/auth/SplashScreen.tsx 2026-02-16 02:55:16
|
|
||||||
@@ -118,8 +118,9 @@
|
|
||||||
accessibilityHint={_(
|
|
||||||
msg`Opens flow to sign in to your existing Bluesky account`,
|
|
||||||
)}
|
|
||||||
- size="large">
|
|
||||||
- <ButtonText style={{color: 'white'}}>
|
|
||||||
+ size="large"
|
|
||||||
+ color="primary">
|
|
||||||
+ <ButtonText>
|
|
||||||
<Trans>Sign in</Trans>
|
|
||||||
</ButtonText>
|
|
||||||
</Button>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
--- a/src/screens/Profile/Header/ProfileHeaderStandard.tsx
|
|
||||||
+++ b/src/screens/Profile/Header/ProfileHeaderStandard.tsx
|
|
||||||
@@ -48,6 +48,7 @@
|
|
||||||
import {ProfileHeaderHandle} from './Handle'
|
|
||||||
import {ProfileHeaderMetrics} from './Metrics'
|
|
||||||
import {ProfileHeaderShell} from './Shell'
|
|
||||||
+import {ProfileAtLinks} from './ProfileAtLinks'
|
|
||||||
import {ProfileHeaderSuggestedFollows} from './SuggestedFollows'
|
|
||||||
|
|
||||||
const SERVICE_FAVICONS: Record<string, any> = {
|
|
||||||
@@ -253,6 +254,7 @@
|
|
||||||
<View style={a.gap_md}>
|
|
||||||
<ProfileHeaderMetrics profile={profile} />
|
|
||||||
<ProfileServiceLinks profile={profile} />
|
|
||||||
+ <ProfileAtLinks profile={profile} />
|
|
||||||
{descriptionRT && !moderation.ui('profileView').blur ? (
|
|
||||||
<View pointerEvents="auto">
|
|
||||||
<RichText
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
--- a/src/view/shell/desktop/RightNav.tsx
|
|
||||||
+++ b/src/view/shell/desktop/RightNav.tsx
|
|
||||||
@@ -111,14 +111,14 @@
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
<InlineLinkText
|
|
||||||
- to="https://bsky.social/about/support/privacy-policy"
|
|
||||||
+ to="/support/privacy-policy"
|
|
||||||
style={[t.atoms.text_contrast_medium]}
|
|
||||||
label={_(msg`Privacy`)}>
|
|
||||||
{_(msg`Privacy`)}
|
|
||||||
</InlineLinkText>
|
|
||||||
<Text style={[t.atoms.text_contrast_low]}>{' ∙ '}</Text>
|
|
||||||
<InlineLinkText
|
|
||||||
- to="https://bsky.social/about/support/tos"
|
|
||||||
+ to="/support/tos"
|
|
||||||
style={[t.atoms.text_contrast_medium]}
|
|
||||||
label={_(msg`Terms`)}>
|
|
||||||
{_(msg`Terms`)}
|
|
||||||
17
ios/patching/Logo.tsx
Normal file
17
ios/patching/Logo.tsx
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import {forwardRef} from 'react'
|
||||||
|
import {Image} from 'expo-image'
|
||||||
|
import {flatten} from '#/alf'
|
||||||
|
|
||||||
|
export const Logo = forwardRef(function LogoImpl(props: any, ref) {
|
||||||
|
const {width, style} = props
|
||||||
|
// @ts-ignore
|
||||||
|
const size = parseInt(width || 32, 10)
|
||||||
|
return (
|
||||||
|
<Image
|
||||||
|
source={require('../../../assets/logo.png')}
|
||||||
|
style={[{width: size, height: size}, flatten(style)]}
|
||||||
|
contentFit="contain"
|
||||||
|
accessibilityLabel="Logo"
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
})
|
||||||
22
ios/patching/Logotype.tsx
Normal file
22
ios/patching/Logotype.tsx
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import {Text} from 'react-native'
|
||||||
|
import {useTheme, atoms as a} from '#/alf'
|
||||||
|
|
||||||
|
export function Logotype({width, fill, style}: any) {
|
||||||
|
const t = useTheme()
|
||||||
|
const fontSize = width ? parseInt(width) / 3.5 : 22
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Text style={[
|
||||||
|
a.font_bold,
|
||||||
|
{
|
||||||
|
fontSize,
|
||||||
|
color: fill || t.palette.primary_500,
|
||||||
|
letterSpacing: -0.5
|
||||||
|
},
|
||||||
|
style
|
||||||
|
]}>
|
||||||
|
Aiat
|
||||||
|
</Text>
|
||||||
|
)
|
||||||
|
}
|
||||||
50
ios/patching/PrivacyPolicy.tsx
Normal file
50
ios/patching/PrivacyPolicy.tsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import {useCallback} from 'react'
|
||||||
|
import {ScrollView} from 'react-native'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
||||||
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
|
import {Text} from '#/components/Typography'
|
||||||
|
|
||||||
|
export function PrivacyPolicyScreen() {
|
||||||
|
useSetTitle('Privacy Policy')
|
||||||
|
const t = useTheme()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen>
|
||||||
|
<ScrollView
|
||||||
|
style={[a.flex_1, {backgroundColor: t.palette.white}]}
|
||||||
|
contentContainerStyle={[a.p_lg, a.pt_5xl, a.pb_5xl]}>
|
||||||
|
<Text style={[a.text_2xl, a.font_bold, a.mb_lg]}>Privacy Policy</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Data Collection</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
syu.is collects minimal data necessary to provide the service. This includes your account information, posts, and interactions on the AT Protocol network.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Data Storage</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
Your data is stored on the AT Protocol network. Posts and profile information are public by default as part of the decentralized social network.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Third Parties</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
We do not sell your personal information to third parties. Your data may be visible to other users and services on the AT Protocol network.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Contact</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
For privacy-related questions, please contact the administrator.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_xl, a.mb_md]}>日本語</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
syu.isはサービス提供に必要な最小限のデータのみを収集します。投稿やプロフィール情報はAT Protocolネットワーク上で公開されます。個人情報を第三者に販売することはありません。
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_sm, a.mt_xl, {color: t.palette.contrast_500}]}>
|
||||||
|
Last updated: 2026
|
||||||
|
</Text>
|
||||||
|
</ScrollView>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
50
ios/patching/TermsOfService.tsx
Normal file
50
ios/patching/TermsOfService.tsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import {useCallback} from 'react'
|
||||||
|
import {ScrollView} from 'react-native'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
||||||
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
|
import {Text} from '#/components/Typography'
|
||||||
|
|
||||||
|
export function TermsOfServiceScreen() {
|
||||||
|
useSetTitle('Terms of Service')
|
||||||
|
const t = useTheme()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen>
|
||||||
|
<ScrollView
|
||||||
|
style={[a.flex_1, {backgroundColor: t.palette.white}]}
|
||||||
|
contentContainerStyle={[a.p_lg, a.pt_5xl, a.pb_5xl]}>
|
||||||
|
<Text style={[a.text_2xl, a.font_bold, a.mb_lg]}>Terms of Service</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Acceptance</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
By using syu.is, you agree to these terms. If you do not agree, please do not use the service.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Prohibited Content</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
Do not post illegal content, spam, or harass others. Do not impersonate others or spread misinformation.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Account Termination</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
The administrator reserves the right to suspend or terminate accounts that violate these terms.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_lg, a.mb_md]}>Disclaimer</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
This service is provided "as is" without warranty of any kind.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_lg, a.font_bold, a.mt_xl, a.mb_md]}>日本語</Text>
|
||||||
|
<Text style={[a.mb_md]}>
|
||||||
|
syu.isを利用することで、これらの利用規約に同意したものとみなします。違法なコンテンツの投稿、スパム、他者への嫌がらせは禁止です。管理者は規約違反のアカウントを停止する権利を有します。本サービスは現状のまま提供され、いかなる保証もありません。
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Text style={[a.text_sm, a.mt_xl, {color: t.palette.contrast_500}]}>
|
||||||
|
Last updated: 2026
|
||||||
|
</Text>
|
||||||
|
</ScrollView>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -22,9 +22,9 @@ typeset -a PATCH_FILES_IOS
|
|||||||
PATCH_FILES_IOS=(
|
PATCH_FILES_IOS=(
|
||||||
"001-social-app-ios-config.patch"
|
"001-social-app-ios-config.patch"
|
||||||
"002-social-app-ios-lib.patch"
|
"002-social-app-ios-lib.patch"
|
||||||
"003-social-app-ios-view.patch"
|
"003-social-app-ios-view.patch" # Splash + UserAvatar (Logo/Logotype → copy)
|
||||||
"004-social-app-ios-core.patch"
|
"004-social-app-ios-core.patch"
|
||||||
"005-social-app-ios-screens.patch"
|
"005-social-app-ios-screens.patch" # AboutSettings + Takendown + RightNav (PrivacyPolicy/TOS → copy)
|
||||||
"006-social-app-ios-shell.patch"
|
"006-social-app-ios-shell.patch"
|
||||||
"007-social-app-ios-misc.patch"
|
"007-social-app-ios-misc.patch"
|
||||||
"009-social-app-ios-license.patch"
|
"009-social-app-ios-license.patch"
|
||||||
@@ -33,25 +33,19 @@ PATCH_FILES_IOS=(
|
|||||||
"013-social-app-ios-settings-remove-help.patch"
|
"013-social-app-ios-settings-remove-help.patch"
|
||||||
"019-social-app-ios-entitlements-plugin.patch"
|
"019-social-app-ios-entitlements-plugin.patch"
|
||||||
"020-social-app-ios-bypass-age-assurance.patch"
|
"020-social-app-ios-bypass-age-assurance.patch"
|
||||||
"021-social-app-ios-clean-feed.patch"
|
"021-social-app-ios-clean-feed.patch" # DiscoverFallback + Empty/End + PostFeed (merged 040)
|
||||||
"022-social-app-ios-bskyweb-support-pages.patch"
|
"022-social-app-ios-bskyweb.patch" # bskyweb routes + templates (merged 025)
|
||||||
"023-social-app-ios-disable-dm.patch"
|
"023-social-app-ios-disable-dm.patch"
|
||||||
"024-social-app-ios-disable-external-services.patch"
|
"024-social-app-ios-disable-external-services.patch"
|
||||||
"025-social-app-ios-bskyweb-title.patch"
|
|
||||||
"027-social-app-ios-remove-birthdate.patch"
|
"027-social-app-ios-remove-birthdate.patch"
|
||||||
"028-social-app-ios-remove-discover-feeds.patch"
|
"028-social-app-ios-remove-discover.patch" # Explore + Feeds (merged 029)
|
||||||
"029-social-app-ios-remove-feeds-discover.patch"
|
|
||||||
"032-social-app-ios-feed-loggedout.patch"
|
"032-social-app-ios-feed-loggedout.patch"
|
||||||
"033-social-app-ios-hide-profile-tabs.patch"
|
"033-social-app-ios-hide-profile-tabs.patch"
|
||||||
"036-social-app-ios-homeheader-loggedout.patch"
|
"036-social-app-ios-homeheader-loggedout.patch"
|
||||||
"037-social-app-ios-disable-contacts-nux.patch"
|
"037-social-app-ios-disable-contacts-nux.patch"
|
||||||
"038-social-app-ios-profile-services.patch"
|
"038-social-app-ios-profile-services.patch" # ProfileServiceLinks + ProfileAtLinks (merged 042)
|
||||||
"039-social-app-ios-hide-feed-controls.patch"
|
"039-social-app-ios-hide-feed-controls.patch"
|
||||||
"040-social-app-ios-hide-composer-prompt.patch"
|
"041-social-app-ios-splash-custom.patch" # signin-button + splash-video (merged 044)
|
||||||
"041-social-app-ios-splash-signin-button.patch"
|
|
||||||
"042-social-app-ios-at-links.patch"
|
|
||||||
"043-social-app-ios-rightnav-links.patch"
|
|
||||||
"044-social-app-ios-splash-video.patch"
|
|
||||||
"045-social-app-ios-composer-cancel.patch"
|
"045-social-app-ios-composer-cancel.patch"
|
||||||
"046-social-app-ios-null-url-guards.patch"
|
"046-social-app-ios-null-url-guards.patch"
|
||||||
)
|
)
|
||||||
@@ -218,6 +212,24 @@ function ios-copy-new-files() {
|
|||||||
echo "✅ Copied ProfileAtLinks.tsx"
|
echo "✅ Copied ProfileAtLinks.tsx"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Copy full-replacement files (upstream-proof: not affected by import changes)
|
||||||
|
if [ -f "$patching_dir/Logo.tsx" ]; then
|
||||||
|
cp "$patching_dir/Logo.tsx" "$target_dir/src/view/icons/Logo.tsx"
|
||||||
|
echo "✅ Copied Logo.tsx"
|
||||||
|
fi
|
||||||
|
if [ -f "$patching_dir/Logotype.tsx" ]; then
|
||||||
|
cp "$patching_dir/Logotype.tsx" "$target_dir/src/view/icons/Logotype.tsx"
|
||||||
|
echo "✅ Copied Logotype.tsx"
|
||||||
|
fi
|
||||||
|
if [ -f "$patching_dir/PrivacyPolicy.tsx" ]; then
|
||||||
|
cp "$patching_dir/PrivacyPolicy.tsx" "$target_dir/src/view/screens/PrivacyPolicy.tsx"
|
||||||
|
echo "✅ Copied PrivacyPolicy.tsx"
|
||||||
|
fi
|
||||||
|
if [ -f "$patching_dir/TermsOfService.tsx" ]; then
|
||||||
|
cp "$patching_dir/TermsOfService.tsx" "$target_dir/src/view/screens/TermsOfService.tsx"
|
||||||
|
echo "✅ Copied TermsOfService.tsx"
|
||||||
|
fi
|
||||||
|
|
||||||
# Copy pre-generated favicons for bskyweb
|
# Copy pre-generated favicons for bskyweb
|
||||||
local favicon_src="$d/ios/assets/favicons"
|
local favicon_src="$d/ios/assets/favicons"
|
||||||
local bskyweb_static="$target_dir/bskyweb/static"
|
local bskyweb_static="$target_dir/bskyweb/static"
|
||||||
|
|||||||
Reference in New Issue
Block a user