From 6533d7dd084ad8cdd479a0d9b416f94c809d96e1 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Mon, 13 Mar 2023 20:34:01 -0500 Subject: [PATCH] Add /support and /support/privacy --- ios/Podfile.lock | 4 +- package.json | 2 +- src/Navigation.tsx | 4 + src/lib/routes/types.ts | 2 + src/locale/en/privacy-policy.tsx | 608 ++++++++++++++++++++++++++++ src/routes.ts | 2 + src/view/com/util/Html.tsx | 133 ++++++ src/view/com/util/Link.tsx | 4 +- src/view/com/util/Views.web.tsx | 2 +- src/view/screens/PrivacyPolicy.tsx | 38 ++ src/view/screens/Support.tsx | 44 ++ src/view/shell/desktop/RightNav.tsx | 24 +- yarn.lock | 8 +- 13 files changed, 859 insertions(+), 16 deletions(-) create mode 100644 src/locale/en/privacy-policy.tsx create mode 100644 src/view/com/util/Html.tsx create mode 100644 src/view/screens/PrivacyPolicy.tsx create mode 100644 src/view/screens/Support.tsx diff --git a/ios/Podfile.lock b/ios/Podfile.lock index dcfef41b..d6d28c5e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -401,7 +401,7 @@ PODS: - React-Core - react-native-version-number (0.3.6): - React - - react-native-webview (11.26.0): + - react-native-webview (11.26.1): - React-Core - React-perflogger (0.71.3) - React-RCTActionSheet (0.71.3): @@ -869,7 +869,7 @@ SPEC CHECKSUMS: react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457 react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f - react-native-webview: 994b9f8fbb504d6314dc40d83f94f27c6831b3bf + react-native-webview: 9f111dfbcfc826084d6c507f569e5e03342ee1c1 React-perflogger: af8a3d31546077f42d729b949925cc4549f14def React-RCTActionSheet: 57cc5adfefbaaf0aae2cf7e10bccd746f2903673 React-RCTAnimation: 11c61e94da700c4dc915cf134513764d87fc5e2b diff --git a/package.json b/package.json index 50a9e612..41f25192 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "react-native-web": "^0.18.11", "react-native-web-linear-gradient": "^1.1.2", "react-native-web-webview": "^1.0.2", - "react-native-webview": "11.26.0", + "react-native-webview": "^11.26.1", "react-native-youtube-iframe": "^2.2.2", "rn-fetch-blob": "^0.12.0", "tippy.js": "^6.3.7", diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 22d8d8b2..2bfc84ea 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -35,6 +35,8 @@ import {PostUpvotedByScreen} from './view/screens/PostUpvotedBy' import {PostRepostedByScreen} from './view/screens/PostRepostedBy' import {DebugScreen} from './view/screens/Debug' import {LogScreen} from './view/screens/Log' +import {SupportScreen} from './view/screens/Support' +import {PrivacyPolicyScreen} from './view/screens/PrivacyPolicy' const navigationRef = createNavigationContainerRef() @@ -64,6 +66,8 @@ function commonScreens(Stack: typeof HomeTab) { + + ) } diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index e339a46b..9ec62397 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -14,6 +14,8 @@ export type CommonNavigatorParams = { PostRepostedBy: {name: string; rkey: string} Debug: undefined Log: undefined + Support: undefined + PrivacyPolicy: undefined } export type HomeTabNavigatorParams = CommonNavigatorParams & { diff --git a/src/locale/en/privacy-policy.tsx b/src/locale/en/privacy-policy.tsx new file mode 100644 index 00000000..02124ff0 --- /dev/null +++ b/src/locale/en/privacy-policy.tsx @@ -0,0 +1,608 @@ +import React from 'react' +import {H2, H4, P, UL, LI, A} from 'view/com/util/Html' + +export default function () { + return ( + <> +

Last Updated: 2023/02/02

+

+ This Privacy Policy is designed to help you understand how Bluesky, + PBLLC d.b.a. Bluesky (“Bluesky,”  “we,” “us,” or “our”) + collects, uses, processes, and shares your personal information, and to + help you understand and exercise your privacy rights.{' '} +

+

1. SCOPE AND UPDATES TO THIS PRIVACY POLICY

+

2. PERSONAL INFORMATION WE COLLECT

+

3. HOW WE USE YOUR PERSONAL INFORMATION

+

4. HOW WE DISCLOSE YOUR PERSONAL INFORMATION

+

5. YOUR PRIVACY CHOICES AND RIGHTS

+

6. SECURITY OF YOUR INFORMATION

+

7. INTERNATIONAL DATA TRANSFERS

+

8. RETENTION OF PERSONAL INFORMATION

+

9. SUPPLEMENTAL NOTICE FOR NEVADA RESIDENTS

+

10. CHILDREN’S INFORMATION

+

11. OTHER PROVISIONS

+

12. CONTACT US

+ +

1. SCOPE AND UPDATES TO THIS PRIVACY POLICY

+

+ This Privacy Policy applies to personal information processed by us, + including on our websites, mobile applications, and other online or + offline offerings. To make this Privacy Policy easier to read, our + websites, mobile applications, and other offerings are collectively + called the “Services.” +

+

+ Changes to our Privacy Policy. We may revise this Privacy Policy from + time to time in our sole discretion. If there are any material changes + to this Privacy Policy, we will notify you as required by applicable + law. You understand and agree that you will be deemed to have accepted + the updated Privacy Policy if you continue to use our Services after the + new Privacy Policy takes effect. +

+

2. PERSONAL INFORMATION WE COLLECT

+

+ The categories of personal information we collect depend on how you + interact with us, our Services, and the requirements of applicable law. + We collect information that you provide to us, information we obtain + automatically when you use our Services, and information from other + sources such as third-party services and organizations, as described + below. +

+

1. Personal Information You Provide to Us Directly

+

We may collect personal information that you provide to us.

+
    +
  • + Account Creation. We may collect personal information when you create + an account with us, such as a username and password. +
  • +
+
    +
  • + Your Communications with Us. We may collect personal information, such + as email address, phone number, or full name when you request + information about our Services, request customer or technical support, + or otherwise communicate with us. +
  • +
+
    +
  • + Interactive Features. We and others who use our Services may collect + personal information that you submit or make available through our + interactive features (e.g., messaging and chat features, commenting + functionalities, forums, blogs, and social media pages). Any + information you provide using the public sharing features of the + Services will be considered “public,” unless otherwise required by + applicable law, and is not subject to the privacy protections + referenced herein. Please exercise caution before revealing any + information that may identify you in the real world to other users. +
  • +
+

2. Personal Information Collected Automatically

+

+ We may collect personal information automatically when you use our + Services. +

+
    +
  • + Automatic Collection of Personal Information. We may collect certain + information automatically when you use our Services, such as your + Internet protocol (IP) address, user settings, cookie identifiers, + mobile carrier, mobile advertising and other unique identifiers, + browser or device information, and Internet service provide. We may + also automatically collect information regarding your use of our + Services, such as pages that you visit before, during and after using + our Services, information about the links you click, the types of + content you interact with, the frequency and duration of your + activities, and other information about how you use our Services. +
  • +
      +
    • + Crash Reports. If you provide crash reports, we may collect personal + information related to such crash reports, including detailed + diagnostic information about your device and the activities that led + to the crash. +
    • +
    +
+
    +
  • + Cookie Policy (and Other Technologies). We, as well as third + parties that provide content, or other functionality on our Services, + may use cookies, pixel tags, and other technologies (“Technologies”) + to automatically collect information through your use of our Services. +
  • +
      +
    • + Cookies. Cookies are small text files placed in device browsers that + store preferences and facilitate and enhance your experience. +
    • +
    +
      +
    • + Pixel Tags/Web Beacons. A pixel tag (also known as a web beacon) is + a piece of code embedded in our Services that collects information + about engagement on our Services. The use of a pixel tag allows us + to record, for example, that a user has visited a particular web + page or clicked on a particular advertisement. We may also include + web beacons in e-mails to understand whether messages have been + opened, acted on, or forwarded. +
    • +
    +
+

+ Our uses of these Technologies fall into the following general + categories: +

+
    +
  • + Operationally Necessary. This includes Technologies that allow you + access to our Services, applications, and tools that are required to + identify irregular website behavior, prevent fraudulent activity, + improve security, or allow you to make use of our functionality; +
  • +
+
    +
  • + Performance-Related. We may use Technologies to assess the performance + of our Services, including as part of our analytic practices to help + us understand how individuals use our Services (see Analytics below); +
  • +
+
    +
  • + Functionality-Related. We may use Technologies that allow us to offer + you enhanced functionality when accessing or using our Services. This + may include identifying you when you sign into our Services or keeping + track of your specified preferences, interests, or past items viewed; +
  • +
+

+ See “Your Privacy Choices and Rights” below to understand your choices + regarding these Technologies. +

+
    +
  • + Analytics. We may use Technologies and other third-party tools to + process analytics information on our Services. These Technologies + allow us to better understand how our digital Services are used and to + continually improve and personalize our Services. Some of our + analytics partners include: +
  • +
      +
    • + Segment.io. We use Segment's event tracking services to + aggregate, archive, and distribute website and application usage + information. For more information about how Segment uses your + personal information, please visit{' '} + + https://www.twilio.com/legal/privacy + + . +
    • +
    • + Mixpanel. We use Mixpanel's analytics and event tracking + services to record and analyze website and application usage. For + more information about how Mixpanel uses your personal information, + please visit{' '} + + https://mixpanel.com/legal/privacy-policy + + . +
    • +
    • + DataDog. We use DataDog's monitoring, tracing, and logging + services to record application and server metrics, logs, and related + debugging information. For more information about how DataDog uses + your personal information, please visit{' '} + + https://www.datadoghq.com/legal/privacy/ + + . +
    • +
    +
+
    +
  • + Social Media Platforms. Our Services may contain social media + buttons, such as Twitter, GitHub, Matrix, which might include widgets + such as the “share this” button or other interactive mini programs). + These features may collect personal information such as your IP + address and which page you are visiting on our Services, and may set a + cookie to enable the feature to function properly. Your interactions + with these platforms are governed by the privacy policy of the company + providing it. +
  • +
+

3. Personal Information Collected from Other Sources

+

+ Third-Party Services and Sources. We may obtain personal information + about you from other sources, including through third-party services and + organizations.  For example, if you access our Services through a + third-party application, such as an app store, a third-party login + service, or a social networking site, we may collect personal + information about you from that third-party application that you have + made available via your privacy settings. +

+

+ Referrals and Sharing Features. Our Services may offer various + tools and functionalities that allow you to provide personal information + about your friends through our referral service. Third parties may also + use the Services to upload personal information about you, including + when they tag you. Our referral services may also allow you to forward + or share certain content with a friend or colleague, such as an email + inviting your friend to use our Services. Please only share with us + contact information of people with whom you have a relationship (e.g., + relative, friend, neighbor, or co-worker). +

+

3. HOW WE USE YOUR PERSONAL INFORMATION

+

+ We use your personal information for a variety of business purposes, + including to provide our Services, for administrative purposes, and to + market our products and Services, as described below. +

+

1. Provide Our Services

+

+ We use your information to fulfill our contract with you and provide you + with our Services, such as: +

+
    +
  • Managing your information and accounts;
  • +
  • + Providing access to certain areas, functionalities, and features of + our Services; +
  • +
  • Answering requests for customer or technical support;
  • +
  • + Communicating with you about your account, activities on our Services, + and policy changes; +
  • +
  • + Processing your financial information and other payment methods for + products or Services purchased; +
  • +
  • Allowing you to register for events.
  • +
+

2. Administrative Purposes

+

+ We use your information for various administrative purposes, such as: +

+
    +
  • + Pursuing our legitimate interests such as direct marketing, research + and development (including marketing research), network and + information security, and fraud prevention; +
  • +
  • + Detecting security incidents, protecting against malicious, deceptive, + fraudulent or illegal activity, and prosecuting those responsible for + that activity; +
  • +
  • Measuring interest and engagement in our Services;
  • +
  • + Short-term, transient use, such as contextual customization of ads; +
  • +
  • Improving, upgrading, or enhancing our Services;
  • +
  • Developing new products and services;
  • +
  • Ensuring internal quality control and safety;
  • +
+
    +
  • + Authenticating and verifying individual identities, including requests + to exercise your rights under this Privacy Policy; +
  • +
  • Debugging to identify and repair errors with our Services;
  • +
  • + Auditing relating to interactions, transactions, and other compliance + activities; +
  • +
  • + Sharing personal information with third parties as needed to provide + the Services; +
  • +
  • Enforcing our agreements and policies; and
  • +
  • + Carrying out activities that are required to comply with our legal + obligations. +
  • +
+

3. With Your Consent

+

+ We may use personal information for other purposes that are clearly + disclosed to you at the time you provide personal information or with + your consent. +

+

4. Other Purposes

+

+ We also use your personal information for other purposes as requested by + you or as permitted by applicable law. +

+
    +
  • + De-identified and Aggregated Information. We may use personal + information to create de-identified and/or aggregated information, + such as demographic information, information about the device from + which you access our Services, or other analyses we create.{' '} +
  • +
+

4. HOW WE DISCLOSE YOUR PERSONAL INFORMATION

+

+ We disclose your personal information to third parties for a variety of + business purposes, including to provide our Services, to protect us or + others, or in the event of a major business transaction such as a + merger, sale, or asset transfer, as described below. +

+

1. Disclosures to Provide our Services

+

+ The categories of third parties with whom we may share your personal + information are described below. +

+
    +
  • + Service Providers. We may share your personal information with our + third-party service providers and vendors that assist us with the + provision of our Services. This includes service providers and vendors + that provide us with IT support, hosting, payment processing, customer + service, and related services. +
  • +
+
    +
  • + Business Partners. We may share your personal information with + business partners to provide you with a product or service you have + requested. We may also share your personal information with business + partners with whom we jointly offer products or services. +
  • +
+
    +
  • + Other Users or Third Parties You Share or Interact With. As described + above in “Personal Information We Collect,” our Services may allow you + to share personal information or interact with other users and third + parties (including individuals and third parties who do not use our + Services and the general public). +
  • +
+
    +
  • + APIs/SDKs. We may use third-party application program interfaces + (“APIs”) and software development kits (“SDKs”) as part of the + functionality of our Services. For more information about our use of + APIs and SDKs, please contact us as set forth in “ Contact + Us” below. +
  • +
+

2. Disclosures to Protect Us or Others

+

+ We may access, preserve, and disclose any information we store + associated with you to external parties if we, in good faith, believe + doing so is required or appropriate to: comply with law enforcement or + national security requests and legal process, such as a court order or + subpoena; protect your, our, or others’ rights, property, or + safety; enforce our policies or contracts; collect amounts owed to us; + or assist with an investigation or prosecution of suspected or actual + illegal activity. +

+

+ 3. Disclosure in the Event of Merger, Sale, or Other Asset Transfers +

+

+ If we are involved in a merger, acquisition, financing due diligence, + reorganization, bankruptcy, receivership, purchase or sale of assets, or + transition of service to another provider, your information may be sold + or transferred as part of such a transaction, as permitted by law and/or + contract. +

+

5. YOUR PRIVACY CHOICES AND RIGHTS

+

+ Your Privacy Choices. The privacy choices you may have about your + personal information are determined by applicable law and are described + below. +

+
    +
  • + Email Communications. If you receive an unwanted email from us, you + can use the unsubscribe link found at the bottom of the email to opt + out of receiving future emails. Note that you will continue to receive + transaction-related emails regarding products or Services you have + requested. We may also send you certain non-promotional communications + regarding us and our Services, and you will not be able to opt out of + those communications (e.g., communications regarding our Services or + updates to our Terms or this Privacy Policy). +
  • +
+
    +
  • + Mobile Devices. We may send you push notifications through our mobile + application. You may opt out from receiving these push notifications + by changing the settings on your mobile device. With your consent, we + may also collect precise location-based information via our mobile + application. You may opt out of this collection by changing the + settings on your mobile device. +
  • +
+
    +
  • + “Do Not Track.” Do Not Track (“DNT”) is a privacy preference that + users can set in certain web browsers. Please note that we do not + respond to or honor DNT signals or similar mechanisms transmitted by + web browsers. +
  • +
+

+ Your Privacy Rights. In accordance with applicable law, you may have the + right to: +

+
    +
  • + Access to and Portability of Your Personal Information, including: (i) + confirming whether we are processing your personal information; (ii) + obtaining access to or a copy of your personal information; and (iii) + receiving an electronic copy of personal information that you have + provided to us, or asking us to send that information to another + company in a structured, commonly used, and machine readable format + (also known as the “right of data portability”); +
  • +
+
    +
  • + Request Correction of your personal information where it is inaccurate + or incomplete. In some cases, we may provide self-service tools that + enable you to update your personal information; +
  • +
+
    +
  • Request Deletion of your personal information;
  • +
+
    +
  • + Request Restriction of or Object to our processing of your + personal information where the processing of your personal information + is based on our legitimate interest or for direct marketing purposes; + and +
  • +
+
    +
  • + Withdraw your Consent to our processing of your personal + information. Please note that your withdrawal will only take effect + for future processing, and will not affect the lawfulness of + processing before the withdrawal. +
  • +
+

+ If you would like to exercise any of these rights, please contact us as + set forth in “Contact Us” below. We will process such requests in + accordance with applicable laws. +

+

6. SECURITY OF YOUR INFORMATION

+

+ We take steps to ensure that your information is treated securely and in + accordance with this Privacy Policy. Unfortunately, no system is + 100% secure, and we cannot ensure or warrant the security of any + information you provide to us. To the fullest extent permitted by + applicable law, we do not accept liability for unauthorized access, use, + disclosure, or loss of personal information. +

+

+ By using our Services or providing personal information to us, you agree + that we may communicate with you electronically regarding security, + privacy, and administrative issues relating to your use of our Services. + If we learn of a security system’s breach, we may attempt to + notify you electronically by posting a notice on our Services, by mail, + or by sending an email to you. +

+

7. INTERNATIONAL DATA TRANSFERS

+

+ All information processed by us may be transferred, processed, and + stored anywhere in the world, including, but not limited to, the United + States or other countries, which may have data protection laws that are + different from the laws where you live. We endeavor to safeguard your + information consistent with the requirements of applicable laws. +

+

+ If we transfer personal information which originates in the European + Economic Area, Switzerland, and/or the United Kingdom to a country that + has not been found to provide an adequate level of protection under + applicable data protection laws, one of the safeguards we may use to + support such transfer is the{' '} + + EU Standard Contractual Clauses + + . +

+

+ For more information about the safeguards we use for international + transfers of your personal information, please contact us as set forth + below. +

+

8. RETENTION OF PERSONAL INFORMATION

+

+ We store the personal information we collect as described in this + Privacy Policy for as long as you use our Services, or as necessary to + fulfill the purpose(s) for which it was collected, provide our Services, + resolve disputes, establish legal defenses, conduct audits, pursue + legitimate business purposes, enforce our agreements, and comply with + applicable laws.   +

+

9. SUPPLEMENTAL NOTICE FOR NEVADA RESIDENTS

+

+ If you are a resident of Nevada, you have the right to opt-out of the + sale of certain personal information to third parties who intend to + license or sell that personal information. You can exercise this right + by contacting us at{' '} + + support@bsky.app + {' '} + with the subject line “Nevada Do Not Sell Request” and providing us with + your name and the email address associated with your account. Please + note that we do not currently sell your personal information as sales + are defined in Nevada Revised Statutes Chapter 603A. If you have any + questions, please contact us as set forth in Contact Us below. +

+

10. CHILDREN’S INFORMATION

+

+ The Services are not directed to children under 13 (or other age as + required by local law), and we do not knowingly collect personal + information from children. +

+

+ If you are a parent or guardian and believe your child has uploaded + personal information to our site without your consent, you may contact + us as described in “Contact Us” below. If we become aware that a child + has provided us with personal information in violation of applicable + law, we will delete any personal information we have collected, unless + we have a legal obligation to keep it, and terminate the child’s + account. +

+

11. OTHER PROVISIONS

+

+ Third-Party Websites/Applications. The Services may contain links to + other websites/applications and other websites/applications may + reference or link to our Services. These third-party services are not + controlled by us. We encourage our users to read the privacy policies of + each website and application with which they interact. We do not + endorse, screen, or approve, and are not responsible for, the privacy + practices or content of such other websites or applications. Providing + personal information to third-party websites or applications is at your + own risk. +

+

+ Supervisory Authority. If your personal information is subject to + the applicable data protection laws of the European Economic Area, + Switzerland, or the United Kingdom, you have the right to lodge a + complaint with the competent supervisory authority or attorney general + if you believe our processing of your personal information violates + applicable law. +

+ +

12. CONTACT US 

+

+ Bluesky is the controller of the personal information we process under + this Privacy Policy. +

+

+ If you have any questions about our privacy practices or this Privacy + Policy, or to exercise your rights as detailed in this Privacy Policy, + please contact us at:{' '} + support@bsky.app +

+ + ) +} diff --git a/src/routes.ts b/src/routes.ts index 5987177e..6c02a7c5 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -13,4 +13,6 @@ export const router = new Router({ PostRepostedBy: '/profile/:name/post/:rkey/reposted-by', Debug: '/sys/debug', Log: '/sys/log', + Support: '/support', + PrivacyPolicy: '/support/privacy', }) diff --git a/src/view/com/util/Html.tsx b/src/view/com/util/Html.tsx new file mode 100644 index 00000000..245952e4 --- /dev/null +++ b/src/view/com/util/Html.tsx @@ -0,0 +1,133 @@ +import React from 'react' +import {StyleSheet, View} from 'react-native' +import {usePalette} from 'lib/hooks/usePalette' +import {Text} from './text/Text' +import {TextLink} from './Link' + +/** + * These utilities are used to define long documents in an html-like + * DSL. See for instance /locale/en/privacy-policy.tsx + */ + +export function H1({children}: React.PropsWithChildren<{}>) { + const pal = usePalette('default') + return ( + + {children} + + ) +} + +export function H2({children}: React.PropsWithChildren<{}>) { + const pal = usePalette('default') + return ( + + {children} + + ) +} + +export function H3({children}: React.PropsWithChildren<{}>) { + const pal = usePalette('default') + return ( + + {children} + + ) +} + +export function H4({children}: React.PropsWithChildren<{}>) { + const pal = usePalette('default') + return ( + + {children} + + ) +} + +export function P({children}: React.PropsWithChildren<{}>) { + const pal = usePalette('default') + return ( + + {children} + + ) +} + +export function UL({children}: React.PropsWithChildren<{}>) { + return {children} +} + +export function OL({children}: React.PropsWithChildren<{}>) { + return {children} +} + +export function LI({ + children, + value, +}: React.PropsWithChildren<{value?: string}>) { + const pal = usePalette('default') + return ( + + {value || <>•} + + {children} + + + ) +} + +export function A({children, href}: React.PropsWithChildren<{href: string}>) { + const pal = usePalette('default') + return ( + + ) +} + +const styles = StyleSheet.create({ + h1: { + marginTop: 20, + marginBottom: 10, + letterSpacing: 0.8, + }, + h2: { + marginTop: 20, + marginBottom: 10, + letterSpacing: 0.8, + }, + h3: { + marginBottom: 10, + }, + h4: { + marginBottom: 10, + fontWeight: 'bold', + }, + p: { + marginBottom: 10, + }, + ul: { + marginBottom: 10, + paddingLeft: 18, + }, + ol: { + marginBottom: 10, + paddingLeft: 18, + }, + li: { + flexDirection: 'row', + paddingRight: 10, + marginBottom: 10, + }, + liBullet: { + paddingRight: 10, + }, + liText: {}, + a: { + marginBottom: 10, + }, +}) diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx index cee4d413..f356f0b0 100644 --- a/src/view/com/util/Link.tsx +++ b/src/view/com/util/Link.tsx @@ -89,7 +89,7 @@ export const TextLink = observer(function TextLink({ type?: TypographyVariant style?: StyleProp href: string - text: string | JSX.Element + text: string | JSX.Element | React.ReactNode numberOfLines?: number lineHeight?: number }) { @@ -193,7 +193,7 @@ function onPressInner( if (shouldHandle) { href = convertBskyAppUrlIfNeeded(href) - if (href.startsWith('http')) { + if (href.startsWith('http') || href.startsWith('mailto')) { Linking.openURL(href) } else { store.shell.closeModal() // close any active modals diff --git a/src/view/com/util/Views.web.tsx b/src/view/com/util/Views.web.tsx index 9a43697b..aa27d7f8 100644 --- a/src/view/com/util/Views.web.tsx +++ b/src/view/com/util/Views.web.tsx @@ -78,7 +78,7 @@ const styles = StyleSheet.create({ }, containerScroll: { width: '100%', - minHeight: '100vh', + maxHeight: '100vh', maxWidth: 600, marginLeft: 'auto', marginRight: 'auto', diff --git a/src/view/screens/PrivacyPolicy.tsx b/src/view/screens/PrivacyPolicy.tsx new file mode 100644 index 00000000..d5476ab5 --- /dev/null +++ b/src/view/screens/PrivacyPolicy.tsx @@ -0,0 +1,38 @@ +import React from 'react' +import {View} from 'react-native' +import {useFocusEffect} from '@react-navigation/native' +import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types' +import {ViewHeader} from '../com/util/ViewHeader' +import {useStores} from 'state/index' +import {ScrollView} from 'view/com/util/Views' +import {Text} from 'view/com/util/text/Text' +import {usePalette} from 'lib/hooks/usePalette' +import {s} from 'lib/styles' +import PrivacyPolicyHtml from '../../locale/en/privacy-policy' + +type Props = NativeStackScreenProps +export const PrivacyPolicyScreen = (_props: Props) => { + const pal = usePalette('default') + const store = useStores() + + useFocusEffect( + React.useCallback(() => { + store.shell.setMinimalShellMode(false) + }, [store]), + ) + + return ( + + + + + + Privacy Policy + + + + + + + ) +} diff --git a/src/view/screens/Support.tsx b/src/view/screens/Support.tsx new file mode 100644 index 00000000..de1b38b8 --- /dev/null +++ b/src/view/screens/Support.tsx @@ -0,0 +1,44 @@ +import React from 'react' +import {View} from 'react-native' +import {useFocusEffect} from '@react-navigation/native' +import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types' +import {ViewHeader} from '../com/util/ViewHeader' +import {useStores} from 'state/index' +import {Text} from 'view/com/util/text/Text' +import {TextLink} from 'view/com/util/Link' +import {CenteredView} from 'view/com/util/Views' +import {usePalette} from 'lib/hooks/usePalette' +import {s} from 'lib/styles' + +type Props = NativeStackScreenProps +export const SupportScreen = (_props: Props) => { + const store = useStores() + const pal = usePalette('default') + + useFocusEffect( + React.useCallback(() => { + store.shell.setMinimalShellMode(false) + }, [store]), + ) + + return ( + + + + + Support + + + If you need help, email us at{' '} + {' '} + with a description of your issue and information about how we can help + you. + + + + ) +} diff --git a/src/view/shell/desktop/RightNav.tsx b/src/view/shell/desktop/RightNav.tsx index a196951a..58fb3139 100644 --- a/src/view/shell/desktop/RightNav.tsx +++ b/src/view/shell/desktop/RightNav.tsx @@ -6,6 +6,7 @@ import {DesktopSearch} from './Search' import {Text} from 'view/com/util/text/Text' import {TextLink} from 'view/com/util/Link' import {FEEDBACK_FORM_URL} from 'lib/constants' +import {s} from 'lib/styles' export const DesktopRightNav = observer(function DesktopRightNav() { const pal = usePalette('default') @@ -17,12 +18,23 @@ export const DesktopRightNav = observer(function DesktopRightNav() { Welcome to Bluesky! This is a beta application that's still in development. - + + + +  ·  + + + ) diff --git a/yarn.lock b/yarn.lock index 2c94091d..c9032b71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13710,10 +13710,10 @@ react-native-web@^0.18.11: postcss-value-parser "^4.2.0" styleq "^0.1.2" -react-native-webview@11.26.0: - version "11.26.0" - resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.26.0.tgz#e524992876fe4a79e69905f0fab8949b470e9f16" - integrity sha512-4T4CKRm8xlaQDz9h/bCMPGAvtkesrhkRWqCX9FDJEzBToaVUIsV0ZOqtC4w/JSnCtFKKYiaC1ReJtCGv+4mFeQ== +react-native-webview@^11.26.1: + version "11.26.1" + resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.26.1.tgz#658c09ed5162dc170b361e48c2dd26c9712879da" + integrity sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw== dependencies: escape-string-regexp "2.0.0" invariant "2.2.4"