Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit af52626
Author: Minseo Lee <[email protected]>
Date:   Thu Aug 8 21:12:23 2024 +0900

    Added trans (bluesky-social#4890)

commit a864f69
Author: dan <[email protected]>
Date:   Thu Aug 8 06:20:24 2024 +0100

    Keep interstitial fresh on refresh (bluesky-social#4888)

commit 00fea10
Author: dan <[email protected]>
Date:   Thu Aug 8 05:56:22 2024 +0100

    Include popcluster in suggestion ranking (bluesky-social#4887)

commit b309241
Author: Hailey <[email protected]>
Date:   Wed Aug 7 17:13:29 2024 -0700

    Add logging of selected feed preference when displaying the following feed (bluesky-social#4789)

commit 1b02f81
Author: Hailey <[email protected]>
Date:   Wed Aug 7 14:45:06 2024 -0700

    [Video] Visibility detection view (bluesky-social#4741)

    Co-authored-by: Samuel Newman <[email protected]>

commit fff2c07
Author: Samuel Newman <[email protected]>
Date:   Wed Aug 7 18:47:51 2024 +0100

    [Videos] Video player - PR #2 - better web support (bluesky-social#4732)

    * attempt some sort of "usurping" system

    * polling-based active video approach

    * split into inner component again

    * click to steal active video

    * disable findAndActivateVideo on native

    * new intersectionobserver approach - wip

    * fix types

    * disable perf optimisation to allow overflow

    * make active player indicator subtler, clean up video utils

    * partially fix double-playing

    * start working on controls

    * fullscreen API

    * get buttons working somewhat

    * rm source from where it shouldn't be

    * use video elem as source of truth

    * fix keyboard nav + mute state

    * new icons, add fullscreen + time + fix play

    * unmount when far offscreen + round 2dp

    * listen globally to clicks rather than blur event

    * move controls to new file

    * reduce quality when not active

    * add hover state to buttons

    * stop propagation of videoplayer click

    * move around autoplay effects

    * increase background contrast

    * add subtitles button

    * add stopPropagation to root of video player

    * clean up VideoWebControls

    * fix chrome

    * change quality based on focused state

    * use autoLevelCapping instead of nextLevel

    * get subtitle track from stream

    * always use hlsjs

    * rework hls into a ref

    * render player earlier, allowing preload

    * add error boundary

    * clean up component structure and organisation

    * rework fullscreen API

    * disable fullscreen on iPhone

    * don't play when ready on pause

    * debounce buffering

    * simplify giant list of event listeners

    * update pref

    * reduce prop drilling

    * minimise rerenders in `ActiveViewContext`

    * restore prop drilling

    ---------

    Co-authored-by: Samuel Newman <[email protected]>
    Co-authored-by: Hailey <[email protected]>

commit b701e8c
Author: Samuel Newman <[email protected]>
Date:   Wed Aug 7 16:56:12 2024 +0100

    [Video] Authed video upload (bluesky-social#4885)

    * add service auth call

    * update API package

    ---------

    Co-authored-by: Samuel Newman <[email protected]>

commit 753a233
Author: Hailey <[email protected]>
Date:   Tue Aug 6 11:21:59 2024 -0700

    Tweak feed manip to show cases of A -> B without further children (bluesky-social#4883)

commit 5845e08
Author: dan <[email protected]>
Date:   Tue Aug 6 17:12:27 2024 +0100

    Show own replies before follows' replies in threads (bluesky-social#4882)

commit b291a1e
Author: dan <[email protected]>
Date:   Tue Aug 6 16:42:42 2024 +0100

    Show more replies in Following (different heuristic) (bluesky-social#4880)

commit 686d5eb
Author: dan <[email protected]>
Date:   Tue Aug 6 01:30:52 2024 +0100

    [Persisted] Make broadcast subscriptions granular by key (bluesky-social#4874)

    * Add fast path for guaranteed noop updates

    * Change persisted.onUpdate() API to take a key

    * Implement granular broadcast listeners

commit 966f6c5
Author: dan <[email protected]>
Date:   Tue Aug 6 01:03:27 2024 +0100

    [Persisted] Fix the race condition causing clobbered writes between tabs (bluesky-social#4873)

    * Broadcast the update in the same tick

    The motivation for the original code is unclear. I was not able to reproduce the described behavior and have not seen it mentioned on the web. I'll assume that this was a misunderstanding.

    * Remove defensive programming

    The only places in this code that we can expect to throw are schema.parse(), JSON.parse(), JSON.stringify(), and localStorage.getItem/setItem/removeItem. Let's push try/catch'es where we expect them to be necessary.

    * Don't write or clobber defaults

    Writing defaults to local storage is unnecessary. We would write them as a part of next update anyway. So I'm removing that to reduce the number of moving pieces.

    However, we do need to be wary of _state being set to defaults. Because _state gets mutated on write. We don't want to mutate the defaults object. To avoid having to think about this, let's copy on write. We don't write to this object very often.

    * Refactor: extract tryParse

    * Refactor: move string parsing into tryParse

    * Extract tryStringify, split logging by platform

    Shared data parsing/stringification errors are always logged. Storage errors are only logged on native because we trust the web APIs to work.

    * Add a layer of caching to readFromStorage to web

    We're going to be doing a read on every write so let's add a fast path that avoids parsing and validating.

    * Fix the race condition causing clobbered writes between tabs

commit 5bf7f37
Author: dan <[email protected]>
Date:   Tue Aug 6 00:30:58 2024 +0100

    [Persisted] Fork web and native, make it synchronous on the web (bluesky-social#4872)

    * Delete logic for legacy storage

    * Delete superfluous tests

    At this point these tests aren't testing anything useful, let's just get rid of them.

    * Inline store.ts methods into persisted/index.ts

    * Fork persisted/index.ts into index.web.ts

    * Remove non-essential code and comments from both forks

    * Remove async/await from web fork of persisted/index.ts

    * Remove unused return

    * Enforce that forked types match

commit 74b0318
Author: dan <[email protected]>
Date:   Mon Aug 5 20:51:41 2024 +0100

    Show replies in context of their threads (bluesky-social#4871)

    * Don't reconstruct threads from separate posts

    * Remove post-level dedupe for now

    * Change repost dedupe condition to look just at length

    * Delete unused isThread

    * Delete another isThread field

    It is now meaningless because there's nothing special about author threads.

    * Narrow down slice item shape so it does not need reply

    * Consolidate slice validation criteria in one place

    * Show replies in context

    * Make fallback marker work

    * Remove misleading and now-unused property

    It was called rootUri but it was actually the leaf URI. Regardless, it's not used anymore.

    * Add by-thread dedupe to non-author feeds

    * Add post-level dedupe

    * Always count from the start

    This is easier to think about.

    * Only tuner state need to be untouched on dry run

    * Account for threads in reply filtering

    * Remove repost deduping

    This is already being taken care of by item-level deduping. It's also now wrong and removing too much (since it wasn't filtering for reposts directly).

    * Calculate rootUri correctly

    * Apply Following settings to all lists

    * Don't dedupe intentional reposts by thread

    * Show reply parent when ambiguous

    * Explicitly remove orphaned replies from following/lists

    * Fix thread dedupe to work across pages

    * Mark grandparent-blocked as orphaned

    * Guard tuner state change by dryRun

    * Remove dead code

    * Don't dedupe feedgen threads

    * Revert "Apply Following settings to all lists"

    This reverts commit aff86be6d37b60cc5d0ac38f22c31a4808342cf4.

    Let's not do this yet and have a bit more discussion. This is a chunky change already.

    * Reason belongs to a slice, not item

    * Logically feedContext belongs to the slice

    * Update comment to reflect latest behavior

commit 18b4233
Author: Hailey <[email protected]>
Date:   Mon Aug 5 12:21:34 2024 -0700

    Add `PlatformInfo` module (bluesky-social#4877)

commit fb27838
Author: bnewbold <[email protected]>
Date:   Fri Aug 2 15:57:50 2024 -0700

    bskyweb: optional basic auth password middleware (bluesky-social#4759)

commit 6298e68
Author: Samuel Newman <[email protected]>
Date:   Sat Aug 3 00:33:45 2024 +0200

    tweak list header (bluesky-social#4870)

    Co-authored-by: Samuel Newman <[email protected]>

commit c3d8bee
Author: Eric Bailey <[email protected]>
Date:   Fri Aug 2 13:05:33 2024 -0500

    Respect labels on feeds and lists (bluesky-social#4818)

    * Prep

    * Pass in optional moderation to FeedCard

    * Compute moderation decision, filter contentList contexts, pass into card

    * Let's go a different route

    * Filter from within search queries

    * Use same search query for starter packs

    * Filter lists from profile tabs

    * Cleanup

    * Filter from profile feeds

    * Moderate post embeds

    * Memoize

    * Use ScreenHider on lists

    * Hide both list types

    * Fix crash on iOS in screen hider, fix lineheight

    * Memoize renderItem

    * Reuse objects to prevent re-renders

commit 293ac6f
Author: dan <[email protected]>
Date:   Fri Aug 2 17:13:31 2024 +0100

    Only show replies in Following if following all involved actors (bluesky-social#4869)

    * Only show replies in Following for followed root and grandparent

    * Remove now-unnecessary check

    * Simplify condition

commit 7f292ab
Author: dan <[email protected]>
Date:   Thu Aug 1 22:05:40 2024 +0100

    Always limit Following replies to the people you follow (bluesky-social#4868)

    * Limit feed replies to people you follow

    * Remove dead code

commit f056cb6
Author: Hailey <[email protected]>
Date:   Thu Aug 1 10:32:36 2024 -0700

    Fix missing header on Likes/Reposted By, add missing perf optimizations (bluesky-social#4867)

    * fix liked by list

    * fix lists

    * tweaks to style

    * change string

commit c78e9e3
Author: Samuel Newman <[email protected]>
Date:   Thu Aug 1 19:14:32 2024 +0200

    Move theme controls to its own screen (bluesky-social#4866)

commit 388c157
Author: dan <[email protected]>
Date:   Thu Aug 1 17:49:43 2024 +0100

    Display second-to-last rather than second post in a slice (bluesky-social#4864)

commit b0e130a
Author: Eric Bailey <[email protected]>
Date:   Thu Aug 1 10:29:27 2024 -0500

    Update muted words dialog with `expiresAt` and `actorTarget` (bluesky-social#4801)

    * WIP not working dropdown

    * Update MutedWords dialog

    * Add i18n formatDistance

    * Comments

    * Handle text wrapping

    * Update label copy

    Co-authored-by: Hailey <[email protected]>

    * Fix alignment

    * Improve translation output

    * Revert toggle changes

    * Better types for useFormatDistance

    * Tweaks

    * Integrate new sdk version into TagMenu

    * Use ampersand

    Co-authored-by: surfdude29 <[email protected]>

    * Bump SDK

    ---------

    Co-authored-by: Hailey <[email protected]>
    Co-authored-by: surfdude29 <[email protected]>

commit d2e88cc
Author: dan <[email protected]>
Date:   Thu Aug 1 02:27:25 2024 +0100

    Fetch enough pages to fill a page's worth of items (bluesky-social#4863)

    * Fetch enough pages to fill a page's worth of items

    * Add failsafe in case of appview bug

commit 70ffd38
Author: Hailey <[email protected]>
Date:   Wed Jul 31 11:16:14 2024 -0700

    Only show "followed you back" when appropriate (bluesky-social#4849)

    * only show followed back when we should

    * try/catch

    * log

    * Update FeedItem.tsx

    * tweak

commit 576cef8
Author: dan <[email protected]>
Date:   Wed Jul 31 19:10:24 2024 +0100

    [Web] Retrigger onEndReached if needed when content height changes (bluesky-social#4859)

    * Extract EdgeVisibility

    * Key Visibility by container height instead of item count

commit c75bb65
Author: dan <[email protected]>
Date:   Wed Jul 31 13:00:22 2024 +0100

    Remove unused NoopFeedTuner (bluesky-social#4856)

commit c3e77b5
Author: GSMT <[email protected]>
Date:   Wed Jul 31 00:19:23 2024 +0200

    useDedupe callback (bluesky-social#4855)

commit 8ddb28d
Author: Hailey <[email protected]>
Date:   Tue Jul 30 08:25:31 2024 -0700

    [Video] Uploads (bluesky-social#4754)

    * state for video uploads

    * get upload working

    * add a debug log

    * add post progress

    * progress

    * fetch data

    * add some progress info, web uploads

    * post on finished uploading (wip)

    * add a note

    * add some todos

    * clear video

    * merge some stuff

    * convert to `createUploadTask`

    * patch expo modules core

    * working native upload progress

    * platform fork

    * upload progress for web

    * cleanup

    * cleanup

    * more tweaks

    * simplify

    * fix type errors

    ---------

    Co-authored-by: Samuel Newman <[email protected]>
Merge remote-tracking branch 'upstream/main' into Improve-notification-localization
  • Loading branch information
quiple committed Aug 8, 2024
2 parents a1e99a0 + af52626 commit ed084b7
Show file tree
Hide file tree
Showing 152 changed files with 4,276 additions and 1,964 deletions.
1 change: 1 addition & 0 deletions assets/icons/arrowsDiagonalIn_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/arrowsDiagonalIn_stroke2_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/arrowsDiagonalOut_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/arrowsDiagonalOut_stroke2_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/cc_filled_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/cc_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/moon_stroke2_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/pause_filled_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/pause_filled_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/pause_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/pause_stroke2_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/phone_stroke2_corner2_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/play_filled_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/icons/play_stroke2_corner0_rounded.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 10 additions & 3 deletions bskyweb/cmd/bskyweb/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ func run(args []string) {
EnvVars: []string{"ATP_APPVIEW_HOST", "ATP_PDS_HOST"},
},
&cli.StringFlag{
Name: "ogcard-host",
Usage: "scheme, hostname, and port of ogcard service",
Name: "ogcard-host",
Usage: "scheme, hostname, and port of ogcard service",
Required: false,
EnvVars: []string{"OGCARD_HOST"},
EnvVars: []string{"OGCARD_HOST"},
},
&cli.StringFlag{
Name: "http-address",
Expand All @@ -67,6 +67,13 @@ func run(args []string) {
Required: false,
EnvVars: []string{"DEBUG"},
},
&cli.StringFlag{
Name: "basic-auth-password",
Usage: "optional password to restrict access to web interface",
Required: false,
Value: "",
EnvVars: []string{"BASIC_AUTH_PASSWORD"},
},
},
},
}
Expand Down
15 changes: 15 additions & 0 deletions bskyweb/cmd/bskyweb/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"context"
"crypto/subtle"
"errors"
"fmt"
"io/fs"
Expand Down Expand Up @@ -48,6 +49,7 @@ func serve(cctx *cli.Context) error {
appviewHost := cctx.String("appview-host")
ogcardHost := cctx.String("ogcard-host")
linkHost := cctx.String("link-host")
basicAuthPassword := cctx.String("basic-auth-password")

// Echo
e := echo.New()
Expand Down Expand Up @@ -140,6 +142,18 @@ func serve(cctx *cli.Context) error {
},
}))

// optional password gating of entire web interface
if basicAuthPassword != "" {
e.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
// Be careful to use constant time comparison to prevent timing attacks
if subtle.ConstantTimeCompare([]byte(username), []byte("admin")) == 1 &&
subtle.ConstantTimeCompare([]byte(password), []byte(basicAuthPassword)) == 1 {
return true, nil
}
return false, nil
}))
}

// redirect trailing slash to non-trailing slash.
// all of our current endpoints have no trailing slash.
e.Use(middleware.RemoveTrailingSlashWithConfig(middleware.TrailingSlashConfig{
Expand Down Expand Up @@ -211,6 +225,7 @@ func serve(cctx *cli.Context) error {
e.GET("/settings/threads", server.WebGeneric)
e.GET("/settings/external-embeds", server.WebGeneric)
e.GET("/settings/accessibility", server.WebGeneric)
e.GET("/settings/appearance", server.WebGeneric)
e.GET("/sys/debug", server.WebGeneric)
e.GET("/sys/debug-mod", server.WebGeneric)
e.GET("/sys/log", server.WebGeneric)
Expand Down
13 changes: 13 additions & 0 deletions jest/jestSetup.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,16 @@ jest.mock('expo-application', () => ({
nativeApplicationVersion: '1.0.0',
nativeBuildVersion: '1',
}))

jest.mock('expo-modules-core', () => ({
requireNativeModule: jest.fn().mockImplementation(moduleName => {
if (moduleName === 'ExpoPlatformInfo') {
return {
getIsReducedMotionEnabled: () => false,
}
}
}),
requireNativeViewManager: jest.fn().mockImplementation(moduleName => {
return () => null
}),
}))
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package expo.modules.blueskyswissarmy.platforminfo

import android.provider.Settings
import expo.modules.kotlin.modules.Module
import expo.modules.kotlin.modules.ModuleDefinition

class ExpoPlatformInfoModule : Module() {
override fun definition() =
ModuleDefinition {
Name("ExpoPlatformInfo")

// See https://github.com/software-mansion/react-native-reanimated/blob/7df5fd57d608fe25724608835461cd925ff5151d/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java#L242
Function("getIsReducedMotionEnabled") {
val resolver = appContext.reactContext?.contentResolver ?: return@Function false
val scale = Settings.Global.getString(resolver, Settings.Global.TRANSITION_ANIMATION_SCALE) ?: return@Function false

try {
return@Function scale.toFloat() == 0f
} catch (_: Error) {
return@Function false
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package expo.modules.blueskyswissarmy.visibilityview

import expo.modules.kotlin.modules.Module
import expo.modules.kotlin.modules.ModuleDefinition

class ExpoBlueskyVisibilityViewModule : Module() {
override fun definition() =
ModuleDefinition {
Name("ExpoBlueskyVisibilityView")

AsyncFunction("updateActiveViewAsync") {
VisibilityViewManager.updateActiveView()
}

View(VisibilityView::class) {
Events(arrayOf("onChangeStatus"))

Prop("enabled") { view: VisibilityView, prop: Boolean ->
view.isViewEnabled = prop
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package expo.modules.blueskyswissarmy.visibilityview

import android.content.Context
import android.graphics.Rect
import expo.modules.kotlin.AppContext
import expo.modules.kotlin.viewevent.EventDispatcher
import expo.modules.kotlin.views.ExpoView

class VisibilityView(
context: Context,
appContext: AppContext,
) : ExpoView(context, appContext) {
var isViewEnabled: Boolean = false

private val onChangeStatus by EventDispatcher()

private var isCurrentlyActive = false

override fun onAttachedToWindow() {
super.onAttachedToWindow()
VisibilityViewManager.addView(this)
}

override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
VisibilityViewManager.removeView(this)
}

fun setIsCurrentlyActive(isActive: Boolean) {
if (isCurrentlyActive == isActive) {
return
}

this.isCurrentlyActive = isActive
this.onChangeStatus(
mapOf(
"isActive" to isActive,
),
)
}

fun getPositionOnScreen(): Rect? {
if (!this.isShown) {
return null
}

val screenPosition = intArrayOf(0, 0)
this.getLocationInWindow(screenPosition)
return Rect(
screenPosition[0],
screenPosition[1],
screenPosition[0] + this.width,
screenPosition[1] + this.height,
)
}

fun isViewableEnough(): Boolean {
val positionOnScreen = this.getPositionOnScreen() ?: return false
val visibleArea = positionOnScreen.width() * positionOnScreen.height()
val totalArea = this.width * this.height
return visibleArea >= 0.5 * totalArea
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package expo.modules.blueskyswissarmy.visibilityview

import android.graphics.Rect

class VisibilityViewManager {
companion object {
private val views = HashMap<Int, VisibilityView>()
private var currentlyActiveView: VisibilityView? = null
private var prevCount = 0

fun addView(view: VisibilityView) {
this.views[view.id] = view

if (this.prevCount == 0) {
this.updateActiveView()
}
this.prevCount = this.views.count()
}

fun removeView(view: VisibilityView) {
this.views.remove(view.id)
this.prevCount = this.views.count()
}

fun updateActiveView() {
var activeView: VisibilityView? = null
val count = this.views.count()

if (count == 1) {
val view = this.views.values.first()
if (view.isViewableEnough()) {
activeView = view
}
} else if (count > 1) {
val views = this.views.values
var mostVisibleView: VisibilityView? = null
var mostVisiblePosition: Rect? = null

views.forEach { view ->
if (!view.isViewableEnough()) {
return
}

val position = view.getPositionOnScreen() ?: return@forEach
val topY = position.centerY() - (position.height() / 2)

if (topY >= 150) {
if (mostVisiblePosition == null) {
mostVisiblePosition = position
}

if (position.centerY() <= mostVisiblePosition!!.centerY()) {
mostVisibleView = view
mostVisiblePosition = position
}
}
}

activeView = mostVisibleView
}

if (activeView == this.currentlyActiveView) {
return
}

this.clearActiveView()
if (activeView != null) {
this.setActiveView(activeView)
}
}

private fun clearActiveView() {
this.currentlyActiveView?.setIsCurrentlyActive(false)
this.currentlyActiveView = null
}

private fun setActiveView(view: VisibilityView) {
view.setIsCurrentlyActive(true)
this.currentlyActiveView = view
}
}
}
11 changes: 9 additions & 2 deletions modules/expo-bluesky-swiss-army/expo-module.config.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
{
"platforms": ["ios", "tvos", "android", "web"],
"ios": {
"modules": ["ExpoBlueskySharedPrefsModule", "ExpoBlueskyReferrerModule"]
"modules": [
"ExpoBlueskySharedPrefsModule",
"ExpoBlueskyReferrerModule",
"ExpoBlueskyVisibilityViewModule",
"ExpoPlatformInfoModule"
]
},
"android": {
"modules": [
"expo.modules.blueskyswissarmy.sharedprefs.ExpoBlueskySharedPrefsModule",
"expo.modules.blueskyswissarmy.referrer.ExpoBlueskyReferrerModule"
"expo.modules.blueskyswissarmy.referrer.ExpoBlueskyReferrerModule",
"expo.modules.blueskyswissarmy.visibilityview.ExpoBlueskyVisibilityViewModule",
"expo.modules.blueskyswissarmy.platforminfo.ExpoPlatformInfoModule"
]
}
}
4 changes: 3 additions & 1 deletion modules/expo-bluesky-swiss-army/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import * as PlatformInfo from './src/PlatformInfo'
import * as Referrer from './src/Referrer'
import * as SharedPrefs from './src/SharedPrefs'
import VisibilityView from './src/VisibilityView'

export {Referrer, SharedPrefs}
export {PlatformInfo, Referrer, SharedPrefs, VisibilityView}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import ExpoModulesCore

public class ExpoPlatformInfoModule: Module {
public func definition() -> ModuleDefinition {
Name("ExpoPlatformInfo")

Function("getIsReducedMotionEnabled") {
return UIAccessibility.isReduceMotionEnabled
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import ExpoModulesCore

public class ExpoBlueskyVisibilityViewModule: Module {
public func definition() -> ModuleDefinition {
Name("ExpoBlueskyVisibilityView")

AsyncFunction("updateActiveViewAsync") {
VisibilityViewManager.shared.updateActiveView()
}

View(VisibilityView.self) {
Events([
"onChangeStatus"
])

Prop("enabled") { (view: VisibilityView, prop: Bool) in
view.enabled = prop
}
}
}
}
Loading

0 comments on commit ed084b7

Please sign in to comment.