Commit graph

5790 commits

Author SHA1 Message Date
Andy Scherzinger
3f52b7aad2
fix: Have correct SPDX license header for logo/trademarked items
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-04-25 18:29:46 +02:00
Nextcloud bot
bf24629c81
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-25 02:46:42 +00:00
Nextcloud bot
2477284177
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-24 02:46:09 +00:00
Marcel Hibbe
b870b0f208
rename classes called 'Magic*'
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-23 15:26:00 +02:00
Nextcloud bot
379dd66612
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-20 02:53:25 +00:00
Nextcloud bot
e1b07b68dd
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-19 02:47:48 +00:00
Sowjanya Kota
d876ec4ef0
Merge pull request #3849 from nextcloud/bugfix/noid/fixToOpenCallsAsVoiceOnly
fix to open calls as voice only when user clicked on voice button
2024-04-18 14:57:10 +02:00
Julius Linus
57017f95f4
Set pages to be every 50 messages
Large enough to prevent onLoadMore from calling refresh on a few messages, but small enough to refresh when needed.

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2024-04-18 14:16:59 +02:00
Marcel Hibbe
8a8b128ac6
fix to keep text of message-editing after 30sec
without this fix, the text when editing a message was lost after pulling chat messages (30sec), because inputEditText was initialized again with the initial text

As a fix, message editing is only initialized once when the edit button was clicked.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-18 12:45:50 +02:00
Nextcloud bot
38dac71239
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-18 02:46:11 +00:00
Marcel Hibbe
ca65995f84
fix to open calls as voice only when user clicked on voice button
Before this fix, KEY_CALL_VOICE_ONLY was not included in the intent extras so call always started as videocall

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-17 17:00:37 +02:00
Marcel Hibbe
3ea3f94cff
fix to show "Note to self" icon in conversation info
share conversation link to other apps

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-17 14:40:01 +02:00
Marcel Hibbe
f628d357ea
use conversationType to check if share button should be shown for conversation
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-17 13:55:55 +02:00
sowjanyakch
080937305a
Make conversation settings visible
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:31 +02:00
sowjanyakch
287ba3bbc9
Not sharing the conversation link of Note to self
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:31 +02:00
sowjanyakch
1c26c757f0
Refactor ShareUtils and remove ShareUtilsTest file
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:31 +02:00
sowjanyakch
b6ab867280
Make conversation link available for copy and paste in the Conversation settings.
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:31 +02:00
sowjanyakch
7832f72d12
share conversation link to other apps
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:30 +02:00
Marcel Hibbe
94257242a3
fix to set ConversationType for "Note to self"
Fix to check if a conversation is "Note to self" by checking the ConversationType instead to check conversation name by hardcoded string

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-17 12:02:52 +02:00
Nextcloud bot
b9b449f0bf
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-17 02:45:18 +00:00
Marcel Hibbe
2485b14009
get room in NotificationWorker so CallNotificationActivity doesn't have to wait for it
The get-room request in CallNotificationActivity was sometimes too slow which caused the activity to be unresponsive.
With this commit, the room is first loaded before the user gets a notification.
For now all necessary values are passed as intent extras. In the future with offline support, there might be reasons to load it from DB in CallNotificationActivity.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-15 14:33:27 +02:00
Marcel Hibbe
7e1ebebd5d
remove unnecessary KEY_FROM_NOTIFICATION_START_CALL handling
this seems to be a relict caused by conductor back then.

CallNotificationActivity is opened directly.
There shouldn't have been any scenario anymore when it would be opened by MainActivity.
Back then with conductor, this was done because there must have been an activity to open which then opened a controller.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-15 14:33:26 +02:00
Marcel Hibbe
52dc82703e
avoid error when clicking on federated user avatar
without this, there would be http 404 error (nothing was shown to user):

2024-04-11 15:34:30.612 18641-18641 ProfileBottomSheet      com.nextcloud.talk2                  E  Failed to get hover card for user user@yourfereatedserver.dev
                                                                                                    retrofit2.adapter.rxjava2.HttpException: HTTP 404
                                                                                                    	at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:57)
                                                                                                    	at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:38)
                                                                                                    	at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:48)
                                                                                                    	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                                                                                    	at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:35)
                                                                                                    	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                                                                                    	at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
                                                                                                    	at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:608)
                                                                                                    	at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
                                                                                                    	at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
                                                                                                    	at java.util.concurrent.FutureTask.run(FutureTask.java:264)
                                                                                                    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
                                                                                                    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
                                                                                                    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
                                                                                                    	at java.lang.Thread.run(Thread.java:1012)

With this fix, nothing happens when clicking on a federated user avatar, just like in web and iOS.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-15 14:31:53 +02:00
Marcel Hibbe
69e8c91431
avoid error when clicking on federated user mention chip
without this, there would be the common error message shown because of a http 404 error.

With this fix, nothing happens when clicking on a federated user mention chip, just like in web and iOS.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-15 14:31:53 +02:00
Nextcloud bot
7979af0d38
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-14 02:44:56 +00:00
Sowjanya Kota
d8e6a4a135
Merge pull request #3822 from nextcloud/bugfix/noid/fixCanModerate
Bugfix/noid/fix can moderate
2024-04-12 14:54:19 +02:00
Marcel Hibbe
e5e859feeb
hide button for open conversations when adding participants
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-11 17:17:40 +02:00
Marcel Hibbe
d5ff59fcd0
remove unused method
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-11 13:53:39 +02:00
Marcel Hibbe
d93dd0f3c1
fix logic for canModerate
bug was introduced with commit 754b8250

As a result, for example the delete conversation option was not shown.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-11 13:51:15 +02:00
Nextcloud bot
0a24fafad7
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-10 02:48:29 +00:00
Nextcloud bot
2e5f10b1f2
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-09 02:43:44 +00:00
Nextcloud bot
5282ecabfb
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-08 02:44:33 +00:00
Nextcloud bot
ccccaae4ad
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-07 02:44:43 +00:00
Marcel Hibbe
3cfc4188f0
fix to load fallback poll avatar for other actorTypes (deleted users...)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-05 15:48:13 +02:00
Marcel Hibbe
89d004b32d
fix margins for poll checkboxes
checkbox was cut off to the left. probably some material design update changed this. Now there is no need to modify the margin anymore.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-05 15:33:31 +02:00
Marcel Hibbe
eaa0743027
fix to always show polls dialog.
Sometimes the polls dialog seemed to not load the content.
This was caused by the showLoadingScreen logic using binding.root.post which overwrote the content depending on if the showResultsScreen or showVoteScreen already set the content. So it was a race conditions that sometimes it worked and sometimes not.
Additionally, calculating the height failed in showLoadingScreen, so in the end there was only the headline visible and even not loading spinner. This is now replaced by a fixed height.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-05 15:33:30 +02:00
Marcel Hibbe
0bdbc8a538
use EnumActorTypeConverter for poll models
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-05 13:25:32 +02:00
Marcel Hibbe
091fddc2c0
show federated avatars for polls
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-05 12:43:37 +02:00
Sowjanya Kota
e57f08f2d5
Merge pull request #3803 from nextcloud/bugfix/noid/fixNpeForConversationCreation
avoid NPE when context is not known when creating conversation
2024-04-05 10:15:26 +02:00
Nextcloud bot
4c6ba0634d
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-05 02:44:39 +00:00
Marcel Hibbe
1d62b9f7f9
avoid NPE when context is not known when creating conversation
NPE without this fix:

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
  at android.content.ComponentName.<init> (ComponentName.java:132)
  at android.content.Intent.<init> (Intent.java:8269)
  at com.nextcloud.talk.conversation.CreateConversationDialogFragment.initiateConversation (CreateConversationDialogFragment.kt:276)
  at com.nextcloud.talk.conversation.CreateConversationDialogFragment.access$initiateConversation (CreateConversationDialogFragment.kt:63)
  at com.nextcloud.talk.conversation.CreateConversationDialogFragment$addParticipants$1.invoke (CreateConversationDialogFragment.kt:257)
  at com.nextcloud.talk.conversation.CreateConversationDialogFragment$addParticipants$1.invoke (CreateConversationDialogFragment.kt:248)
  at com.nextcloud.talk.conversation.CreateConversationDialogFragment$sam$androidx_lifecycle_Observer$0.onChanged
  at androidx.lifecycle.LiveData.considerNotify (LiveData.java:133)
  at androidx.lifecycle.LiveData.dispatchingValue (LiveData.java:151)
  at androidx.lifecycle.LiveData.setValue (LiveData.java:309)
  at androidx.lifecycle.MutableLiveData.setValue (MutableLiveData.java:50)
  at androidx.lifecycle.LiveData$1.run (LiveData.java:93)
  at android.os.Handler.handleCallback (Handler.java:958)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:230)
  at android.os.Looper.loop (Looper.java:319)
  at android.app.ActivityThread.main (ActivityThread.java:8893)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:608)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-04 17:12:21 +02:00
Marcel Hibbe
3d9c1d2ca9
avoid NPE when serverVersion is not known
NPE without this fix:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4975)
  at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:5008)
  at android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:54)
  at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:45)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:176)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2386)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:210)
  at android.os.Looper.loop (Looper.java:299)
  at android.app.ActivityThread.main (ActivityThread.java:8252)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:559)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:954)
Caused by java.lang.NullPointerException:
  at com.nextcloud.talk.conversationlist.ConversationsListActivity.onResume (ConversationsListActivity.kt:287)
  at android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1565)
  at android.app.Activity.performResume (Activity.java:8668)
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4965)

 The root cause may be that the CapabilitiesWorker is not finished so the serverVersion was not added to the user.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-04 16:09:15 +02:00
Marcel Hibbe
c82138ca7c
translate all boolean values in diagnosis screen
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-04 16:06:06 +02:00
Julius Linus
c12c090551
theme federation invitations panel
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-04 14:54:30 +02:00
Nextcloud bot
3b710b904e
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-04 02:44:06 +00:00
Bhavesh Kumawat
bde1c3a48d
Added network checks and display error dialog
Signed-off-by: Bhavesh Kumawat <kumawatbhavesh1000@gmail.com>
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-03 17:49:51 +02:00
Julius Linus
b660816bc9
fix ConcurrentModificationException
2024-03-19 15:49:38.476 15732-17089 okhttp.OkHttpClient     com.nextcloud.talk2                  I  {"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":[]}}
2024-03-19 15:49:38.476 15732-17089 okhttp.OkHttpClient     com.nextcloud.talk2                  I  <-- END HTTP (74-byte body)
2024-03-19 15:49:38.571 15732-15732 ViewRootIm...tActivity] com.nextcloud.talk2                  I  handleAppVisibility mAppVisible = false visible = true
2024-03-19 15:49:38.571 15732-15732 ViewRootIm...tActivity] com.nextcloud.talk2                  I  stopped(false) old = true
2024-03-19 15:49:38.571 15732-15732 ViewRootIm...tActivity] com.nextcloud.talk2                  I  WindowStopped on com.nextcloud.talk2/com.nextcloud.talk.chat.ChatActivity set to false
2024-03-19 15:49:38.695 15732-16333 WebSocketInstance       com.nextcloud.talk2                  D  Receiving : okhttp3.internal.ws.RealWebSocket@b8eb9d5 {"type":"event","event":{"target":"room","type":"leave","leave":["01s9v73eeKC5P2QUmsEqfsi_ZmY-DaDPhs3wdFTmJkB8VzVJc1FSWUV5bVZVTEtBaVpZOUYxaDVMRlpsaG95enlFc2dXMXpQY3Y3dGNGNlNfemZiLXg5cXk1ZVNyTEkzNS0wcDZJZUdnelFYbmF6ZVMwcWRDbVBTNklLYkFHNUdwRDQ2c0VZR1RoX1JObmF2Q3hSb2YtbFNJOFRONkhFLWp2cWZBZnk2d2VSb1BsbG96VE90Vm45bFhOa2NwWWZfdTA1clJ4VFoxcHpJcHwyMjEzNTgwMTcx"]}}
2024-03-19 15:49:38.697 15732-15732 AndroidRuntime          com.nextcloud.talk2                  D  Shutting down VM
2024-03-19 15:49:38.702 15732-15732 AndroidRuntime          com.nextcloud.talk2                  E  FATAL EXCEPTION: main
                                                                                                    Process: com.nextcloud.talk2, PID: 15732
                                                                                                    java.util.ConcurrentModificationException
                                                                                                    	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1441)
                                                                                                    	at java.util.HashMap$EntryIterator.next(HashMap.java:1475)
                                                                                                    	at java.util.HashMap$EntryIterator.next(HashMap.java:1473)
                                                                                                    	at com.nextcloud.talk.chat.ChatActivity.sendStopTypingMessage(ChatActivity.kt:2097)
                                                                                                    	at com.nextcloud.talk.chat.ChatActivity.updateOwnTypingStatus(ChatActivity.kt:2063)
                                                                                                    	at com.nextcloud.talk.chat.ChatActivity$initMessageInputView$1.onTextChanged(ChatActivity.kt:1162)
                                                                                                    	at android.widget.TextView.sendOnTextChanged(TextView.java:11881)
                                                                                                    	at android.widget.TextView.setText(TextView.java:6968)
                                                                                                    	at android.widget.TextView.setText(TextView.java:6751)
                                                                                                    	at android.widget.EditText.setText(EditText.java:133)
                                                                                                    	at android.widget.TextView.setText(TextView.java:6703)
                                                                                                    	at com.nextcloud.talk.chat.ChatActivity.onStart(ChatActivity.kt:575)
                                                                                                    	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1510)
                                                                                                    	at android.app.Activity.performStart(Activity.java:8616)
                                                                                                    	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4204)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:226)
                                                                                                    	at android.os.Looper.loop(Looper.java:313)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8762)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
2024-03-19 15:49:38.735 15732-15732 Process                 com.nextcloud.talk2                  I  Sending signal. PID: 15732 SIG: 9
2024-03-19 15:49:39.328  1477-1521  WindowManager           system_server                        E  win=Window{9280569 u0 com.nextcloud.talk2/com.nextcloud.talk.activities.CallActivity EXITING} destroySurfaces: appStopped=false cleanupOnResume=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.server.wm.ActivityRecord.destroySurfaces:6539 com.android.server.wm.ActivityRecord.destroySurfaces:6520 com.android.server.wm.WindowState.onExitAnimationDone:5995 com.android.server.wm.ActivityRecord$$ExternalSyntheticLambda10.accept:2 java.util.ArrayList.forEach:1262 com.android.server.wm.ActivityRecord.onAnimationFinished:8607 com.android.server.wm.ActivityRecord.postApplyAnimation:6252
2024-03-19 15:49:40.075 19752-19752 nativeloader            com.nextcloud.talk2                  D  Configuring classloader-namespace for other apk /data/app/~~7lbTYxiIqB-jrG8FI6_p4A==/com.nextcloud.talk2-0R1zH5b8yl__vfC9tvSYrg==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~7lbTYxiIqB-jrG8FI6_p4A==/com.nextcloud.talk2-0R1zH5b8yl__vfC9tvSYrg==/lib/arm64:/data/app/~~7lbTYxiIqB-jrG8FI6_p4A==/com.nextcloud.talk2-0R1zH5b8yl__vfC9tvSYrg==/base.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand:/data/user/0/com.nextcloud.talk2
2024-03-19 15:49:40.097 19752-19752 GraphicsEnvironment     com.nextcloud.talk2                  V  ANGLE Developer option for 'com.nextcloud.talk2' set to: 'default'
2024-03-19 15:49:40.098 19752-19752 GraphicsEnvironment     com.nextcloud.talk2                  V  ANGLE GameManagerService for com.nextcloud.talk2: false
2024-03-19 15:49:40.099 19752-19752 GraphicsEnvironment     com.nextcloud.talk2

Signed-off-by: Julius Linus <julius.linus@nextcloud.com>
2024-04-03 17:15:49 +02:00
sowjanyakch
99d361f37d
Hides messageSendButton initially
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-03 16:57:16 +02:00
sowjanyakch
2ad6b72bcf
shows edit message only when user edits a message
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-03 16:57:16 +02:00
Marcel Hibbe
16c53cab21
refactor (extract methods)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-04-03 16:51:42 +02:00