29ki / 29k Goto Github PK
View Code? Open in Web Editor NEWThis is the repository of the free, non-profit, open-source and co-created mental health app Aware.
Home Page: https://29k.org
License: GNU Affero General Public License v3.0
This is the repository of the free, non-profit, open-source and co-created mental health app Aware.
Home Page: https://29k.org
License: GNU Affero General Public License v3.0
The Bug report github issue template mentions that the app version can be found in the user profile. However, that's not true since it lately moved to the (...) menu in the top right ("about Aware").
Would be a nice fix.
Seems to be reanimated related
Sentry Issue: 29K-CUPCAKE-FE
Error: Exception in HostFunction: java.lang.NoSuchMethodError: no non-static method "Lcom/swmansion/reanimated/NativeProxy;.registerEventHandler(Lcom/swmansion/reanimated/nativeProxy/EventHandler;)V"
at None ([native code])
at <global> (src/lib/components/Typography/TextInput/TextInput.tsx:19:44)
at <global> (src/lib/components/ProfileInfo/ProfileInfo.tsx:24:27)
at <global> (src/routes/modals/CreateSessionModal/components/steps/ProfileStep.tsx:4:1)
at <global> (src/routes/modals/CreateSessionModal/CreateSessionModal.tsx:26:1)
...
(32 additional frame(s) were not displayed)
Just did the dive in exercise and liked it! Found a crash and a UX problem though.
Two issues, maybe related:
Expected behavior:
First of all, the scroll should only happen on one element at a time. For example scrolling in the text input should not cause the session modal to also scroll.
Secondly, the app should not crash when scrolling.
Actual behavior:
The scroll is weird, consistently.
The app crashed once so I had to retype my reflection. From now on I'll type in another note app, and copy+paste into the Aware app to avoid having to deal with things like this.
Reproduces how often:
See above.
Version 2.25.0-v1279/P@028f3373
Android. See if you can find the Sentry crash report. Happened recently before this issue was opened.
Maybe slow down the video in the post-session feedback modal? The video content is good, but the speed feels off compared to the rest of the app. Would be even better with a calm flow of clouds.
Sentry Issue: 29K-CUPCAKE-A6
IllegalArgumentException: Given String is empty or null
at com.google.android.gms.common.internal.Preconditions.checkNotEmpty(com.google.android.gms:play-services-basement@@18.1.0:2)
at com.google.firebase.auth.FirebaseAuth.signInWithEmailAndPassword(com.google.firebase:firebase-auth@@21.1.0:1)
at io.invertase.firebase.auth.ReactNativeFirebaseAuthModule.signInWithEmailAndPassword(ReactNativeFirebaseAuthModule.java:368)
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
...
(8 additional frame(s) were not displayed)
What if the app version could be copied more easily? For example with a button to "copy version info" which gets a string like "Version 2.25.0-v1279/P@028f3373"
Up until now, copying the version number can only happen when checking for a new app version. So it's tricky to get the timing right.
Sentry Issue: 29K-CUPCAKE-F7
React ErrorBoundary Error: undefined is not an object (evaluating 'b.card.host')
TypeError: undefined is not an object (evaluating 'b.card.host')
at CompletedSessionCard (src/lib/components/Cards/SessionCard/CompletedSessionCard.tsx:88:58)
at Ka ([native code])
at value ([native code])
at value ([native code])
...
(18 additional frame(s) were not displayed)
Heh, what an unusual question. I don't even remember where I stumbled about this, just that I can't install it on my phone, because there are no build artifacts anywhere to be found, and it's also not available on f-droid. And Aurora Store is currently out of quota. It makes me a little sad to not be able to try this out :-(
It would be great to have this available for open source enthusiasts on f-droid (if you don't know what f-droid is: It's an alternative app store for Android, which only features open source apps, (most?) with reproducible builds and (most) without ads, trackers, ...
Open source nerds need some love and support, too.
Google Playstore is already available. F-droid is the only big alternative that I know of. Artifacts on Github would be a stop-gap, but not a proper solution, as people would not be notified of updates.
https://f-droid.org/docs/Submitting_to_F-Droid_Quick_Start_Guide/
Feeling pretty good!
Here's something I've experienced for the past few months, but haven't reported until now. I initially thought it was just a placeholder for things to be added later. But this seems to be an actual bug.
In the "About Aware" modal, actions that open another modal works as expected. However none of the external links work as expected. Pressing them makes nothing happen.
Expected behavior:
Actual behavior:
Reproduces how often:
Always.
2.27.0-v1311/P@6e41d45
Android 11.
While coding with 29k friends we found something
and I feel okay, glad that we have a way around the issue for now.
Firbease functions doesn't seem to be loading .env
like it is said it would on the docs webpage.
For now, we are using dotenv
as a dependency ourselves and importing it to load them, which should be unnecessary according to the doc linked above.
Expected behavior:
When running yarn start
in functions
we expect our .env
values to be loaded.
Actual behavior:
We don't get the values loaded into process.env
.
Reproduces how often:
Everytime when running yarn start
Sentry Issue: 29K-CUPCAKE-EG
TypeError: undefined is not an object (evaluating 't.timestamp.toDate')
at getSessionState (/home/runner/work/29k/29k/shared/src/modelUtils/session.ts:19:27)
at stateDoc.onSnapshot$argument_0 (src/lib/session/hooks/useSubscribeToSession.ts:26:32)
at value ([native code])
...
(9 additional frame(s) were not displayed)
Allow local sessions to be completed offline. This requires downloading and caching video and audio files as well as images. and animations.
This would make it possible to use the app in locations without good internet connections, such as outside of big cities. Thus making this more accessible to more people.
E.g. if you added a hidden collection to your journey.
Sentry Issue: 29K-CUPCAKE-Q9
TypeError: undefined is not an object (evaluating 'l.exercises.map')
at useMemo$argument_0 (src/lib/content/hooks/useExercisesByCollectionId.ts:14:25)
at useExercisesByCollectionId (src/lib/content/hooks/useExercisesByCollectionId.ts:12:10)
at CollectionCardContainer (src/lib/components/Cards/CollectionCards/CollectionCardContainer.tsx:24:21)
...
(16 additional frame(s) were not displayed)
React ErrorBoundary Error: undefined is not an object (evaluating 'l.exercises.map')
Seems to be reanimated related
Sentry Issue: 29K-CUPCAKE-FM
CppException: undefined is not an object (evaluating 'fun.__remoteFunction')
runOnJS
runOnJS@[native code]
handleOnEnd
handleOnEnd@[native code]
anonymous
anonymous@[native code]
anonymous
anonymous@[native code]
handleAndFlushImmediates
handleAndFlushImmediates@[native code]
at com.swmansion.reanimated.nativeProxy.EventHandler.receiveEvent(EventHandler.java)
at com.swmansion.reanimated.nativeProxy.EventHandler.receiveEvent(EventHandler.java:25)
at com.swmansion.gesturehandler.react.RNGestureHandlerStateChangeEvent.dispatch(RNGestureHandlerStateChangeEvent.kt:42)
at com.swmansion.reanimated.NodesManager.handleEvent(NodesManager.java:306)
at com.swmansion.reanimated.NodesManager.onEventDispatch(NodesManager.java:282)
...
(63 additional frame(s) were not displayed)
Just had a really nice session in the app, so feeling great at the moment!
Make it possible to toggle your own camera self-view on or off.
To help me focus on other participants, I always want to disable self-view in video meetings. This makes video calls much more enjoyable. Plus it saves some battery to have less moving pixels on the screen ;)
This is a must-have for me, so there are no other alternatives.
Potential solutions:
eye
icon)?Excitement!
Make the CMS fun to use by adding tasteful emojis.
Why? Because we can π€·ββοΈ
Doing nothing, and losing sleep due to the lack of fun π΄
Here's what happened when emojis decided to contribute to the https://github.com/Greenheart/idg.tools project. And oh let me tell you, this could be game changing for 29k too! π
I hope you like it, because I'm just about to launch my new startup that will help open source projects make their Netlify CMS UI:s a little bit more fun to use! It will likely be a huge success given how many πΈπΈπΈπΈπΈ emojis GitHub lets me type here!
Noticing that I've been very impatient and not present/in the moment, too much worries and frustrations about things out of my reach.
Noticed this issue while working on new app functionalities.
Deprecated ViewPropTypes
, seems like some project dependency uses that, I couldn't identify which one yet.
Maybe there's a new version that doesn't use the deprecated type which we could update to.
Expected behavior:
To have a "clean" app, without any warnings like that.
Actual behavior:
Warning show sup right away when opening the app with unclear origin.
Reproduces how often:
100%
(android and ios)
Sentry Issue: 29K-CUPCAKE-CN
Invariant Violation: scrollToIndex out of range: requested index 2 is out of 0 to 1
at value ([native code])
...
(14 additional frame(s) were not displayed)
Sharing some happy news!
Like discussed earlier, https://github.com/Greenheart/idg.tools/ will start exploring StaticCMS now that it reached a stable release.
Maybe 29k are interested in doing the same. Would also be nice to share experiences from the migration process to help both our projects!
This hopefully fixes several of the long standing UX-, performance-, and security issues as well as bugs in NetlifyCMS.
Keep using NetlifyCMS for now because it "works" pretty good despite its issues. Then invest in this in the future with more resources, especially since StaticCMS might change when people start using it.
When being in the intro portal and getting a call, the video and audio is paused and never resumed
Expected behavior:
When call has ended or was declined, the video and audio should resume
Actual behavior:
Both video and audio is paused and you are stuck in the intro portal
Sentry Issue: 29K-CUPCAKE-GD
Source error
Sentry Issue: 29K-CUPCAKE-AX
React ErrorBoundary Error: Text strings must be rendered within a <Text> component.
Error: Text strings must be rendered within a <Text> component.
at Ka ([native code])
at value ([native code])
...
(12 additional frame(s) were not displayed)
@all-contributors please add @Nipher for code
@all-contributors please add @gewfy for code
@all-contributors please add @swemail for code
@all-contributors please add @kajsaunge for code and design
@all-contributors please add @Pelsin for code
Sentry Issue: 29K-CUPCAKE-YJ
RemoteException: Remote stack trace:
at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2729)
at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2440)
at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1785)
at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:15850)
at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:11873)
SecurityException: Starting FGS with type mediaProjection callerApp=ProcessRecord{4742442 13774:org.twentyninek.app.cupcake/u0a713} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION] any of the permissions allOf=false [android.permission.CAPTURE_VIDEO_OUTPUT, android:project_media]
at android.os.Parcel.createExceptionOrNull(Parcel.java:3069)
at android.os.Parcel.createException(Parcel.java:3053)
at android.os.Parcel.readException(Parcel.java:3036)
at android.os.Parcel.readException(Parcel.java:2978)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7214)
...
(12 additional frame(s) were not displayed)
RuntimeException: Unable to start service com.daily.reactlibrary.DailyOngoingMeetingForegroundService@126ccb2 with Intent { cmp=org.twentyninek.app.cupcake/com.daily.reactlibrary.DailyOngoingMeetingForegroundService (has extras) }: java.lang.SecurityException: Starting FGS with type mediaProjection callerApp=ProcessRecord{4742442 13774:org.twentyninek.app.cupcake/u0a713} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION] any of the permissions allOf=false [android.permission.CAPTURE_VIDEO_OUTPUT, android:project_media]
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5286)
at android.app.ActivityThread.-$$Nest$mhandleServiceArgs
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2531)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:230)
...
(5 additional frame(s) were not displayed)
We've a feature already on our product roadmap which plans to enable users to record themselves doing a sharing, the use-cases for that vary, initially we've in mind async sharings and personal sharings to keep it to yourself (probably accessible through "your Journey" and only stored locally on your device)
In order for us to enable that we need a to implement a video&audio recording setup.
I will use this issue to post my findings and observations on different libraries that I'm experimenting with.
After discussing our hooks structure we came up with some great understanding, feels awesome.
We want hooks to be as atomic as possible and either be getters or setters, and not both, having it as both could cause unwanted re-renders and race conditions.
Tasks:
Split up useTemples
actions into separate hooks
subscribeTemple
would snapshot the temple object based on the id
and set it to recoil.navigateToIndex
would receive the temple and content (instead of reading it from the state) and use the templeApi to update the temple docsetActive
would receive a temple (instead of reading it from the state) and use the templeApi to update the temple doc.setPlaying
would receive a temple (instead of reading it from the state) and use the templeApi to update the temple doc.setDailyFacilitatorId
(future setSpotlightParticipant
) would receive the participant id and temple and use the templeApi to update the temple doc. Same thing for the hook useTemples
.
Sentry Issue: 29K-CUPCAKE-XT
CppException: [Reanimated] Data type not recognized by value unpacker.
Error: [Reanimated] Data type not recognized by value unpacker.
at valueUnpacker (WorkletRuntime::WorkletRuntime:1:1477)
at com.swmansion.reanimated.AndroidUIScheduler.triggerUI(AndroidUIScheduler.java)
at com.swmansion.reanimated.AndroidUIScheduler$1.run(AndroidUIScheduler.java:24)
at com.swmansion.reanimated.AndroidUIScheduler$2.runGuarded(AndroidUIScheduler.java:43)
at com.facebook.react.bridge.GuardedRunnable.run(GuardedRunnable.java:29)
at android.os.Handler.handleCallback(Handler.java:958)
...
(7 additional frame(s) were not displayed)
After getting an anonymous sign in user id, which works fine at first, seems like after a day or some period of time the id isn't valid anymore.
You'll get the error Internal state invariant broken: no user with ID: <user-id>
in the console after calling the /call
function
Maybe we should reset the user id in such dev use-case and re-do the auth?
Instead we get stuck in an invalid user-id, triggering such error.
Reproduces how often:
Happened twice, hard to say the exact reproducibility %
Happened in ios
emulator for me but I think same would occur in android
.
0893f5f
Android: toggling keyboard in the post-session feedback modal shows flickering content in the background.
I'm doing well and I want to share an idea. I'm pretty excited about it given the results I saw in another RN app after making this change.
I saw a significant speed-up of the other RN app I'm developing, which made a huge difference in how it felt when interacting with the app. Hopefully this can have the same effect for 29k.
The current 29k app is pretty fast and simple, but I know there will be more features and content added to it which might affect performance.
By adding explicit hardware acceleration with android:hardwareAccelerated="true"
to the client/android/app/main/AndroidManifest.xml
file , performance was greatly improved in another RN app I'm developing.
According to the documentation, it should be enabled by default for modern apps, but since it can be turned off by each activitiy
in the AndroidManifest.xml
, we perhaps needed to override it to make it work.
This could be a simple way to boost performance, and make the app feel more snappy. Hardware acceleration should also save battery in for example video calls or other heavy tasks.
Instead of enabling explicitly for the entire app, this could also be done for the activities that need it.
Sentry Issue: 29K-CUPCAKE-Y6
IllegalStateException: Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity.
at com.swmansion.rnscreens.ScreenFragment.<init>(ScreenFragment.kt:57)
at com.swmansion.rnscreens.ScreenStackFragment.<init>(ScreenStackFragment.kt:38)
at java.lang.reflect.Constructor.newInstance0(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:672)
...
(29 additional frame(s) were not displayed)
InvocationTargetException: None
at java.lang.reflect.Constructor.newInstance0(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:672)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525)
...
(27 additional frame(s) were not displayed)
Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenStackFragment: calling Fragment constructor caused an exception
at androidx.fragment.app.Fragment.instantiate(Fragment.java:690)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525)
at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:84)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:91)
...
(25 additional frame(s) were not displayed)
RuntimeException: Unable to start activity ComponentInfo{org.twentyninek.app.cupcake/org.twentyninek.app.cupcake.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenStackFragment: calling Fragment constructor caused an exception
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4164)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4322)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
...
(8 additional frame(s) were not displayed)
hi, our team is currently using your 29k mobile application as our subject of software testing academic project, and after executing some of the planned test cases, here are some of the bugs or changes that we would like to issued to enhance user experience.
We have conducted smoke testing where one of the test case is to spam clicking on different interactive components on "Challenge" page. As we executed a test case (spam clicking on answer of Multiple Choice Question), it seems like the system will change the selected answer when proceeding to next question and having display lag when clicking event is too frequent, in worse case causing app crash and force quit.
Yooo hope all is well,
we tried to render some markdown recently and noticed the our styles are not used by it, feeling well!
So try rendering some markdown and see the differences between our own components and markdown.
This is the markdown library we use and its docs
Expected behavior:
Markdown rendered components should equal our own defined styles.
Actual behavior:
Markdown doesn't use our styles
Reproduces how often:
always?
Heyyyy folllllks, I feel good, looking forward to meet some friends later and happy to see the app coming alive!
I've had a chat with @gewfy and @kajsaunge about the "temple experience" and content controls, so I'm creating this so we don't forget to address it.
So, right now we have a few things that would be good to give some love to:
Right now we put every state on the root of the temple document, which can cause a lot of confusion and mix abstractions up and where/when they should be applied in the user experience.
We will explore alternatives together here hopefully.
The example below shows such document at the moment
index = the current "content page" that the sharing is on
active = if true
the content is rendered to the sharing participants, if false
if it's only video call (no content)
playing = if true
the current "content page" checks if there's something to be played and plays it, if false
it pauses it.
Sentry Issue: 29K-CUPCAKE-E0
JSApplicationIllegalArgumentException: Invalid autoComplete: current-password
at com.facebook.react.views.textinput.ReactTextInputManager.setTextContentType(ReactTextInputManager.java:767)
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.uimanager.ViewManagersPropertyCache$PropSetter.updateViewProp(ViewManagersPropertyCache.java:93)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater$FallbackViewManagerSetter.setProperty(ViewManagerPropertyUpdater.java:136)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater.updateProps(ViewManagerPropertyUpdater.java:56)
...
(21 additional frame(s) were not displayed)
InvocationTargetException: None
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.uimanager.ViewManagersPropertyCache$PropSetter.updateViewProp(ViewManagersPropertyCache.java:93)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater$FallbackViewManagerSetter.setProperty(ViewManagerPropertyUpdater.java:136)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater.updateProps(ViewManagerPropertyUpdater.java:56)
at com.facebook.react.uimanager.ViewManager.updateProperties(ViewManager.java:48)
...
(20 additional frame(s) were not displayed)
JSApplicationIllegalArgumentException: Error while updating property 'autoComplete' of a view managed by: AndroidTextInput
at com.facebook.react.uimanager.ViewManagersPropertyCache$PropSetter.updateViewProp(ViewManagersPropertyCache.java:101)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater$FallbackViewManagerSetter.setProperty(ViewManagerPropertyUpdater.java:136)
at com.facebook.react.uimanager.ViewManagerPropertyUpdater.updateProps(ViewManagerPropertyUpdater.java:56)
at com.facebook.react.uimanager.ViewManager.updateProperties(ViewManager.java:48)
at com.facebook.react.uimanager.ViewManager.createViewInstance(ViewManager.java:144)
...
(19 additional frame(s) were not displayed)
Default scroll for journey tab is wrong on android
Or alternatively,
Expected behavior:
There should be enough space between the header and the first conpleted session.
Actual behavior:
The first item is cropped.
Reproduces how often:
100% with both ways to reproduce it
Version 2.25.0-v1279/P@028f3373
Android
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.