android, desktop: new settings section design (#6777)

* android, desktop: new settings section design

* Section facelift: LIGHT canvas swap, equal padding, 2dp item dividers

- LIGHT canvas (themedBackground) now paints the off-white formula
  (bg.mixWith(onBackground, 0.95f)) so white cards read as raised.
  DARK/BLACK keep palette bg (cards already raised via founder's
  formula in Section.kt). SIMPLEX keeps its gradient.
- Section cards in LIGHT switch from formula to pure white via
  Color.White. DARK/BLACK keep the formula, unchanged.
- Section card horizontal padding equalized to 16dp on outer + inner
  for clean canvas-edge alignment. extraPadding (icon-indented rows)
  keeps DEFAULT_PADDING * 1.7f.
- 2dp dividers between rows inside section cards, color matches the
  per-theme canvas (SIMPLEX uses gradient bottom stop). Implemented via
  Modifier.drawBehind on each SectionItemView, gated by a private
  LocalInSectionCard CompositionLocal set true only by SectionView's
  inner Column — standalone SectionItemView usage (alerts, pickers)
  stays unaffected. Single canvas helper canvasColorForCurrentTheme()
  in Theme.kt is the source of truth for both canvas paint and divider
  color.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: paint item divider on top of clickable's hover indication

Previously sectionItemDivider() was inside the modifier val before
clickable, so the hover background drew over it inconsistently — on
hover the row's content area got a tinted overlay while the 2dp
divider area stayed at canvas color, creating visible contrast that
read as a "dark line below hovered row".

Moving the modifier to the end of the chain (after clickable+padding)
makes drawBehind paint after the hover indication, so the divider
color is consistently #F2F2F2-ish regardless of hover state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: trim section item horizontal padding to 15dp

CARD_PADDING (16dp) still drives outer card margin from screen edge.
Item content inside the card now uses CARD_ITEM_PADDING = CARD_PADDING - 1.dp,
giving the row text a slightly tighter horizontal inset that reads
better at the current card width.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Appearance: drop redundant 10dp spacer between Apply-to row and wallpaper preview

Before section facelift the spacer separated the Apply-to row from the
wallpaper preview block visually. With the new 2dp item divider drawing
under the Apply-to row that separation is already provided, and the spacer
leaves an awkward white gap between the divider and the preview.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: repurpose SectionDivider() as explicit 2dp canvas-color line; use in Appearance themes card

SectionDivider() composable had 0 callsites and used Material Divider
with horizontal inset (unused legacy). Repurposed to draw a 2dp
canvas-color Box matching the auto-divider style used by
SectionItemView, gated by LocalInSectionCard so it no-ops outside a
section card.

Use it in Appearance themes card between WallpaperPresetSelector
(custom composable, not a SectionItemView, so no auto-divider) and the
following content (Remove image / Color mode / Dark mode), providing
the visual separator the user expects between the theme grid and the
rows below it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Appearance: symmetric vertical padding around profile avatar row

ProfileImageSection's Row had Modifier.padding(top = 10.dp), giving 10dp
above the avatar and 0dp below — visibly asymmetric inside the card.
Changed to vertical = 10.dp so top and bottom padding match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* NetworkAndServers: move messages card footer/spacer out of SectionView

Before PR #6777 SectionView had no card chrome, so SectionTextFooter and
SectionDividerSpaced placed inside its content lambda rendered as plain
inline content. After the card chrome was added, the same code rendered
the footer caption and the spacer INSIDE the white card area, producing
an unwanted gap (and visible auto-divider tail) under Advanced network
settings.

Move both out of the SectionView lambda so the footer reads as a caption
below the card (iOS-style) and the spacer separates this card from the
next one.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* DeveloperView: move card footer/bottom-spacer out of SectionView lambdas

Same pre-card-chrome pattern as NetworkAndServers: SectionTextFooter
("Show: Database IDs and Transport isolation...") and SectionBottomSpacer
were inside SectionView lambdas, so after PR #6777 added card chrome they
rendered inside the white card area — the footer caption sat inside the
first card and the 48dp bottom spacer appeared as an empty row at the
end of the deprecated-options card (after SimpleX links).

Move both out of the SectionView lambda so the footer reads as a caption
below the first card and the bottom spacer adds safe-area room after the
deprecated-options card (not inside it).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ChatInfoView: move chat-ttl footer caption out of SectionView lambda

Same pre-card-chrome pattern: SectionTextFooter("Delete chat messages
from your device.") was inside the ChatTTLOption SectionView lambda, so
after PR #6777 added card chrome it rendered inside the card. Move it
out so the caption sits below the card iOS-style.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ChatWallpaperEditor: wrap loose params in SectionView cards

In ChatInfo > Chat theme screen the wallpaper preset selector, the
wallpaper setup controls, the reset/set-default buttons and the
"Apply to" mode dropdown were rendered as loose composables on a gray
canvas — no card chrome, inconsistent with the rest of Appearance.

Wrap them in SectionView so they read as raised iOS-style cards:
- wallpaper preset selector + setup view → one card
- reset-to-global + set-default buttons → one card
- (advanced mode) Apply-to dropdown → one card
- (collapsed mode) Advanced-settings button → one card

CustomizeThemeColorsSection and ImportExportThemeSection were already
SectionView-wrapped and remain unchanged. UserWallpaperEditor (sister
function with similar layout, lines 28-220) is intentionally left
alone — user reported only the chat-theme entry point.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* GroupChatInfoView: render group members inside the same SectionView card as owner

Previously the members card showed only the current user (owner) and the
add-members button — the actual group members were rendered as separate
LazyColumn items() OUTSIDE the SectionView, so they sat on the gray
canvas without card chrome. Visually inconsistent: owner in a card,
everyone else floating.

Move filteredMembers.value.forEach { ... } INSIDE the SectionView lambda
so every member row is part of the same card as the owner. Drop the
explicit Divider() call (auto-divider handles it now). Move remember
key to member.groupMemberId so per-member state survives reorders.

Trade-off: lazy rendering of member rows is replaced with eager
composition inside a Column. For typical groups (<100 members) this is
imperceptible; very large groups may compose slower on open. Watching
for reports.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ChatInfoView: move E2E encryption card spacer out of SectionView lambda

Same pre-card-chrome pattern: SectionDividerSpaced was inside the
single-row SectionView around the InfoRow, so after PR #6777 added
card chrome it rendered as a white gap inside the card (under the
auto-divider on the InfoRow), producing the "extra divider + gap"
the user reported.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ServersSummaryView: wrap Message reception sections in SectionView card

SubscriptionsSectionView and SMPSubscriptionsSection both rendered their
InfoRows + control item in a plain Column without card chrome — so on
the Servers info screen the "Message reception" section title sat above
loose rows on the gray canvas (no card), inconsistent with the rest of
the screen. Wrap the inner Column in SectionView so the rows get the
raised iOS-style card look. The custom header Row (title + subscription
status indicator) stays outside the card so the icon stays inline with
the title text.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Appearance: add missing SectionDivider import

f922d8fc introduced SectionDivider() call in the themes card but forgot
to add the per-symbol import. SectionView/SectionDividerSpaced etc. in
this codebase are imported individually (Section.kt declares them at
top level, not inside a package), so SectionDivider needs its own
import line.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: fix item divider position — paint via drawWithContent at full row bottom

8050676b moved sectionItemDivider() AFTER clickable.padding() in the
modifier chain to make the line paint on top of clickable's hover
indication. Side effect: drawBehind then saw the size of the
padding-reduced content area, not the full row, so dividers rendered
15dp ABOVE the actual row bottom (in the middle of the row's bottom
padding zone) instead of at the row edge between adjacent items.

Fix: keep sectionItemDivider() in the modifier val BEFORE clickable/
padding (so size = full row outer bounds) AND switch from drawBehind
to drawWithContent { drawContent(); drawLine(...) } so the line is
painted AFTER the chain's content + hover indication draw. Both
goals satisfied: divider sits at the true row bottom AND paints on
top of hover overlay.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: bump hover ripple alpha to 0.08 on LIGHT theme for visibility against canvas

Default Compose Material 1 RippleTheme uses hoveredAlpha=0.04 for LIGHT,
producing a Black·0.04 overlay (~#F5F5F5) on white cards — visually 3
units per channel away from the off-white canvas (~#F2F2F2), so the
hover state blends into the canvas and the row looks unfocused.

Add a section-local SectionRippleTheme that mirrors Material's defaults
for everything except hoveredAlpha on LIGHT (raised to 0.08 → ~#EBEBEB
overlay, ~7 units delta from canvas — visibly distinct). Dark themes
keep Material defaults since their hover contrast is already adequate.

Provided via CompositionLocalProvider in all three SectionView variants
alongside LocalInSectionCard, so it scopes only to section card items.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ProtocolServerView: pad CustomServer address field inside its card

The TextEditor (144dp tall input) sat flush against the top and bottom
edges of its containing SectionView card on the New server screen.
Pass padding = PaddingValues(vertical = DEFAULT_PADDING_HALF) to the
SectionView so the field gets 10dp of breathing room top and bottom
inside the card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* NetworkAndServers: move ConditionsButton into operators card; wrap Save servers in its own card

- "Review conditions" (ConditionsButton — a bare SectionItemView) was
  rendered between the operators card and the messages card on the
  canvas without card chrome. Move it inside the operators SectionView
  lambda after the operator rows, so it shares the card and gets a
  2dp auto-divider above it separating it from the operator list.
- "Save servers" (a bare SectionItemView further down) is now wrapped
  in its own SectionView so it reads as a single-item card matching
  the iOS-style facelift of the rest of the screen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Appearance: fix Transparency truncation and SettingsActionItem horizontal padding

Two layout regressions from earlier facelift commits where slider/item
math assumed DEFAULT_PADDING (20dp) for inner card padding, but the
facelift uses CARD_PADDING (16dp outer) + CARD_ITEM_PADDING (15dp inner)
= 31dp per side instead of 20dp.

- Slider widthIn calc in AppToolbarsSection and MessageShapeSection
  used (maxWidth - DEFAULT_PADDING * 2) so the slider was ~22dp wider
  than it should be, shrinking the label Box (weight 1f) and clipping
  "Transparency" to "Transparenc". Switched to
  (CARD_PADDING + CARD_ITEM_PADDING) * 2.
- SettingsActionItemWithContent explicitly passed
  PaddingValues(horizontal = DEFAULT_PADDING) to its SectionItemView,
  overriding the new CARD_ITEM_PADDING default. That made any row using
  SettingsPreferenceItem/SettingsActionItem sit 5dp further inset than
  rows using plain SectionItemViewWithoutMinPadding — visible as a left
  indent on "Tail" relative to "Corner". Replaced with CARD_ITEM_PADDING
  so it matches.

Removed `private` from CARD_PADDING and CARD_ITEM_PADDING in Section.kt
to allow imports from other files (used the same way as SectionView etc.
are imported individually).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Appearance + Customize theme: bring loose items into cards, drop spurious spacer

Four small fixes on the same theme-related screens:

- Move "Customize theme" SectionItemView INSIDE the THEMES SectionView
  in AppearanceView so it sits in the same card as Color mode / Dark
  mode colors with an auto-divider above it.
- Wrap WallpaperPresetSelector (theme slots + chat preview) and the
  conditional Remove-image button in CustomizeThemeView with a
  SectionView so they read as a card, matching the Appearance themes
  card pattern. Add a SectionDividerSpaced after.
- Drop SectionSpacer() that sat between the Wallpaper tint row and the
  Sent message row inside WallpaperSetupView — auto-divider on the
  Wallpaper tint SectionItemView already provides separation; the
  30dp spacer rendered as extra empty padding inside the card.
- Wrap the Reset colors action in a single-item SectionView so it
  reads as its own card, matching the export/import card below.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ServersSummaryView: wrap "Showing info for" dropdown in SectionView card

The user-selection ExposedDropDownSettingRow at the top of the
servers info screen was rendered loose on the canvas with no card
chrome. Wrap in SectionView so it reads as a card matching the rest
of the screen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* GroupChatInfoView: move chat-ttl footer caption out of SectionView lambda

Same pre-card-chrome pattern as ChatInfoView (fixed in b1a1dad8):
SectionTextFooter("Delete chat messages from your device.") sat inside
the SectionView around ChatTTLOption, so it rendered inside the white
card after PR #6777 added card chrome. Move it out so the caption sits
below the card iOS-style.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* NewChatSheet: render filtered contact list inside SectionView card

The "Contacts" header was a SectionView with empty content lambda, and
the actual contact rows were rendered as separate LazyColumn items
OUTSIDE the SectionView — so they sat on canvas without card chrome.

Move filteredContactChats.forEachIndexed { ContactListNavLinkView }
INSIDE the SectionView lambda in both OneHandLazyColumn and
NonOneHandLazyColumn so the contacts read as a single card matching
the iOS-style facelift.

Same trade-off as GroupChatInfoView members fix (fa29bb7a): lazy
rendering of contact rows replaced with eager composition inside a
Column. For typical contact lists (<100) imperceptible; very long
lists may compose slower on open.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* AddGroupView/AddChannelView: wrap action buttons + toggles in SectionView card

In Create group and Create public channel screens the action buttons
(Create / Configure relays) and incognito toggle were rendered as loose
SectionItemViews on the gray canvas with no card chrome. Wrap them in
SectionView so they read as a single card matching the iOS-style facelift.
The display-name input above and the descriptive footer below stay
outside the card (text input keeps its own padding, footer reads as
caption).

Added missing `import SectionView` in AddGroupView.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* TagListView: wrap Add/Save list button in SectionView card

The "Add to list" / "Save list" action button in TagListEditor (opened
from chatlist "+" Add list) was a loose SectionItemView on the canvas
with no card chrome. Wrap in SectionView so it reads as a single-item
card. ChatTagInput stays as a form field above.

Added missing `import SectionView`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* UserAddressView: move "contacts remain connected" footer out; pad welcome message field; wrap Save in card

Three SimpleX address fixes:
- "Your contacts will remain connected" SectionTextFooter moved out of
  the DeleteAddressButton SectionView (was rendering inside the card).
- Address settings > welcome message field gets 10dp vertical
  contentPadding on its SectionView so the TextEditor doesn't sit flush
  against the card top/bottom.
- Address settings > Save action wrapped in its own SectionView so it
  reads as a single-item card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* WelcomeView: wrap Create profile action button in SectionView card

The Create profile action SettingsActionItem at the bottom of the
Create profile screen was loose on canvas. Wrap in SectionView so it
reads as a single-item card matching the iOS-style facelift. The two
SectionTextFooter captions below stay outside the card.

Added missing `import SectionView`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ConnectMobileView: move footer + spacer out of "this device name" SectionView lambda

Same pre-card-chrome pattern: SectionTextFooter and SectionDividerSpaced
were inside the SectionView around DeviceNameField + multicast toggle,
so they rendered inside the white card after PR #6777 — visible as an
extra empty padding below the "Discoverable via local network" toggle
(the SectionDividerSpaced 10dp Spacer inside the card).

Move both outside the SectionView so the footer reads as caption below
the card and the spacer separates this card from the next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: suppress RippleTheme deprecation warnings (build was treating warnings as errors)

`androidx.compose.material.ripple.RippleTheme` and `LocalRippleTheme`
were deprecated in newer Compose Material in favor of the modern
Indication APIs. Our SectionRippleTheme override (a5b199660) hit those
deprecations and the project's Kotlin compiler flags treat warnings as
errors, breaking the build.

Add `@file:Suppress("DEPRECATION")` to Section.kt — narrow file-level
scope. Modern Indication-based ripple migration is a separate, larger
concern; suppress for now so the section hover-alpha override keeps
working.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: also suppress DEPRECATION_ERROR — RippleTheme is @Deprecated(level=ERROR)

Previous attempt (4bf981a6b) suppressed DEPRECATION but the Compose
library deprecated RippleTheme with level=DeprecationLevel.ERROR, which
requires the DEPRECATION_ERROR suppression key instead. Add both so
either severity is covered.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: replace deprecated RippleTheme override with modern Modifier.hoverable + background

Drop SectionRippleTheme/RippleAlpha/LocalRippleTheme machinery (deprecated
in newer Compose Material, would not compile with the project's warnings-
as-errors policy without DEPRECATION_ERROR suppress, which is a code
smell). Replace with a Modifier.hoverable + Modifier.background pattern —
the modern Compose-native way to apply a hover overlay:

- New private @Composable Modifier.sectionItemHover() that:
  - returns Modifier as-is outside SectionView card (LocalInSectionCard = false)
  - inside a card, attaches its own MutableInteractionSource via .hoverable()
    and paints a transparent or onBackground@0.08-alpha background based on
    collectIsHoveredAsState

- Applied alongside .sectionItemDivider() in each SectionItemView modifier
  chain. Click ripple keeps coming from Modifier.clickable's own indication
  (default ripple, no changes there).

- Drop @file:Suppress deprecation lines; drop SectionRippleTheme object;
  drop ripple imports; drop LocalRippleTheme from CompositionLocalProvider
  calls in three SectionView variants.

Visual result identical to the previous attempt (hovered row gets a visible
gray overlay on LIGHT canvas), no deprecated APIs, no warnings-as-errors
fight. Click ripple unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: suppress sectionItemHover on disabled SectionItemView

sectionItemHover was applied unconditionally inside section cards, so a
disabled row would still show the hover overlay on mouseover —
misleading: the visible interactive feedback contradicts the disabled
state (no click reaction).

Add `enabled: Boolean = true` parameter; the helper now returns `this`
unchanged when `enabled = false`. The 3 SectionItemView family
functions that own a modifier chain pass `enabled = !disabled`.
SectionItemViewWithoutMinPadding inherits through SectionItemView delegation.

Non-clickable info rows (click == null but disabled = false) still get
the hover overlay — that's intentional cursor feedback matching iOS
Settings behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: lighten section item hover overlay from 0.08 to 0.05 alpha

0.08 read as too dark on white cards. Original Compose default 0.04
blended with the off-white canvas (#F2F2F2 vs ~#F5F5F5). 0.05 is the
midpoint — still visibly distinct from canvas (~#F2F2F2 canvas vs
~#F3F3F3 hover on white card) but no longer reads as a heavy box.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* RTCServers: wrap Configure ICE servers toggle in SectionView card

Your ICE servers screen had its Configure-ICE toggle and the description
text / editor / read-only display all directly in a raw Column with no
card chrome. Wrap the toggle row in SectionView so it reads as a card
matching the iOS-style facelift. The description text and the
TextEditor / read-only Surface stay in the same loose Column below
(they're a form/display block, not a settings row).

Removed the explicit `padding = PaddingValues()` on the
SectionItemViewSpaceBetween — inside SectionView it inherits
CARD_ITEM_PADDING by default which is what we want now.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* NetworkAndServers: rewrite UseSocksProxySwitch via SettingsActionItemWithContent

UseSocksProxySwitch was a custom Row with hard-coded horizontal padding
of DEFAULT_PADDING (20dp) — but its neighbours on the messages card are
SettingsActionItem rows that go through SectionItemView with the new
CARD_ITEM_PADDING (15dp). 5dp icon misalignment between the SOCKS
toggle row and the rest, plus no auto-divider underneath since it
wasn't a SectionItemView.

Replace the custom Row with SettingsActionItemWithContent — same
icon + label + DefaultSwitch shape, now wrapped in SectionItemView so
it shares padding and auto-divider with siblings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SocksProxySettings: move section text footers out of SectionView lambdas

Same pre-card-chrome pattern as elsewhere: two SectionTextFooter calls
("Disable onion hosts when not supported" and the proxy-auth footer)
were inside their SectionView lambdas in SocksProxySettings, so after
the card chrome was added they rendered inside the white cards as
inline content. Move both out so they read as captions below the
corresponding cards.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* SocksProxySettings: split UseOnionHosts so the dynamic description footer renders outside the card

UseOnionHosts wrapped its ExposedDropDownSettingRow and a dynamic
SectionTextFooter ("Onion hosts will be used when available." / similar)
in a Column, so when UseOnionHosts was called inside a SectionView
lambda the footer rendered inside the white card.

Split into two composables:
- UseOnionHosts — only the dropdown row (no longer wraps in Column)
- UseOnionHostsDescription — only the dynamic SectionTextFooter,
  called separately by the caller

Shared `onionHostsValues` is now a private @Composable val accessible
to both. In SocksProxySettings, UseOnionHostsDescription is now placed
AFTER the SectionView block (alongside the existing
"Disable onion hosts when not supported" caption) so the dynamic
description reads as a caption below the card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: suppress hover on rows whose action is an inline control (switch/dropdown)

sectionItemHover used to show on every row inside a section card. But
rows where the action is an inline control (switch via PreferenceToggle,
dropdown via ExposedDropDownSettingRow) are not "interactive as a row"
— the user has to hit the actual control, not the whole row. Showing
hover on the whole row was misleading.

Add `clickable: Boolean = true` param to sectionItemHover; suppress when
false. SectionItemView and SectionItemViewSpaceBetween pass
`clickable = click != null`. SectionItemViewLongClickable keeps the
default (its click is non-nullable, always interactive).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section + Theme: lighten LIGHT canvas to 0.97; revert custom hover overlay

User feedback: the off-white canvas at 0.95 (#F2F2F2) read as too
dark. Two coordinated changes:

- canvasColorForCurrentTheme LIGHT branch: 0.95f → 0.97f. Canvas now
  #F7F7F7 (3% darker than white, was 5%). Still distinct from pure
  white card but lighter.

- Drop the custom sectionItemHover Modifier helper (and its hoverable
  + InteractionSource + background machinery). The reason for the
  custom hover was that the default Material 0.04-alpha ripple hover
  (#F5F5F5 on white card) blended with the old #F2F2F2 canvas. With
  the lighter canvas at #F7F7F7 the default hover #F5F5F5 is now
  visibly darker than canvas (2 units delta) — visible enough at
  Material default without our custom override.

Removed unused MutableInteractionSource and collectIsHoveredAsState
imports.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: bump section item minHeight by 6dp (50 → 56)

User asked for taller settings rows. Bump the default minHeight in
all four SectionItemView family functions from DEFAULT_MIN_SECTION_ITEM_HEIGHT
(50dp) to DEFAULT_MIN_SECTION_ITEM_HEIGHT + 6.dp (56dp).

Scoped to SectionItemView callers only — does not touch the global
DEFAULT_MIN_SECTION_ITEM_HEIGHT constant, so non-section callers
(ChatItemInfoView, ComposeContextProfilePicker, TagListView,
UserPicker) keep the 50dp baseline.

Callers that pass explicit minHeight (e.g. 54dp in GroupChatInfoView
members) are unaffected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Move SectionTextFooter / Spacer out of cards in 5 screens

Fixes from the user's verified list of misplaced footers/spacers:

- ChatInfoView: SimpleX address footer ("You can share this address
  with your contacts to let them connect with you.") moved out of the
  address SectionView lambda.
- GroupMemberInfoView: same string for member address.
- Appearance: SectionSpacer in the Image-wallpaper branch (after
  "Remove image" button) removed — it created 30dp empty padding
  inside the THEMES card only when a custom image was selected.
- NotificationsSettingsView: Xiaomi battery-optimization footer
  ("Xiaomi devices: please enable Autostart...") moved out of the
  notifications SectionView lambda (visible only on Xiaomi devices
  in Periodic/Service notification mode).
- ConnectMobileView: dropped the 20dp Spacer that sat inside the QR
  SectionView after the developer-tools "Share link" row — visible
  as extra padding below Share link inside the card.

Same pre-card-chrome pattern as other moves: helpers placed inside
SectionView lambdas before PR #6777 rendered fine when SectionView was
a plain Column; after card chrome they render inside the white card.
Moved them outside so footers read as captions and spacers actually
separate cards.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Migrate views: move all SectionTextFooter / SectionSpacer out of SectionView lambdas

Same pre-card-chrome pattern as elsewhere. MigrateToDevice (4 footers)
and MigrateFromDevice (9 footers + 1 SectionSpacer in error view)
historically wrote captions and inter-card spacers inside their
SectionView content lambdas. After PR #6777 added card chrome these
rendered inside the white cards.

MigrateToDevice fixes (4 footers, one per sub-view):
- Confirm network settings footer
- Database init failed retry footer
- Archive import failed retry footer
- Passphrase entering dynamic footer

MigrateFromDevice fixes (9 footers + 1 SectionSpacer):
- ChatStopFailed view footer
- Passphrase confirmation footer
- Upload confirmation footer
- Upload failed retry footer
- Link shown view: archive-will-be-deleted + choose-migrate footers
- Finished view: 2 warning footers (must-not-use-two-devices,
  using-on-two-devices-breaks-encryption)
- Implicit SectionSpacer at ChatStopFailed view also moved out

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section + ChatListNavLink.android: align in-card chat row divider with desktop; canvas to 0.94

Two changes:

1) Theme.kt LIGHT canvas: 0.97f → 0.94f (#F0F0F0). User wants more
   contrast against cards. With Material's default 0.04-alpha hover
   (#F5F5F5) this puts hover LIGHTER than canvas by 5 units — unusual
   direction but it's the user's call; they'll evaluate visually.

2) ChatListNavLinkView.android: when rendered inside a SectionView card
   (e.g. contact list inside NewChatSheet after the forEach-into-card
   refactor), use SectionDivider() — same 2dp full-width canvas-color
   divider as desktop. Outside a card (main chat list), fall back to
   the original Material `Divider(Modifier.padding(horizontal = 8.dp))`
   so unchanged for that context.

3) LocalInSectionCard made `internal` so the android-specific file can
   read it. Same pattern as LocalAppColors etc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Section: bump section item minHeight by 2dp more (56 → 58)

* GroupWelcomeView: wrap message editor/preview and buttons in SectionView cards

* GroupLinkView: wrap action items below QR in SectionView card

* Section: align InfoRow / IndentedInfoRow horizontal padding with CARD_ITEM_PADDING

InfoRow defaulted to DEFAULT_PADDING (20dp), but card chrome adopted CARD_ITEM_PADDING (15dp) for SectionItemView and InfoRowTwoValues. Inside a card, rows of different kinds visibly jumped left/right. Bring InfoRow and its IndentedInfoRow variant onto the same baseline.

* ServersSummaryView: align Message reception header indent with other section headers

* ServersSummaryView: split SMP/XFTP server summary into separate top-level cards

The summary layouts wrapped Stats / Subscriptions / Sessions inside the outer Server address SectionView, which produced nested cards and pushed the Statistics 'Starting from...' footer inside a card. Unnest them so each section is its own card with proper spacing and the footer renders outside.

* CreateProfile: add vertical gap between profile fields and Create profile action card

* UserPicker: wrap menu options in SectionView cards (SecondSection + GlobalSettingsSection)

* UserPicker: gate SectionView card wrap on Android only

Desktop UserPicker doesn't have a canvas background, so white cards on the white surface were invisible and the existing desktop divider above inactive users looked stray next to the SectionItemView mini-dividers.

* Revert "UserPicker: gate SectionView card wrap on Android only"

This reverts commit be365e55ae.

* UserPicker: use canvas color on desktop and split SecondSection around inactive-users grid

Desktop background was MaterialTheme.colors.surface (white) so the SectionView cards introduced earlier were invisible. Switch to canvasColorForCurrentTheme() to match Android.

Drop the explicit Divider above the inactive-users grid: split SecondSection into two SectionView cards with the avatar grid between them so the section dividers come from the cards themselves.

* ChatListNavLinkView.android: fix LocalInSectionCard import path

LocalInSectionCard is declared in Section.kt which has no package (root package), so it must be imported as 'import LocalInSectionCard', not as 'chat.simplex.common.views.helpers.LocalInSectionCard'.

* UserPicker: merge SecondSection + GlobalSettings into one card on portrait

Both Android and desktop portrait now show address, preferences, (desktop: inactive-users grid), profiles, link mobile / use from desktop, and settings inside a single SectionView card. Desktop landscape keeps the side-by-side two-card layout.

* ChatInfoImage: default placeholder icon color to secondary

secondaryVariant is near-white (#F1F2F6) and disappears against the gray canvas. Use the visible secondary tone instead so default avatars without a photo are legible on both card and canvas backgrounds.

* UserPicker: align item padding with Settings, add divider after inactive-users grid

UserPickerOptionRow no longer applies extraPadding on desktop, and the Settings row uses default SectionItemView padding instead of its own. Both now match the CARD_ITEM_PADDING used in Settings screens. After the inactive-users avatar grid in the unified card, paint a SectionDivider so it visually separates from Your chat profiles.

* ChatInfoImage: place default avatar one canvas-shade darker than the canvas

secondary (#8B8786) was too dark. Use background mixed with onBackground at 0.88 — same darkening recipe as canvasColorForCurrentTheme uses with 0.94, applied a step further. On LIGHT this lands near #E1E1E1: 15 units darker than the canvas, matching how the canvas sits 15 darker than white.

* Appearance: symmetric vertical padding around Font size and Zoom preview tiles

Both rows used Modifier.padding(top = 10.dp) so the tile hugged the bottom of the SectionView card. Switch to padding(vertical = 10.dp) to match the symmetric padding used by ProfileImageSection.

* ChatInfoImage: dark themes use secondaryVariant for default avatar to match UserPicker

The mixWith canvas-darkening formula only lands well in LIGHT. For DARK / BLACK / SIMPLEX, fall back to secondaryVariant, which UserPicker already uses for the active profile avatar — keeps placeholder avatars consistent across the app on dark themes.

* Section: tighten icon-to-text spacing in TextIconSpaced by 2dp

* ChatInfoImage: lighten LIGHT default avatar to halfway between white and canvas

* ChatInfoView: hide Servers section header when there is no server content

When both chatSubStatus and cStats are null, the SectionView body rendered as empty (zero-height card) but the SERVERS title still appeared, leaving an orphan header between E2E encryption and Clear chat. Gate the whole section on having at least one of the two.

* GroupLink / WelcomeMessage: use SectionDividerSpaced between adjacent cards

Three places had adjacent SectionView cards with no spacer (GroupLinkView QR + actions, WelcomeMessageView non-owner preview + copy), or used a one-off Spacer(8.dp) instead of the conventional helper (owner mode-button card). Replace with SectionDividerSpaced() so all between-card gaps live behind one helper.

* Chat info / Group info: use full spacing between two title-less cards

ChatInfoView (Contact prefs/Send receipts/Chat theme → Delete messages) and GroupChatInfoView (Member reports → Edit group profile) both used SectionDividerSpaced(maxBottomPadding = false) = 10dp between two cards that have neither header nor footer touching the gap, so the tight variant wasn't justified. Switch to the default 20dp.

* remove diff noise

* Sections: drop .uppercase() from all section / header titles

Source string resources are already in sentence case (e.g. "Profile images", "Message reception"). The .uppercase() calls forced them to ALL CAPS, which is the Android settings convention but conflicts with the iOS-style facelift. Remove the call everywhere so headers render as in the source.

* Section: shrink icon-to-text spacing to 5dp (-3dp from previous 8dp)

* Appearance: shrink ColorModeSwitcher tap target to keep UserPicker Settings row at standard 58dp height

* UserPicker.android: align profile boxes with menu card left edge (CARD_PADDING)

* ChatListNavLinkView.desktop: restore chat list dividers outside SectionView

Commit 633e0f414 made SectionDivider() a no-op outside SectionView card, which removed the desktop chat list dividers (the list is not wrapped in a SectionView). Mirror the Android conditional: SectionDivider in-card, padded Divider otherwise.

* UserPicker: restore SectionView wrap around desktop active-profile row

Commit 3a7118235 extracted the profile out of its original SectionView when wrapping the menu in its own card. Without the card chrome the profile shifted to the screen edge instead of sitting at CARD_PADDING like the menu below. Wrap it back in SectionView and add SectionDividerSpaced before the menu card.

* Strings: convert section-title resources from ALL CAPS to sentence case

26 section header strings used as SectionView titles (SETTINGS, CHAT DATABASE, HELP, SERVERS, etc.) were stored ALL CAPS in source. The .uppercase() removal commit did nothing for them. Convert the source values to sentence case with proper-noun preservation (SimpleX, SOCKS). LIVE and OK stay all-caps (status badge and button).

* UserPicker: add top spacer above active profile card and tighten its left padding

Card was flush against the sheet's top edge; add DEFAULT_PADDING spacer above. Left padding inside the card was 16dp while the avatar (60dp) sat in an 80dp minHeight row so visual top/bottom were ~10dp — bring start down to 10dp so the photo sits equidistant from card top, bottom and left.

* Section: bump card-title font size from 12sp to 14sp across all 3 SectionView variants

* ServersSummaryView: bump Message reception custom header to 14sp to match other card titles

* Sections: add SemiBold weight to card titles across all 4 places

* Sections: drop card-title weight from SemiBold to Medium (W500)

* ServersSummaryView: Message reception header bottom padding 5dp -> 8dp to match SectionView default

* Strings: convert group_info_section_title_num_members to sentence case

* Strings: convert settings_section_title_interface to sentence case (Interface)

* Revert UserPicker to pre-card-wraps state per founder's request

Restore UserPicker.kt and UserPicker.android.kt to their state at 43855ae07
(before commit 3a7118235 introduced SectionView wraps). The founder asked in
chat to keep UserPicker out of the cards facelift — undo all of our changes
to it, including the followup tweaks (avatar padding, divider above grid,
active-profile wrap, etc.) and the founder's own followup cleanup 23b0e41d8
which only existed to refactor our wraps.

* Section / Theme: extract sectionCardColor() helper

Three SectionView overloads were each computing the same cardColor inline:
if (CurrentColors.value.base == DefaultTheme.LIGHT) Color.White
else MaterialTheme.colors.background.mixWith(...). DRY violation paired with
the canvasColorForCurrentTheme() helper that already covers the canvas side
of the same theme split. Add a sectionCardColor() function in Theme.kt and
collapse the 3 inline formulas to one call.

* Theme: document why canvasColorForCurrentTheme reads CurrentColors.value directly

Reviewer asked why this helper uses CurrentColors.value.base instead of the
Compose MaterialTheme/CompositionLocal route. Reason is that the helper is
intentionally callable from both @Composable bodies and DrawScope (inside
sectionItemDivider's drawWithContent), and DrawScope can't invoke @Composable
getters. Add a paragraph to the doc-comment so future readers don't try to
'fix' it back to MaterialTheme.colors and break the divider draw path.

* ConnectMobileView: collapse double blank line left over from move-footer edit

* Sections: normalize redundant SectionDividerSpaced flag combinations

After founder simplified SectionDividerSpaced to one Spacer height (any flag
true -> DEFAULT_PADDING; both false -> DEFAULT_PADDING_HALF), many call sites
still pass combinations like (maxTopPadding = true) or
(maxTopPadding = true, maxBottomPadding = false) that all produce the same
20dp gap as the default. The flag names no longer match what they do —
reviewer flagged this as misleading.

Collapse all call sites to two canonical forms: SectionDividerSpaced() for
the 20dp gap, SectionDividerSpaced(maxBottomPadding = false) for the 10dp
tight gap. Behavior identical. Function signature kept (founder's API).

* NewChatSheet: render filtered contacts in search mode (regression fix)

Commit 3a9ece8d1 moved contacts forEach inside the if-branch and made the
else-branch fall back to NoFilteredContactsItem. That broke search: when
the user typed text and the filter returned non-empty results, the
if-condition (filtered.isNotEmpty() && searchText.isEmpty()) was false,
the else ran NoFilteredContactsItem, NoFilteredContactsItem's internal
guard saw a non-empty filter and rendered nothing — search results disappeared.

Restore three-way branching with when{}: header + contacts in card when
no search; contacts in plain card when search has matches; NoFilteredContactsItem
when filter is empty. Applied at both OneHandLazyColumn and the regular layout.

* GroupChatInfoView: keep Invite + owner in card, render members as lazy items

fa29bb7a7 put filteredMembers.value.forEach inside the same SectionView as
the Invite button and the owner row to get a unified card visual. That
sacrificed lazy rendering — all members composed at once, hurting big-group
scroll perf. Founder asked to bring lazy back.

Compromise: keep Invite + (search row) + owner row inside the SectionView
card (the 'hero' rows). Move the rest of the members out to a sibling
items(filteredMembers.value, key = { it.groupMemberId }) call in the
parent LazyColumn — bare SectionItemViewLongClickable rows below the card,
lazy-composed by LazyColumn.

* ChatInfoImage: LIGHT default avatar at midpoint of white card and gray canvas

Was at 0.91 mix (~#E8) — designed to sit 'below' the white card, but on the
~#F0 canvas it nearly blended (delta ~8). Switch to 0.97 mix (~#F7), which
is the geometric midpoint between #FF (white card) and ~#F0 (canvas) and so
sits at equal absolute contrast against either background.

* MemberProfileImage: use defaultProfileIconColor instead of secondaryVariant

MemberProfileImage hard-coded color = MaterialTheme.colors.secondaryVariant
as default, which is LightGray (#F1F2F6) on LIGHT — slightly bluish and
nearly invisible against the ~#F0F0F0 canvas. Reuse the defaultProfileIconColor()
helper so the LIGHT default matches the rest of the app (midpoint between
canvas and white card), and DARK themes keep their palette secondaryVariant.

defaultProfileIconColor() in ChatInfoImage.kt promoted from private to file-
level visibility so it can be referenced from GroupMemberInfoView.

* ProfileImage colors: split into card vs canvas variants

Revert defaultProfileIconColor back to 0.91 mix (~#E8) — that's the right
amount of contrast against a white SectionView card. Add a sibling helper
defaultProfileIconColorOnCanvas() at 0.85 mix (~#D9), which sits 23 units
below the ~#F0 canvas — same absolute contrast as the card variant achieves
on white.

Switch MemberProfileImage default from defaultProfileIconColor to the canvas
variant. Member avatars almost always render on canvas (chat list rows,
chat-bubble author avatar, group members list outside the card, channel
members, channel relays). Callers that need the card variant pass an
explicit color.

* GroupChatInfoView: move owner row out of the members card into the lazy list

Per review #1: card holds only Invite + (optional) search; the user-as-owner
row joins the same lazy column as the rest of the members, picking up the
canvas-variant avatar color through MemberProfileImage's updated default.

* Revert "ProfileImage colors: split into card vs canvas variants"

This reverts commit 379f84a4ae.

* Revert "MemberProfileImage: use defaultProfileIconColor instead of secondaryVariant"

This reverts commit bea3f24664.

* Revert "ChatInfoImage: LIGHT default avatar at midpoint of white card and gray canvas"

This reverts commit 05fbd6e0b1.

* Theme: darken LightColorPalette.secondaryVariant from #F1F2F6 (LightGray) to #E0E0E0

Old value (LightGray = #F1F2F6) was nearly invisible against the ~#F0F0F0
canvas — slightly bluish hue, ~1-2 units of contrast. The new #E0E0E0 sits
~16 units below canvas and ~31 below white card, visible on both. Affects
all LIGHT-theme avatar placeholders, UserPicker icons, DevicePill borders
and a handful of subtle UI surfaces using secondaryVariant.

* Card-less screens: paint background with Material surface

Form-only and link/QR screens have no card sections — the off-white canvas
under them just adds an extra visual layer with nothing to lift. Switch
their background to MaterialTheme.colors.surface (white on LIGHT, palette
surface on DARK/BLACK/SIMPLEX) so the screen reads as a single sheet.

Two patterns by container:
- 11 ModalView callsites get background = MaterialTheme.colors.surface.
- 4 screens rendered inside someone else's ModalView (GroupLinkView,
  HiddenProfileView, TagListView, UserProfilesView) wrap their root
  ColumnWithScrollBar in Box(Modifier.fillMaxSize().background(...))
  so they own their background regardless of caller.
- 1 BottomSheet root (CreateProfile in WelcomeView) gets background on
  the fillMaxSize Box.

Touched screens: Create profile, Create first profile (mobile/desktop),
Create group, Create channel (3 wizard steps), Edit group profile,
Group link, Add welcome message / Welcome message, Edit own profile,
Hide profile, Tag list editor, Your chat profiles, Add server,
Add chat relay (new variant only — Edit relay stays settings-style).

* NewServerView: add missing MaterialTheme import after previous commit

* Revert "GroupLink / WelcomeMessage: use SectionDividerSpaced between adjacent cards"

This reverts commit 29be15404f.

* Revert "CreateProfile: add vertical gap between profile fields and Create profile action card"

This reverts commit 43855ae07d.

* Revert "WelcomeView: wrap Create profile action button in SectionView card"

This reverts commit c61ea01092.

* Revert "AddGroupView/AddChannelView: wrap action buttons + toggles in SectionView card"

This reverts commit 4d9319d12a.

* Revert "GroupLinkView: wrap action items below QR in SectionView card"

This reverts commit f2ef38092a.

* Revert "GroupWelcomeView: wrap message editor/preview and buttons in SectionView cards"

This reverts commit edb3495a8f.

* Revert "TagListView: wrap Add/Save list button in SectionView card"

This reverts commit c25f36a900.

* UserProfilesView: drop SectionView wraps to remove card chrome

The Your-chat-profiles screen is now on white surface bg; the SectionView
cards (founder's original from PR #6777) painted white-on-white and only
contributed padding. Unwrap the two SectionViews (hidden-profile reveal
button + main profiles list) so the rows render directly inside the
ColumnWithScrollBar without card chrome.

* NewChatSheet: use standard 20dp gap between cards instead of tight 10dp

* WelcomeMessageView/GroupChatInfoView: unify owner button row, restore member dividers

WelcomeMessageView: drop SectionView wrap on SaveButton so all three
owner-mode action rows (Edit/Preview, Copy, Save) render uniformly as
loose rows on canvas, matching the post-revert direction of the
card-chrome cleanup.

GroupChatInfoView: restore per-item Divider() in the members lazy list
(lost during card-chrome experimentation). Owner row stays attached
to the "N members" card by design; divider appears between owner and
first lazy member, and between each subsequent member.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Strings: sentence case for 29 section-title keys across all locales

Base file was converted in 8292a815f / de36f1f40 / 314384b69 but other
locales still rendered titles like SETTINGS, НАСТРОЙКИ, EINSTELLUNGEN,
PARAMÈTRES, USTAWIENIA, ÎMPOSTAZIONI in ALL CAPS. Bring every locale to
sentence case with a single sweep.

Implementation: Python script (/tmp/fix_uppercase_locales.py) walks every
non-base locale dir, finds the 29 key strings, and rewrites them when the
value is entirely uppercase (no lowercase letter). Placeholders like %1$s
are preserved as-is; SimpleX and SOCKS are kept as proper nouns after the
lowercase pass. Values already in sentence case, empty, or in scripts with
no case distinction are left alone.

540 string changes across 33 locales (ar, bg, ca, cs, da, de, el, es, fa,
fi, fr, hr, hu, in, it, iw, ja, ko, ku, lt, nb-rNO, nl, pl, pt, pt-rBR,
ro, ru, th, tr, uk, vi, zh-rCN, zh-rTW). Locales bn, hi, ml, sv, lv had
nothing to change.

* UserProfilesView: use Divider() between rows (SectionDivider no-op outside SectionView)

* ShareListView: use MaterialTheme.colors.surface background (Forward picker)

* ChatItemInfoView: white surface background + drop SectionView card wraps

Message info screen (right-click → Info on desktop) had off-white themedBackground
canvas with white SectionView cards inside. Switch to MaterialTheme.colors.surface
background and replace 7 SectionView wraps with plain Column (preserving the
contentPadding the SectionViews had) — content reads as a single sheet, no
ghost card edges on white-on-white.

* Card-less screens batch 2: surface bg for conditions + how-to-use + about + version

Six more screens get white surface background to match the form-screen visual:

- UsageConditionsView (Network & servers → Review conditions): root
  ColumnWithScrollBar gets .background(surface).
- SingleOperatorUsageConditionsView (operator-conditions modal opened from
  enabling an operator): same.
- HowItWorks (Settings → How to use it): root Column gets .background(surface).
- WhatsNewView (Settings → What's new): ModalView gets background = surface.
- SimpleXInfoLayout (Settings → About SimpleX Chat): conditional on
  onboardingStage == null so the onboarding entry keeps its themedBackground
  while the settings entry switches to surface.
- VersionInfoView (Settings → App version): root ColumnWithScrollBar gets
  .background(surface).

* fix language strings

* fix contact list to be lazy

* more language fixes

* fix greek

* fix indentation

* refactor and simplify

* remove dividers

* background for settings pages with cards

* fix section titles

* remove footers outside of section cards

* move footers out of cards

* fix appearance etc

* fix members lists, add background

* appearance

* reduce paddings inside cards

* paddings

* more paddings

* card item paddings

* fix paddings

* toolbar color

* more toolbar color

* fix toolbar

* add padding

* refactor modals hierarchy

* more cards

* more cards

* fix theme

* split walpaper settings to two sections

* better grid

* grid

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: another-simple-pixel <anton.m.egorov@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Evgeny
2026-05-22 12:45:02 +01:00
committed by GitHub
co-authored by Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> another-simple-pixel Claude Opus 4.7
parent 13906936bb
commit df5ea3d460
87 changed files with 1463 additions and 1268 deletions
@@ -2,7 +2,6 @@ package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import SectionSpacer
import SectionView
import android.app.Activity
import android.content.ComponentName
@@ -126,9 +125,9 @@ fun AppearanceScope.AppearanceLayout(
SectionDividerSpaced()
ProfileImageSection()
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
SectionView(stringResource(MR.strings.settings_section_title_icon), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING_HALF)) {
SectionView(stringResource(MR.strings.settings_section_title_icon), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING_HALF, vertical = DEFAULT_PADDING_HALF)) {
LazyRow {
items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index ->
val item = AppIcon.values()[index]
@@ -152,7 +151,7 @@ fun AppearanceScope.AppearanceLayout(
}
}
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
FontScaleSection()
SectionBottomSpacer()
@@ -596,10 +596,38 @@ data class ThemeModeOverride (
}
}
fun Modifier.themedBackground(baseTheme: DefaultTheme = CurrentColors.value.base, bgLayerSize: MutableState<IntSize>?, bgLayer: GraphicsLayer?/*, shape: Shape = RectangleShape*/): Modifier {
// Canvas color for settings/info screens (drawn behind cards by themedBackground)
// and for the 2dp item divider inside section cards (matches canvas so dividers
// read as gaps showing the screen behind).
// LIGHT: formula derives off-white from palette bg + onBackground — lifts white
// cards above. DARK/BLACK: palette bg (cards already raised via founder's
// formula in Section.kt). SIMPLEX: gradient bottom stop (darker), since the
// canvas itself is a gradient drawn by themedBackgroundBrush.
fun canvasColorForCurrentTheme(): Color {
val theme = CurrentColors.value
val c = theme.colors
return when (theme.base) {
DefaultTheme.LIGHT -> c.background.mixWith(c.onBackground, 0.94f)
DefaultTheme.SIMPLEX -> c.background.darker(0.4f)
else -> c.background
}
}
// Card background color for SectionView. LIGHT: pure white (raised above the
// off-white canvas). DARK/BLACK/SIMPLEX: founder's mixWith formula (lifts cards
// above palette bg using onBackground tint).
fun sectionCardColor(): Color {
val theme = CurrentColors.value
return if (theme.base == DefaultTheme.LIGHT) Color.White
else theme.colors.background.mixWith(theme.colors.onBackground, 0.95f)
}
fun Modifier.themedBackground(baseTheme: DefaultTheme = CurrentColors.value.base, bgLayerSize: MutableState<IntSize>?, bgLayer: GraphicsLayer?, overrideColor: Color? = null): Modifier {
return drawBehind {
copyBackgroundToAppBar(bgLayerSize, bgLayer) {
if (baseTheme == DefaultTheme.SIMPLEX) {
if (overrideColor != null) {
drawRect(overrideColor)
} else if (baseTheme == DefaultTheme.SIMPLEX) {
drawRect(brush = themedBackgroundBrush())
} else {
drawRect(CurrentColors.value.colors.background)
@@ -3,10 +3,9 @@ package chat.simplex.common.views.chat
import InfoRow
import InfoRowEllipsis
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionItemViewSpaceBetween
import SectionSpacer
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.desktop.ui.tooling.preview.Preview
@@ -553,7 +552,7 @@ fun ChatInfoLayout(
LocalAliasEditor(chat.id, localAlias, updateValue = onLocalAliasChanged)
SectionSpacer()
SectionDividerSpaced()
Box(
Modifier.fillMaxWidth(),
@@ -573,10 +572,10 @@ fun ChatInfoLayout(
}
}
SectionSpacer()
SectionDividerSpaced()
if (customUserProfile != null) {
SectionView(generalGetString(MR.strings.incognito).uppercase()) {
SectionView(generalGetString(MR.strings.incognito)) {
SectionItemViewSpaceBetween {
Text(generalGetString(MR.strings.incognito_random_profile))
Text(customUserProfile.chatViewName, color = Indigo)
@@ -601,7 +600,7 @@ fun ChatInfoLayout(
}
WallpaperButton {
ModalManager.end.showModal {
ModalManager.end.showModal(cardScreen = true) {
val chat = remember { derivedStateOf { chatModel.chats.value.firstOrNull { it.id == chat.id } } }
val c = chat.value
if (c != null) {
@@ -610,13 +609,13 @@ fun ChatInfoLayout(
}
}
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
ChatTTLOption(chatItemTTL, setChatItemTTL, deletingItems)
SectionTextFooter(stringResource(MR.strings.chat_ttl_options_footer))
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionTextFooter(stringResource(MR.strings.chat_ttl_options_footer))
SectionDividerSpaced()
val conn = contact.activeConn
if (conn != null) {
@@ -627,13 +626,13 @@ fun ChatInfoLayout(
}
if (contact.contactLink != null) {
SectionView(stringResource(MR.strings.address_section_title).uppercase()) {
SectionView(stringResource(MR.strings.address_section_title)) {
SimpleXLinkQRCode(contact.contactLink)
val clipboard = LocalClipboardManager.current
ShareAddressButton { clipboard.shareText(simplexChatLink(contact.contactLink)) }
SectionTextFooter(stringResource(MR.strings.you_can_share_this_address_with_your_contacts).format(contact.displayName))
}
SectionDividerSpaced(maxTopPadding = true)
SectionTextFooter(stringResource(MR.strings.you_can_share_this_address_with_your_contacts).format(contact.displayName))
SectionDividerSpaced()
}
if (contact.ready && contact.active) {
@@ -670,7 +669,7 @@ fun ChatInfoLayout(
}
}
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
}
SectionView {
@@ -406,7 +406,7 @@ fun ChatView(
val selectedItems: MutableState<Set<Long>?> = mutableStateOf(null)
ModalManager.end.showCustomModal { close ->
val appBar = remember { mutableStateOf(null as @Composable (BoxScope.() -> Unit)?) }
ModalView(close, appBar = appBar.value) {
ModalView(close, cardScreen = true, appBar = appBar.value) {
val chatInfo = remember { activeChat }.value?.chatInfo
if (chatInfo is ChatInfo.Direct) {
var contactInfo: Pair<ConnectionStats?, Profile?>? by remember { mutableStateOf(preloadedContactInfo) }
@@ -509,7 +509,7 @@ fun ChatView(
if (chatsCtx.secondaryContextFilter == null) {
ModalManager.end.closeModals()
}
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { close ->
remember { derivedStateOf { chatModel.getGroupMember(member.groupMemberId) } }.value?.let { mem ->
GroupMemberInfoView(chatRh, groupInfo, mem, scrollToItemId, stats, code, chatModel, openedFromSupportChat = false, close = close, closeAll = close)
}
@@ -801,7 +801,7 @@ fun ChatView(
}
is ChatInfo.ContactConnection -> {
val close = { chatModel.chatId.value = null }
ModalView(close, showClose = appPlatform.isAndroid, content = {
ModalView(close, showClose = appPlatform.isAndroid, cardScreen = true, content = {
ContactConnectionInfoView(chatModel, chatRh, chatInfo.contactConnection.connLinkInv, chatInfo.contactConnection, false, close)
})
LaunchedEffect(chatInfo.id) {
@@ -3193,7 +3193,7 @@ fun addGroupMembers(groupInfo: GroupInfo, rhId: Long?, view: Any? = null, close:
withBGApi {
setGroupMembers(rhId, groupInfo, chatModel)
close?.invoke()
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true) { close ->
AddGroupMembersView(rhId, groupInfo, false, chatModel, close)
}
}
@@ -3204,7 +3204,7 @@ fun openGroupLink(groupInfo: GroupInfo, rhId: Long?, view: Any? = null, close: (
withBGApi {
val link = chatModel.controller.apiGetGroupLink(rhId, groupInfo.groupId)
close?.invoke()
ModalManager.end.showModalCloseable(true) {
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) {
GroupLinkView(chatModel, rhId, groupInfo, link, onGroupLinkUpdated = null, isChannel = groupInfo.useRelays, shareGroupInfo = groupInfo)
}
}
@@ -2,12 +2,13 @@ package chat.simplex.common.views.chat
import InfoRow
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.ui.Modifier
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
@@ -54,6 +55,7 @@ fun ContactPreferencesView(
if (featuresAllowed == currentFeaturesAllowed) close()
else showUnsavedChangesAlert({ savePrefs(close) }, close)
},
cardScreen = true,
) {
ContactPreferencesLayout(
featuresAllowed,
@@ -90,27 +92,27 @@ private fun ContactPreferencesLayout(
TimedMessagesFeatureSection(featuresAllowed, contact.mergedPreferences.timedMessages, timedMessages, onTTLUpdated) { allowed, ttl ->
applyPrefs(featuresAllowed.copy(timedMessagesAllowed = allowed, timedMessagesTTL = ttl ?: currentFeaturesAllowed.timedMessagesTTL))
}
SectionDividerSpaced(true)
SectionDividerSpaced()
val allowFullDeletion: MutableState<ContactFeatureAllowed> = remember(featuresAllowed) { mutableStateOf(featuresAllowed.fullDelete) }
FeatureSection(ChatFeature.FullDelete, user.fullPreferences.fullDelete.allow, contact.mergedPreferences.fullDelete, allowFullDeletion) {
applyPrefs(featuresAllowed.copy(fullDelete = it))
}
SectionDividerSpaced(true)
SectionDividerSpaced()
val allowReactions: MutableState<ContactFeatureAllowed> = remember(featuresAllowed) { mutableStateOf(featuresAllowed.reactions) }
FeatureSection(ChatFeature.Reactions, user.fullPreferences.reactions.allow, contact.mergedPreferences.reactions, allowReactions) {
applyPrefs(featuresAllowed.copy(reactions = it))
}
SectionDividerSpaced(true)
SectionDividerSpaced()
val allowVoice: MutableState<ContactFeatureAllowed> = remember(featuresAllowed) { mutableStateOf(featuresAllowed.voice) }
FeatureSection(ChatFeature.Voice, user.fullPreferences.voice.allow, contact.mergedPreferences.voice, allowVoice) {
applyPrefs(featuresAllowed.copy(voice = it))
}
SectionDividerSpaced(true)
SectionDividerSpaced()
val allowCalls: MutableState<ContactFeatureAllowed> = remember(featuresAllowed) { mutableStateOf(featuresAllowed.calls) }
FeatureSection(ChatFeature.Calls, user.fullPreferences.calls.allow, contact.mergedPreferences.calls, allowCalls) {
applyPrefs(featuresAllowed.copy(calls = it))
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
ResetSaveButtons(
reset = reset,
save = savePrefs,
@@ -135,7 +137,7 @@ private fun FeatureSection(
)
SectionView(
feature.text.uppercase(),
feature.text,
icon = feature.iconFilled(),
iconTint = if (enabled.forUser) SimplexGreen else if (enabled.forContact) WarningYellow else Color.Red,
leadingIcon = true,
@@ -170,7 +172,7 @@ private fun TimedMessagesFeatureSection(
)
SectionView(
ChatFeature.TimedMessages.text.uppercase(),
ChatFeature.TimedMessages.text,
icon = ChatFeature.TimedMessages.iconFilled(),
iconTint = if (enabled.forUser) SimplexGreen else if (enabled.forContact) WarningYellow else Color.Red,
leadingIcon = true,
@@ -5,7 +5,6 @@ import SectionCustomFooter
import SectionDividerSpaced
import SectionItemView
import SectionItemViewWithoutMinPadding
import SectionSpacer
import SectionView
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
@@ -161,7 +160,7 @@ fun AddGroupMembersLayout(
iconColor = if (isInDarkTheme()) GroupDark else SettingsSecondaryLight
)
}
SectionSpacer()
SectionDividerSpaced()
if (contactsToAdd.isEmpty() && searchText.value.text.isEmpty()) {
Row(
@@ -195,8 +194,8 @@ fun AddGroupMembersLayout(
SectionCustomFooter {
InviteSectionFooter(selectedContactsCount = selectedContacts.size, allowModifyMembers, clearSelection)
}
SectionDividerSpaced(maxTopPadding = true)
SectionView(stringResource(MR.strings.select_contacts).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.select_contacts)) {
SectionItemView(padding = PaddingValues(start = DEFAULT_PADDING, end = DEFAULT_PADDING_HALF)) {
SearchRowView(searchText)
}
@@ -5,6 +5,7 @@ import SectionCustomFooter
import SectionDividerSpaced
import SectionItemView
import SectionView
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
@@ -131,8 +132,8 @@ private fun AddGroupRelayLayout(
fontSize = 14.sp
)
}
SectionDividerSpaced(maxTopPadding = true)
SectionView(generalGetString(MR.strings.select_relays).uppercase()) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.select_relays)) {
availableRelays.forEach { item ->
val selected = item.relayId in selectedRelayIds
SectionItemView(
@@ -44,7 +44,7 @@ fun ChannelMembersView(
if (groupInfo.isOwner) {
val subscriberCount = groupInfo.groupSummary.publicMemberCount ?: (members.size + 1).toLong()
SectionView(title = subscriberCountStr(subscriberCount).uppercase()) {
SectionView(title = subscriberCountStr(subscriberCount)) {
SectionItemView(minHeight = 54.dp, padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
ChannelMemberRow(groupInfo.membership, user = true, showRole = true)
}
@@ -117,7 +117,7 @@ private fun ChannelRelaysLayout(
// Backend gate (APIAddGroupRelays) rejects any chatRelayId already in group_relays
// regardless of relayStatus, so all current rows must be excluded from the add list.
val existingRelayIds = groupRelays.mapNotNull { it.userChatRelay.chatRelayId }.toSet()
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { close ->
AddGroupRelayView(
groupInfo = groupInfo,
existingRelayIds = existingRelayIds,
@@ -1,20 +1,24 @@
package chat.simplex.common.views.chat.group
import CARD_PADDING
import InfoRow
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionItemViewLongClickable
import SectionItemViewSpaceBetween
import SectionSpacer
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.animation.*
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
@@ -111,7 +115,7 @@ fun ModalData.GroupChatInfoView(
setGroupMembers(rhId, groupInfo, chatModel)
if (!isActive) return@launch
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true) { close ->
AddGroupMembersView(rhId, groupInfo, false, chatModel, close)
}
}
@@ -126,7 +130,7 @@ fun ModalData.GroupChatInfoView(
} else {
member to null
}
ModalManager.end.showModalCloseable(true) { closeCurrent ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { closeCurrent ->
remember { derivedStateOf { chatModel.getGroupMember(member.groupMemberId) } }.value?.let { mem ->
GroupMemberInfoView(rhId, groupInfo, mem, scrollToItemId, stats, code, chatModel, openedFromSupportChat = false, groupRelay = groupRelay, close = closeCurrent) {
closeCurrent()
@@ -167,7 +171,7 @@ fun ModalData.GroupChatInfoView(
clearChat = { clearChatDialog(chat, close) },
leaveGroup = { leaveGroupDialog(rhId, groupInfo, chatModel, close) },
manageGroupLink = {
ModalManager.end.showModal { GroupLinkView(chatModel, rhId, groupInfo, groupLink, onGroupLinkUpdated, isChannel = groupInfo.useRelays, shareGroupInfo = groupInfo) }
ModalManager.end.showModal(cardScreen = true) { GroupLinkView(chatModel, rhId, groupInfo, groupLink, onGroupLinkUpdated, isChannel = groupInfo.useRelays, shareGroupInfo = groupInfo) }
},
onSearchClicked = onSearchClicked,
deletingItems = deletingItems
@@ -552,7 +556,7 @@ fun ModalData.GroupChatInfoLayout(
LocalAliasEditor(chat.id, groupInfo.localAlias, isContact = false, updateValue = onLocalAliasChanged)
SectionSpacer()
SectionDividerSpaced()
Box(
Modifier.fillMaxWidth(),
@@ -581,10 +585,10 @@ fun ModalData.GroupChatInfoLayout(
}
}
SectionSpacer()
SectionDividerSpaced()
if (groupInfo.useRelays && groupInfo.membership.memberIncognito) {
SectionView(generalGetString(MR.strings.incognito).uppercase()) {
SectionView(generalGetString(MR.strings.incognito)) {
SectionItemViewSpaceBetween {
Text(generalGetString(MR.strings.incognito_random_profile))
Text(groupInfo.membership.chatViewName, color = Indigo)
@@ -658,7 +662,7 @@ fun ModalData.GroupChatInfoLayout(
}
}
if (anyTopSectionRowShow) {
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
}
SectionView {
if (groupInfo.isOwner && groupInfo.businessChat?.chatType == null) {
@@ -677,7 +681,7 @@ fun ModalData.GroupChatInfoLayout(
else if (groupInfo.businessChat == null) MR.strings.only_group_owners_can_change_prefs
else MR.strings.only_chat_owners_can_change_prefs
SectionTextFooter(stringResource(footerId))
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
if (!groupInfo.useRelays) {
@@ -688,7 +692,7 @@ fun ModalData.GroupChatInfoLayout(
}
}
WallpaperButton {
ModalManager.end.showModal {
ModalManager.end.showModal(cardScreen = true) {
val chat = remember { derivedStateOf { chatModel.chats.value.firstOrNull { it.id == chat.id } } }
val c = chat.value
if (c != null) {
@@ -697,12 +701,12 @@ fun ModalData.GroupChatInfoLayout(
}
}
ChatTTLOption(chatItemTTL, setChatItemTTL, deletingItems)
SectionTextFooter(stringResource(MR.strings.chat_ttl_options_footer))
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = true)
SectionTextFooter(stringResource(MR.strings.chat_ttl_options_footer))
SectionDividerSpaced()
if (!groupInfo.nextConnectPrepared && !groupInfo.useRelays) {
SectionView(title = String.format(generalGetString(MR.strings.group_info_section_title_num_members), activeSortedMembers.count() + 1)) {
SectionView(title = String.format(generalGetString(MR.strings.group_info_section_title_num_members), activeSortedMembers.count() + 1), cardShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)) {
if (groupInfo.canAddMembers) {
val onAddMembersClick = if (chat.chatInfo.incognito) ::cantInviteIncognitoAlert else addMembers
val tint = if (chat.chatInfo.incognito) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
@@ -725,32 +729,36 @@ fun ModalData.GroupChatInfoLayout(
}
}
if (!groupInfo.nextConnectPrepared && !groupInfo.useRelays) {
items(filteredMembers.value, key = { it.groupMemberId }) { member ->
Divider()
val showMenu = remember { mutableStateOf(false) }
val canBeSelected = groupInfo.membership.memberRole >= member.memberRole && member.memberRole < GroupMemberRole.Moderator
SectionItemViewLongClickable(
click = {
if (selectedItems.value != null) {
if (canBeSelected) {
toggleItemSelection(member.groupMemberId, selectedItems)
itemsIndexed(filteredMembers.value, key = { _, m -> m.groupMemberId }) { index, member ->
val isLast = index == filteredMembers.value.lastIndex
val shape = if (isLast) RoundedCornerShape(bottomStart = 16.dp, bottomEnd = 16.dp) else RectangleShape
Column(Modifier.padding(horizontal = CARD_PADDING).fillMaxWidth().clip(shape).background(sectionCardColor())) {
Divider()
val showMenu = remember { mutableStateOf(false) }
val canBeSelected = groupInfo.membership.memberRole >= member.memberRole && member.memberRole < GroupMemberRole.Moderator
SectionItemViewLongClickable(
click = {
if (selectedItems.value != null) {
if (canBeSelected) {
toggleItemSelection(member.groupMemberId, selectedItems)
}
} else {
showMemberInfo(member, null)
}
},
longClick = { showMenu.value = true },
minHeight = 54.dp,
padding = PaddingValues(horizontal = DEFAULT_PADDING)
) {
Box(contentAlignment = Alignment.CenterStart) {
androidx.compose.animation.AnimatedVisibility(selectedItems.value != null, enter = fadeIn(), exit = fadeOut()) {
SelectedListItem(Modifier.alpha(if (canBeSelected) 1f else 0f).padding(start = 2.dp), member.groupMemberId, selectedItems)
}
val selectionOffset by animateDpAsState(if (selectedItems.value != null) 20.dp + 22.dp * fontSizeMultiplier else 0.dp)
DropDownMenuForMember(chat.remoteHostId, member, groupInfo, selectedItems, showMenu)
Box(Modifier.padding(start = selectionOffset)) {
MemberRow(member)
}
} else {
showMemberInfo(member, null)
}
},
longClick = { showMenu.value = true },
minHeight = 54.dp,
padding = PaddingValues(horizontal = DEFAULT_PADDING)
) {
Box(contentAlignment = Alignment.CenterStart) {
androidx.compose.animation.AnimatedVisibility(selectedItems.value != null, enter = fadeIn(), exit = fadeOut()) {
SelectedListItem(Modifier.alpha(if (canBeSelected) 1f else 0f).padding(start = 2.dp), member.groupMemberId, selectedItems)
}
val selectionOffset by animateDpAsState(if (selectedItems.value != null) 20.dp + 22.dp * fontSizeMultiplier else 0.dp)
DropDownMenuForMember(chat.remoteHostId, member, groupInfo, selectedItems, showMenu)
Box(Modifier.padding(start = selectionOffset)) {
MemberRow(member)
}
}
}
@@ -758,7 +766,7 @@ fun ModalData.GroupChatInfoLayout(
}
item {
if (!groupInfo.nextConnectPrepared && !groupInfo.useRelays) {
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
}
SectionView {
if (groupInfo.useRelays && (groupInfo.isOwner || activeSortedMembers.any { it.memberRole == GroupMemberRole.Relay })) {
@@ -1186,7 +1194,9 @@ private fun ChannelLinkButton(onClick: () -> Unit) {
@Composable
private fun ChannelLinkQRCodeSection(groupLink: String) {
val clipboard = LocalClipboardManager.current
SimpleXLinkQRCode(connReq = groupLink)
Box(Modifier.padding(vertical = DEFAULT_PADDING_HALF)) {
SimpleXLinkQRCode(connReq = groupLink)
}
SectionItemView({
clipboard.shareText(simplexChatLink(groupLink))
}) {
@@ -1,7 +1,9 @@
package chat.simplex.common.views.chat.group
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionView
import SectionViewWithButton
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
@@ -215,7 +217,10 @@ fun GroupLinkLayout(
}
} else {
if (!isChannel) {
RoleSelectionRow(groupInfo, groupLinkMemberRole)
SectionView {
RoleSelectionRow(groupInfo, groupLinkMemberRole)
}
SectionDividerSpaced()
}
var initialLaunch by remember { mutableStateOf(true) }
LaunchedEffect(groupLinkMemberRole.value) {
@@ -225,69 +230,70 @@ fun GroupLinkLayout(
initialLaunch = false
}
val showShortLink = remember { mutableStateOf(true) }
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
SectionViewWithButton(
titleButton =
if (!isChannel && groupLink.connLinkContact.connShortLink != null) {
{ ToggleShortLinkButton(showShortLink) }
} else null) {
SimpleXCreatedLinkQRCode(groupLink.connLinkContact, short = showShortLink.value)
}
if (!isChannel && groupLink.shouldBeUpgraded) {
Box(Modifier.padding(vertical = DEFAULT_PADDING_HALF)) {
SimpleXCreatedLinkQRCode(groupLink.connLinkContact, short = showShortLink.value)
}
if (!isChannel && groupLink.shouldBeUpgraded) {
SettingsActionItem(
painterResource(MR.images.ic_add),
stringResource(MR.strings.upgrade_group_link),
click = { showAddShortLinkAlert(null) },
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
}
val clipboard = LocalClipboardManager.current
SettingsActionItem(
painterResource(MR.images.ic_add),
stringResource(MR.strings.upgrade_group_link),
click = { showAddShortLinkAlert(null) },
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
}
val clipboard = LocalClipboardManager.current
SettingsActionItem(
painterResource(MR.images.ic_share),
stringResource(MR.strings.share_link),
click = {
if (!isChannel && groupLink.shouldBeUpgraded) {
showAddShortLinkAlert {
painterResource(MR.images.ic_share),
stringResource(MR.strings.share_link),
click = {
if (!isChannel && groupLink.shouldBeUpgraded) {
showAddShortLinkAlert {
clipboard.shareText(groupLink.connLinkContact.simplexChatUri(short = showShortLink.value))
}
} else {
clipboard.shareText(groupLink.connLinkContact.simplexChatUri(short = showShortLink.value))
}
} else {
clipboard.shareText(groupLink.connLinkContact.simplexChatUri(short = showShortLink.value))
}
},
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
if (shareGroupInfo != null && isChannel) {
SettingsActionItem(
painterResource(MR.images.ic_forward),
stringResource(MR.strings.share_via_chat),
click = {
chatModel.sharedContent.value = SharedContent.ChatLink(shareGroupInfo)
chatModel.chatId.value = null
ModalManager.closeAllModalsEverywhere()
},
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
}
if (!creatingGroup && !isChannel) {
SettingsActionItem(
painterResource(MR.images.ic_delete),
stringResource(MR.strings.delete_link),
click = deleteLink,
iconColor = Color.Red,
textColor = Color.Red,
)
}
if (creatingGroup && close != null) {
SettingsActionItem(
painterResource(MR.images.ic_check),
stringResource(MR.strings.continue_to_next_step),
click = close,
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
if (shareGroupInfo != null && isChannel) {
SettingsActionItem(
painterResource(MR.images.ic_forward),
stringResource(MR.strings.share_via_chat),
click = {
chatModel.sharedContent.value = SharedContent.ChatLink(shareGroupInfo)
chatModel.chatId.value = null
ModalManager.closeAllModalsEverywhere()
},
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
}
if (!creatingGroup && !isChannel) {
SettingsActionItem(
painterResource(MR.images.ic_delete),
stringResource(MR.strings.delete_link),
click = deleteLink,
iconColor = Color.Red,
textColor = Color.Red,
)
}
if (creatingGroup && close != null) {
SettingsActionItem(
painterResource(MR.images.ic_check),
stringResource(MR.strings.continue_to_next_step),
click = close,
iconColor = MaterialTheme.colors.primary,
textColor = MaterialTheme.colors.primary,
)
}
}
}
}
@@ -2,12 +2,12 @@ package chat.simplex.common.views.chat.group
import InfoRow
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionSpacer
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.InlineTextContent
@@ -423,7 +423,7 @@ fun GroupMemberInfoLayout(
// TODO [relays] re-enable when relay management ships
val canRemove = member.canBeRemoved(groupInfo) && member.memberRole != GroupMemberRole.Relay
if (canBlockForAll || canRemove) {
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
if (canBlockForAll) {
if (member.blockedByAdmin) {
@@ -445,7 +445,7 @@ fun GroupMemberInfoLayout(
@Composable
fun NonAdminBlockSection() {
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
if (member.blockedByAdmin) {
SettingsActionItem(
@@ -469,7 +469,7 @@ fun GroupMemberInfoLayout(
) {
GroupMemberInfoHeader(member)
}
SectionSpacer()
SectionDividerSpaced()
val contactId = member.memberContactId
@@ -533,7 +533,7 @@ fun GroupMemberInfoLayout(
}
}
SectionSpacer()
SectionDividerSpaced()
}
val showMemberSupportChat = !openedFromSupportChat &&
@@ -566,7 +566,7 @@ fun GroupMemberInfoLayout(
}
if (member.contactLink != null) {
SectionView(stringResource(MR.strings.address_section_title).uppercase()) {
SectionView(stringResource(MR.strings.address_section_title)) {
SimpleXLinkQRCode(member.contactLink)
val clipboard = LocalClipboardManager.current
ShareAddressButton { clipboard.shareText(simplexChatLink(member.contactLink)) }
@@ -577,8 +577,8 @@ fun GroupMemberInfoLayout(
} else {
ConnectViaAddressButton(onClick = { connectViaAddress(member.contactLink) })
}
SectionTextFooter(stringResource(MR.strings.you_can_share_this_address_with_your_contacts).format(member.displayName))
}
SectionTextFooter(stringResource(MR.strings.you_can_share_this_address_with_your_contacts).format(member.displayName))
SectionDividerSpaced()
}
@@ -6,9 +6,11 @@ import SectionDividerSpaced
import SectionItemView
import SectionTextFooter
import SectionView
import androidx.compose.foundation.background
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.runtime.saveable.rememberSaveable
import dev.icerock.moko.resources.StringResource
import dev.icerock.moko.resources.compose.stringResource
@@ -64,6 +66,7 @@ fun GroupPreferencesView(m: ChatModel, rhId: Long?, chatId: String, close: () ->
if (preferences == currentPreferences) close()
else showUnsavedChangesAlert({ savePrefs(close) }, close, saveTextId)
},
cardScreen = true,
) {
GroupPreferencesLayout(
preferences,
@@ -182,37 +185,39 @@ private fun GroupPreferencesLayout(
AppBarTitle(stringResource(titleId))
if (!groupInfo.useRelays) {
if (groupInfo.businessChat == null) {
MemberAdmissionButton(openMemberAdmission)
SectionDividerSpaced(maxBottomPadding = false)
SectionView {
MemberAdmissionButton(openMemberAdmission)
}
SectionDividerSpaced()
}
TimedMessagesPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
DirectMessagesPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
FullDeletePreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
ReactionsPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
VoicePreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
FilesPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
SimplexLinksPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
ReportsPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
HistoryPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
SupportPreference(disabled = true)
} else {
TimedMessagesPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
FullDeletePreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
ReactionsPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
HistoryPreference()
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
SupportPreference(notice = generalGetString(MR.strings.chat_with_admins_relay_note), onEnable = { revert ->
AlertManager.shared.showAlertDialog(
title = generalGetString(MR.strings.enable_chats_with_admins_question),
@@ -225,7 +230,7 @@ private fun GroupPreferencesLayout(
})
}
if (groupInfo.isOwner) {
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
val saveTextId = if (groupInfo.useRelays) MR.strings.save_and_notify_channel_subscribers
else MR.strings.save_and_notify_group_members
ResetSaveButtons(
@@ -6,7 +6,10 @@ import SectionDividerSpaced
import SectionItemView
import SectionTextFooter
import SectionView
import androidx.compose.foundation.background
import androidx.compose.material.MaterialTheme
import androidx.compose.ui.Modifier
import chat.simplex.common.ui.theme.*
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
@@ -49,6 +52,7 @@ fun MemberAdmissionView(m: ChatModel, rhId: Long?, chatId: String, close: () ->
if (admission == currentAdmission) close()
else showUnsavedChangesAlert({ saveAdmission(close) }, close)
},
cardScreen = true,
) {
MemberAdmissionLayout(
admission,
@@ -85,7 +89,7 @@ private fun MemberAdmissionLayout(
}
}
if (groupInfo.isOwner) {
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
ResetSaveButtons(
reset = reset,
save = saveAdmission,
@@ -85,7 +85,7 @@ fun MemberSupportChatAppBar(
} else {
null
}
ModalManager.end.showModalCloseable(true) { closeCurrent ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { closeCurrent ->
remember { derivedStateOf { chatModel.getGroupMember(scopeMember_.groupMemberId) } }.value?.let { mem ->
GroupMemberInfoView(rhId, groupInfo, mem, scrollToItemId, stats, code, chatModel, openedFromSupportChat = true, close = closeCurrent) {
closeCurrent()
@@ -583,7 +583,7 @@ fun ContactConnectionMenuItems(rhId: Long?, chatInfo: ChatInfo.ContactConnection
onClick = {
ModalManager.center.closeModals()
ModalManager.end.closeModals()
ModalManager.center.showModalCloseable(true, showClose = appPlatform.isAndroid) { close ->
ModalManager.center.showModalCloseable(settings = true, showClose = appPlatform.isAndroid, cardScreen = true) { close ->
ContactConnectionInfoView(chatModel, rhId, chatInfo.contactConnection.connLinkInv, chatInfo.contactConnection, true, close)
}
showMenu.value = false
@@ -1,5 +1,6 @@
package chat.simplex.common.views.chatlist
import LocalCardScreen
import androidx.compose.foundation.*
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsHoveredAsState
@@ -572,7 +573,7 @@ private fun ChatListToolbar(userPickerState: MutableStateFlow<AnimatedViewState>
navigationButton = {
if (chatModel.users.isEmpty() && !chatModel.desktopNoUserNoRemote) {
NavigationButtonMenu {
ModalManager.start.showModalCloseable { close ->
ModalManager.start.showModalCloseable(cardScreen = true) { close ->
SettingsView(chatModel, setPerformLA, close)
}
}
@@ -854,8 +855,8 @@ enum class ScrollDirection {
@Composable
fun BoxScope.StatusBarBackground() {
if (appPlatform.isAndroid) {
val finalColor = MaterialTheme.colors.background.copy(0.88f)
Box(Modifier.fillMaxWidth().windowInsetsTopHeight(WindowInsets.statusBars).background(finalColor))
val bg = if (LocalCardScreen.current) canvasColorForCurrentTheme() else MaterialTheme.colors.background
Box(Modifier.fillMaxWidth().windowInsetsTopHeight(WindowInsets.statusBars).background(bg.copy(0.88f)))
}
}
@@ -10,6 +10,7 @@ import SectionView
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@@ -151,7 +152,7 @@ enum class PresentedServerType {
@Composable
private fun ServerSessionsView(sess: ServerSessions) {
SectionView(generalGetString(MR.strings.servers_info_transport_sessions_section_header).uppercase()) {
SectionView(generalGetString(MR.strings.servers_info_transport_sessions_section_header)) {
InfoRow(
generalGetString(MR.strings.servers_info_sessions_connected),
numOrDash(sess.ssConnected)
@@ -293,7 +294,7 @@ private fun XFTPServersListView(servers: List<XFTPServerSummary>, statsStartedAt
@Composable
private fun SMPStatsView(stats: AgentSMPServerStatsData, statsStartedAt: Instant, remoteHostInfo: RemoteHostInfo?) {
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header).uppercase()) {
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header)) {
InfoRow(
generalGetString(MR.strings.servers_info_messages_sent),
numOrDash(stats._sentDirect + stats._sentViaProxy)
@@ -329,7 +330,7 @@ private fun SMPSubscriptionsSection(totals: SMPTotals) {
horizontalArrangement = Arrangement.spacedBy(DEFAULT_SPACE_AFTER_ICON * 2)
) {
Text(
generalGetString(MR.strings.servers_info_subscriptions_section_header).uppercase(),
generalGetString(MR.strings.servers_info_subscriptions_section_header),
color = MaterialTheme.colors.secondary,
style = MaterialTheme.typography.body2,
fontSize = 12.sp
@@ -359,7 +360,7 @@ private fun SMPSubscriptionsSection(subs: SMPServerSubs, summary: SMPServerSumma
horizontalArrangement = Arrangement.spacedBy(DEFAULT_SPACE_AFTER_ICON * 2)
) {
Text(
generalGetString(MR.strings.servers_info_subscriptions_section_header).uppercase(),
generalGetString(MR.strings.servers_info_subscriptions_section_header),
color = MaterialTheme.colors.secondary,
style = MaterialTheme.typography.body2,
fontSize = 12.sp
@@ -415,7 +416,7 @@ private fun reconnectServerAlert(rh: RemoteHostInfo?, server: String) {
@Composable
fun XFTPStatsView(stats: AgentXFTPServerStatsData, statsStartedAt: Instant, rh: RemoteHostInfo?) {
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header).uppercase()) {
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header)) {
InfoRow(
generalGetString(MR.strings.servers_info_uploaded),
prettySize(stats._uploadsSize)
@@ -449,7 +450,7 @@ private fun IndentedInfoRow(title: String, desc: String) {
@Composable
fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Instant) {
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_header).uppercase()) {
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_header)) {
InfoRow(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_total), numOrDash(stats._sentDirect + stats._sentViaProxy))
InfoRowTwoValues(generalGetString(MR.strings.sent_directly), generalGetString(MR.strings.attempts_label), stats._sentDirect, stats._sentDirectAttempts)
InfoRowTwoValues(generalGetString(MR.strings.sent_via_proxy), generalGetString(MR.strings.attempts_label), stats._sentViaProxy, stats._sentViaProxyAttempts)
@@ -465,7 +466,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_received_messages_header).uppercase()) {
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_received_messages_header)) {
InfoRow(generalGetString(MR.strings.servers_info_detailed_statistics_received_total), numOrDash(stats._recvMsgs))
SectionItemView {
Text(generalGetString(MR.strings.servers_info_detailed_statistics_receive_errors), color = MaterialTheme.colors.onBackground)
@@ -483,7 +484,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.connections).uppercase()) {
SectionView(generalGetString(MR.strings.connections)) {
InfoRow(generalGetString(MR.strings.created), numOrDash(stats._connCreated))
InfoRow(generalGetString(MR.strings.secured), numOrDash(stats._connSecured))
InfoRow(generalGetString(MR.strings.completed), numOrDash(stats._connCompleted))
@@ -502,7 +503,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
@Composable
fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Instant) {
SectionView(generalGetString(MR.strings.uploaded_files).uppercase()) {
SectionView(generalGetString(MR.strings.uploaded_files)) {
InfoRow(generalGetString(MR.strings.size), prettySize(stats._uploadsSize))
InfoRowTwoValues(generalGetString(MR.strings.chunks_uploaded), generalGetString(MR.strings.attempts_label), stats._uploads, stats._uploadAttempts)
InfoRow(generalGetString(MR.strings.upload_errors), numOrDash(stats._uploadErrs))
@@ -510,7 +511,7 @@ fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Ins
InfoRow(generalGetString(MR.strings.deletion_errors), numOrDash(stats._deleteErrs))
}
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.downloaded_files).uppercase()) {
SectionView(generalGetString(MR.strings.downloaded_files)) {
InfoRow(generalGetString(MR.strings.size), prettySize(stats._downloadsSize))
InfoRowTwoValues(generalGetString(MR.strings.chunks_downloaded), generalGetString(MR.strings.attempts_label), stats._downloads, stats._downloadAttempts)
SectionItemView {
@@ -528,7 +529,7 @@ fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Ins
@Composable
fun XFTPServerSummaryLayout(summary: XFTPServerSummary, statsStartedAt: Instant, rh: RemoteHostInfo?) {
SectionView(generalGetString(MR.strings.server_address).uppercase()) {
SectionView(generalGetString(MR.strings.server_address)) {
SelectionContainer {
Text(
summary.xftpServer,
@@ -546,7 +547,7 @@ fun XFTPServerSummaryLayout(summary: XFTPServerSummary, statsStartedAt: Instant,
if (summary.stats != null) {
XFTPStatsView(stats = summary.stats, rh = rh, statsStartedAt = statsStartedAt)
if (summary.sessions != null) {
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
}
}
@@ -560,7 +561,7 @@ fun XFTPServerSummaryLayout(summary: XFTPServerSummary, statsStartedAt: Instant,
@Composable
fun SMPServerSummaryLayout(summary: SMPServerSummary, statsStartedAt: Instant, rh: RemoteHostInfo?) {
SectionView(generalGetString(MR.strings.server_address).uppercase()) {
SectionView(generalGetString(MR.strings.server_address)) {
SelectionContainer {
Text(
summary.smpServer,
@@ -578,7 +579,7 @@ fun SMPServerSummaryLayout(summary: SMPServerSummary, statsStartedAt: Instant, r
if (summary.stats != null) {
SMPStatsView(stats = summary.stats, remoteHostInfo = rh, statsStartedAt = statsStartedAt)
if (summary.subs != null || summary.sessions != null) {
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
}
}
@@ -605,7 +606,8 @@ fun ModalData.SMPServerSummaryView(
statsStartedAt: Instant
) {
ModalView(
close = close
close = close,
cardScreen = true,
) {
ColumnWithScrollBar {
val bottomPadding = DEFAULT_PADDING
@@ -628,7 +630,8 @@ fun ModalData.DetailedXFTPStatsView(
statsStartedAt: Instant
) {
ModalView(
close = close
close = close,
cardScreen = true,
) {
ColumnWithScrollBar {
Box(contentAlignment = Alignment.Center) {
@@ -652,7 +655,8 @@ fun ModalData.DetailedSMPStatsView(
statsStartedAt: Instant
) {
ModalView(
close = close
close = close,
cardScreen = true,
) {
ColumnWithScrollBar {
Box(contentAlignment = Alignment.Center) {
@@ -676,7 +680,8 @@ fun ModalData.XFTPServerSummaryView(
statsStartedAt: Instant
) {
ModalView(
close = close
close = close,
cardScreen = true,
) {
ColumnWithScrollBar {
Box(contentAlignment = Alignment.Center) {
@@ -839,7 +844,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
val statsStartedAt = it.statsStartedAt
SMPStatsView(totals.stats, statsStartedAt, rh)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
SMPSubscriptionsSection(totals)
SectionDividerSpaced()
@@ -847,7 +852,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
SMPServersListView(
servers = currentlyUsedSMPServers,
statsStartedAt = statsStartedAt,
header = generalGetString(MR.strings.servers_info_connected_servers_section_header).uppercase(),
header = generalGetString(MR.strings.servers_info_connected_servers_section_header),
rh = rh
)
SectionDividerSpaced()
@@ -857,7 +862,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
SMPServersListView(
servers = previouslyUsedSMPServers,
statsStartedAt = statsStartedAt,
header = generalGetString(MR.strings.servers_info_previously_connected_servers_section_header).uppercase(),
header = generalGetString(MR.strings.servers_info_previously_connected_servers_section_header),
rh = rh
)
SectionDividerSpaced()
@@ -867,11 +872,11 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
SMPServersListView(
servers = proxySMPServers,
statsStartedAt = statsStartedAt,
header = generalGetString(MR.strings.servers_info_proxied_servers_section_header).uppercase(),
header = generalGetString(MR.strings.servers_info_proxied_servers_section_header),
footer = generalGetString(MR.strings.servers_info_proxied_servers_section_footer),
rh = rh
)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
}
ServerSessionsView(totals.sessions)
@@ -888,13 +893,13 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
val previouslyUsedXFTPServers = xftpSummary.previouslyUsedXFTPServers
XFTPStatsView(totals.stats, statsStartedAt, rh)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
if (currentlyUsedXFTPServers.isNotEmpty()) {
XFTPServersListView(
currentlyUsedXFTPServers,
statsStartedAt,
generalGetString(MR.strings.servers_info_connected_servers_section_header).uppercase(),
generalGetString(MR.strings.servers_info_connected_servers_section_header),
rh
)
SectionDividerSpaced()
@@ -904,7 +909,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
XFTPServersListView(
previouslyUsedXFTPServers,
statsStartedAt,
generalGetString(MR.strings.servers_info_previously_connected_servers_section_header).uppercase(),
generalGetString(MR.strings.servers_info_previously_connected_servers_section_header),
rh
)
SectionDividerSpaced()
@@ -915,7 +920,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
}
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
ReconnectAllServersButton(rh)
@@ -1,7 +1,6 @@
package chat.simplex.common.views.chatlist
import SectionCustomFooter
import SectionDivider
import SectionItemView
import TextIconSpaced
import androidx.compose.animation.core.animateDpAsState
@@ -157,7 +156,7 @@ fun TagListView(rhId: Long?, chat: Chat? = null, close: () -> Unit, reorderMode:
Icon(painterResource(MR.images.ic_drag_handle), null, Modifier.size(20.dp), tint = MaterialTheme.colors.secondary)
}
}
SectionDivider()
Divider(Modifier.padding(horizontal = 8.dp))
}
}
}
@@ -380,7 +380,7 @@ private fun GlobalSettingsSection(
SectionItemView(
click = {
ModalManager.start.showModalCloseable { close ->
ModalManager.start.showModalCloseable(cardScreen = true) { close ->
SettingsView(chatModel, setPerformLA, close)
}
},
@@ -119,7 +119,7 @@ fun DatabaseEncryptionLayout(
ChatStoppedView()
SectionSpacer()
}
SectionView(if (migration) generalGetString(MR.strings.database_passphrase).uppercase() else null) {
SectionView(if (migration) generalGetString(MR.strings.database_passphrase) else null) {
SavePassphraseSetting(
useKeychain.value,
initialRandomDBPassphrase.value,
@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.foundation.background
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
@@ -170,7 +171,7 @@ fun DatabaseLayout(
AppBarTitle(stringResource(MR.strings.your_chat_database))
if (!chatModel.desktopNoUserNoRemote) {
SectionView(stringResource(MR.strings.messages_section_title).uppercase()) {
SectionView(stringResource(MR.strings.messages_section_title)) {
TtlOptions(chatItemTTL, enabled = rememberUpdatedState(!stopped && !progressIndicator), onChatItemTTLSelected)
}
SectionTextFooter(
@@ -184,7 +185,7 @@ fun DatabaseLayout(
}
}
)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
}
val toggleEnabled = remember { chatModel.remoteHosts }.none { it.sessionState is RemoteHostSessionState.Connected }
if (chatModel.localUserCreated.value == true) {
@@ -200,7 +201,7 @@ fun DatabaseLayout(
RunChatSetting(stopped, toggleEnabled && !progressIndicator, startChat, stopChatAlert)
}
if (stopped) SectionTextFooter(stringResource(MR.strings.you_must_use_the_most_recent_version_of_database))
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
}
SectionView(stringResource(MR.strings.chat_database_section)) {
@@ -214,7 +215,7 @@ fun DatabaseLayout(
if (unencrypted) painterResource(MR.images.ic_lock_open_right) else if (useKeyChain) painterResource(MR.images.ic_vpn_key_filled)
else painterResource(MR.images.ic_lock),
stringResource(MR.strings.database_passphrase),
click = { ModalManager.start.showModal { DatabaseEncryptionView(chatModel, false) } },
click = { ModalManager.start.showModal(cardScreen = true) { DatabaseEncryptionView(chatModel, false) } },
iconColor = if (unencrypted || (appPlatform.isDesktop && passphraseSaved)) WarningOrange else MaterialTheme.colors.secondary,
disabled = operationsDisabled
)
@@ -262,7 +263,7 @@ fun DatabaseLayout(
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.files_and_media_section).uppercase()) {
SectionView(stringResource(MR.strings.files_and_media_section)) {
val deleteFilesDisabled = operationsDisabled || appFilesCountAndSize.value.first == 0
SectionItemView(
deleteAppFilesAndMedia,
@@ -12,6 +12,7 @@ import androidx.compose.ui.graphics.Color
import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.*
import LocalCardScreen
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.chatlist.StatusBarBackground
import chat.simplex.common.views.onboarding.OnboardingStage
@@ -27,6 +28,7 @@ fun ModalView(
showAppBar: Boolean = true,
enableClose: Boolean = true,
background: Color = Color.Unspecified,
cardScreen: Boolean = false,
modifier: Modifier = Modifier,
showSearch: Boolean = false,
searchAlwaysVisible: Boolean = false,
@@ -40,7 +42,9 @@ fun ModalView(
}
val oneHandUI = remember { derivedStateOf { if (appPrefs.onboardingStage.state.value == OnboardingStage.OnboardingComplete) appPrefs.oneHandUI.state.value else false } }
Surface(Modifier.fillMaxSize(), contentColor = LocalContentColor.current) {
Box(if (background != Color.Unspecified) Modifier.background(background) else Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer)) {
val bgOverride = if (cardScreen) canvasColorForCurrentTheme() else if (background != Color.Unspecified) background else null
CompositionLocalProvider(LocalCardScreen provides cardScreen) {
Box(Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer, overrideColor = bgOverride)) {
Box(modifier = modifier) {
content()
}
@@ -66,6 +70,7 @@ fun ModalView(
}
}
}
}
}
}
@@ -111,15 +116,15 @@ class ModalManager(private val placement: ModalPlacement? = null) {
fun isLastModalOpen(id: ModalViewId): Boolean = modalViews.lastOrNull()?.id == id
fun showModal(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, forceAnimated: Boolean = false, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.() -> Unit) {
fun showModal(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, forceAnimated: Boolean = false, cardScreen: Boolean = false, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.() -> Unit) {
showCustomModal(id = id, forceAnimated = forceAnimated) { close ->
ModalView(close, showClose = showClose, endButtons = endButtons, content = { content() })
ModalView(close, showClose = showClose, cardScreen = cardScreen, endButtons = endButtons, content = { content() })
}
}
fun showModalCloseable(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.(close: () -> Unit) -> Unit) {
fun showModalCloseable(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, cardScreen: Boolean = false, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.(close: () -> Unit) -> Unit) {
showCustomModal(id = id) { close ->
ModalView(close, showClose = showClose, endButtons = endButtons, content = { content(close) })
ModalView(close, showClose = showClose, cardScreen = cardScreen, endButtons = endButtons, content = { content(close) })
}
}
@@ -1,9 +1,15 @@
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalDensity
@@ -12,6 +18,7 @@ import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.*
import androidx.compose.ui.text.font.FontWeight
import chat.simplex.common.platform.onRightClick
import chat.simplex.common.platform.windowWidth
import chat.simplex.common.ui.theme.*
@@ -20,16 +27,82 @@ import chat.simplex.common.views.onboarding.SelectableCard
import chat.simplex.common.views.usersettings.SettingsActionItemWithContent
import chat.simplex.res.MR
private val SectionCardShape = RoundedCornerShape(16.dp)
val CARD_PADDING = 18.dp
val ICON_TEXT_SPACING = 8.dp
val LocalCardScreen = staticCompositionLocalOf { false }
val itemHPadding: Dp
@Composable get() = if (LocalCardScreen.current) CARD_PADDING else DEFAULT_PADDING
@Composable
fun SectionView(title: String? = null, contentPadding: PaddingValues = PaddingValues(), headerBottomPadding: Dp = DEFAULT_PADDING, content: (@Composable ColumnScope.() -> Unit)) {
private fun CardColumnLayout(
contentPadding: PaddingValues = PaddingValues(),
cardShape: Shape = SectionCardShape,
content: @Composable () -> Unit
) {
val dividerColor = canvasColorForCurrentTheme()
val dividerPx = with(LocalDensity.current) { 2.dp.toPx() }
val childBottoms = remember { mutableListOf<Float>() }
Layout(
content = content,
modifier = Modifier
.padding(horizontal = CARD_PADDING)
.fillMaxWidth()
.clip(cardShape)
.background(sectionCardColor())
.padding(contentPadding)
.drawBehind {
for (i in 0 until childBottoms.size - 1) {
val y = childBottoms[i]
drawLine(dividerColor, Offset(0f, y), Offset(size.width, y), strokeWidth = dividerPx)
}
}
) { measurables, constraints ->
val placeables = measurables.map { it.measure(constraints) }
childBottoms.clear()
var y = 0f
placeables.forEach { p ->
y += p.height
childBottoms.add(y)
}
layout(constraints.maxWidth, y.toInt()) {
var yPos = 0
placeables.forEach { p ->
p.placeRelative(0, yPos)
yPos += p.height
}
}
}
}
@Composable
private fun CardColumn(
contentPadding: PaddingValues = PaddingValues(),
cardShape: Shape = SectionCardShape,
content: @Composable () -> Unit
) {
if (LocalCardScreen.current) {
CardColumnLayout(contentPadding, cardShape, content)
} else {
Column(Modifier.padding(contentPadding).fillMaxWidth()) { content() }
}
}
@Composable
fun SectionView(title: String? = null, contentPadding: PaddingValues = PaddingValues(), headerBottomPadding: Dp = DEFAULT_PADDING, cardShape: Shape = SectionCardShape, content: (@Composable ColumnScope.() -> Unit)) {
val card = LocalCardScreen.current
Column {
if (title != null) {
Text(
title, color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2,
modifier = Modifier.padding(start = DEFAULT_PADDING, bottom = headerBottomPadding), fontSize = 12.sp
modifier = Modifier.padding(start = if (card) DEFAULT_PADDING + DEFAULT_PADDING_HALF else DEFAULT_PADDING, bottom = if (card) 8.dp else headerBottomPadding),
fontSize = if (card) 14.sp else 12.sp,
fontWeight = if (card) FontWeight.Medium else FontWeight.Normal
)
}
Column(Modifier.padding(contentPadding).fillMaxWidth()) { content() }
CardColumn(contentPadding, cardShape) { content() }
}
}
@@ -42,24 +115,27 @@ fun SectionView(
padding: PaddingValues = PaddingValues(),
content: (@Composable ColumnScope.() -> Unit)
) {
val card = LocalCardScreen.current
Column {
val iconSize = with(LocalDensity.current) { 21.sp.toDp() }
Row(Modifier.padding(start = DEFAULT_PADDING, bottom = 5.dp), verticalAlignment = Alignment.CenterVertically) {
Row(Modifier.padding(start = if (card) DEFAULT_PADDING + DEFAULT_PADDING_HALF else DEFAULT_PADDING, bottom = 5.dp), verticalAlignment = Alignment.CenterVertically) {
if (leadingIcon) Icon(icon, null, Modifier.padding(end = DEFAULT_PADDING_HALF).size(iconSize), tint = iconTint)
Text(title, color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2, fontSize = 12.sp)
Text(title, color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2, fontSize = if (card) 14.sp else 12.sp, fontWeight = if (card) FontWeight.Medium else FontWeight.Normal)
if (!leadingIcon) Icon(icon, null, Modifier.padding(start = DEFAULT_PADDING_HALF).size(iconSize), tint = iconTint)
}
Column(Modifier.padding(padding).fillMaxWidth()) { content() }
CardColumn(padding) { content() }
}
}
@Composable
fun SectionViewWithButton(title: String? = null, titleButton: (@Composable () -> Unit)?, contentPadding: PaddingValues = PaddingValues(), headerBottomPadding: Dp = DEFAULT_PADDING, content: (@Composable ColumnScope.() -> Unit)) {
val card = LocalCardScreen.current
Column {
if (title != null || titleButton != null) {
Row(modifier = Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, bottom = headerBottomPadding).fillMaxWidth()) {
val hPadding = if (card) DEFAULT_PADDING + DEFAULT_PADDING_HALF else DEFAULT_PADDING
Row(modifier = Modifier.padding(start = hPadding, end = hPadding, bottom = if (card) 8.dp else headerBottomPadding).fillMaxWidth()) {
if (title != null) {
Text(title, color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2, fontSize = 12.sp)
Text(title, color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2, fontSize = if (card) 14.sp else 12.sp, fontWeight = if (card) FontWeight.Medium else FontWeight.Normal)
}
if (titleButton != null) {
Spacer(modifier = Modifier.weight(1f))
@@ -67,7 +143,7 @@ fun SectionViewWithButton(title: String? = null, titleButton: (@Composable () ->
}
}
}
Column(Modifier.padding(contentPadding).fillMaxWidth()) { content() }
CardColumn(contentPadding) { content() }
}
}
@@ -121,9 +197,9 @@ fun SectionItemView(
disabled: Boolean = false,
extraPadding: Boolean = false,
padding: PaddingValues = if (extraPadding)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING, top = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL, bottom = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = itemHPadding, top = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL, bottom = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL)
else
PaddingValues(horizontal = DEFAULT_PADDING, vertical = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL),
PaddingValues(horizontal = itemHPadding, vertical = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL),
content: (@Composable RowScope.() -> Unit)
) {
val modifier = Modifier
@@ -144,9 +220,9 @@ fun SectionItemViewWithoutMinPadding(
disabled: Boolean = false,
extraPadding: Boolean = false,
padding: PaddingValues = if (extraPadding)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = itemHPadding)
else
PaddingValues(horizontal = DEFAULT_PADDING),
PaddingValues(horizontal = itemHPadding),
content: (@Composable RowScope.() -> Unit)
) {
SectionItemView(click, minHeight, disabled, extraPadding, padding, content)
@@ -160,9 +236,9 @@ fun SectionItemViewLongClickable(
disabled: Boolean = false,
extraPadding: Boolean = false,
padding: PaddingValues = if (extraPadding)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING, top = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL, bottom = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = itemHPadding, top = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL, bottom = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL)
else
PaddingValues(horizontal = DEFAULT_PADDING, vertical = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL),
PaddingValues(horizontal = itemHPadding, vertical = DEFAULT_MIN_SECTION_ITEM_PADDING_VERTICAL),
content: (@Composable RowScope.() -> Unit)
) {
val modifier = Modifier
@@ -185,7 +261,7 @@ fun SectionItemViewSpaceBetween(
click: (() -> Unit)? = null,
onLongClick: (() -> Unit)? = null,
minHeight: Dp = DEFAULT_MIN_SECTION_ITEM_HEIGHT,
padding: PaddingValues = PaddingValues(horizontal = DEFAULT_PADDING),
padding: PaddingValues = PaddingValues(horizontal = itemHPadding),
disabled: Boolean = false,
content: (@Composable RowScope.() -> Unit)
) {
@@ -256,20 +332,19 @@ fun SectionCustomFooter(padding: PaddingValues = PaddingValues(start = DEFAULT_P
}
}
@Composable
fun SectionDivider() {
Divider(Modifier.padding(horizontal = 8.dp))
}
@Composable
fun SectionDividerSpaced(maxTopPadding: Boolean = false, maxBottomPadding: Boolean = true) {
Divider(
Modifier.padding(
start = DEFAULT_PADDING_HALF,
top = if (maxTopPadding) DEFAULT_PADDING + 18.dp else DEFAULT_PADDING + 2.dp,
end = DEFAULT_PADDING_HALF,
bottom = if (maxBottomPadding) DEFAULT_PADDING + 18.dp else DEFAULT_PADDING + 2.dp)
)
if (LocalCardScreen.current) {
Spacer(Modifier.height(30.dp))
} else {
Divider(
Modifier.padding(
start = DEFAULT_PADDING_HALF,
top = if (maxTopPadding) DEFAULT_PADDING + 18.dp else DEFAULT_PADDING + 2.dp,
end = DEFAULT_PADDING_HALF,
bottom = if (maxBottomPadding) DEFAULT_PADDING + 18.dp else DEFAULT_PADDING + 2.dp)
)
}
}
@Composable
@@ -284,11 +359,11 @@ fun SectionBottomSpacer() {
@Composable
fun TextIconSpaced(extraPadding: Boolean = false) {
Spacer(Modifier.padding(horizontal = if (extraPadding) 17.dp else DEFAULT_PADDING_HALF))
Spacer(Modifier.padding(horizontal = if (extraPadding) 17.dp else if (LocalCardScreen.current) ICON_TEXT_SPACING else DEFAULT_PADDING_HALF))
}
@Composable
fun InfoRow(title: String, value: String, icon: Painter? = null, iconTint: Color? = null, textColor: Color = MaterialTheme.colors.onBackground, padding: PaddingValues = PaddingValues(horizontal = DEFAULT_PADDING)) {
fun InfoRow(title: String, value: String, icon: Painter? = null, iconTint: Color? = null, textColor: Color = MaterialTheme.colors.onBackground, padding: PaddingValues = PaddingValues(horizontal = itemHPadding)) {
SectionItemViewSpaceBetween(padding = padding) {
Row {
val iconSize = with(LocalDensity.current) { 21.sp.toDp() }
@@ -3,8 +3,8 @@ package chat.simplex.common.views.helpers
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionSpacer
import SectionView
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.MaterialTheme.colors
@@ -108,18 +108,22 @@ fun ModalData.UserWallpaperEditor(
)
}
WallpaperPresetSelector(
selectedWallpaper = wallpaperType,
baseTheme = currentTheme.base,
currentColors = { type ->
// If applying for :
// - all themes: no overrides needed
// - specific user: only user overrides for currently selected theme are needed, because they will NOT be copied when other wallpaper is selected
val perUserOverride = if (wallpaperType.sameType(type)) chatModel.currentUser.value?.uiThemes else null
ThemeManager.currentColors(type, null, perUserOverride, appPrefs.themeOverrides.get())
},
onChooseType = onChooseType
)
SectionView {
WallpaperPresetSelector(
selectedWallpaper = wallpaperType,
baseTheme = currentTheme.base,
currentColors = { type ->
// If applying for :
// - all themes: no overrides needed
// - specific user: only user overrides for currently selected theme are needed, because they will NOT be copied when other wallpaper is selected
val perUserOverride = if (wallpaperType.sameType(type)) chatModel.currentUser.value?.uiThemes else null
ThemeManager.currentColors(type, null, perUserOverride, appPrefs.themeOverrides.get())
},
onChooseType = onChooseType
)
}
SectionDividerSpaced()
WallpaperSetupView(
themeModeOverride.value.type,
@@ -133,29 +137,30 @@ fun ModalData.UserWallpaperEditor(
onTypeChange = onTypeChange,
)
SectionSpacer()
SectionDividerSpaced()
if (!globalThemeUsed.value) {
ResetToGlobalThemeButton(true) {
themeModeOverride.value = ThemeManager.defaultActiveTheme(chatModel.currentUser.value?.uiThemes, appPrefs.themeOverrides.get())
globalThemeUsed.value = true
withBGApi { save(applyToMode.value, null) }
}
}
SetDefaultThemeButton {
globalThemeUsed.value = false
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
val mode = themeModeOverride.value.mode
withBGApi {
// Saving for both modes in one place by changing mode once per save
if (applyToMode.value == null) {
val oppositeMode = if (mode == DefaultThemeMode.LIGHT) DefaultThemeMode.DARK else DefaultThemeMode.LIGHT
save(oppositeMode, ThemeModeOverride.withFilledAppDefaults(oppositeMode, if (oppositeMode == DefaultThemeMode.LIGHT) lightBase else darkBase))
SectionView {
if (!globalThemeUsed.value) {
ResetToGlobalThemeButton(true) {
themeModeOverride.value = ThemeManager.defaultActiveTheme(chatModel.currentUser.value?.uiThemes, appPrefs.themeOverrides.get())
globalThemeUsed.value = true
withBGApi { save(applyToMode.value, null) }
}
}
SetDefaultThemeButton {
globalThemeUsed.value = false
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
val mode = themeModeOverride.value.mode
withBGApi {
// Saving for both modes in one place by changing mode once per save
if (applyToMode.value == null) {
val oppositeMode = if (mode == DefaultThemeMode.LIGHT) DefaultThemeMode.DARK else DefaultThemeMode.LIGHT
save(oppositeMode, ThemeModeOverride.withFilledAppDefaults(oppositeMode, if (oppositeMode == DefaultThemeMode.LIGHT) lightBase else darkBase))
}
themeModeOverride.value = ThemeModeOverride.withFilledAppDefaults(mode, if (mode == DefaultThemeMode.LIGHT) lightBase else darkBase)
save(themeModeOverride.value.mode, themeModeOverride.value)
}
themeModeOverride.value = ThemeModeOverride.withFilledAppDefaults(mode, if (mode == DefaultThemeMode.LIGHT) lightBase else darkBase)
save(themeModeOverride.value.mode, themeModeOverride.value)
}
}
@@ -174,38 +179,40 @@ fun ModalData.UserWallpaperEditor(
}
}
SectionSpacer()
SectionDividerSpaced()
if (showMore) {
val values by remember { mutableStateOf(
listOf(
null to generalGetString(MR.strings.chat_theme_apply_to_all_modes),
DefaultThemeMode.LIGHT to generalGetString(MR.strings.chat_theme_apply_to_light_mode),
DefaultThemeMode.DARK to generalGetString(MR.strings.chat_theme_apply_to_dark_mode),
SectionView {
val values by remember { mutableStateOf(
listOf(
null to generalGetString(MR.strings.chat_theme_apply_to_all_modes),
DefaultThemeMode.LIGHT to generalGetString(MR.strings.chat_theme_apply_to_light_mode),
DefaultThemeMode.DARK to generalGetString(MR.strings.chat_theme_apply_to_dark_mode),
)
)
)
}
ExposedDropDownSettingRow(
generalGetString(MR.strings.chat_theme_apply_to_mode),
values,
applyToMode,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = {
applyToMode.value = it
if (it != null && it != CurrentColors.value.base.mode) {
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
ThemeManager.applyTheme(if (it == DefaultThemeMode.LIGHT) lightBase.themeName else darkBase.themeName)
}
}
)
ExposedDropDownSettingRow(
generalGetString(MR.strings.chat_theme_apply_to_mode),
values,
applyToMode,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = {
applyToMode.value = it
if (it != null && it != CurrentColors.value.base.mode) {
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
ThemeManager.applyTheme(if (it == DefaultThemeMode.LIGHT) lightBase.themeName else darkBase.themeName)
}
}
)
}
SectionDividerSpaced()
AppearanceScope.CustomizeThemeColorsSection(currentTheme, editColor = editColor)
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
ImportExportThemeSection(null, remember { chatModel.currentUser }.value?.uiThemes) {
withBGApi {
@@ -214,7 +221,9 @@ fun ModalData.UserWallpaperEditor(
}
}
} else {
AdvancedSettingsButton { showMore = true }
SectionView {
AdvancedSettingsButton { showMore = true }
}
}
SectionBottomSpacer()
@@ -329,32 +338,36 @@ fun ModalData.ChatWallpaperEditor(
ThemeManager.currentColors(type, if (type?.sameType(themeModeOverride.value.type) == true) themeModeOverride.value else null, chatModel.currentUser.value?.uiThemes, appPrefs.themeOverrides.get())
}
WallpaperPresetSelector(
selectedWallpaper = currentTheme.wallpaper.type,
activeBackgroundColor = currentTheme.wallpaper.background,
activeTintColor = currentTheme.wallpaper.tint,
baseTheme = CurrentColors.collectAsState().value.base,
currentColors = { type -> currentColors(type) },
onChooseType = { type ->
when {
type is WallpaperType.Image && chatModel.remoteHostId() != null -> { /* do nothing */ }
type is WallpaperType.Image && ((themeModeOverride.value.type is WallpaperType.Image && !globalThemeUsed.value) || currentColors(type).wallpaper.type.image == null) -> {
withLongRunningApi { importWallpaperLauncher.launch("image/*") }
}
type is WallpaperType.Image -> {
if (!onTypeCopyFromSameTheme(currentColors(type).wallpaper.type)) {
SectionView {
WallpaperPresetSelector(
selectedWallpaper = currentTheme.wallpaper.type,
activeBackgroundColor = currentTheme.wallpaper.background,
activeTintColor = currentTheme.wallpaper.tint,
baseTheme = CurrentColors.collectAsState().value.base,
currentColors = { type -> currentColors(type) },
onChooseType = { type ->
when {
type is WallpaperType.Image && chatModel.remoteHostId() != null -> { /* do nothing */ }
type is WallpaperType.Image && ((themeModeOverride.value.type is WallpaperType.Image && !globalThemeUsed.value) || currentColors(type).wallpaper.type.image == null) -> {
withLongRunningApi { importWallpaperLauncher.launch("image/*") }
}
type is WallpaperType.Image -> {
if (!onTypeCopyFromSameTheme(currentColors(type).wallpaper.type)) {
withLongRunningApi { importWallpaperLauncher.launch("image/*") }
}
}
globalThemeUsed.value || themeModeOverride.value.type != type -> {
onTypeCopyFromSameTheme(type)
}
else -> {
onTypeChange(type)
}
}
globalThemeUsed.value || themeModeOverride.value.type != type -> {
onTypeCopyFromSameTheme(type)
}
else -> {
onTypeChange(type)
}
}
},
)
},
)
}
SectionDividerSpaced()
WallpaperSetupView(
themeModeOverride.value.type,
@@ -368,29 +381,30 @@ fun ModalData.ChatWallpaperEditor(
onTypeChange = onTypeChange,
)
SectionSpacer()
SectionDividerSpaced()
if (!globalThemeUsed.value) {
ResetToGlobalThemeButton(remember { chatModel.currentUser }.value?.uiThemes?.preferredMode(isInDarkTheme()) == null) {
themeModeOverride.value = ThemeManager.defaultActiveTheme(chatModel.currentUser.value?.uiThemes, appPrefs.themeOverrides.get())
globalThemeUsed.value = true
withBGApi { save(applyToMode.value, null) }
}
}
SetDefaultThemeButton {
globalThemeUsed.value = false
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
val mode = themeModeOverride.value.mode
withBGApi {
// Saving for both modes in one place by changing mode once per save
if (applyToMode.value == null) {
val oppositeMode = if (mode == DefaultThemeMode.LIGHT) DefaultThemeMode.DARK else DefaultThemeMode.LIGHT
save(oppositeMode, ThemeModeOverride.withFilledAppDefaults(oppositeMode, if (oppositeMode == DefaultThemeMode.LIGHT) lightBase else darkBase))
SectionView {
if (!globalThemeUsed.value) {
ResetToGlobalThemeButton(remember { chatModel.currentUser }.value?.uiThemes?.preferredMode(isInDarkTheme()) == null) {
themeModeOverride.value = ThemeManager.defaultActiveTheme(chatModel.currentUser.value?.uiThemes, appPrefs.themeOverrides.get())
globalThemeUsed.value = true
withBGApi { save(applyToMode.value, null) }
}
}
SetDefaultThemeButton {
globalThemeUsed.value = false
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
val mode = themeModeOverride.value.mode
withBGApi {
// Saving for both modes in one place by changing mode once per save
if (applyToMode.value == null) {
val oppositeMode = if (mode == DefaultThemeMode.LIGHT) DefaultThemeMode.DARK else DefaultThemeMode.LIGHT
save(oppositeMode, ThemeModeOverride.withFilledAppDefaults(oppositeMode, if (oppositeMode == DefaultThemeMode.LIGHT) lightBase else darkBase))
}
themeModeOverride.value = ThemeModeOverride.withFilledAppDefaults(mode, if (mode == DefaultThemeMode.LIGHT) lightBase else darkBase)
save(themeModeOverride.value.mode, themeModeOverride.value)
}
themeModeOverride.value = ThemeModeOverride.withFilledAppDefaults(mode, if (mode == DefaultThemeMode.LIGHT) lightBase else darkBase)
save(themeModeOverride.value.mode, themeModeOverride.value)
}
}
@@ -409,38 +423,40 @@ fun ModalData.ChatWallpaperEditor(
}
}
SectionSpacer()
SectionDividerSpaced()
if (showMore) {
val values by remember { mutableStateOf(
listOf(
null to generalGetString(MR.strings.chat_theme_apply_to_all_modes),
DefaultThemeMode.LIGHT to generalGetString(MR.strings.chat_theme_apply_to_light_mode),
DefaultThemeMode.DARK to generalGetString(MR.strings.chat_theme_apply_to_dark_mode),
SectionView {
val values by remember { mutableStateOf(
listOf(
null to generalGetString(MR.strings.chat_theme_apply_to_all_modes),
DefaultThemeMode.LIGHT to generalGetString(MR.strings.chat_theme_apply_to_light_mode),
DefaultThemeMode.DARK to generalGetString(MR.strings.chat_theme_apply_to_dark_mode),
)
)
)
}
ExposedDropDownSettingRow(
generalGetString(MR.strings.chat_theme_apply_to_mode),
values,
applyToMode,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = {
applyToMode.value = it
if (it != null && it != CurrentColors.value.base.mode) {
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
ThemeManager.applyTheme(if (it == DefaultThemeMode.LIGHT) lightBase.themeName else darkBase.themeName)
}
}
)
ExposedDropDownSettingRow(
generalGetString(MR.strings.chat_theme_apply_to_mode),
values,
applyToMode,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = {
applyToMode.value = it
if (it != null && it != CurrentColors.value.base.mode) {
val lightBase = DefaultTheme.LIGHT
val darkBase = if (CurrentColors.value.base != DefaultTheme.LIGHT) CurrentColors.value.base else if (appPrefs.systemDarkTheme.get() == DefaultTheme.DARK.themeName) DefaultTheme.DARK else if (appPrefs.systemDarkTheme.get() == DefaultTheme.BLACK.themeName) DefaultTheme.BLACK else DefaultTheme.SIMPLEX
ThemeManager.applyTheme(if (it == DefaultThemeMode.LIGHT) lightBase.themeName else darkBase.themeName)
}
}
)
}
SectionDividerSpaced()
AppearanceScope.CustomizeThemeColorsSection(currentTheme, editColor = editColor)
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
ImportExportThemeSection(themeModeOverride.value, remember { chatModel.currentUser }.value?.uiThemes) {
withBGApi {
themeModeOverride.value = it
@@ -448,7 +464,9 @@ fun ModalData.ChatWallpaperEditor(
}
}
} else {
AdvancedSettingsButton { showMore = true }
SectionView {
AdvancedSettingsButton { showMore = true }
}
}
SectionBottomSpacer()
@@ -1,7 +1,7 @@
package chat.simplex.common.views.migration
import SectionBottomSpacer
import SectionSpacer
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.foundation.layout.*
@@ -11,6 +11,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.rotate
import androidx.compose.foundation.background
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -134,6 +135,7 @@ fun MigrateFromDeviceView(close: () -> Unit) {
}
close()
},
cardScreen = true,
) {
MigrateFromDeviceLayout(
migrationState = migrationState,
@@ -182,7 +184,7 @@ private fun SectionByState(
@Composable
private fun MutableState<MigrationFromState>.ChatStopInProgressView() {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_stopping_chat).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_from_device_stopping_chat)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -192,9 +194,9 @@ private fun MutableState<MigrationFromState>.ChatStopInProgressView() {
@Composable
private fun MutableState<MigrationFromState>.ChatStopFailedView(reason: String) {
SectionView(stringResource(MR.strings.error_stopping_chat).uppercase()) {
SectionView(stringResource(MR.strings.error_stopping_chat)) {
Text(reason)
SectionSpacer()
SectionDividerSpaced()
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_report_filled),
text = stringResource(MR.strings.auth_stop_chat),
@@ -224,9 +226,9 @@ private fun MutableState<MigrationFromState>.PassphraseConfirmationView() {
val view = LocalMultiplatformView()
Column {
ChatStoppedView()
SectionSpacer()
SectionDividerSpaced()
SectionView(stringResource(MR.strings.migrate_from_device_verify_database_passphrase).uppercase()) {
SectionView(stringResource(MR.strings.migrate_from_device_verify_database_passphrase)) {
PassphraseField(currentKey, placeholder = stringResource(MR.strings.current_passphrase), Modifier.padding(horizontal = DEFAULT_PADDING), isValid = ::validKey, requestFocus = true)
SettingsActionItemWithContent(
@@ -243,8 +245,8 @@ private fun MutableState<MigrationFromState>.PassphraseConfirmationView() {
}
}
) {}
SectionTextFooter(stringResource(MR.strings.migrate_from_device_confirm_you_remember_passphrase))
}
SectionTextFooter(stringResource(MR.strings.migrate_from_device_confirm_you_remember_passphrase))
}
if (verifyingPassphrase.value) {
ProgressView()
@@ -254,7 +256,7 @@ private fun MutableState<MigrationFromState>.PassphraseConfirmationView() {
@Composable
private fun MutableState<MigrationFromState>.UploadConfirmationView() {
SectionView(stringResource(MR.strings.migrate_from_device_confirm_upload).uppercase()) {
SectionView(stringResource(MR.strings.migrate_from_device_confirm_upload)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_ios_share),
text = stringResource(MR.strings.migrate_from_device_archive_and_upload),
@@ -268,7 +270,7 @@ private fun MutableState<MigrationFromState>.UploadConfirmationView() {
@Composable
private fun MutableState<MigrationFromState>.ArchivingView() {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_archiving_database).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_from_device_archiving_database)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -279,7 +281,7 @@ private fun MutableState<MigrationFromState>.ArchivingView() {
@Composable
private fun MutableState<MigrationFromState>.DatabaseInitView(tempDatabaseFile: File, totalBytes: Long, archivePath: String) {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_database_init).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_from_device_database_init)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -298,7 +300,7 @@ private fun MutableState<MigrationFromState>.UploadProgressView(
archivePath: String,
) {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_uploading_archive).uppercase()) {
SectionView(stringResource(MR.strings.migrate_from_device_uploading_archive)) {
val ratio = uploadedBytes.toFloat() / max(totalBytes, 1)
LargeProgressView(ratio, "${(ratio * 100).toInt()}%", stringResource(MR.strings.migrate_from_device_bytes_uploaded).format(formatBytes(uploadedBytes)))
}
@@ -310,7 +312,7 @@ private fun MutableState<MigrationFromState>.UploadProgressView(
@Composable
private fun MutableState<MigrationFromState>.UploadFailedView(totalBytes: Long, archivePath: String, chatReceiver: MigrationFromChatReceiver?) {
SectionView(stringResource(MR.strings.migrate_from_device_upload_failed).uppercase()) {
SectionView(stringResource(MR.strings.migrate_from_device_upload_failed)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_ios_share),
text = stringResource(MR.strings.migrate_from_device_repeat_upload),
@@ -329,7 +331,7 @@ private fun MutableState<MigrationFromState>.UploadFailedView(totalBytes: Long,
@Composable
private fun LinkCreationView() {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_creating_archive_link).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_from_device_creating_archive_link)) {}
ProgressView()
}
}
@@ -361,15 +363,15 @@ private fun MutableState<MigrationFromState>.LinkShownView(fileId: Long, link: S
)
}
) {}
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_archive_will_be_deleted))
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_choose_migrate_from_another_device))
}
SectionSpacer()
SectionView(stringResource(MR.strings.show_QR_code).uppercase()) {
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_archive_will_be_deleted))
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_choose_migrate_from_another_device))
SectionDividerSpaced()
SectionView(stringResource(MR.strings.show_QR_code)) {
SimpleXLinkQRCode(link, onShare = {})
}
SectionSpacer()
SectionView(stringResource(MR.strings.migrate_from_device_or_share_this_file_link).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.migrate_from_device_or_share_this_file_link)) {
LinkTextView(link, true)
}
}
@@ -377,7 +379,7 @@ private fun MutableState<MigrationFromState>.LinkShownView(fileId: Long, link: S
@Composable
private fun MutableState<MigrationFromState>.FinishedView(chatDeletion: Boolean) {
Box {
SectionView(stringResource(MR.strings.migrate_from_device_migration_complete).uppercase()) {
SectionView(stringResource(MR.strings.migrate_from_device_migration_complete)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_play_arrow_filled),
text = stringResource(MR.strings.migrate_from_device_start_chat),
@@ -410,9 +412,9 @@ private fun MutableState<MigrationFromState>.FinishedView(chatDeletion: Boolean)
)
}
) {}
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_you_must_not_start_database_on_two_device))
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_using_on_two_device_breaks_encryption))
}
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_you_must_not_start_database_on_two_device))
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_using_on_two_device_breaks_encryption))
if (chatDeletion) {
ProgressView()
}
@@ -2,6 +2,7 @@ package chat.simplex.common.views.migration
import SectionBottomSpacer
import SectionItemView
import SectionDividerSpaced
import SectionSpacer
import SectionTextFooter
import SectionView
@@ -9,6 +10,7 @@ import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.foundation.background
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager
import chat.simplex.common.model.*
@@ -148,6 +150,7 @@ fun ModalData.MigrateToDeviceView(close: () -> Unit) {
close()
}
},
cardScreen = true,
) {
MigrateToDeviceLayout(
migrationState = migrationState,
@@ -201,7 +204,7 @@ private fun MutableState<MigrationToState?>.PasteOrScanLinkView(close: () -> Uni
val progressIndicator = remember { mutableStateOf(false) }
Column {
if (appPlatform.isAndroid) {
SectionView(stringResource(MR.strings.scan_QR_code).replace('\n', ' ').uppercase()) {
SectionView(stringResource(MR.strings.scan_QR_code).replace('\n', ' ')) {
QRCodeScanner(showQRCodeScanner = remember { mutableStateOf(true) }) { text ->
checkUserLink(text)
}
@@ -209,12 +212,12 @@ private fun MutableState<MigrationToState?>.PasteOrScanLinkView(close: () -> Uni
SectionSpacer()
}
SectionView(stringResource(if (appPlatform.isAndroid) MR.strings.or_paste_archive_link else MR.strings.paste_archive_link).uppercase()) {
SectionView(stringResource(if (appPlatform.isAndroid) MR.strings.or_paste_archive_link else MR.strings.paste_archive_link)) {
PasteLinkView()
}
SectionSpacer()
SectionView(stringResource(MR.strings.chat_archive).uppercase()) {
SectionView(stringResource(MR.strings.chat_archive)) {
ArchiveImportView(progressIndicator, close)
}
}
@@ -280,7 +283,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
mutableStateOf(getNetCfg().withOnionHosts(onionHosts.value).copy(socksProxy = linkNetworkProxy?.toProxyString() ?: legacyLinkSocksProxy, sessionMode = sessionMode.value))
}
SectionView(stringResource(MR.strings.migrate_to_device_confirm_network_settings).uppercase()) {
SectionView(stringResource(MR.strings.migrate_to_device_confirm_network_settings)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_check),
text = stringResource(MR.strings.migrate_to_device_apply_onion),
@@ -305,7 +308,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
val networkProxyPref = SharedPreference(get = { networkProxy.value }, set = {
networkProxy.value = it
})
SectionView(stringResource(MR.strings.network_settings_title).uppercase()) {
SectionView(stringResource(MR.strings.network_settings_title)) {
OnionRelatedLayout(
appPreferences.developerTools.get(),
networkUseSocksProxy,
@@ -325,7 +328,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
@Composable
private fun MutableState<MigrationToState?>.DatabaseInitView(link: String, tempDatabaseFile: File, netCfg: NetCfg, networkProxy: NetworkProxy?) {
Box {
SectionView(stringResource(MR.strings.migrate_to_device_database_init).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_to_device_database_init)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -345,7 +348,7 @@ private fun MutableState<MigrationToState?>.LinkDownloadingView(
networkProxy: NetworkProxy?
) {
Box {
SectionView(stringResource(MR.strings.migrate_to_device_downloading_details).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_to_device_downloading_details)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -356,7 +359,7 @@ private fun MutableState<MigrationToState?>.LinkDownloadingView(
@Composable
private fun DownloadProgressView(downloadedBytes: Long, totalBytes: Long) {
Box {
SectionView(stringResource(MR.strings.migrate_to_device_downloading_archive).uppercase()) {
SectionView(stringResource(MR.strings.migrate_to_device_downloading_archive)) {
val ratio = downloadedBytes.toFloat() / max(totalBytes, 1)
LargeProgressView(ratio, "${(ratio * 100).toInt()}%", stringResource(MR.strings.migrate_to_device_bytes_downloaded).format(formatBytes(downloadedBytes)))
}
@@ -365,7 +368,7 @@ private fun DownloadProgressView(downloadedBytes: Long, totalBytes: Long) {
@Composable
private fun MutableState<MigrationToState?>.DownloadFailedView(link: String, chatReceiver: MigrationToChatReceiver?, archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
SectionView(stringResource(MR.strings.migrate_to_device_download_failed).uppercase()) {
SectionView(stringResource(MR.strings.migrate_to_device_download_failed)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_download),
text = stringResource(MR.strings.migrate_to_device_repeat_download),
@@ -386,7 +389,7 @@ private fun MutableState<MigrationToState?>.DownloadFailedView(link: String, cha
@Composable
private fun MutableState<MigrationToState?>.ArchiveImportView(archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
Box {
SectionView(stringResource(MR.strings.migrate_to_device_importing_archive).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_to_device_importing_archive)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -396,7 +399,7 @@ private fun MutableState<MigrationToState?>.ArchiveImportView(archivePath: Strin
@Composable
private fun MutableState<MigrationToState?>.ArchiveImportFailedView(archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
SectionView(stringResource(MR.strings.migrate_to_device_import_failed).uppercase()) {
SectionView(stringResource(MR.strings.migrate_to_device_import_failed)) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_download),
text = stringResource(MR.strings.migrate_to_device_repeat_import),
@@ -417,7 +420,7 @@ private fun MutableState<MigrationToState?>.PassphraseEnteringView(currentKey: S
Box {
val view = LocalMultiplatformView()
SectionView(stringResource(MR.strings.migrate_to_device_enter_passphrase).uppercase()) {
SectionView(stringResource(MR.strings.migrate_to_device_enter_passphrase)) {
SavePassphraseSetting(
useKeychain.value,
false,
@@ -489,7 +492,7 @@ private fun MutableState<MigrationToState?>.MigrationConfirmationView(status: DB
}
else -> Tuple4(generalGetString(MR.strings.error), null, generalGetString(MR.strings.unknown_error), null)
}
SectionView(header.uppercase()) {
SectionView(header) {
if (button != null && confirmation != null) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_download),
@@ -500,14 +503,14 @@ private fun MutableState<MigrationToState?>.MigrationConfirmationView(status: DB
}
) {}
}
SectionTextFooter(footer)
}
SectionTextFooter(footer)
}
@Composable
private fun MigrationView(passphrase: String, confirmation: MigrationConfirmation, useKeychain: Boolean, netCfg: NetCfg, networkProxy: NetworkProxy?, close: () -> Unit) {
Box {
SectionView(stringResource(MR.strings.migrate_to_device_migrating).uppercase()) {}
SectionView(stringResource(MR.strings.migrate_to_device_migrating)) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -66,7 +66,7 @@ fun AddChannelView(chatModel: ChatModel, close: () -> Unit, closeAll: () -> Unit
closeAll()
withBGApi {
openGroupChat(null, gInfo.groupId)
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { close ->
GroupLinkView(chatModel, rhId = null, groupInfo = gInfo, groupLink = groupLink.value, onGroupLinkUpdated = null, creatingGroup = true, isChannel = true, shareGroupInfo = gInfo, close = close)
}
}
@@ -567,7 +567,7 @@ private fun LinkStepView(
}
}
}
ModalView(close = close, showClose = false) {
ModalView(close = close, showClose = false, cardScreen = true) {
GroupLinkView(
chatModel = chatModel,
rhId = null,
@@ -53,11 +53,11 @@ fun AddGroupView(chatModel: ChatModel, rh: RemoteHostInfo?, close: () -> Unit, c
closeAll.invoke()
if (!groupInfo.incognito) {
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true) { close ->
AddGroupMembersView(rhId, groupInfo, creatingGroup = true, chatModel, close)
}
} else {
ModalManager.end.showModalCloseable(true) { close ->
ModalManager.end.showModalCloseable(showClose = true, cardScreen = true) { close ->
GroupLinkView(chatModel, rhId, groupInfo, groupLink = null, onGroupLinkUpdated = null, creatingGroup = true, close = close)
}
}
@@ -7,6 +7,7 @@ import SectionView
import SectionViewWithButton
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.background
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
@@ -130,7 +131,7 @@ private fun ContactConnectionInfoLayout(
if (connLink != null && connLink.connFullLink.isNotEmpty() && contactConnection.initiated) {
Spacer(Modifier.height(DEFAULT_PADDING))
SectionViewWithButton(
stringResource(MR.strings.one_time_link).uppercase(),
stringResource(MR.strings.one_time_link),
titleButton = if (connLink.connShortLink == null) null else {{ ToggleShortLinkButton(showShortLink) }}
) {
SimpleXCreatedLinkQRCode(connLink, short = showShortLink.value)
@@ -146,7 +147,7 @@ private fun ContactConnectionInfoLayout(
}
SectionTextFooter(sharedProfileInfo(chatModel, contactConnection.incognito))
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
DeleteButton(deleteConnection)
@@ -325,7 +325,7 @@ private fun ModalData.NewChatSheetLayout(
item {
if (filteredContactChats.isNotEmpty() && searchText.value.text.isEmpty()) {
SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false)
SectionView(stringResource(MR.strings.contact_list_header_title).uppercase(), headerBottomPadding = DEFAULT_PADDING_HALF) {}
SectionView(stringResource(MR.strings.contact_list_header_title), headerBottomPadding = DEFAULT_PADDING_HALF) {}
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
}
}
@@ -410,7 +410,7 @@ private fun ModalData.NewChatSheetLayout(
item {
if (filteredContactChats.isNotEmpty() && searchText.value.text.isEmpty()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.contact_list_header_title).uppercase(), headerBottomPadding = DEFAULT_PADDING_HALF) {}
SectionView(stringResource(MR.strings.contact_list_header_title), headerBottomPadding = DEFAULT_PADDING_HALF) {}
}
}
item {
@@ -495,7 +495,7 @@ private fun InviteView(rhId: Long?, connLinkInvitation: CreatedConnLink, contact
)
SimpleXCreatedLinkQRCode(connLinkInvitation, short = showShortLink.value, onShare = { chatModel.markShowingInvitationUsed() })
} else {
SectionView(stringResource(MR.strings.share_this_1_time_link).uppercase(), headerBottomPadding = 5.dp) {
SectionView(stringResource(MR.strings.share_this_1_time_link), headerBottomPadding = 5.dp) {
LinkTextView(connLinkInvitation.simplexChatUri(short = showShortLink.value), true)
}
@@ -519,7 +519,7 @@ private fun InviteView(rhId: Long?, connLinkInvitation: CreatedConnLink, contact
val currentUser = remember { chatModel.currentUser }.value
if (currentUser != null) {
SectionView(stringResource(MR.strings.new_chat_share_profile).uppercase(), headerBottomPadding = 5.dp) {
SectionView(stringResource(MR.strings.new_chat_share_profile), headerBottomPadding = 5.dp) {
SectionItemView(
padding = PaddingValues(
top = 0.dp,
@@ -643,14 +643,14 @@ private fun ConnectView(rhId: Long?, showQRCodeScanner: MutableState<Boolean>, p
)
}
SectionView(stringResource(MR.strings.paste_the_link_you_received).uppercase(), headerBottomPadding = 5.dp) {
SectionView(stringResource(MR.strings.paste_the_link_you_received), headerBottomPadding = 5.dp) {
PasteLinkView(rhId, pastedLink, showQRCodeScanner, close)
}
if (appPlatform.isAndroid) {
Spacer(Modifier.height(10.dp))
SectionView(stringResource(MR.strings.or_scan_qr_code).uppercase(), headerBottomPadding = 5.dp) {
SectionView(stringResource(MR.strings.or_scan_qr_code), headerBottomPadding = 5.dp) {
QRCodeScanner(showQRCodeScanner) { text ->
val linkVerified = verifyOnly(text)
if (!linkVerified) {
@@ -55,7 +55,7 @@ fun OnboardingConditionsView(chatModel: ChatModel) {
OnboardingConditionsDesktop(selectedOperatorIds)
} else {
CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) {
ModalView({}, showClose = false, showAppBar = false) {
ModalView({}, showClose = false, showAppBar = false, cardScreen = true) {
OnboardingShrinkingLayout(
modifier = Modifier.fillMaxSize().themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer)
.systemBarsPadding()
@@ -133,7 +133,7 @@ fun OnboardingConditionsView(chatModel: ChatModel) {
@Composable
private fun OnboardingConditionsDesktop(selectedOperatorIds: MutableState<Set<Long>>) {
CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) {
ModalView({}, showClose = false) {
ModalView({}, showClose = false, cardScreen = true) {
ColumnWithScrollBar(horizontalAlignment = Alignment.CenterHorizontally) {
Column(Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) {
Box(Modifier.align(Alignment.CenterHorizontally)) {
@@ -184,7 +184,7 @@ fun ModalData.ChooseServerOperators(
prepareChatBeforeFinishingOnboarding()
}
CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) {
ModalView(close, enableClose = selectedOperatorIds.value.isNotEmpty()) {
ModalView(close, enableClose = selectedOperatorIds.value.isNotEmpty(), cardScreen = true) {
ColumnWithScrollBar(
Modifier
.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer),
@@ -373,7 +373,7 @@ private fun ChooseServerOperatorsInfoView() {
SectionDividerSpaced()
SectionView(title = stringResource(MR.strings.onboarding_network_about_operators).uppercase()) {
SectionView(title = stringResource(MR.strings.onboarding_network_about_operators)) {
chatModel.conditions.value.serverOperators.forEach { op ->
ServerOperatorRow(op)
}
@@ -65,7 +65,7 @@ private fun LinkAMobileLayout(
Modifier.weight(0.3f),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
SectionView(generalGetString(MR.strings.this_device_name)) {
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { ChatModel.controller.appPrefs.offerRemoteMulticast.state }.value) {
@@ -4,10 +4,10 @@ import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionItemViewLongClickable
import SectionSpacer
import SectionView
import TextIconSpaced
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.background
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.*
import androidx.compose.runtime.*
@@ -29,8 +29,7 @@ import chat.simplex.common.model.ChatController.switchToLocalSession
import chat.simplex.common.model.ChatModel.connectedToRemote
import chat.simplex.common.model.ChatModel.controller
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.chat.item.ItemAction
import chat.simplex.common.views.helpers.*
import chat.simplex.common.views.newchat.QRCodeScanner
@@ -53,7 +52,7 @@ fun ConnectDesktopView(close: () -> Unit) {
showDisconnectDesktopAlert(close)
}
}
ModalView(close = closeWithAlert) {
ModalView(close = closeWithAlert, cardScreen = true) {
ConnectDesktopLayout(
deviceName = deviceName.value!!,
close
@@ -128,7 +127,7 @@ private fun ConnectDesktopLayout(deviceName: String, close: () -> Unit) {
@Composable
private fun ConnectDesktop(deviceName: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>, sessionAddress: MutableState<String>) {
AppBarTitle(stringResource(MR.strings.connect_to_desktop))
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
SectionView(stringResource(MR.strings.this_device_name)) {
DevicesView(deviceName, remoteCtrls) {
if (it != "") {
setDeviceName(it)
@@ -139,7 +138,7 @@ private fun ConnectDesktop(deviceName: String, remoteCtrls: SnapshotStateList<Re
SectionDividerSpaced()
ScanDesktopAddressView(sessionAddress)
if (controller.appPrefs.developerTools.get()) {
SectionSpacer()
SectionDividerSpaced()
DesktopAddressView(sessionAddress)
}
}
@@ -147,20 +146,20 @@ private fun ConnectDesktop(deviceName: String, remoteCtrls: SnapshotStateList<Re
@Composable
private fun ConnectingDesktop(session: RemoteCtrlSession, rc: RemoteCtrlInfo?) {
AppBarTitle(stringResource(MR.strings.connecting_to_desktop))
SectionView(stringResource(MR.strings.connecting_to_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.connecting_to_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
CtrlDeviceNameText(session, rc)
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
CtrlDeviceVersionText(session)
}
if (session.sessionCode != null) {
SectionSpacer()
SectionView(stringResource(MR.strings.session_code).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.session_code)) {
SessionCodeText(session.sessionCode!!)
}
}
SectionSpacer()
SectionDividerSpaced()
SectionView {
DisconnectButton(onClick = ::disconnectDesktop)
@@ -188,7 +187,7 @@ private fun ProgressIndicator() {
@Composable
private fun SearchingDesktop(deviceName: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
AppBarTitle(stringResource(MR.strings.connecting_to_desktop))
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
SectionView(stringResource(MR.strings.this_device_name)) {
DevicesView(deviceName, remoteCtrls) {
if (it != "") {
setDeviceName(it)
@@ -197,10 +196,10 @@ private fun SearchingDesktop(deviceName: String, remoteCtrls: SnapshotStateList<
}
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.found_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.found_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Text(stringResource(MR.strings.waiting_for_desktop), fontStyle = FontStyle.Italic)
}
SectionSpacer()
SectionDividerSpaced()
DisconnectButton(stringResource(MR.strings.scan_QR_code).replace('\n', ' '), MR.images.ic_qr_code, ::disconnectDesktop)
}
@@ -215,7 +214,7 @@ private fun FoundDesktop(
sessionAddress: MutableState<String>,
) {
AppBarTitle(stringResource(MR.strings.found_desktop))
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
SectionView(stringResource(MR.strings.this_device_name)) {
DevicesView(deviceName, remoteCtrls) {
if (it != "") {
setDeviceName(it)
@@ -224,7 +223,7 @@ private fun FoundDesktop(
}
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.found_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.found_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
CtrlDeviceNameText(session, rc)
CtrlDeviceVersionText(session)
if (!compatible) {
@@ -232,7 +231,7 @@ private fun FoundDesktop(
}
}
SectionSpacer()
SectionDividerSpaced()
if (compatible) {
SectionItemView({ withBGApi { confirmKnownDesktop(sessionAddress, rc) } }) {
@@ -256,19 +255,19 @@ private fun FoundDesktop(
@Composable
private fun VerifySession(session: RemoteCtrlSession, rc: RemoteCtrlInfo?, sessCode: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
AppBarTitle(stringResource(MR.strings.verify_connection))
SectionView(stringResource(MR.strings.connected_to_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.connected_to_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
CtrlDeviceNameText(session, rc)
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
CtrlDeviceVersionText(session)
}
SectionSpacer()
SectionDividerSpaced()
SectionView(stringResource(MR.strings.verify_code_with_desktop).uppercase()) {
SectionView(stringResource(MR.strings.verify_code_with_desktop)) {
SessionCodeText(sessCode)
}
SectionSpacer()
SectionDividerSpaced()
SectionItemView({ verifyDesktopSessionCode(remoteCtrls, sessCode) }) {
Icon(painterResource(MR.images.ic_check), generalGetString(MR.strings.confirm_verb), tint = MaterialTheme.colors.secondary)
@@ -311,20 +310,20 @@ private fun CtrlDeviceVersionText(session: RemoteCtrlSession) {
@Composable
private fun ActiveSession(session: RemoteCtrlSession, rc: RemoteCtrlInfo, close: () -> Unit) {
AppBarTitle(stringResource(MR.strings.connected_to_desktop))
SectionView(stringResource(MR.strings.connected_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.connected_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Text(rc.deviceViewName)
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
CtrlDeviceVersionText(session)
}
if (session.sessionCode != null) {
SectionSpacer()
SectionView(stringResource(MR.strings.session_code).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.session_code)) {
SessionCodeText(session.sessionCode!!)
}
}
SectionSpacer()
SectionDividerSpaced()
SectionView {
DisconnectButton { disconnectDesktop(close) }
@@ -355,7 +354,7 @@ private fun DevicesView(deviceName: String, remoteCtrls: SnapshotStateList<Remot
@Composable
private fun ScanDesktopAddressView(sessionAddress: MutableState<String>) {
SectionView(stringResource(MR.strings.scan_qr_code_from_desktop).uppercase()) {
SectionView(stringResource(MR.strings.scan_qr_code_from_desktop)) {
QRCodeScanner { text ->
sessionAddress.value = text
connectDesktopAddress(sessionAddress, text)
@@ -366,7 +365,7 @@ private fun ScanDesktopAddressView(sessionAddress: MutableState<String>) {
@Composable
private fun DesktopAddressView(sessionAddress: MutableState<String>) {
val clipboard = LocalClipboardManager.current
SectionView(stringResource(MR.strings.desktop_address).uppercase()) {
SectionView(stringResource(MR.strings.desktop_address)) {
if (sessionAddress.value.isEmpty()) {
SettingsActionItem(
painterResource(MR.images.ic_content_paste),
@@ -410,7 +409,7 @@ private fun DesktopAddressView(sessionAddress: MutableState<String>) {
private fun LinkedDesktopsView(remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
ColumnWithScrollBar {
AppBarTitle(stringResource(MR.strings.linked_desktops))
SectionView(stringResource(MR.strings.desktop_devices).uppercase()) {
SectionView(stringResource(MR.strings.desktop_devices)) {
remoteCtrls.forEach { rc ->
val showMenu = rememberSaveable { mutableStateOf(false) }
SectionItemViewLongClickable(click = {}, longClick = { showMenu.value = true }) {
@@ -427,7 +426,7 @@ private fun LinkedDesktopsView(remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.linked_desktop_options).uppercase()) {
SectionView(stringResource(MR.strings.linked_desktop_options)) {
PreferenceToggle(stringResource(MR.strings.verify_connections), checked = remember { controller.appPrefs.confirmRemoteSessions.state }.value) {
controller.appPrefs.confirmRemoteSessions.set(it)
}
@@ -92,7 +92,7 @@ fun ConnectMobileLayout(
) {
ColumnWithScrollBar {
AppBarTitle(stringResource(if (remember { chatModel.remoteHosts }.isEmpty()) MR.strings.link_a_mobile else MR.strings.linked_mobiles))
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
SectionView(generalGetString(MR.strings.this_device_name)) {
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { controller.appPrefs.offerRemoteMulticast.state }.value) {
@@ -100,7 +100,7 @@ fun ConnectMobileLayout(
}
SectionDividerSpaced()
}
SectionView(stringResource(MR.strings.devices).uppercase()) {
SectionView(stringResource(MR.strings.devices)) {
if (chatModel.localUserCreated.value == true) {
SettingsActionItemWithContent(text = stringResource(MR.strings.this_device), icon = painterResource(MR.images.ic_desktop), click = connectDesktop) {
if (connectedHost.value == null) {
@@ -215,7 +215,7 @@ private fun ConnectMobileViewLayout(
Spacer(Modifier.height(DEFAULT_PADDING))
}
if (deviceName != null || sessionCode != null) {
SectionView(stringResource(MR.strings.connected_mobile).uppercase()) {
SectionView(stringResource(MR.strings.connected_mobile)) {
SelectionContainer {
Text(
deviceName ?: stringResource(MR.strings.new_mobile_device),
@@ -228,7 +228,7 @@ private fun ConnectMobileViewLayout(
}
if (sessionCode != null) {
SectionView(stringResource(MR.strings.verify_code_on_mobile).uppercase()) {
SectionView(stringResource(MR.strings.verify_code_on_mobile)) {
SelectionContainer {
Text(
sessionCode.substring(0, 23),
@@ -1,11 +1,13 @@
package chat.simplex.common.views.usersettings
import CARD_PADDING
import LocalCardScreen
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import itemHPadding
import SectionItemViewSpaceBetween
import SectionItemViewWithoutMinPadding
import SectionSpacer
import SectionView
import androidx.compose.foundation.*
import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -58,9 +60,9 @@ expect fun AppearanceView(m: ChatModel)
object AppearanceScope {
@Composable
fun ProfileImageSection() {
SectionView(stringResource(MR.strings.settings_section_title_profile_images).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
SectionView(stringResource(MR.strings.settings_section_title_profile_images), contentPadding = PaddingValues(horizontal = CARD_PADDING)) {
val image = remember { chatModel.currentUser }.value?.image
Row(Modifier.padding(top = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically) {
Row(Modifier.padding(vertical = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically) {
val size = 60
Box(Modifier.offset(x = -(size / 12).dp)) {
if (!image.isNullOrEmpty()) {
@@ -91,9 +93,10 @@ object AppearanceScope {
@Composable
fun AppToolbarsSection() {
BoxWithConstraints {
SectionView(stringResource(MR.strings.appearance_app_toolbars).uppercase()) {
SectionView(stringResource(MR.strings.appearance_app_toolbars)) {
SectionItemViewWithoutMinPadding {
Box(Modifier.weight(1f)) {
var fontScale by remember { mutableStateOf(1f) }
Text(
stringResource(MR.strings.appearance_in_app_bars_alpha),
Modifier.clickable(
@@ -102,7 +105,9 @@ object AppearanceScope {
) {
appPrefs.inAppBarsAlpha.set(appPrefs.inAppBarsDefaultAlpha)
},
maxLines = 1
maxLines = 1,
fontSize = MaterialTheme.typography.body1.fontSize * fontScale,
onTextLayout = { if (it.hasVisualOverflow && fontScale > 0.5f) fontScale -= 0.05f }
)
}
Spacer(Modifier.padding(end = 10.dp))
@@ -175,7 +180,7 @@ object AppearanceScope {
@Composable
fun MessageShapeSection() {
BoxWithConstraints {
SectionView(stringResource(MR.strings.settings_section_title_message_shape).uppercase()) {
SectionView(stringResource(MR.strings.settings_section_title_message_shape)) {
SectionItemViewWithoutMinPadding {
Text(stringResource(MR.strings.settings_message_shape_corner), Modifier.weight(1f))
Spacer(Modifier.width(10.dp))
@@ -205,8 +210,8 @@ object AppearanceScope {
@Composable
fun FontScaleSection() {
val localFontScale = remember { mutableStateOf(appPrefs.fontScale.get()) }
SectionView(stringResource(MR.strings.appearance_font_size).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Row(Modifier.padding(top = 10.dp), verticalAlignment = Alignment.CenterVertically) {
SectionView(stringResource(MR.strings.appearance_font_size), contentPadding = PaddingValues(horizontal = CARD_PADDING)) {
Row(Modifier.padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically) {
Box(Modifier.size(50.dp)
.background(MaterialTheme.colors.surface, RoundedCornerShape(percent = 22))
.clip(RoundedCornerShape(percent = 22))
@@ -409,26 +414,29 @@ object AppearanceScope {
}
if (appPlatform.isDesktop) {
val itemWidth = (DEFAULT_START_MODAL_WIDTH * fontSizeSqrtMultiplier - DEFAULT_PADDING * 2 - DEFAULT_PADDING_HALF * 3) / 4
val itemHeight = (DEFAULT_START_MODAL_WIDTH * fontSizeSqrtMultiplier - DEFAULT_PADDING * 2) / 4
val gridPadding = 12.dp
val cardPadding = if (LocalCardScreen.current) CARD_PADDING * 2 else 0.dp
val itemSize = (DEFAULT_START_MODAL_WIDTH * fontSizeSqrtMultiplier - cardPadding - gridPadding * 5) / 4
val rows = ceil((PresetWallpaper.entries.size + 2) / 4f).roundToInt()
LazyVerticalGrid(
columns = GridCells.Fixed(4),
Modifier.height(itemHeight * rows + DEFAULT_PADDING_HALF * (rows - 1) + DEFAULT_PADDING * 2),
contentPadding = PaddingValues(DEFAULT_PADDING),
verticalArrangement = Arrangement.spacedBy(DEFAULT_PADDING_HALF),
horizontalArrangement = Arrangement.spacedBy(DEFAULT_PADDING_HALF),
Modifier.height(itemSize * rows + gridPadding * (rows + 1)),
contentPadding = PaddingValues(gridPadding),
verticalArrangement = Arrangement.spacedBy(gridPadding),
horizontalArrangement = Arrangement.spacedBy(gridPadding),
) {
gridContent(itemWidth, itemHeight)
gridContent(itemSize, itemSize)
}
} else {
LazyHorizontalGrid(
val gridPadding = 14.dp
val itemSize = 81.dp
LazyHorizontalGrid(
rows = GridCells.Fixed(1),
Modifier.height(80.dp + DEFAULT_PADDING * 2),
contentPadding = PaddingValues(DEFAULT_PADDING),
horizontalArrangement = Arrangement.spacedBy(DEFAULT_PADDING_HALF),
Modifier.height(itemSize + gridPadding * 2),
contentPadding = PaddingValues(gridPadding),
horizontalArrangement = Arrangement.spacedBy(gridPadding),
) {
gridContent(80.dp, 80.dp)
gridContent(itemSize, itemSize)
}
}
}
@@ -521,9 +529,7 @@ object AppearanceScope {
}
SectionView(stringResource(MR.strings.settings_section_title_themes)) {
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
ThemeDestinationPicker(themeUserDestination)
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
val importWallpaperLauncher = rememberFileChooserLauncher(true) { to: URI? ->
if (to != null) onImport(to)
@@ -555,7 +561,7 @@ object AppearanceScope {
color = if (chatModel.remoteHostId != null && themeUserDestination.value != null) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
)
}
SectionSpacer()
SectionDividerSpaced()
}
val state: State<DefaultThemeMode?> = remember(appPrefs.currentTheme.get()) {
@@ -584,23 +590,23 @@ object AppearanceScope {
}
saveThemeToDatabase(null)
}
}
SectionItemView(click = {
val user = themeUserDestination.value
if (user == null) {
ModalManager.start.showModal {
val importWallpaperLauncher = rememberFileChooserLauncher(true) { to: URI? ->
if (to != null) onImport(to)
SectionItemView(click = {
val user = themeUserDestination.value
if (user == null) {
ModalManager.start.showModal(cardScreen = true) {
val importWallpaperLauncher = rememberFileChooserLauncher(true) { to: URI? ->
if (to != null) onImport(to)
}
CustomizeThemeView { onChooseType(it, importWallpaperLauncher) }
}
} else {
ModalManager.start.showModalCloseable(cardScreen = true) { close ->
UserWallpaperEditorModal(chatModel.remoteHostId(), user.first, close)
}
CustomizeThemeView { onChooseType(it, importWallpaperLauncher) }
}
} else {
ModalManager.start.showModalCloseable { close ->
UserWallpaperEditorModal(chatModel.remoteHostId(), user.first, close)
}
}) {
Text(stringResource(MR.strings.customize_theme_title))
}
}) {
Text(stringResource(MR.strings.customize_theme_title))
}
}
@@ -626,68 +632,70 @@ object AppearanceScope {
)
}
WallpaperPresetSelector(
selectedWallpaper = wallpaperType,
baseTheme = currentTheme.base,
currentColors = { type ->
ThemeManager.currentColors(type, null, null, appPrefs.themeOverrides.get())
},
onChooseType = onChooseType
)
val type = MaterialTheme.wallpaper.type
if (type is WallpaperType.Image) {
SectionItemView(disabled = chatModel.remoteHostId != null, click = {
val defaultActiveTheme = ThemeManager.defaultActiveTheme(appPrefs.themeOverrides.get())
ThemeManager.saveAndApplyWallpaper(baseTheme, null)
ThemeManager.removeTheme(defaultActiveTheme?.themeId)
removeWallpaperFile(type.filename)
saveThemeToDatabase(null)
}) {
Text(
stringResource(MR.strings.theme_remove_image),
color = if (chatModel.remoteHostId == null) MaterialTheme.colors.primary else MaterialTheme.colors.secondary
)
}
SectionSpacer()
}
SectionView(stringResource(MR.strings.settings_section_title_chat_colors).uppercase()) {
WallpaperSetupView(
wallpaperType,
baseTheme,
MaterialTheme.wallpaper,
MaterialTheme.appColors.sentMessage,
MaterialTheme.appColors.sentQuote,
MaterialTheme.appColors.receivedMessage,
MaterialTheme.appColors.receivedQuote,
editColor = { name ->
editColor(name)
},
onTypeChange = { type ->
ThemeManager.saveAndApplyWallpaper(baseTheme, type)
saveThemeToDatabase(null)
SectionView {
WallpaperPresetSelector(
selectedWallpaper = wallpaperType,
baseTheme = currentTheme.base,
currentColors = { type ->
ThemeManager.currentColors(type, null, null, appPrefs.themeOverrides.get())
},
onChooseType = onChooseType
)
val type = MaterialTheme.wallpaper.type
if (type is WallpaperType.Image) {
SectionItemView(disabled = chatModel.remoteHostId != null, click = {
val defaultActiveTheme = ThemeManager.defaultActiveTheme(appPrefs.themeOverrides.get())
ThemeManager.saveAndApplyWallpaper(baseTheme, null)
ThemeManager.removeTheme(defaultActiveTheme?.themeId)
removeWallpaperFile(type.filename)
saveThemeToDatabase(null)
}) {
Text(
stringResource(MR.strings.theme_remove_image),
color = if (chatModel.remoteHostId == null) MaterialTheme.colors.primary else MaterialTheme.colors.secondary
)
}
}
}
SectionDividerSpaced()
WallpaperSetupView(
wallpaperType,
baseTheme,
MaterialTheme.wallpaper,
MaterialTheme.appColors.sentMessage,
MaterialTheme.appColors.sentQuote,
MaterialTheme.appColors.receivedMessage,
MaterialTheme.appColors.receivedQuote,
editColor = { name ->
editColor(name)
},
onTypeChange = { type ->
ThemeManager.saveAndApplyWallpaper(baseTheme, type)
saveThemeToDatabase(null)
},
firstSectionTitle = stringResource(MR.strings.settings_section_title_chat_colors),
)
SectionDividerSpaced()
CustomizeThemeColorsSection(currentTheme) { name ->
editColor(name)
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
val currentOverrides = remember(currentTheme) { ThemeManager.defaultActiveTheme(appPrefs.themeOverrides.get()) }
val canResetColors = currentTheme.base.hasChangedAnyColor(currentOverrides)
if (canResetColors) {
SectionItemView({
ThemeManager.resetAllThemeColors()
saveThemeToDatabase(null)
}) {
Text(generalGetString(MR.strings.reset_color), color = colors.primary)
SectionView {
SectionItemView({
ThemeManager.resetAllThemeColors()
saveThemeToDatabase(null)
}) {
Text(generalGetString(MR.strings.reset_color), color = colors.primary)
}
}
SectionSpacer()
SectionDividerSpaced()
}
SectionView {
@@ -1007,7 +1015,7 @@ object AppearanceScope {
SimpleXThemeOverride(currentColors()) {
ChatThemePreview(theme, wallpaperImage, wallpaperType, previewBackgroundColor, previewTintColor)
}
SectionSpacer()
SectionDividerSpaced()
}
var currentColor by remember { mutableStateOf(initialColor) }
@@ -1084,7 +1092,7 @@ object AppearanceScope {
}) {
Text(generalGetString(MR.strings.reset_single_color), color = colors.primary)
}
SectionSpacer()
SectionDividerSpaced()
}
}
@@ -1188,75 +1196,82 @@ fun WallpaperSetupView(
initialReceivedQuoteColor: Color,
editColor: (ThemeColor) -> Unit,
onTypeChange: (WallpaperType?) -> Unit,
firstSectionTitle: String? = null,
) {
if (wallpaperType is WallpaperType.Image) {
val state = remember(wallpaperType.scaleType, initialWallpaper?.type) { mutableStateOf(wallpaperType.scaleType ?: (initialWallpaper?.type as? WallpaperType.Image)?.scaleType ?: WallpaperScaleType.FILL) }
val values = remember {
WallpaperScaleType.entries.map { it to generalGetString(it.text) }
}
ExposedDropDownSettingRow(
stringResource(MR.strings.wallpaper_scale),
values,
state,
onSelected = { scaleType ->
onTypeChange(wallpaperType.copy(scaleType = scaleType))
}
)
}
val hasWallpaperSettings = wallpaperType is WallpaperType.Preset || wallpaperType is WallpaperType.Image
if (wallpaperType is WallpaperType.Preset || (wallpaperType is WallpaperType.Image && wallpaperType.scaleType == WallpaperScaleType.REPEAT)) {
val state = remember(wallpaperType, initialWallpaper?.type?.scale) { mutableStateOf(wallpaperType.scale ?: initialWallpaper?.type?.scale ?: 1f) }
Row(Modifier.padding(horizontal = DEFAULT_PADDING), verticalAlignment = Alignment.CenterVertically) {
Text("${state.value}".substring(0, min("${state.value}".length, 4)), Modifier.width(50.dp))
Slider(
state.value,
valueRange = 0.5f..2f,
onValueChange = {
if (wallpaperType is WallpaperType.Preset) {
onTypeChange(wallpaperType.copy(scale = it))
} else if (wallpaperType is WallpaperType.Image) {
onTypeChange(wallpaperType.copy(scale = it))
}
if (hasWallpaperSettings) {
SectionView(firstSectionTitle) {
if (wallpaperType is WallpaperType.Image) {
val state = remember(wallpaperType.scaleType, initialWallpaper?.type) { mutableStateOf(wallpaperType.scaleType ?: (initialWallpaper?.type as? WallpaperType.Image)?.scaleType ?: WallpaperScaleType.FILL) }
val values = remember {
WallpaperScaleType.entries.map { it to generalGetString(it.text) }
}
)
ExposedDropDownSettingRow(
stringResource(MR.strings.wallpaper_scale),
values,
state,
onSelected = { scaleType ->
onTypeChange(wallpaperType.copy(scaleType = scaleType))
}
)
}
if (wallpaperType is WallpaperType.Preset || (wallpaperType is WallpaperType.Image && wallpaperType.scaleType == WallpaperScaleType.REPEAT)) {
val state = remember(wallpaperType, initialWallpaper?.type?.scale) { mutableStateOf(wallpaperType.scale ?: initialWallpaper?.type?.scale ?: 1f) }
Row(Modifier.padding(horizontal = DEFAULT_PADDING), verticalAlignment = Alignment.CenterVertically) {
Text("${state.value}".substring(0, min("${state.value}".length, 4)), Modifier.width(50.dp))
Slider(
state.value,
valueRange = 0.5f..2f,
onValueChange = {
if (wallpaperType is WallpaperType.Preset) {
onTypeChange(wallpaperType.copy(scale = it))
} else if (wallpaperType is WallpaperType.Image) {
onTypeChange(wallpaperType.copy(scale = it))
}
}
)
}
}
val wallpaperBackgroundColor = initialWallpaper?.background ?: wallpaperType.defaultBackgroundColor(theme, MaterialTheme.colors.background)
SectionItemViewSpaceBetween({ editColor(ThemeColor.WALLPAPER_BACKGROUND) }) {
val title = generalGetString(MR.strings.color_wallpaper_background)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = wallpaperBackgroundColor)
}
val wallpaperTintColor = initialWallpaper?.tint ?: wallpaperType.defaultTintColor(theme)
SectionItemViewSpaceBetween({ editColor(ThemeColor.WALLPAPER_TINT) }) {
val title = generalGetString(MR.strings.color_wallpaper_tint)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = wallpaperTintColor)
}
}
SectionDividerSpaced()
}
if (wallpaperType is WallpaperType.Preset || wallpaperType is WallpaperType.Image) {
val wallpaperBackgroundColor = initialWallpaper?.background ?: wallpaperType.defaultBackgroundColor(theme, MaterialTheme.colors.background)
SectionItemViewSpaceBetween({ editColor(ThemeColor.WALLPAPER_BACKGROUND) }) {
val title = generalGetString(MR.strings.color_wallpaper_background)
SectionView(if (!hasWallpaperSettings) firstSectionTitle else null) {
SectionItemViewSpaceBetween({ editColor(ThemeColor.SENT_MESSAGE) }) {
val title = generalGetString(MR.strings.color_sent_message)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = wallpaperBackgroundColor)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialSentColor)
}
val wallpaperTintColor = initialWallpaper?.tint ?: wallpaperType.defaultTintColor(theme)
SectionItemViewSpaceBetween({ editColor(ThemeColor.WALLPAPER_TINT) }) {
val title = generalGetString(MR.strings.color_wallpaper_tint)
SectionItemViewSpaceBetween({ editColor(ThemeColor.SENT_QUOTE) }) {
val title = generalGetString(MR.strings.color_sent_quote)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = wallpaperTintColor)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialSentQuoteColor)
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.RECEIVED_MESSAGE) }) {
val title = generalGetString(MR.strings.color_received_message)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialReceivedColor)
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.RECEIVED_QUOTE) }) {
val title = generalGetString(MR.strings.color_received_quote)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialReceivedQuoteColor)
}
SectionSpacer()
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.SENT_MESSAGE) }) {
val title = generalGetString(MR.strings.color_sent_message)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialSentColor)
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.SENT_QUOTE) }) {
val title = generalGetString(MR.strings.color_sent_quote)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialSentQuoteColor)
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.RECEIVED_MESSAGE) }) {
val title = generalGetString(MR.strings.color_received_message)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialReceivedColor)
}
SectionItemViewSpaceBetween({ editColor(ThemeColor.RECEIVED_QUOTE) }) {
val title = generalGetString(MR.strings.color_received_quote)
Text(title)
Icon(painterResource(MR.images.ic_circle_filled), title, tint = initialReceivedQuoteColor)
}
}
@@ -4,9 +4,12 @@ import SectionBottomSpacer
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.foundation.background
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.ui.theme.*
import chat.simplex.common.platform.*
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
@@ -29,14 +32,14 @@ fun DeveloperView(withAuth: (title: String, desc: String, block: () -> Unit) ->
ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential)) { ModalManager.start.showModalCloseable { TerminalView(false) } } }
ResetHintsItem(unchangedHints)
SettingsPreferenceItem(painterResource(MR.images.ic_code), stringResource(MR.strings.show_developer_options), developerTools)
SectionTextFooter(
generalGetString(if (devTools.value) MR.strings.show_dev_options else MR.strings.hide_dev_options) + " " +
generalGetString(MR.strings.developer_options)
)
}
SectionTextFooter(
generalGetString(if (devTools.value) MR.strings.show_dev_options else MR.strings.hide_dev_options) + " " +
generalGetString(MR.strings.developer_options)
)
if (devTools.value) {
SectionDividerSpaced(maxTopPadding = true)
SectionView(stringResource(MR.strings.developer_options_section).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.developer_options_section)) {
SettingsActionItemWithContent(painterResource(MR.images.ic_breaking_news), stringResource(MR.strings.debug_logs)) {
DefaultSwitch(
checked = remember { appPrefs.logLevel.state }.value <= LogLevel.DEBUG,
@@ -59,15 +62,15 @@ fun DeveloperView(withAuth: (title: String, desc: String, block: () -> Unit) ->
SettingsPreferenceItem(painterResource(MR.images.ic_avg_pace), stringResource(MR.strings.show_slow_api_calls), appPreferences.showSlowApiCalls)
}
}
SectionDividerSpaced(maxTopPadding = true)
SectionView(stringResource(MR.strings.deprecated_options_section).uppercase()) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.deprecated_options_section)) {
val simplexLinkMode = chatModel.controller.appPrefs.simplexLinkMode
SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = {
simplexLinkMode.set(it)
chatModel.simplexLinkMode.value = it
})
SectionBottomSpacer()
}
SectionBottomSpacer()
}
}
@@ -68,7 +68,7 @@ private fun HiddenProfileLayout(
val passwordValid by remember { derivedStateOf { hidePassword.value == hidePassword.value.trim() } }
val confirmValid by remember { derivedStateOf { confirmHidePassword.value == "" || hidePassword.value == confirmHidePassword.value } }
val saveDisabled by remember { derivedStateOf { hidePassword.value == "" || !passwordValid || confirmHidePassword.value == "" || !confirmValid } }
SectionView(stringResource(MR.strings.hidden_profile_password).uppercase()) {
SectionView(stringResource(MR.strings.hidden_profile_password)) {
SectionItemViewWithoutMinPadding {
PassphraseField(hidePassword, generalGetString(MR.strings.password_to_show), isValid = { passwordValid }, showStrength = true)
}
@@ -4,8 +4,11 @@ import SectionBottomSpacer
import SectionTextFooter
import SectionView
import SectionViewSelectable
import androidx.compose.foundation.background
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import chat.simplex.common.ui.theme.*
import androidx.compose.ui.text.AnnotatedString
import dev.icerock.moko.resources.compose.stringResource
import androidx.compose.ui.text.capitalize
@@ -74,9 +77,9 @@ fun NotificationsSettingsLayout(
color = MaterialTheme.colors.secondary
)
}
if (platform.androidIsXiaomiDevice() && (notificationsMode.value == NotificationsMode.PERIODIC || notificationsMode.value == NotificationsMode.SERVICE)) {
SectionTextFooter(annotatedStringResource(MR.strings.xiaomi_ignore_battery_optimization))
}
}
if (platform.androidIsXiaomiDevice() && (notificationsMode.value == NotificationsMode.PERIODIC || notificationsMode.value == NotificationsMode.SERVICE)) {
SectionTextFooter(annotatedStringResource(MR.strings.xiaomi_ignore_battery_optimization))
}
SectionBottomSpacer()
}
@@ -1,13 +1,15 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme
import androidx.compose.ui.Modifier
import chat.simplex.common.ui.theme.*
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
@@ -47,6 +49,7 @@ fun PreferencesView(m: ChatModel, user: User, close: () -> Unit,) {
if (preferences == currentPreferences) close()
else showUnsavedChangesAlert({ savePrefs(close) }, close)
},
cardScreen = true,
) {
PreferencesLayout(
preferences,
@@ -81,27 +84,27 @@ private fun PreferencesLayout(
onTTLUpdated = onTTLUpdated
)
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
val allowFullDeletion = remember(preferences) { mutableStateOf(preferences.fullDelete.allow) }
FeatureSection(ChatFeature.FullDelete, allowFullDeletion) {
applyPrefs(preferences.copy(fullDelete = SimpleChatPreference(allow = it)))
}
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
val allowReactions = remember(preferences) { mutableStateOf(preferences.reactions.allow) }
FeatureSection(ChatFeature.Reactions, allowReactions) {
applyPrefs(preferences.copy(reactions = SimpleChatPreference(allow = it)))
}
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
val allowVoice = remember(preferences) { mutableStateOf(preferences.voice.allow) }
FeatureSection(ChatFeature.Voice, allowVoice) {
applyPrefs(preferences.copy(voice = SimpleChatPreference(allow = it)))
}
SectionDividerSpaced(true, maxBottomPadding = false)
SectionDividerSpaced()
val allowCalls = remember(preferences) { mutableStateOf(preferences.calls.allow) }
FeatureSection(ChatFeature.Calls, allowCalls) {
applyPrefs(preferences.copy(calls = SimpleChatPreference(allow = it)))
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
ResetSaveButtons(
reset = reset,
save = savePrefs,
@@ -1,10 +1,11 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import SectionItemView
import SectionDividerSpaced
import SectionTextFooter
import SectionView
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
@@ -171,7 +172,7 @@ fun PrivacySettingsView(
}
if (!chatModel.desktopNoUserNoRemote) {
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
ContacRequestsFromGroupsSection(
currentUser = currentUser,
setAutoAcceptGrpDirectInvs = { enable ->
@@ -179,7 +180,7 @@ fun PrivacySettingsView(
}
)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
DeliveryReceiptsSection(
currentUser = currentUser,
setOrAskSendReceiptsContacts = { enable ->
@@ -619,7 +620,7 @@ fun SimplexLockView(
}
if (performLA.value && laMode.value == LAMode.PASSCODE) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.self_destruct_passcode).uppercase()) {
SectionView(stringResource(MR.strings.self_destruct_passcode)) {
val openInfo = {
ModalManager.start.showModal {
SelfDestructInfoView()
@@ -1,8 +1,9 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import itemHPadding
import SectionItemView
import SectionDividerSpaced
import SectionView
import TextIconSpaced
import androidx.compose.desktop.ui.tooling.preview.Preview
@@ -46,12 +47,13 @@ fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, close: (
user?.displayName,
setPerformLA = setPerformLA,
showModal = { modalView -> { ModalManager.start.showModal { modalView(chatModel) } } },
showSettingsModal = { modalView -> { ModalManager.start.showModal(true) { modalView(chatModel) } } },
showSettingsModal = { modalView -> { ModalManager.start.showModal(settings = true, cardScreen = true) { modalView(chatModel) } } },
showSettingsModalWithSearch = { modalView ->
ModalManager.start.showCustomModal { close ->
val search = rememberSaveable { mutableStateOf("") }
ModalView(
{ close() },
cardScreen = true,
showSearch = true,
searchAlwaysVisible = true,
onSearchValueChanged = { search.value = it },
@@ -348,9 +350,9 @@ fun SettingsActionItemWithContent(icon: Painter?, text: String? = null, click: (
click,
extraPadding = extraPadding,
padding = if (extraPadding && icon != null)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING)
PaddingValues(start = DEFAULT_PADDING * 1.7f, end = itemHPadding)
else
PaddingValues(horizontal = DEFAULT_PADDING),
PaddingValues(horizontal = itemHPadding),
disabled = disabled
) {
if (icon != null) {
@@ -8,6 +8,7 @@ import SectionView
import SectionViewWithButton
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.ui.layout.ContentScale
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -171,7 +172,7 @@ fun UserAddressView(
)
}
ModalView(close = close) {
ModalView(close = close, cardScreen = true) {
showLayout()
}
@@ -301,16 +302,16 @@ private fun UserAddressLayout(
) {
if (userAddress == null) {
if (!onboarding) {
SectionView(generalGetString(MR.strings.for_social_media).uppercase()) {
SectionView(generalGetString(MR.strings.for_social_media)) {
CreateAddressButton(createAddress)
}
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.or_to_share_privately).uppercase()) {
SectionView(generalGetString(MR.strings.or_to_share_privately)) {
CreateOneTimeLinkButton()
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
LearnMoreButton(learnMore)
}
@@ -336,7 +337,7 @@ private fun UserAddressLayout(
val savedAddressSettingsState = remember { mutableStateOf(addressSettingsState.value) }
SectionViewWithButton(
stringResource(MR.strings.for_social_media).uppercase(),
stringResource(MR.strings.for_social_media),
titleButton = if (userAddress.connLinkContact.connShortLink != null) {{ ToggleShortLinkButton(showShortLink) }} else null
) {
SimpleXCreatedLinkQRCode(userAddress.connLinkContact, short = showShortLink.value)
@@ -353,26 +354,25 @@ private fun UserAddressLayout(
// ShareViaEmailButton { sendEmail(userAddress) }
BusinessAddressToggle(addressSettingsState) { saveAddressSettings(addressSettingsState.value, savedAddressSettingsState) }
AddressSettingsButton(user, userAddress, shareViaProfile, setProfileAddress, saveAddressSettings)
if (addressSettingsState.value.businessAddress) {
SectionTextFooter(stringResource(MR.strings.add_your_team_members_to_conversations))
}
}
if (addressSettingsState.value.businessAddress) {
SectionTextFooter(stringResource(MR.strings.add_your_team_members_to_conversations))
}
SectionDividerSpaced(maxTopPadding = addressSettingsState.value.businessAddress)
SectionView(generalGetString(MR.strings.or_to_share_privately).uppercase()) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.or_to_share_privately)) {
CreateOneTimeLinkButton()
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
LearnMoreButton(learnMore)
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
DeleteAddressButton(deleteAddress)
SectionTextFooter(stringResource(MR.strings.your_contacts_will_remain_connected))
}
SectionTextFooter(stringResource(MR.strings.your_contacts_will_remain_connected))
}
}
}
@@ -495,7 +495,7 @@ private fun ModalData.UserAddressSettings(
}
}
ModalView(close = { onClose(close) }) {
ModalView(close = { onClose(close) }, cardScreen = true) {
ColumnWithScrollBar {
AppBarTitle(stringResource(MR.strings.address_settings), hostDevice(user?.remoteHostId))
Column(
@@ -512,10 +512,10 @@ private fun ModalData.UserAddressSettings(
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.address_welcome_message).uppercase()) {
SectionView(stringResource(MR.strings.address_welcome_message)) {
AutoReplyEditor(addressSettingsState)
}
SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false)
SectionDividerSpaced()
saveAddressSettingsButton(addressSettingsState.value == savedAddressSettingsState.value) {
saveAddressSettings(addressSettingsState.value, savedAddressSettingsState)
@@ -1,7 +1,6 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDivider
import SectionItemView
import SectionItemViewSpaceBetween
import SectionItemViewWithoutMinPadding
@@ -177,7 +176,7 @@ private fun UserProfilesLayout(
SectionView {
for (user in filteredUsers) {
UserView(user, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile)
SectionDivider()
Divider(Modifier.padding(horizontal = 8.dp))
}
if (searchTextOrPassword.value.trim().isEmpty()) {
SectionItemView(addUser, minHeight = 68.dp) {
@@ -8,6 +8,7 @@ import SectionTextFooter
import SectionView
import SectionViewSelectableCards
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
@@ -158,6 +159,7 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
}, close)
}
},
cardScreen = true,
) {
AdvancedNetworkSettingsLayout(
currentRemoteHost = currentRemoteHost,
@@ -234,13 +236,13 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
SettingsPreferenceItem(painterResource(MR.images.ic_arrow_forward), stringResource(MR.strings.private_routing_show_message_status), chatModel.controller.appPrefs.showSentViaProxy)
}
SectionTextFooter(stringResource(MR.strings.private_routing_explanation))
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
SectionView(stringResource(MR.strings.network_session_mode_transport_isolation).uppercase()) {
SectionView(stringResource(MR.strings.network_session_mode_transport_isolation)) {
SessionModePicker(sessionMode, showModal, updateSessionMode)
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.network_smp_web_port_section_title).uppercase()) {
SectionView(stringResource(MR.strings.network_smp_web_port_section_title)) {
ExposedDropDownSettingRow(
stringResource(MR.strings.network_smp_web_port_toggle),
SMPWebPortServers.entries.map { it to stringResource(it.text) },
@@ -251,9 +253,9 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
if (smpWebPortServers.value == SMPWebPortServers.Preset) stringResource(MR.strings.network_smp_web_port_preset_footer)
else String.format(stringResource(MR.strings.network_smp_web_port_footer), if (smpWebPortServers.value == SMPWebPortServers.All) "443" else "5223")
)
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
SectionView(stringResource(MR.strings.network_option_tcp_connection).uppercase()) {
SectionView(stringResource(MR.strings.network_option_tcp_connection)) {
SectionItemView {
TimeoutSettingRow(
stringResource(MR.strings.network_option_tcp_connection_timeout), networkTCPConnectTimeoutInteractive,
@@ -330,7 +332,7 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
}
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
SectionItemView(reset, disabled = resetDisabled) {
@@ -149,7 +149,8 @@ fun ChatRelayView(
text = generalGetString(MR.strings.check_relay_address)
)
}
}
},
cardScreen = true,
) {
ChatRelayLayout(
relayToEdit,
@@ -182,7 +183,7 @@ private fun ChatRelayLayout(
@Composable
private fun PresetRelay(relay: MutableState<UserChatRelay>, testing: MutableState<Boolean>) {
SectionView(stringResource(MR.strings.preset_relay_address).uppercase()) {
SectionView(stringResource(MR.strings.preset_relay_address)) {
SelectionContainer {
Text(
relay.value.address,
@@ -192,7 +193,7 @@ private fun PresetRelay(relay: MutableState<UserChatRelay>, testing: MutableStat
}
}
SectionDividerSpaced()
SectionView(stringResource(MR.strings.preset_relay_name).uppercase()) {
SectionView(stringResource(MR.strings.preset_relay_name)) {
SectionItemView {
Text(relay.value.displayName)
}
@@ -291,7 +292,7 @@ private fun UseRelaySection(
testing: MutableState<Boolean>
) {
val scope = rememberCoroutineScope()
SectionView(stringResource(MR.strings.use_relay).uppercase()) {
SectionView(stringResource(MR.strings.use_relay)) {
SectionItemViewSpaceBetween(
click = {
testing.value = true
@@ -377,7 +378,7 @@ fun ModalData.NewChatRelayView(
ModalView(close = {
addChatRelay(relayToEdit.value, userServers, serverErrors, serverWarnings, rhId, close)
}) {
}, cardScreen = true) {
NewChatRelayLayout(relayToEdit)
}
}
@@ -9,6 +9,7 @@ import SectionTextFooter
import SectionView
import SectionViewSelectable
import TextIconSpaced
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.*
@@ -84,7 +85,7 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
onClose(close = { ModalManager.start.closeModals() })
}
}
ModalView(close = { onClose(closeNetworkAndServers) }) {
ModalView(close = { onClose(closeNetworkAndServers) }, cardScreen = true) {
NetworkAndServersLayout(
currentRemoteHost = currentRemoteHost,
networkUseSocksProxy = networkUseSocksProxy,
@@ -210,7 +211,7 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
AppBarTitle(stringResource(MR.strings.network_and_servers))
// TODO: Review this and socks.
if (!chatModel.desktopNoUserNoRemote) {
SectionView(generalGetString(MR.strings.network_preset_servers_title).uppercase()) {
SectionView(generalGetString(MR.strings.network_preset_servers_title)) {
userServers.value.forEachIndexed { index, srv ->
srv.operator?.let { ServerOperatorRow(index, it, currUserServers, userServers, serverErrors, serverWarnings, currentRemoteHost?.remoteHostId) }
}
@@ -262,14 +263,11 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
UseSocksProxySwitch(networkUseSocksProxy, toggleSocksProxy)
SettingsActionItem(painterResource(MR.images.ic_settings_ethernet), stringResource(MR.strings.network_socks_proxy_settings), { showCustomModal { SocksProxySettings(networkUseSocksProxy.value, appPrefs.networkProxy, onionHosts, sessionMode = appPrefs.networkSessionMode.get(), false, it) } })
SettingsActionItem(painterResource(MR.images.ic_cable), stringResource(MR.strings.network_settings), { ModalManager.start.showCustomModal { AdvancedNetworkSettingsView(showModal, it) } })
if (networkUseSocksProxy.value) {
SectionTextFooter(annotatedStringResource(MR.strings.socks_proxy_setting_limitations))
SectionDividerSpaced(maxTopPadding = true)
} else {
SectionDividerSpaced(maxBottomPadding = false)
}
}
}
if (currentRemoteHost == null && networkUseSocksProxy.value) {
SectionTextFooter(annotatedStringResource(MR.strings.socks_proxy_setting_limitations))
}
val saveDisabled = !serversCanBeSaved(currUserServers.value, userServers.value, serverErrors.value)
SectionItemView(
@@ -303,7 +301,7 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
if (appPlatform.isAndroid) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.settings_section_title_network_connection).uppercase()) {
SectionView(generalGetString(MR.strings.settings_section_title_network_connection)) {
val info = remember { chatModel.networkInfo }.value
SettingsActionItemWithContent(icon = null, info.networkType.text) {
Icon(painterResource(MR.images.ic_circle_filled), stringResource(MR.strings.icon_descr_server_status_connected), tint = if (info.online) Color.Green else MaterialTheme.colors.error)
@@ -466,10 +464,11 @@ fun SocksProxySettings(
)
}
},
cardScreen = true,
) {
ColumnWithScrollBar {
AppBarTitle(generalGetString(MR.strings.network_socks_proxy_settings))
SectionView(stringResource(MR.strings.network_socks_proxy).uppercase()) {
SectionView(stringResource(MR.strings.network_socks_proxy)) {
Column(Modifier.padding(horizontal = DEFAULT_PADDING)) {
DefaultConfigurableTextField(
hostUnsaved,
@@ -495,9 +494,9 @@ fun SocksProxySettings(
SectionTextFooter(annotatedStringResource(MR.strings.disable_onion_hosts_when_not_supported))
}
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
SectionView(stringResource(MR.strings.network_proxy_auth).uppercase()) {
SectionView(stringResource(MR.strings.network_proxy_auth)) {
PreferenceToggle(
stringResource(MR.strings.network_proxy_random_credentials),
checked = proxyAuthRandomUnsaved.value,
@@ -526,7 +525,7 @@ fun SocksProxySettings(
SectionTextFooter(proxyAuthFooter(usernameUnsaved.value.text, passwordUnsaved.value.text, proxyAuthModeUnsaved.value, sessionMode))
}
SectionDividerSpaced(maxBottomPadding = false, maxTopPadding = true)
SectionDividerSpaced()
SectionView {
SectionItemView({
@@ -10,6 +10,7 @@ import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.foundation.background
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -181,7 +182,7 @@ fun OperatorViewLayout(
val duplicateHosts = findDuplicateHosts(serverErrors.value)
Column {
SectionView(generalGetString(MR.strings.operator).uppercase()) {
SectionView(generalGetString(MR.strings.operator)) {
SectionItemView({ ModalManager.start.showModalCloseable { _ -> OperatorInfoView(operator) } }) {
Row(
Modifier.fillMaxWidth(),
@@ -238,7 +239,7 @@ fun OperatorViewLayout(
if (userServers.value[operatorIndex].chatRelays.any { !it.deleted }) {
val duplicateRelayAddresses = findDuplicateRelayAddresses(serverErrors.value)
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.chat_relays).uppercase()) {
SectionView(generalGetString(MR.strings.chat_relays)) {
userServers.value[operatorIndex].chatRelays.forEachIndexed { index, relay ->
if (!relay.deleted) {
ChatRelayViewLink(relay, duplicateRelayAddresses) {
@@ -252,7 +253,7 @@ fun OperatorViewLayout(
if (userServers.value[operatorIndex].smpServers.any { !it.deleted }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.operator_use_for_messages).uppercase()) {
SectionView(generalGetString(MR.strings.operator_use_for_messages)) {
SectionItemView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Text(
stringResource(MR.strings.operator_use_for_messages_receiving),
@@ -306,7 +307,7 @@ fun OperatorViewLayout(
// Preset servers can't be deleted
if (userServers.value[operatorIndex].smpServers.any { it.preset }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.message_servers).uppercase()) {
SectionView(generalGetString(MR.strings.message_servers)) {
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
if (!server.preset) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
@@ -340,7 +341,7 @@ fun OperatorViewLayout(
if (userServers.value[operatorIndex].smpServers.any { !it.preset && !it.deleted }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.operator_added_message_servers).uppercase()) {
SectionView(generalGetString(MR.strings.operator_added_message_servers)) {
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
if (server.deleted || server.preset) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
@@ -356,7 +357,7 @@ fun OperatorViewLayout(
if (userServers.value[operatorIndex].xftpServers.any { !it.deleted }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.operator_use_for_files).uppercase()) {
SectionView(generalGetString(MR.strings.operator_use_for_files)) {
SectionItemView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Text(
stringResource(MR.strings.operator_use_for_sending),
@@ -389,7 +390,7 @@ fun OperatorViewLayout(
// Preset servers can't be deleted
if (userServers.value[operatorIndex].xftpServers.any { it.preset }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.media_and_file_servers).uppercase()) {
SectionView(generalGetString(MR.strings.media_and_file_servers)) {
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
if (!server.preset) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
@@ -423,7 +424,7 @@ fun OperatorViewLayout(
if (userServers.value[operatorIndex].xftpServers.any { !it.preset && !it.deleted}) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.operator_added_xftp_servers).uppercase()) {
SectionView(generalGetString(MR.strings.operator_added_xftp_servers)) {
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
if (server.deleted || server.preset) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
@@ -490,7 +491,7 @@ fun OperatorInfoView(serverOperator: ServerOperator) {
}
}
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
val uriHandler = LocalUriHandler.current
SectionView {
@@ -507,7 +508,7 @@ fun OperatorInfoView(serverOperator: ServerOperator) {
val selfhost = serverOperator.info.selfhost
if (selfhost != null) {
SectionDividerSpaced(maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
SectionItemView {
val (text, link) = selfhost
@@ -5,6 +5,7 @@ import SectionDividerSpaced
import SectionItemView
import SectionItemViewSpaceBetween
import SectionView
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.*
@@ -80,7 +81,8 @@ fun ProtocolServerView(
)
}
}
}
},
cardScreen = true,
) {
Box {
ProtocolServerLayout(
@@ -140,7 +142,7 @@ private fun PresetServer(
testing: Boolean,
testServer: () -> Unit
) {
SectionView(stringResource(MR.strings.smp_servers_preset_address).uppercase()) {
SectionView(stringResource(MR.strings.smp_servers_preset_address)) {
SelectionContainer {
Text(
server.value.server,
@@ -172,7 +174,7 @@ fun CustomServer(
}
}
SectionView(
stringResource(MR.strings.smp_servers_your_server_address).uppercase(),
stringResource(MR.strings.smp_servers_your_server_address),
icon = painterResource(MR.images.ic_error),
iconTint = if (!valid.value) MaterialTheme.colors.error else Color.Transparent,
) {
@@ -190,13 +192,13 @@ fun CustomServer(
}
}
}
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
UseServerSection(server, valid.value, testing, testServer, onDelete)
if (valid.value) {
SectionDividerSpaced()
SectionView(stringResource(MR.strings.smp_servers_add_to_another_device).uppercase()) {
SectionView(stringResource(MR.strings.smp_servers_add_to_another_device)) {
QRCode(serverAddress.value, small = true)
}
}
@@ -210,7 +212,7 @@ private fun UseServerSection(
testServer: () -> Unit,
onDelete: (() -> Unit)? = null,
) {
SectionView(stringResource(MR.strings.smp_servers_use_server).uppercase()) {
SectionView(stringResource(MR.strings.smp_servers_use_server)) {
SectionItemViewSpaceBetween(testServer, disabled = !valid || testing) {
Text(stringResource(MR.strings.smp_servers_test_server), color = if (valid && !testing) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
ShowTestStatus(server.value)
@@ -7,9 +7,11 @@ import SectionItemView
import SectionTextFooter
import SectionView
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.background
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import chat.simplex.common.ui.theme.*
import androidx.compose.ui.platform.LocalUriHandler
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
@@ -86,7 +88,7 @@ fun YourServersViewLayout(
Column {
if (userServers.value[operatorIndex].chatRelays.any { !it.deleted }) {
val duplicateRelayAddresses = findDuplicateRelayAddresses(serverErrors.value)
SectionView(generalGetString(MR.strings.chat_relays).uppercase()) {
SectionView(generalGetString(MR.strings.chat_relays)) {
userServers.value[operatorIndex].chatRelays.forEachIndexed { i, relay ->
if (relay.deleted) return@forEachIndexed
ChatRelayViewLink(relay, duplicateRelayAddresses) {
@@ -99,7 +101,7 @@ fun YourServersViewLayout(
if (userServers.value[operatorIndex].smpServers.any { !it.deleted }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.message_servers).uppercase()) {
SectionView(generalGetString(MR.strings.message_servers)) {
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
if (server.deleted) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
@@ -133,7 +135,7 @@ fun YourServersViewLayout(
if (userServers.value[operatorIndex].xftpServers.any { !it.deleted }) {
SectionDividerSpaced()
SectionView(generalGetString(MR.strings.media_and_file_servers).uppercase()) {
SectionView(generalGetString(MR.strings.media_and_file_servers)) {
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
if (server.deleted) return@forEachIndexed
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
@@ -170,7 +172,7 @@ fun YourServersViewLayout(
userServers.value[operatorIndex].xftpServers.any { !it.deleted } ||
userServers.value[operatorIndex].chatRelays.any { !it.deleted }
) {
SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false)
SectionDividerSpaced()
}
SectionView {
@@ -195,7 +197,7 @@ fun YourServersViewLayout(
ServersWarningFooter(serversWarn)
}
}
SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false)
SectionDividerSpaced()
SectionView {
TestServersButton(
@@ -1091,7 +1091,7 @@
<string name="scan_qr_to_connect_to_contact">للاتصال، يمكن لجهة الاتصال مسح رمز QR أو استخدام الرابط في التطبيق.</string>
<string name="smp_servers_test_servers">اختبر الخوادم</string>
<string name="first_platform_without_user_ids">لا معرّفات مُستخدم</string>
<string name="settings_section_title_support">دعم SIMPLEX CHAT</string>
<string name="settings_section_title_support">دعم SimpleX Chat</string>
<string name="switch_verb">بدِّل</string>
<string name="color_title">العنوان الرئيسي</string>
<string name="moderate_message_will_be_marked_warning">سيتم وضع علامة على الرسالة على أنها تحت الإشراف لجميع الأعضاء.</string>
@@ -1101,7 +1101,7 @@
<string name="network_smp_web_port_off">Off</string>
<string name="appearance_settings">Appearance</string>
<string name="customize_theme_title">Customize theme</string>
<string name="theme_colors_section_title">INTERFACE COLORS</string>
<string name="theme_colors_section_title">Interface colors</string>
<string name="app_version_title">App version</string>
<string name="app_version_name">App version: v%s</string>
<string name="app_version_code">App build: %s</string>
@@ -1537,26 +1537,26 @@
<string name="privacy_chat_list_open_clean_web_link">Open clean link</string>
<!-- Settings sections -->
<string name="settings_section_title_you">YOU</string>
<string name="settings_section_title_settings">SETTINGS</string>
<string name="settings_section_title_chat_database">CHAT DATABASE</string>
<string name="settings_section_title_help">HELP</string>
<string name="settings_section_title_support">SUPPORT SIMPLEX CHAT</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_device">DEVICE</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_section_title_files">FILES</string>
<string name="settings_section_title_delivery_receipts">SEND DELIVERY RECEIPTS TO</string>
<string name="settings_section_title_contact_requests_from_groups">CONTACT REQUESTS FROM GROUPS</string>
<string name="settings_section_title_you">You</string>
<string name="settings_section_title_settings">Settings</string>
<string name="settings_section_title_chat_database">Chat database</string>
<string name="settings_section_title_help">Help</string>
<string name="settings_section_title_support">Support SimpleX Chat</string>
<string name="settings_section_title_app">App</string>
<string name="settings_section_title_device">Device</string>
<string name="settings_section_title_chats">Chats</string>
<string name="settings_section_title_files">Files</string>
<string name="settings_section_title_delivery_receipts">Send delivery receipts to</string>
<string name="settings_section_title_contact_requests_from_groups">Contact requests from groups</string>
<string name="settings_restart_app">Restart</string>
<string name="settings_shutdown">Shutdown</string>
<string name="settings_developer_tools">Developer tools</string>
<string name="settings_experimental_features">Experimental features</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_interface" translatable="false">INTERFACE</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="settings_section_title_interface" translatable="false">Interface</string>
<string name="settings_section_title_language" translatable="false">LANGUAGE</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="settings_section_title_themes">THEMES</string>
<string name="settings_section_title_icon">App icon</string>
<string name="settings_section_title_themes">Themes</string>
<string name="settings_section_title_profile_images">Profile images</string>
<string name="settings_section_title_message_shape">Message shape</string>
<string name="settings_message_shape_corner">Corner</string>
@@ -1564,21 +1564,21 @@
<string name="settings_section_title_chat_theme">Chat theme</string>
<string name="settings_section_title_user_theme">Profile theme</string>
<string name="settings_section_title_chat_colors">Chat colors</string>
<string name="settings_section_title_messages">MESSAGES AND FILES</string>
<string name="settings_section_title_private_message_routing">PRIVATE MESSAGE ROUTING</string>
<string name="settings_section_title_calls">CALLS</string>
<string name="settings_section_title_messages">Messages and files</string>
<string name="settings_section_title_private_message_routing">Private message routing</string>
<string name="settings_section_title_calls">Calls</string>
<string name="settings_section_title_network_connection">Network connection</string>
<string name="settings_section_title_incognito">Incognito mode</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="settings_section_title_use_from_desktop">Use from desktop</string>
<!-- DatabaseView.kt -->
<string name="your_chat_database">Your chat database</string>
<string name="run_chat_section">RUN CHAT</string>
<string name="run_chat_section">Run chat</string>
<string name="remote_hosts_section">Remote mobiles</string>
<string name="chat_is_running">Chat is running</string>
<string name="chat_is_stopped">Chat is stopped</string>
<string name="chat_database_section">CHAT DATABASE</string>
<string name="chat_database_section">Chat database</string>
<string name="database_passphrase">Database passphrase</string>
<string name="export_database">Export database</string>
<string name="import_database">Import database</string>
@@ -1887,7 +1887,7 @@
<string name="button_add_members">Invite members</string>
<string name="button_add_team_members">Add team members</string>
<string name="button_add_friends">Add friends</string>
<string name="group_info_section_title_num_members">%1$s MEMBERS</string>
<string name="group_info_section_title_num_members">%1$s members</string>
<string name="group_info_member_you">you: %1$s</string>
<string name="button_delete_group">Delete group</string>
<string name="button_delete_channel">Delete channel</string>
@@ -1940,7 +1940,7 @@
<string name="button_channel_relays">Chat relays</string>
<!-- Chat / Chat item info -->
<string name="section_title_for_console">FOR CONSOLE</string>
<string name="section_title_for_console">For console</string>
<string name="info_row_local_name">Local name</string>
<string name="info_row_database_id">Database ID</string>
<string name="info_row_debug_delivery">Debug delivery</string>
@@ -2010,7 +2010,7 @@
<string name="member_info_member_disabled">disabled</string>
<string name="member_info_member_failed">failed</string>
<string name="member_info_member_inactive">inactive</string>
<string name="member_info_section_title_member">MEMBER</string>
<string name="member_info_section_title_member">Member</string>
<string name="role_in_group">Role</string>
<string name="change_role">Change role</string>
<string name="change_verb">Change</string>
@@ -2027,7 +2027,7 @@
<string name="info_row_group">Group</string>
<string name="info_row_chat">Chat</string>
<string name="info_row_connection">Connection</string>
<string name="info_row_connection_failed">CONNECTION FAILED</string>
<string name="info_row_connection_failed">Connection failed</string>
<string name="conn_level_desc_direct">direct</string>
<string name="conn_level_desc_indirect">indirect (%1$s)</string>
<string name="message_queue_info">Message queue info</string>
@@ -2056,7 +2056,7 @@
<string name="message_too_large">Message too large</string>
<!-- ConnectionStats -->
<string name="conn_stats_section_title_servers">SERVERS</string>
<string name="conn_stats_section_title_servers">Servers</string>
<string name="receiving_via">Receiving via</string>
<string name="sending_via">Sending via</string>
<string name="network_status">Network status</string>
@@ -3020,9 +3020,9 @@
<string name="relay_bar_subscriber_waiting">Waiting for channel owner to add relays.</string>
<!-- GroupMemberInfoView.kt channel-related -->
<string name="member_info_section_title_relay">RELAY</string>
<string name="member_info_section_title_owner">OWNER</string>
<string name="member_info_section_title_subscriber">SUBSCRIBER</string>
<string name="member_info_section_title_relay">Relay</string>
<string name="member_info_section_title_owner">Owner</string>
<string name="member_info_section_title_subscriber">Subscriber</string>
<string name="info_row_channel">Channel</string>
<string name="info_row_relay_link">Relay link</string>
<string name="info_row_relay_address">Relay address</string>
@@ -3096,6 +3096,6 @@
<string name="tray_quit">Quit SimpleX</string>
<string name="tray_tooltip">SimpleX</string>
<string name="tray_tooltip_unread">SimpleX — %d unread</string>
<string name="appearance_minimize_to_tray">Minimize to tray when closing window</string>
<string name="appearance_minimize_to_tray_desc">Keep SimpleX running in the background to receive messages.</string>
<string name="appearance_minimize_to_tray">Close to tray</string>
<string name="appearance_minimize_to_tray_desc">Runs in background to receive messages</string>
</resources>
@@ -83,7 +83,7 @@
<string name="keychain_is_storing_securely">Android Keystore се използва за сигурно съхраняване на паролата - тоа позволява на услугата за известия да работи.</string>
<string name="empty_chat_profile_is_created">Създаен беше празен профил за чат с предоставеното име и приложението се отвари както обикновено.</string>
<string name="notifications_mode_off_desc">Приложението може да получава известия само когато работи, няма да се стартира услуга във фонов режим</string>
<string name="settings_section_title_icon">ИКОНА НА ПРИЛОЖЕНИЕТО</string>
<string name="settings_section_title_icon">Икона на приложението</string>
<string name="la_authenticate">Идентифицирай</string>
<string name="turning_off_service_and_periodic">Оптимизацията на батерията е активна, изключват се фоновата услуга и периодичните заявки за нови съобщения. Можете да ги активирате отново през настройките.</string>
<string name="network_session_mode_user_description"><![CDATA[Ще се използва отделна TCP връзка (и идентификационни данни за SOCKS) <b>за всеки чат профил, който имате в приложението</b>.]]></string>
@@ -169,13 +169,13 @@
<string name="call_connection_via_relay">чрез реле</string>
<string name="icon_descr_video_call">видео разговор</string>
<string name="your_calls">Вашите обаждания</string>
<string name="settings_section_title_app">ПРИЛОЖЕНИЕ</string>
<string name="settings_section_title_app">Приложение</string>
<string name="full_backup">Резервно копие на данните от приложението</string>
<string name="app_passcode_replaced_with_self_destruct">Кода за достъп до приложение се заменя с код за самоунищожение.</string>
<string name="auto_accept_images">Автоматично приемане на изображения</string>
<string name="authentication_cancelled">Идентификацията е отменена</string>
<string name="send_link_previews">Изпрати визуализация на линковете</string>
<string name="settings_section_title_calls">ОБАЖДАНИЯ</string>
<string name="settings_section_title_calls">Обаждания</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore ще се използва за сигурно съхраняване на паролата, след като рестартирате приложението или промените паролата - това ще позволи получаването на известия.</string>
<string name="change_database_passphrase_question">Промяна на паролата на базата данни\?</string>
<string name="rcv_group_event_changed_member_role">променена ролята от %s на %s</string>
@@ -223,7 +223,7 @@
<string name="chat_database_deleted">Базата данни е изтрита</string>
<string name="chat_is_running">Чатът работи</string>
<string name="chat_is_stopped">Чатът е спрян</string>
<string name="chat_database_section">БАЗА ДАННИ</string>
<string name="chat_database_section">База данни</string>
<string name="chat_database_imported">Базата данни е импортирана</string>
<string name="confirm_new_passphrase">Потвърди новата парола…</string>
<string name="confirm_database_upgrades">Потвърди актуализаациите на базата данни</string>
@@ -314,13 +314,13 @@
<string name="change_lock_mode">Промяна на режима на заключване</string>
<string name="change_self_destruct_mode">Промени режима на самоунищожение</string>
<string name="change_self_destruct_passcode">Промени кода за достъп за самоунищожение</string>
<string name="settings_section_title_chats">ЧАТОВЕ</string>
<string name="settings_section_title_chats">Чатове</string>
<string name="rcv_conn_event_switch_queue_phase_changing">промяна на адреса…</string>
<string name="maximum_supported_file_size">В момента максималният поддържан размер на файла е %1$s.</string>
<string name="info_row_database_id">ID в базата данни</string>
<string name="share_text_database_id">ID в базата данни: %d</string>
<string name="receipts_section_contacts">Контакти</string>
<string name="settings_section_title_themes">ТЕМИ</string>
<string name="settings_section_title_themes">Теми</string>
<string name="set_password_to_export_desc">Базата данни е криптирана с автоматично генерирана парола. Моля, променете я преди експортиране.</string>
<string name="database_passphrase">Парола за базата данни</string>
<string name="delete_database">Изтрий базата данни</string>
@@ -406,7 +406,7 @@
<string name="developer_options">Идентификатори в базата данни и опция за изолация на транспорта.</string>
<string name="delete_address">Изтрий адрес</string>
<string name="delete_address__question">Изтрий адрес\?</string>
<string name="theme_colors_section_title">ЦВЕТОВЕ НА ИНТЕРФЕЙСА</string>
<string name="theme_colors_section_title">Цветове на интерфейса</string>
<string name="create_profile_button">Създай</string>
<string name="create_profile">Създай профил</string>
<string name="delete_image">Изтрий изображение</string>
@@ -446,7 +446,7 @@
<string name="receipts_contacts_title_enable">Активирай потвърждениeто\?</string>
<string name="receipts_contacts_override_disabled">Изпращането на потвърждениe за доставка е деактивирано за %d контакта</string>
<string name="receipts_contacts_override_enabled">Изпращането на потвърждениe е активирано за %d контакта</string>
<string name="settings_section_title_device">УСТРОЙСТВО</string>
<string name="settings_section_title_device">Устройство</string>
<string name="receipts_contacts_disable_keep_overrides">Деактивиране (запазване на промените)</string>
<string name="total_files_count_and_size">%d файл(а) с общ размер от %s</string>
<string name="encrypt_database">Криптирай</string>
@@ -485,7 +485,7 @@
<string name="receipts_section_description_1">Те могат да бъдат променени в настройките за всеки контакт и група.</string>
<string name="settings_developer_tools">Инструменти за разработчици</string>
<string name="receipts_contacts_disable_for_all">Деактивиране за всички</string>
<string name="settings_section_title_delivery_receipts">ИЗПРАЩАЙТЕ ПОТВЪРЖДЕНИE ЗА ДОСТАВКА НА</string>
<string name="settings_section_title_delivery_receipts">Изпращайте потвърждениe за доставка на</string>
<string name="delete_messages_after">Изтрий съобщенията след</string>
<string name="chat_item_ttl_seconds">%s секунда(и)</string>
<string name="delete_messages">Изтрий съобщенията</string>
@@ -622,7 +622,7 @@
<string name="full_name__field">Пълно име:</string>
<string name="exit_without_saving">Изход без запазване</string>
<string name="hidden_profile_password">Парола за скрит профил</string>
<string name="settings_section_title_experimenta">ЕКСПЕРИМЕНТАЛЕН</string>
<string name="settings_section_title_experimenta">Експериментален</string>
<string name="file_with_path">Файл: %s</string>
<string name="icon_descr_expand_role">Разшири избора на роля</string>
<string name="fix_connection_question">Поправи връзката\?</string>
@@ -632,7 +632,7 @@
<string name="v4_4_disappearing_messages_desc">Изпратените съобщения ще бъдат изтрити след зададеното време.</string>
<string name="group_link">Групов линк</string>
<string name="files_and_media">Файлове и медия</string>
<string name="section_title_for_console">ЗА КОНЗОЛАТА</string>
<string name="section_title_for_console">За конзолата</string>
<string name="group_preferences">Групови настройки</string>
<string name="icon_descr_file">Файл</string>
<string name="file_not_found">Файлът не е намерен</string>
@@ -643,7 +643,7 @@
<string name="v5_2_favourites_filter_descr">Филтрирайте непрочетените и любимите чатове.</string>
<string name="group_members_can_send_dms">Членовете могат да изпращат лични съобщения.</string>
<string name="icon_descr_help">помощ</string>
<string name="settings_section_title_help">ПОМОЩ</string>
<string name="settings_section_title_help">Помощ</string>
<string name="email_invite_body">Здравей,
\nСвържи се с мен през SimpleX Chat: %s</string>
<string name="group_members_can_add_message_reactions">Членовете могат да добавят реакции към съобщенията.</string>
@@ -805,7 +805,7 @@
<string name="onboarding_notifications_mode_off">Когато приложението работи</string>
<string name="onboarding_notifications_mode_periodic">Периодично</string>
<string name="paste_the_link_you_received">Постави получения линк</string>
<string name="settings_section_title_messages">СЪОБЩЕНИЯ И ФАЙЛОВЕ</string>
<string name="settings_section_title_messages">Съобщения и файлове</string>
<string name="no_received_app_files">Няма получени или изпратени файлове</string>
<string name="notifications_will_be_hidden">Известията ще се доставят само докато приложението не е спряно!</string>
<string name="remove_passphrase_from_keychain">Премахване на парола от Keystore\?</string>
@@ -987,7 +987,7 @@
<string name="lock_mode">Режим на заключване</string>
<string name="alert_text_fragment_please_report_to_developers">Моля, докладвайте го на разработчиците.</string>
<string name="protect_app_screen">Защити екрана на приложението</string>
<string name="member_info_section_title_member">ЧЛЕН</string>
<string name="member_info_section_title_member">Член</string>
<string name="remove_member_confirmation">Премахване</string>
<string name="network_option_ping_count">PING бройка</string>
<string name="only_your_contact_can_add_message_reactions">Само вашият контакт може да добавя реакции на съобщенията.</string>
@@ -1042,8 +1042,8 @@
<string name="share_with_contacts">Сподели с контактите</string>
<string name="stop_sharing">Спри споделянето</string>
<string name="stop_sharing_address">Спри споделянето на адреса\?</string>
<string name="settings_section_title_settings">НАСТРОЙКИ</string>
<string name="run_chat_section">СТАРТИРАНЕ НА ЧАТ</string>
<string name="settings_section_title_settings">Настройки</string>
<string name="run_chat_section">Стартиране на чат</string>
<string name="text_field_set_contact_placeholder">Задай име на контакт…</string>
<string name="no_info_on_delivery">Няма информация за доставката</string>
<string name="revoke_file__title">Отзови файл\?</string>
@@ -1067,7 +1067,7 @@
<string name="receipts_groups_override_enabled">Изпращането на потвърждениe за доставка е разрешено за %d групи</string>
<string name="restart_the_app_to_use_imported_chat_database">Рестартирайте приложението, за да използвате импортирана база данни.</string>
<string name="send_receipts_disabled_alert_msg">Тази група има над %1$d членове, потвърждениeто за доставка няма да се изпраща.</string>
<string name="conn_stats_section_title_servers">СЪРВЪРИ</string>
<string name="conn_stats_section_title_servers">Сървъри</string>
<string name="recipient_colon_delivery_status">%s: %s</string>
<string name="delivery">Доставка</string>
<string name="receipts_groups_enable_keep_overrides">Активиране (запазване на груповите промени)</string>
@@ -1093,7 +1093,7 @@
<string name="share_image">Сподели медия…</string>
<string name="simplex_address">SimpleX адрес</string>
<string name="v4_2_security_assessment_desc">Сигурността на SimpleX Chat беше одитирана от Trail of Bits.</string>
<string name="settings_section_title_socks">SOCKS ПРОКСИ</string>
<string name="settings_section_title_socks">SOCKS прокси</string>
<string name="settings_restart_app">Рестартиране</string>
<string name="settings_shutdown">Изключване</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Рестартирайте приложението, за да създадете нов чат профил.</string>
@@ -1152,7 +1152,7 @@
<string name="color_title">Заглавие</string>
<string name="to_share_with_your_contact">(за споделяне с вашия контакт)</string>
<string name="alert_message_no_group">Тази група вече не съществува.</string>
<string name="settings_section_title_support">ПОДКРЕПЕТЕ SIMPLEX CHAT</string>
<string name="settings_section_title_support">Подкрепете SimpleX Chat</string>
<string name="contact_sent_large_file">Вашият контакт изпрати файл, който е по-голям от поддържания в момента максимален размер (%1$s).</string>
<string name="in_developing_desc">Тази функция все още не се поддържа. Опитайте следващата версия.</string>
<string name="tap_to_start_new_chat">Докосни за започване на нов чат</string>
@@ -1231,7 +1231,7 @@
<string name="snd_conn_event_switch_queue_phase_completed">адреса за получаване е променен</string>
<string name="you_can_share_this_address_with_your_contacts">Можете да споделите този адрес с вашите контакти, за да им позволите да се свържат с %s.</string>
<string name="unfavorite_chat">Премахни от любимите</string>
<string name="settings_section_title_you">ВИЕ</string>
<string name="settings_section_title_you">Вие</string>
<string name="your_chat_database">Вашата база данни</string>
<string name="icon_descr_waiting_for_image">Изчаква се получаването на изображението</string>
<string name="waiting_for_image">Изчаква се получаването на изображението</string>
@@ -1775,7 +1775,7 @@
<string name="private_routing_explanation">За да защити вашия IP адрес, поверително рутиране използва вашите SMP сървъри за доставяне на съобщения.</string>
<string name="forward_alert_forward_messages_without_files">Препращане на съобщенията без файловете?</string>
<string name="network_smp_proxy_mode_unknown">Неизвестни сървъри</string>
<string name="settings_section_title_files">ФАЙЛОВЕ</string>
<string name="settings_section_title_files">Файлове</string>
<string name="chat_list_always_visible">Показване на списъка на чатовете в нов прозорец</string>
<string name="color_mode_system">Системна</string>
<string name="color_mode_dark">Тъмна</string>
@@ -1800,7 +1800,7 @@
<string name="snd_error_proxy">Препращащ сървър: %1$s\nГрешка: %2$s</string>
<string name="srv_error_version">Версията на сървъра е несъвместима с мрежовите настройки.</string>
<string name="protect_ip_address">Защити IP адреса</string>
<string name="settings_section_title_private_message_routing">ПОВЕРИТЕЛНО РУТИРАНЕ НА СЪОБЩЕНИЯ</string>
<string name="settings_section_title_private_message_routing">Поверително рутиране на съобщения</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">Приложението ще поиска потвърждение за изтегляния от неизвестни файлови сървъри (с изключение на .onion сървъри или когато SOCKS прокси е активирано).</string>
<string name="ci_status_other_error">Грешка: %1$s</string>
<string name="forward_files_not_accepted_receive_files">Изтегляне</string>
@@ -2038,7 +2038,7 @@
<string name="app_check_for_updates_button_download">Изтегли %s (%s)</string>
<string name="app_check_for_updates_button_skip">Пропусни тази версия</string>
<string name="app_check_for_updates_notice_title">Провери за актуализации</string>
<string name="settings_section_title_chat_database">БАЗА ДАННИ</string>
<string name="settings_section_title_chat_database">База данни</string>
<string name="you_can_still_send_messages_to_contact">Можете да изпращате съобщения до %1$s от архивираните контакти.</string>
<string name="chat_bottom_bar">Достъпен панел</string>
<string name="cant_send_message_to_member_alert_title">Изпращането на съобщения на груповия член не е налично</string>
@@ -2501,7 +2501,7 @@
<string name="share_old_link_alert_button">Сподели стар линк</string>
<string name="share_group_profile_via_link_alert_text">Линкът ще бъде кратък и профилът на групата ще бъде споделен чрез него.</string>
<string name="upgrade_group_link">Обнови групов линк</string>
<string name="settings_section_title_contact_requests_from_groups">ЗАЯВКИ ЗА КОНТАКТ ОТ ГРУПИ</string>
<string name="settings_section_title_contact_requests_from_groups">Заявки за контакт от групи</string>
<string name="member_is_deleted_cant_accept_request">Членът е изтрит - не може да се приеме заявката</string>
<string name="rcv_direct_event_group_inv_link_received">заявка за връзка от група %1$s</string>
<string name="this_setting_is_for_your_current_profile">Тази настройка е за текущия профил</string>
@@ -126,10 +126,10 @@
<string name="all_app_data_will_be_cleared">S\'eliminaran totes les dades de l\'aplicació.</string>
<string name="empty_chat_profile_is_created">Es crea un perfil de xat buit amb el nom proporcionat i l\'aplicació s\'obre com de costum.</string>
<string name="app_passcode_replaced_with_self_destruct">La contrasenya de l\'aplicació es substitueix per una contrasenya d\'autodestrucció.</string>
<string name="settings_section_title_app">APLICACIÓ</string>
<string name="settings_section_title_icon">ICONA APLICACIÓ</string>
<string name="settings_section_title_app">Aplicació</string>
<string name="settings_section_title_icon">Icona aplicació</string>
<string name="privacy_media_blur_radius">Desenfocar els mitjans</string>
<string name="settings_section_title_calls">TRUCADES</string>
<string name="settings_section_title_calls">Trucades</string>
<string name="keychain_is_storing_securely">Android Keystore s\'utilitza per emmagatzemar de manera segura la frase de contrasenya: permet que el servei de notificacions funcioni.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore s\'utilitzarà per emmagatzemar de manera segura la frase de contrasenya després de reiniciar l\'aplicació o canviar la frase de contrasenya; permetrà rebre notificacions.</string>
<string name="cannot_access_keychain">No es pot accedir a Keystore per desar la contrasenya de la base de dades</string>
@@ -383,7 +383,7 @@
<string name="receipts_contacts_title_disable">Desactivar rebuts?</string>
<string name="receipts_groups_title_disable">Desactivar rebuts per a grups?</string>
<string name="settings_developer_tools">Eines per a desenvolupadors</string>
<string name="settings_section_title_device">DISPOSITIU</string>
<string name="settings_section_title_device">Dispositiu</string>
<string name="set_password_to_export_desc">La base de dades es xifra amb una contrasenya aleatòria. Si us plau, canvieu-la abans d\'exportar.</string>
<string name="database_passphrase">Contrasenya de la base de dades</string>
<string name="delete_chat_profile_question">Voleu suprimir el perfil?</string>
@@ -514,8 +514,8 @@
<string name="change_self_destruct_mode">Canvia el mode l\'autodestrucció</string>
<string name="change_self_destruct_passcode">Canvia el codi d\'autodestrucció</string>
<string name="confirm_passcode">Confirmeu el codi d\'accés</string>
<string name="settings_section_title_chat_database">BASE DE DADES DELS XATS</string>
<string name="settings_section_title_chats">XATS</string>
<string name="settings_section_title_chat_database">Base de dades dels xats</string>
<string name="settings_section_title_chats">Xats</string>
<string name="settings_section_title_chat_theme">Tema del xat</string>
<string name="settings_section_title_chat_colors">Colors del xat</string>
<string name="chat_database_deleted">Base de dades suprimida</string>
@@ -551,7 +551,7 @@
<string name="you_can_also_connect_by_clicking_the_link"><![CDATA[També us podeu connectar fent clic a l\'enllaç. Si s\'obre al navegador, feu clic al botó <b>Obre a l\'aplicació mòbil</b>.]]></string>
<string name="error_saving_ICE_servers">Error en desar els servidors ICE</string>
<string name="network_proxy_incorrect_config_title">Error en desar el servidor intermediari</string>
<string name="chat_database_section">BASE DE DADES DELS XATS</string>
<string name="chat_database_section">Base de dades dels xats</string>
<string name="chat_is_running">El xat s\'està executant</string>
<string name="chat_is_stopped">El xat està aturat</string>
<string name="error_with_info">Error: %s</string>
@@ -742,7 +742,7 @@
<string name="contact_connection_pending">s\'està connectant…</string>
<string name="onboarding_network_operators_conditions_will_be_accepted">Les condicions s\'acceptaran per als operadors habilitats després de 30 dies.</string>
<string name="system_restricted_background_desc">SimpleX no pot funcionar en segon pla. Només rebreu les notificacions quan obriu l\'aplicació.</string>
<string name="ntf_channel_calls">Trucades de SimpleX chat</string>
<string name="ntf_channel_calls">Trucades de SimpleX Chat</string>
<string name="ntf_channel_messages">Missatges de xat de SimpleX</string>
<string name="icon_descr_sent_msg_status_sent">enviat</string>
<string name="icon_descr_received_msg_status_unread">per llegir</string>
@@ -781,7 +781,7 @@
<string name="show_dev_options">Mostra:</string>
<string name="hide_dev_options">Amaga:</string>
<string name="theme_simplex">SimpleX</string>
<string name="v4_2_security_assessment_desc">La seguretat de SimpleX chat ha estat auditada per Trail of Bits.</string>
<string name="v4_2_security_assessment_desc">La seguretat de SimpleX Chat ha estat auditada per Trail of Bits.</string>
<string name="email_invite_subject">Parlem a SimpleX Chat</string>
<string name="invalid_name">El nom no és vàlid!</string>
<string name="italic_text">cursiva</string>
@@ -794,7 +794,7 @@
<string name="member_info_member_inactive">inactiu</string>
<string name="chat_theme_apply_to_light_mode">Mode clar</string>
<string name="v5_4_incognito_groups">Grups d\'incògnit</string>
<string name="member_info_section_title_member">MEMBRE</string>
<string name="member_info_section_title_member">Membre</string>
<string name="join_group_question">Voleu unir-vos al grup?</string>
<string name="leave_group_button">Surt</string>
<string name="leave_chat_question">Voleu sortir del xat?</string>
@@ -966,8 +966,8 @@
<string name="receipts_contacts_title_enable">Activar els rebuts?</string>
<string name="enable_self_destruct">Activar autodestrucció</string>
<string name="receipts_groups_title_enable">Activar els rebuts per a grups?</string>
<string name="settings_section_title_files">FITXERS</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_files">Fitxers</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="export_database">Exportar base de dades</string>
<string name="encrypt_database">Xifrar</string>
<string name="file_with_path">Fitxer: %s</string>
@@ -981,7 +981,7 @@
<string name="alert_title_no_group">Grup no trobat!</string>
<string name="conn_event_ratchet_sync_required">es requereix renegociar el xifratge</string>
<string name="group_member_status_group_deleted">grup esborrat</string>
<string name="section_title_for_console">PER A CONSOLA</string>
<string name="section_title_for_console">Per a consola</string>
<string name="fix_connection_question">Arreglar connexió?</string>
<string name="fix_connection_not_supported_by_group_member">Correcció no suportada per membre del grup</string>
<string name="group_full_name_field">Nom complet del grup:</string>
@@ -1055,7 +1055,7 @@
<string name="permissions_grant">Donar permís(os) per fer trucades</string>
<string name="audio_device_wired_headphones">Auriculars</string>
<string name="encrypt_local_files">Xifra fitxers locals</string>
<string name="settings_section_title_help">AJUT</string>
<string name="settings_section_title_help">Ajut</string>
<string name="files_and_media_section">Arxius i mitjans</string>
<string name="encrypt_database_question">Xifrar base de dades?</string>
<string name="encrypted_database">Base de dades xifrada</string>
@@ -1109,7 +1109,7 @@
<string name="compose_message_placeholder">Missatge</string>
<string name="maximum_message_size_title">El missatge és massa llarg!</string>
<string name="info_view_message_button">missatge</string>
<string name="settings_section_title_messages">MISSATGES I FITXERS</string>
<string name="settings_section_title_messages">Missatges i fitxers</string>
<string name="messages_section_title">Missatges</string>
<string name="info_row_message_status">Estat del missatge</string>
<string name="share_text_message_status">Estat del missatge: %s</string>
@@ -1266,15 +1266,15 @@
<string name="receipts_contacts_override_disabled">L\'enviament de rebuts està desactivat per a %d contactes</string>
<string name="receipts_contacts_override_enabled">L\'enviament de rebuts està habilitat per a %d contactes</string>
<string name="receipts_groups_override_enabled">L\'enviament de rebuts està habilitat per a %d grups</string>
<string name="settings_section_title_delivery_receipts">ENVIAR ELS REBUS DE LLIURAMENT A</string>
<string name="settings_section_title_delivery_receipts">Enviar els rebus de lliurament a</string>
<string name="receipts_groups_override_disabled">L\'enviament de rebuts està desactivat per a %d grups</string>
<string name="settings_restart_app">Reiniciar</string>
<string name="settings_section_title_socks">SERVIDOR INTERMEDIARI SOCKS</string>
<string name="settings_section_title_socks">Servidor intermediari SOCKS</string>
<string name="settings_section_title_profile_images">Imatges de perfil</string>
<string name="settings_section_title_themes">TEMES</string>
<string name="settings_section_title_themes">Temes</string>
<string name="settings_message_shape_tail">Cua</string>
<string name="settings_section_title_message_shape">Forma del missatge</string>
<string name="run_chat_section">EXECUTAR SIMPLEX</string>
<string name="run_chat_section">Executar SimpleX</string>
<string name="settings_section_title_use_from_desktop">Usar des d\'ordinador</string>
<string name="your_chat_database">Base de dades de xat</string>
<string name="import_database">Importar base de dades</string>
@@ -1899,7 +1899,7 @@
<string name="network_enable_socks">Utilitzar servidor intermediari SOCKS?</string>
<string name="network_use_onion_hosts_prefer">Si disponibles</string>
<string name="network_proxy_auth_mode_username_password">Les vostres credencials es podrien enviar sense xifrar.</string>
<string name="theme_colors_section_title">COLORS DE LA INTERFÍCIE</string>
<string name="theme_colors_section_title">Colors de la interfície</string>
<string name="update_network_smp_proxy_fallback_question">Alternativa d\'encaminament de missatges</string>
<string name="update_network_smp_proxy_mode_question">Mode d\'encaminament de missatges</string>
<string name="app_check_for_updates_button_open">Obrir ubicació del fitxer</string>
@@ -1949,12 +1949,12 @@
<string name="receipts_section_description">Aquesta configuració és per al vostre perfil actual</string>
<string name="receipts_section_description_1">Es pot canviar a la configuració de contacte i grup.</string>
<string name="privacy_media_blur_radius_off">No</string>
<string name="settings_section_title_settings">CONFIGURACIÓ</string>
<string name="settings_section_title_settings">Configuració</string>
<string name="privacy_media_blur_radius_soft">Tou</string>
<string name="privacy_media_blur_radius_strong">Fort</string>
<string name="settings_section_title_support">SUPORT SIMPLEX XAT</string>
<string name="settings_section_title_support">Suport SimpleX Chat</string>
<string name="settings_section_title_network_connection">Connexió a la xarxa</string>
<string name="settings_section_title_private_message_routing">ENCAMINAMENT DE MISSATGES PRIVAT</string>
<string name="settings_section_title_private_message_routing">Encaminament de missatges privat</string>
<string name="chat_item_ttl_none">mai</string>
<string name="no_received_app_files">No s\'han rebut ni enviats fitxers</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Reinicieu l\'aplicació per crear un perfil de xat nou.</string>
@@ -2024,7 +2024,7 @@
<string name="group_welcome_preview">Vista prèvia</string>
<string name="receiving_via">Rebent via</string>
<string name="save_and_update_group_profile">Desa i actualitza el perfil del grup</string>
<string name="conn_stats_section_title_servers">SERVIDORS</string>
<string name="conn_stats_section_title_servers">Servidors</string>
<string name="group_welcome_title">Missatge de benvinguda</string>
<string name="welcome_message_is_too_long">El missatge de benvinguda és massa llarg</string>
<string name="your_servers">Els teus servidors</string>
@@ -2183,7 +2183,7 @@
<string name="smp_servers">Servidors SMP</string>
<string name="xftp_servers">Servidors XFTP</string>
<string name="audio_device_speaker">Altaveu</string>
<string name="settings_section_title_you">VÓS</string>
<string name="settings_section_title_you">Vós</string>
<string name="chat_item_ttl_seconds">%s segon(s)</string>
<string name="you_are_invited_to_group">"Heu estat convidat a un grup"</string>
<string name="rcv_group_event_1_member_connected">%s connectat</string>
@@ -2474,7 +2474,7 @@
<string name="share_old_link_alert_button">Compartir l\'enllaç antic</string>
<string name="share_group_profile_via_link_alert_text">L\'enllaç serà curt i el perfil del grup es compartirà a través d\'ell.</string>
<string name="upgrade_group_link">Actualitzar l\'enllaç del grup</string>
<string name="settings_section_title_contact_requests_from_groups">SOL·LICITUDS DE CONTACTE DE GRUPS</string>
<string name="settings_section_title_contact_requests_from_groups">Sol·licituds de contacte de grups</string>
<string name="member_is_deleted_cant_accept_request">Membre eliminat(da); no es pot acceptar la sol·licitud.</string>
<string name="rcv_direct_event_group_inv_link_received">connexió sol·licitada del grup %1$s</string>
<string name="this_setting_is_for_your_current_profile">Aquesta configuració és per al perfil actual</string>
@@ -40,11 +40,11 @@
<string name="button_create_group_link">Vytvořit odkaz</string>
<string name="delete_link_question">Smazat odkaz\?</string>
<string name="button_send_direct_message">Odeslat přímou zprávu</string>
<string name="member_info_section_title_member">ČLEN</string>
<string name="member_info_section_title_member">Člen</string>
<string name="change_member_role_question">Změnit roli ve skupině\?</string>
<string name="info_row_connection">Připoj</string>
<string name="conn_level_desc_indirect">nepřímé (%1$s)</string>
<string name="conn_stats_section_title_servers">SERVERY</string>
<string name="conn_stats_section_title_servers">Servery</string>
<string name="receiving_via">Příjímáno přes</string>
<string name="create_secret_group_title">Vytvoření tajné skupiny</string>
<string name="group_display_name_field">Zadejte název skupiny:</string>
@@ -259,16 +259,16 @@
<string name="icon_descr_speaker_on">Reproduktor zapnut</string>
<string name="icon_descr_call_progress">Probíhající hovor</string>
<string name="auto_accept_images">Automaticky přijímat obrázky</string>
<string name="settings_section_title_settings">NASTAVENÍ</string>
<string name="settings_section_title_help">NÁPOVĚDA</string>
<string name="settings_section_title_device">ZAŘÍZENÍ</string>
<string name="settings_section_title_chats">KONVERZACE</string>
<string name="settings_section_title_settings">Nastavení</string>
<string name="settings_section_title_help">Nápověda</string>
<string name="settings_section_title_device">Zařízení</string>
<string name="settings_section_title_chats">Konverzace</string>
<string name="settings_experimental_features">Experimentální funkce</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_icon">IKONA APLIKACE</string>
<string name="settings_section_title_themes">TÉMATA</string>
<string name="settings_section_title_messages">ZPRÁVY A SOUBORY</string>
<string name="settings_section_title_calls">VOLÁNÍ</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="settings_section_title_icon">Ikona aplikace</string>
<string name="settings_section_title_themes">Témata</string>
<string name="settings_section_title_messages">Zprávy a soubory</string>
<string name="settings_section_title_calls">Volání</string>
<string name="export_database">Export databáze</string>
<string name="import_database">Import databáze</string>
<string name="delete_database">Smazat databázi</string>
@@ -700,15 +700,15 @@
\n1. Zprávy vypršely v odesílajícím klientovi po 2 dnech nebo na serveru po 30 dnech.
\n2. Dešifrování zprávy se nezdařilo, protože vy nebo váš kontakt jste použili starou zálohu databáze.
\n3. Spojení je kompromitováno.</string>
<string name="settings_section_title_you">VY</string>
<string name="settings_section_title_support">PODPOŘIT SIMPLEX CHAT</string>
<string name="settings_section_title_you">Vy</string>
<string name="settings_section_title_support">Podpořit SimpleX Chat</string>
<string name="settings_developer_tools">Nástroje pro vývojáře</string>
<string name="settings_section_title_incognito">Inkognito mód</string>
<string name="your_chat_database">Vaše chat databáze</string>
<string name="run_chat_section">SPUSTIT CHAT</string>
<string name="run_chat_section">Spustit chat</string>
<string name="chat_is_running">Chat je spuštěn</string>
<string name="chat_is_stopped">Chat je zastaven</string>
<string name="chat_database_section">DATABÁZE CHATU</string>
<string name="chat_database_section">Databáze chatu</string>
<string name="database_passphrase">přístupová fráze k databázi</string>
<string name="new_database_archive">Archiv nové databáze</string>
<string name="old_database_archive">Archiv staré databáze</string>
@@ -836,7 +836,7 @@
<string name="error_creating_link_for_group">Chyba při vytváření odkazu skupiny</string>
<string name="error_deleting_link_for_group">Chyba při odstraňování odkazu skupiny</string>
<string name="only_group_owners_can_change_prefs">Předvolby skupiny mohou měnit pouze vlastníci skupiny.</string>
<string name="section_title_for_console">PRO KONSOLE</string>
<string name="section_title_for_console">Pro konsole</string>
<string name="info_row_local_name">Místní název</string>
<string name="info_row_database_id">ID databáze</string>
<string name="button_remove_member">Odstranit člena</string>
@@ -991,7 +991,7 @@
<string name="upgrade_and_open_chat">Zvýšit a otevřít chat</string>
<string name="hide_dev_options">Skrýt:</string>
<string name="show_developer_options">Zobrazit možnosti vývojáře</string>
<string name="settings_section_title_experimenta">POKUSNÝ</string>
<string name="settings_section_title_experimenta">Pokusný</string>
<string name="image_will_be_received_when_contact_completes_uploading">Obrázek bude přijat, až kontakt dokončí jeho nahrání.</string>
<string name="show_dev_options">Zobrazit:</string>
<string name="developer_options">ID databáze a možnost Izolace přenosu.</string>
@@ -1164,7 +1164,7 @@
<string name="you_can_accept_or_reject_connection">Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout.</string>
<string name="read_more_in_user_guide_with_link"><![CDATA[Přečtěte si více v <font color="#0088ff">Uživatelské příručce</font>.]]></string>
<string name="simplex_address">Adresa SimpleX</string>
<string name="theme_colors_section_title">BARVY MOTIVU</string>
<string name="theme_colors_section_title">Barvy motivu</string>
<string name="customize_theme_title">Přizpůsobit motiv</string>
<string name="profile_update_will_be_sent_to_contacts">Aktualizace profilu bude zaslána vašim kontaktům.</string>
<string name="share_address_with_contacts_question">Sdílet adresu s kontakty?</string>
@@ -1301,7 +1301,7 @@
<string name="in_reply_to">V odpovědi na</string>
<string name="no_history">Žádná historie</string>
<string name="network_option_protocol_timeout_per_kb">Časový limit protokolu na KB</string>
<string name="settings_section_title_delivery_receipts">ZASLAT POTVRZENÍ O DORUČENÍ NA</string>
<string name="settings_section_title_delivery_receipts">Zaslat potvrzení o doručení na</string>
<string name="v5_2_message_delivery_receipts_descr">Druhé zaškrtnutí jsme přehlédli! ✅</string>
<string name="switch_receiving_address_desc">Přijímací adresa bude změněna na jiný server. Změna adresy bude dokončena po připojení odesílatele.</string>
<string name="choose_file_title">Vybrat soubor</string>
@@ -1803,8 +1803,8 @@
\nProsím sdělte jakékoli další problémy vývojářům.</string>
<string name="network_smp_proxy_fallback_prohibit">Ne</string>
<string name="network_smp_proxy_fallback_prohibit_description">NEposílejte zprávy přímo, i když váš nebo cílový server nepodporuje soukromé směrování.</string>
<string name="settings_section_title_files">SOUBORY</string>
<string name="settings_section_title_private_message_routing">SOUKROMÉ SMĚROVÁNÍ ZPRÁV</string>
<string name="settings_section_title_files">Soubory</string>
<string name="settings_section_title_private_message_routing">Soukromé směrování zpráv</string>
<string name="settings_section_title_user_theme">Téma profilu</string>
<string name="color_received_quote">Přijata odpověď</string>
<string name="reset_single_color">Obnovit barvu</string>
@@ -1878,7 +1878,7 @@
<string name="app_check_for_updates_button_remind_later">Připomenout později</string>
<string name="app_check_for_updates_notice_title">Zkontrolovat aktualizace</string>
<string name="privacy_media_blur_radius_off">Vypnuto</string>
<string name="settings_section_title_chat_database">CHAT DATABÁZE</string>
<string name="settings_section_title_chat_database">Chat databáze</string>
<string name="member_info_member_disabled">vypnut</string>
<string name="message_queue_info_server_info">info fronty serveru: %1$s\n\nposlední obdržená zpráva: %2$s</string>
<string name="network_options_save_and_reconnect">Uložit a připojit znovu</string>
@@ -2362,7 +2362,7 @@
<string name="members_will_be_removed_from_group_cannot_be_undone">Členové budou odstraněny ze skupiny - toto nelze zvrátit!</string>
<string name="button_remove_members_question">Odebrat členy?</string>
<string name="members_will_be_removed_from_chat_cannot_be_undone">Členové budou odstraněny z chatu - toto nelze zvrátit!</string>
<string name="onboarding_conditions_by_using_you_agree">Použitím SimpleX chatu souhlasíte že:\n- ve veřejných skupinách budete zasílat pouze legální obsah.\n- budete respektovat ostatní uživatele žádný spam.</string>
<string name="onboarding_conditions_by_using_you_agree">Použitím SimpleX Chatu souhlasíte že:\n- ve veřejných skupinách budete zasílat pouze legální obsah.\n- budete respektovat ostatní uživatele žádný spam.</string>
<string name="onboarding_conditions_accept">Přijmout</string>
<string name="onboarding_conditions_privacy_policy_and_conditions_of_use">Zásady ochrany soukromí a podmínky používání.</string>
<string name="onboarding_conditions_private_chats_not_accessible">Soukromé konverzace, skupiny a kontakty nejsou přístupné provozovatelům serverů.</string>
@@ -2430,7 +2430,7 @@
<string name="connect_plan_open_new_group">Otevřít novou skupinu</string>
<string name="compose_view_connect">Připojit</string>
<string name="v6_4_connect_faster">Připojte se rychleji! 🚀</string>
<string name="settings_section_title_contact_requests_from_groups">POŽADAVKY NA PŘIPOJENÍ ZE SKUPIN</string>
<string name="settings_section_title_contact_requests_from_groups">Požadavky na připojení ze skupin</string>
<string name="contact_should_accept">kontakt by měl přijmout…</string>
<string name="v6_4_1_short_address_create">Vytvořit vaši adresu</string>
<string name="group_descr_too_large">Popis příliš dlouhý</string>
@@ -157,7 +157,7 @@
<string name="report_reason_other">En anden grund</string>
<string name="answer_call">Svaropkald</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Alle kan være vært for servere.</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="onboarding_notifications_mode_service_desc_short">App løber altid i baggrunden</string>
<string name="app_version_code">App Build: %s</string>
<string name="notifications_mode_off_desc">App kan kun modtage meddelelser, når den kører, ingen baggrundstjeneste startes</string>
@@ -549,26 +549,26 @@
<string name="send_link_previews">Linkvorschau senden</string>
<string name="full_backup">App-Datensicherung</string>
<!-- Settings sections -->
<string name="settings_section_title_you">MEINE DATEN</string>
<string name="settings_section_title_settings">EINSTELLUNGEN</string>
<string name="settings_section_title_help">HILFE</string>
<string name="settings_section_title_support">UNTERSTÜTZUNG VON SIMPLEX CHAT</string>
<string name="settings_section_title_device">GERÄT</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_section_title_you">Meine Daten</string>
<string name="settings_section_title_settings">Einstellungen</string>
<string name="settings_section_title_help">Hilfe</string>
<string name="settings_section_title_support">Unterstützung von SimpleX Chat</string>
<string name="settings_section_title_device">Gerät</string>
<string name="settings_section_title_chats">Chats</string>
<string name="settings_developer_tools">Entwicklertools</string>
<string name="settings_experimental_features">Experimentelle Funktionen</string>
<string name="settings_section_title_socks">SOCKS-PROXY</string>
<string name="settings_section_title_icon">APP-ICON</string>
<string name="settings_section_title_themes">DESIGN</string>
<string name="settings_section_title_messages">NACHRICHTEN und DATEIEN</string>
<string name="settings_section_title_calls">CALLS</string>
<string name="settings_section_title_socks">SOCKS-Proxy</string>
<string name="settings_section_title_icon">App-Icon</string>
<string name="settings_section_title_themes">Design</string>
<string name="settings_section_title_messages">Nachrichten und Dateien</string>
<string name="settings_section_title_calls">Calls</string>
<string name="settings_section_title_incognito">Inkognito-Modus</string>
<!-- DatabaseView.kt -->
<string name="your_chat_database">Chat-Datenbank</string>
<string name="run_chat_section">CHAT STARTEN</string>
<string name="run_chat_section">Chat starten</string>
<string name="chat_is_running">Der Chat läuft</string>
<string name="chat_is_stopped">Der Chat ist beendet</string>
<string name="chat_database_section">CHAT-DATENBANK</string>
<string name="chat_database_section">Chat-Datenbank</string>
<string name="database_passphrase">Datenbank-Passwort</string>
<string name="export_database">Datenbank exportieren</string>
<string name="import_database">Datenbank importieren</string>
@@ -747,7 +747,7 @@
<string name="invite_prohibited_description">Sie versuchen, einen Kontakt, mit dem Sie ein Inkognito-Profil geteilt haben, in die Gruppe einzuladen, in der Sie Ihr Hauptprofil verwenden.</string>
<!-- GroupChatInfoView.kt -->
<string name="button_add_members">Mitglieder einladen</string>
<string name="group_info_section_title_num_members">%1$s MITGLIEDER</string>
<string name="group_info_section_title_num_members">%1$s Mitglieder</string>
<string name="group_info_member_you">Sie: %1$s</string>
<string name="button_delete_group">Gruppe löschen</string>
<string name="delete_group_question">Gruppe löschen?</string>
@@ -765,7 +765,7 @@
<string name="error_deleting_link_for_group">Fehler beim Löschen des Gruppen-Links</string>
<string name="only_group_owners_can_change_prefs">Gruppen-Präferenzen können nur von Gruppen-Eigentümern geändert werden.</string>
<!-- For Console chat info section -->
<string name="section_title_for_console">FÜR KONSOLE</string>
<string name="section_title_for_console">Für Konsole</string>
<string name="info_row_local_name">Lokaler Name</string>
<string name="info_row_database_id">Datenbank-ID</string>
<!-- GroupMemberInfoView.kt -->
@@ -773,7 +773,7 @@
<string name="button_send_direct_message">Direktnachricht senden</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Das Mitglied wird aus der Gruppe entfernt. Dies kann nicht rückgängig gemacht werden!</string>
<string name="remove_member_confirmation">Entfernen</string>
<string name="member_info_section_title_member">MITGLIED</string>
<string name="member_info_section_title_member">Mitglied</string>
<string name="role_in_group">Rolle</string>
<string name="change_role">Rolle ändern</string>
<string name="change_verb">Ändern</string>
@@ -788,7 +788,7 @@
<string name="conn_level_desc_direct">direkt</string>
<string name="conn_level_desc_indirect">indirekt (%1$s)</string>
<!-- ConnectionStats -->
<string name="conn_stats_section_title_servers">SERVER</string>
<string name="conn_stats_section_title_servers">Server</string>
<string name="receiving_via">Empfangen über</string>
<string name="sending_via">Senden über</string>
<string name="network_status">Netzwerkstatus</string>
@@ -1065,7 +1065,7 @@
<string name="confirm_database_upgrades">Datenbank-Aktualisierungen bestätigen</string>
<string name="show_dev_options">Anzeigen:</string>
<string name="show_developer_options">Entwickleroptionen anzeigen</string>
<string name="settings_section_title_experimenta">EXPERIMENTELL</string>
<string name="settings_section_title_experimenta">Experimentell</string>
<string name="database_upgrade">Datenbank-Aktualisierung</string>
<string name="mtr_error_different">Unterschiedlicher Migrationsstand in der App/Datenbank: %s / %s</string>
<string name="downgrade_and_open_chat">Datenbank herabstufen und den Chat öffnen</string>
@@ -1189,7 +1189,7 @@
<string name="you_can_accept_or_reject_connection">Wenn Personen eine Verbindung anfordern, können Sie diese annehmen oder ablehnen.</string>
<string name="you_wont_lose_your_contacts_if_delete_address">Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.</string>
<string name="customize_theme_title">Design anpassen</string>
<string name="theme_colors_section_title">INTERFACE-FARBEN</string>
<string name="theme_colors_section_title">Interface-Farben</string>
<string name="add_address_to_your_profile">Fügen Sie die Adresse Ihrem Profil hinzu, damit Ihre SimpleX-Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre SimpleX-Kontakte gesendet.</string>
<string name="all_your_contacts_will_remain_connected_update_sent">Alle Ihre Kontakte bleiben verbunden. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.</string>
<string name="create_address_and_let_people_connect">Erstellen Sie eine Adresse, damit sich Personen mit Ihnen verbinden können.</string>
@@ -1309,7 +1309,7 @@
<string name="non_fatal_errors_occured_during_import">Während des Imports sind nicht schwerwiegende Fehler aufgetreten:</string>
<string name="shutdown_alert_question">Herunterfahren\?</string>
<string name="shutdown_alert_desc">Bis zum Neustart der App erhalten Sie keine Benachrichtigungen mehr</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="settings_restart_app">Neustart</string>
<string name="settings_shutdown">Herunterfahren</string>
<string name="error_aborting_address_change">Fehler beim Beenden des Adresswechsels</string>
@@ -1372,7 +1372,7 @@
<string name="receipts_contacts_title_enable">Bestätigungen aktivieren\?</string>
<string name="receipts_contacts_override_enabled">Das Senden von Bestätigungen an %d Kontakte ist aktiviert</string>
<string name="receipts_contacts_enable_for_all">Für alle aktivieren</string>
<string name="settings_section_title_delivery_receipts">EMPFANGSBESTÄTIGUNGEN SENDEN AN</string>
<string name="settings_section_title_delivery_receipts">Empfangsbestätigungen senden an</string>
<string name="receipts_contacts_disable_keep_overrides">Deaktivieren (vorgenommene Einstellungen bleiben erhalten)</string>
<string name="send_receipts">Bestätigungen senden</string>
<string name="v5_2_fix_encryption">Ihre Verbindungen beibehalten</string>
@@ -1851,13 +1851,13 @@
<string name="network_smp_proxy_fallback_allow_downgrade">Herabstufung erlauben</string>
<string name="network_smp_proxy_mode_always_description">Sie nutzen immer privates Routing.</string>
<string name="network_smp_proxy_fallback_prohibit_description">Nachrichten werden nicht direkt versendet, selbst wenn Ihr oder der Ziel-Server kein privates Routing unterstützt.</string>
<string name="settings_section_title_private_message_routing">PRIVATES NACHRICHTEN-ROUTING</string>
<string name="settings_section_title_private_message_routing">Privates Nachrichten-Routing</string>
<string name="network_smp_proxy_fallback_allow_protected_description">Nachrichten werden direkt versendet, wenn die IP-Adresse geschützt ist, und Ihr oder der Ziel-Server kein privates Routing unterstützt.</string>
<string name="network_smp_proxy_fallback_allow_description">Nachrichten werden direkt versendet, wenn Ihr oder der Ziel-Server kein privates Routing unterstützt.</string>
<string name="private_routing_explanation">Zum Schutz Ihrer IP-Adresse, wird für die Nachrichten-Auslieferung privates Routing über Ihre konfigurierten SMP-Server genutzt.</string>
<string name="network_smp_proxy_mode_unprotected_description">Sie nutzen privates Routing mit unbekannten Servern, wenn Ihre IP-Adresse nicht geschützt ist.</string>
<string name="protect_ip_address">IP-Adresse schützen</string>
<string name="settings_section_title_files">DATEIEN</string>
<string name="settings_section_title_files">Dateien</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">Die App wird bei unbekannten Datei-Servern nach einer Download-Bestätigung fragen (außer bei .onion oder wenn ein SOCKS-Proxy aktiviert ist).</string>
<string name="file_not_approved_title">Unbekannte Server!</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für Datei-Server sichtbar sein.</string>
@@ -2126,7 +2126,7 @@
<string name="new_message">Neue Nachricht</string>
<string name="error_parsing_uri_desc">Bitte überprüfen Sie, ob der SimpleX-Link korrekt ist.</string>
<string name="error_parsing_uri_title">Ungültiger Link</string>
<string name="settings_section_title_chat_database">CHAT-DATENBANK</string>
<string name="settings_section_title_chat_database">Chat-Datenbank</string>
<string name="switching_profile_error_title">Fehler beim Wechseln des Profils</string>
<string name="delete_messages_cannot_be_undone_warning">Die Nachrichten werden gelöscht. Dies kann nicht rückgängig gemacht werden!</string>
<string name="new_chat_share_profile">Profil teilen</string>
@@ -2583,7 +2583,7 @@
<string name="share_old_link_alert_button">Alten Link teilen</string>
<string name="share_group_profile_via_link_alert_text">Der Link wird gekürzt sein, und das Gruppen-Profil wird über den Link geteilt.</string>
<string name="upgrade_group_link">Gruppen-Link aktualisieren</string>
<string name="settings_section_title_contact_requests_from_groups">KONTAKTANFRAGEN VON GRUPPEN</string>
<string name="settings_section_title_contact_requests_from_groups">Kontaktanfragen von Gruppen</string>
<string name="member_is_deleted_cant_accept_request">Mitglied ist gelöscht - Anfrage kann nicht angenommen werden</string>
<string name="rcv_direct_event_group_inv_link_received">Angefragte Verbindung von Gruppe %1$s</string>
<string name="this_setting_is_for_your_current_profile">Diese Einstellung gilt für Ihr aktuelles Profil</string>
@@ -2626,7 +2626,7 @@
<string name="placeholder_search_voice_messages">Sprachnachrichten suchen</string>
<string name="content_filter_videos">Videos</string>
<string name="content_filter_voice_messages">Sprachnachrichten</string>
<string name="info_row_connection_failed">VERBINDUNG FEHLGESCHLAGEN</string>
<string name="info_row_connection_failed">Verbindung fehlgeschlagen</string>
<string name="member_info_member_failed">Fehlgeschlagen</string>
<string name="down_migration_warning_chat_relays">Kanäle, welche Sie erstellt haben oder denen Sie beigetreten sind, werden dauerhaft deaktiviert.</string>
<string name="relay_bar_active">%1$d/%2$d Relais aktiv</string>
@@ -2695,12 +2695,12 @@
<string name="not_all_relays_connected">Es sind nicht alle Relais verbunden</string>
<string name="connect_plan_open_channel">Kanal öffnen</string>
<string name="connect_plan_open_new_channel">Neuen Kanal öffnen</string>
<string name="member_info_section_title_owner">EIGENTÜMER</string>
<string name="member_info_section_title_owner">Eigentümer</string>
<string name="channel_members_section_owners">Eigentümer</string>
<string name="preset_relay_address">Voreingestellte Relais-Adresse</string>
<string name="preset_relay_name">Voreingestellter Relais-Name</string>
<string name="group_member_role_relay">Relais</string>
<string name="member_info_section_title_relay">RELAIS</string>
<string name="member_info_section_title_relay">Relais</string>
<string name="info_row_relay_address">Relais-Adresse</string>
<string name="relay_address_alert_title">Relais-Adresse</string>
<string name="relay_connection_failed">Relais-Verbindung fehlgeschlagen</string>
@@ -2711,7 +2711,7 @@
<string name="error_relay_test_server_auth">Der Server erfordert eine Autorisierung, um eine Verbindung zum Relais herzustellen. Bitte Passwort überprüfen.</string>
<string name="server_warning">Serverwarnung</string>
<string name="share_relay_address">Relais-Adresse teilen</string>
<string name="member_info_section_title_subscriber">ABONNENT</string>
<string name="member_info_section_title_subscriber">Abonnent</string>
<string name="channel_members_title_subscribers">Abonnenten</string>
<string name="relay_section_footer_owner">Abonnenten verbinden sich über den RelaisLink mit dem Kanal.\nDie Relais-Adresse wurde zur Einrichtung dieses Relais für diesen Kanal verwendet.</string>
<string name="subscriber_will_be_removed_from_channel_cannot_be_undone">Abonnent wird aus dem Kanal entfernt. Dies kann nicht rückgängig gemacht werden!</string>
@@ -86,7 +86,7 @@
<string name="your_ICE_servers">Ο ΙCE διακομιστής σου</string>
<string name="v5_0_app_passcode">Κωδικός πρόσβασης εφαρμογής</string>
<string name="connect_via_member_address_alert_desc">Αίτημα σύνδεσης θα σταλεί σε αυτό το μέλος της ομάδας.</string>
<string name="settings_section_title_icon">ΟΙΚΟΝΑ ΕΦΑΡΜΟΓΗΣ</string>
<string name="settings_section_title_icon">Εικόνα εφαρμογής</string>
<string name="settings_section_title_app">Εφαρμογή</string>
<string name="your_settings">Οι ρυθμίσεις σου</string>
<string name="app_version_name">Έκδοση εφαρμογής: v%s</string>
@@ -105,7 +105,7 @@
<string name="change_verb">Άλλαξε</string>
<string name="available_in_v51">\nΔιαθέσιμο στην έκδοση 5.1</string>
<string name="icon_descr_call_ended">Τέλος κλήσης</string>
<string name="settings_section_title_calls">ΚΛΗΣΕΙΣ</string>
<string name="settings_section_title_calls">Κλήσεις</string>
<string name="auto_accept_contact">Αυτόματη αποδοχή</string>
<string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d αποτυχία κρυπτογράφησης μηνύματος</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">αλλαγή διεύθυνσης για %s…</string>
@@ -252,7 +252,7 @@
<string name="icon_descr_audio_on">Eνεργοποίηση ήχου</string>
<string name="alert_title_msg_bad_hash">Κακό μήνυμα hash</string>
<string name="privacy_media_blur_radius">Θάμπωση των μέσων</string>
<string name="settings_section_title_chat_database">ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΣΥΝΟΜΙΛΙΑΣ</string>
<string name="settings_section_title_chat_database">Βάση δεδομένων συνομιλίας</string>
<string name="keychain_is_storing_securely">Το Android Keystore χρησιμοποιείται για την ασφαλή αποθήκευση της φράσης πρόσβασης - επιτρέπει την υπηρεσία ειδοποιήσεων να λειτουργεί.</string>
<string name="member_info_member_blocked">αποκλεισμένος</string>
<string name="member_blocked_by_admin">Αποκλεισμένος από τον διαχειριστή</string>
@@ -288,7 +288,7 @@
<string name="deleted_chats">Αρχειοθετημένες επαφές</string>
<string name="migrate_from_device_cancel_migration">Ακύρωση μεταφοράς</string>
<string name="settings_section_title_chat_colors">Χρώματα συνομιλίας</string>
<string name="chat_database_section">ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΣΥΝΟΜΙΛΙΑΣ</string>
<string name="chat_database_section">Βάση δεδομένων συνομιλίας</string>
<string name="chat_is_running">Η συνομιλία εκτελείται</string>
<string name="impossible_to_recover_passphrase"><![CDATA[<b>Παρακαλώ σημείωσε</b>: ΔΕΝ θα μπορείς να ανακτήσεις ή να αλλάξεις τη φράση πρόσβασης εάν τη χάσεις.]]></string>
<string name="block_for_all">Αποκλεισμός για όλους</string>
@@ -377,7 +377,7 @@
<string name="integrity_msg_bad_id">κακό αναγνωριστικό μηνύματος</string>
<string name="answer_call">Απάντηση κλήσης</string>
<string name="alert_title_msg_bad_id">Κακό αναγνωριστικό μηνύματος</string>
<string name="settings_section_title_chats">ΣΥΝΟΜΙΛΙΕΣ</string>
<string name="settings_section_title_chats">Συνομιλίες</string>
<string name="chat_database_imported">Η βάση δεδεδομένων της συνομιλίας εισάχθηκε</string>
<string name="snd_conn_event_ratchet_sync_started">συμφωνία κρυπτογράφησης για %s…</string>
<string name="allow_calls_question">Να επιτραπούν οι κλήσεις;</string>
@@ -600,7 +600,7 @@
<string name="notification_preview_somebody">Κρυμμένη επαφή:</string>
<string name="cant_call_contact_deleted_alert_text">Η επαφή διαγράφηκε.</string>
<string name="cant_send_message_contact_not_ready">η επαφή δεν είναι έτοιμη</string>
<string name="settings_section_title_contact_requests_from_groups">ΑΙΤΗΣΕΙΣ ΕΠΑΦΩΝ ΑΠΟ ΟΜΑΔΕΣ</string>
<string name="settings_section_title_contact_requests_from_groups">Αιτήσεις επαφών από ομάδες</string>
<string name="chat_list_contacts">Επαφές</string>
<string name="contact_should_accept">η επαφή πρέπει να αποδεχτεί…</string>
<string name="delete_contact_cannot_undo_warning">Η επαφή θα διαγραφεί – αυτή η ενέργεια δεν μπορεί να αναιρεθεί!</string>
@@ -759,7 +759,7 @@
<string name="servers_info_details">Λεπτομέρειες</string>
<string name="developer_options_section">Επιλογές προγραμματιστή</string>
<string name="settings_developer_tools">Εργαλεία προγραμματιστή</string>
<string name="settings_section_title_device">ΣΥΣΚΕΥΗ</string>
<string name="settings_section_title_device">Συσκευή</string>
<string name="auth_device_authentication_is_disabled_turning_off">Η επαλήθευση συσκευής είναι απενεργοποιημένη. Απενεργοποιείται το SimpleX Lock.</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Η επαλήθευση συσκευής δεν είναι ενεργοποιημένη. Μπορείς να ενεργοποιήσεις το SimpleX Lock από τις Ρυθμίσεις, αφού πρώτα ενεργοποιήσεις την επαλήθευση συσκευής.</string>
<string name="devices">Συσκευές</string>
@@ -927,7 +927,7 @@
<string name="report_archive_for_all_moderators">Για όλους τους διαχειριστές</string>
<string name="v6_2_network_decentralization_enable_flux_reason">για καλύτερη ιδιωτικότητα μεταδεδομένων</string>
<string name="for_chat_profile">Για το προφίλ συνομιλίας %s:</string>
<string name="section_title_for_console">ΓΙΑ ΚΟΝΣΟΛΑ</string>
<string name="section_title_for_console">Για κονσόλα</string>
<string name="for_everybody">Για όλους</string>
<string name="onboarding_network_operators_app_will_use_for_routing">Για παράδειγμα, αν η επαφή σου λαμβάνει μηνύματα μέσω κάποιου SimpleX Chat διακομιιστή, η εφαρμογή σου θα τα παραδίδει μέσω ενός Flux διακομιστή.</string>
<string name="report_archive_for_me">Για μένα</string>
@@ -986,7 +986,7 @@
<string name="icon_descr_hang_up">Τερματισμός κλήσης</string>
<string name="audio_device_wired_headphones">Ακουστικά</string>
<string name="icon_descr_help">βοήθεια</string>
<string name="settings_section_title_help">ΒΟΗΘΕΙΑ</string>
<string name="settings_section_title_help">Βοήθεια</string>
<string name="v6_3_reports_descr">Βοήθησε τους διαχειριστές να διαχειρίζονται τις ομάδες τους.</string>
<string name="email_invite_body">Γεια σου!\nΣυνδέσου μαζί μου μέσω SimpleX Chat: %s</string>
<string name="notification_preview_mode_hidden">Κρυφό</string>
@@ -1069,7 +1069,7 @@
<string name="icon_descr_instant_notifications">Άμεσες ειδοποιήσεις</string>
<string name="service_notifications">Άμεσες ειδοποιήσεις!</string>
<string name="service_notifications_disabled">Οι άμεσες ειδοποιήσεις είναι απενεργοποιημένες!</string>
<string name="theme_colors_section_title">ΧΡΩΜΑΤΑ ΔΙΕΠΑΦΗΣ</string>
<string name="theme_colors_section_title">Χρώματα διεπαφής</string>
<string name="agent_internal_error_title">Εσωτερικό σφάλμα</string>
<string name="invalid_chat">μη έγκυρη συνομιλία</string>
<string name="invalid_connection_link">Μη έγκυρος σύνδεσμος</string>
@@ -1175,7 +1175,7 @@
<string name="media_and_file_servers">Διακομιστές πολυμέσων &amp; αρχείων</string>
<string name="privacy_media_blur_radius_medium">Μεσαίο</string>
<string name="group_member_role_member">μέλος</string>
<string name="member_info_section_title_member">ΜΕΛΟΣ</string>
<string name="member_info_section_title_member">Μέλος</string>
<string name="past_member_vName">Μέλος %1$s</string>
<string name="profile_update_event_member_name_changed">το μέλος %1$s άλλαξε σε %2$s</string>
<string name="member_admission">Εγγραφή μέλους</string>
@@ -1219,7 +1219,7 @@
<string name="update_network_smp_proxy_fallback_question">Εναλλακτική δρομολόγηση μηνυμάτων</string>
<string name="update_network_smp_proxy_mode_question">Λειτουργία δρομολόγησης μηνυμάτων</string>
<string name="messages_section_title">Μηνύματα</string>
<string name="settings_section_title_messages">ΜΗΝΥΜΑΤΑ ΚΑΙ ΑΡΧΕΙΑ</string>
<string name="settings_section_title_messages">Μηνύματα και αρχεία</string>
<string name="message_servers">Διακομιστές μηνυμάτων</string>
<string name="unblock_member_desc">Θα εμφανιστούν τα μηνύματα από το %s!</string>
<string name="unblock_members_desc">Θα εμφανιστούν τα μηνύματα από αυτά τα μέλη!</string>
@@ -1332,7 +1332,7 @@
<string name="image_decoding_exception_desc">Η εικόνα δεν μπορεί να αποκωδικοποιηθεί. Δοκίμασε μια άλλη εικόνα ή επικοινώνησε με τους προγραμματιστές.</string>
<string name="share_group_profile_via_link_alert_text">Ο σύνδεσμος θα είναι σύντομος και το προφίλ της ομάδας θα κοινοποιηθεί μέσω αυτού.</string>
<string name="theme">Θέμα</string>
<string name="settings_section_title_themes">ΘΕΜΑΤΑ</string>
<string name="settings_section_title_themes">Θέματα</string>
<string name="moderate_messages_will_be_deleted_warning">Τα μηνύματα θα διαγραφούν για όλα τα μέλη.</string>
<string name="moderate_messages_will_be_marked_warning">Τα μηνύματα θα επισημαίνονται ως ελεγχόμενα για όλα τα μέλη.</string>
<string name="moderate_message_will_be_deleted_warning">Το μήνυμα θα διαγραφεί για όλα τα μέλη.</string>
@@ -1582,7 +1582,7 @@
<string name="exit_without_saving">Έξοδος χωρίς αποθήκευση</string>
<string name="expand_verb">Επέκτεινε</string>
<string name="icon_descr_expand_role">Επέκταση επιλογής ρόλου</string>
<string name="settings_section_title_experimenta">ΠΕΙΡΑΜΑΤΙΚΟ</string>
<string name="settings_section_title_experimenta">Πειραματικό</string>
<string name="settings_experimental_features">Πειραματικά χαρακτηριστικά</string>
<string name="expired_label">έληξε</string>
<string name="export_database">Εξαγωγή της βάσης δεδομένων</string>
@@ -1604,7 +1604,7 @@
<string name="file_error_no_file">Το αρχείο δεν βρέθηκε - πιθανότατα το αρχείο διαγράφηκε ή ακυρώθηκε.</string>
<string name="file_with_path">Αρχείο: %s</string>
<string name="servers_info_files_tab">Αρχεία</string>
<string name="settings_section_title_files">ΑΡΧΕΙΑ</string>
<string name="settings_section_title_files">Αρχεία</string>
<string name="files_and_media">Αρχεία και πολυμέσα</string>
<string name="files_are_prohibited_in_group">Απαγορεύονται τα αρχεία και τα πολυμέσα.</string>
<string name="files_prohibited_in_this_chat">Τα αρχεία και τα πολυμέσα, απαγορεύονται σε αυτήν τη συνομιλία.</string>
@@ -1863,7 +1863,7 @@
<string name="v4_5_private_filenames">Ιδιωτικά ονόματα αρχείων</string>
<string name="v6_3_private_media_file_names">Ιδιωτικά ονόματα αρχείων πολυμέσων.</string>
<string name="v5_8_private_routing">Δρομολόγηση ιδιωτικών μηνυμάτων 🚀</string>
<string name="settings_section_title_private_message_routing">ΔΡΟΜΟΛΟΓΗΣΗ ΙΔΙΩΤΙΚΩΝ ΜΗΝΥΜΑΤΩΝ</string>
<string name="settings_section_title_private_message_routing">Δρομολόγηση ιδιωτικών μηνυμάτων</string>
<string name="note_folder_local_display_name">Ιδιωτικές σημειώσεις</string>
<string name="v5_5_private_notes">Ιδιωτικές σημειώσεις</string>
<string name="onboarding_notifications_mode_title">Ιδιωτικές ειδοποιήσεις</string>
@@ -2032,7 +2032,7 @@
<string name="revoke_file__action">Ανάκληση αρχείου</string>
<string name="revoke_file__title">Ανάκληση αρχείου;</string>
<string name="role_in_group">Ρόλος</string>
<string name="run_chat_section">ΕΚΚΙΝΗΣΗ ΣΥΝΟΜΙΛΙΑΣ</string>
<string name="run_chat_section">Εκκίνηση συνομιλίας</string>
<string name="notifications_mode_off">Εκτελείται όταν η εφαρμογή είναι ανοιχτή</string>
<string name="v5_8_safe_files">Ασφαλής λήψη αρχείων</string>
<string name="v5_6_safer_groups">Ασφαλέστερες ομάδες</string>
@@ -2098,7 +2098,7 @@
<string name="send_disappearing_message_send">Απέστειλε</string>
<string name="send_live_message_desc">Στείλε ένα ζωντανό μήνυμα - θα ενημερώνεται για τον παραλήπτη ή τους παραλήπτες καθώς το πληκτρολογείς.</string>
<string name="compose_view_send_contact_request_alert_question">Αποστολή αιτήματος επαφής;</string>
<string name="settings_section_title_delivery_receipts">ΑΠΟΣΤΟΛΗ ΑΝΑΦΟΡΩΝ ΠΑΡΑΔΟΣΗΣ ΣΕ</string>
<string name="settings_section_title_delivery_receipts">Αποστολή αναφορών παράδοσης σε</string>
<string name="button_send_direct_message">Αποστολή άμεσου μηνύματος</string>
<string name="compose_send_direct_message_to_connect">Στείλε άμεσο μήνυμα για να συνδεθείς</string>
<string name="send_disappearing_message">Αποστολή μηνύματος που εξαφανίζεται</string>
@@ -2153,7 +2153,7 @@
<string name="message_queue_info_server_info">πληροφορίες ουράς διακομιστή: %1$s\n\nτελευταίο ληφθέν μήνυμα: %2$s</string>
<string name="error_smp_test_server_auth">Ο διακομιστής απαιτεί εξουσιοδότηση για τη δημιουργία ουρών, έλεγξε τον κωδικό.</string>
<string name="error_xftp_test_server_auth">Ο διακομιστής απαιτεί εξουσιοδότηση για ανέβασμα αρχείων, έλεγξε τον κωδικό.</string>
<string name="conn_stats_section_title_servers">ΔΙΑΚΟΜΙΣΤΕΣ</string>
<string name="conn_stats_section_title_servers">Διακομιστές</string>
<string name="servers_info">Πληροφορίες διακομιστών</string>
<string name="servers_info_reset_stats_alert_message">Θα γίνει επαναφορά στα στατιστικά στοιχεία των διακομιστών - αυτή η ενέργεια δεν μπορεί να αναιρεθεί!</string>
<string name="smp_servers_test_failed">Η δοκιμή του διακομιστή απέτυχε!</string>
@@ -2179,7 +2179,7 @@
<string name="v4_6_group_welcome_message_descr">Όρισε το εμφανιζόμενο μήνυμα για τα νέα μέλη!</string>
<string name="icon_descr_settings">Ρυθμίσεις</string>
<string name="toolbar_settings">Ρυθμίσεις</string>
<string name="settings_section_title_settings">ΡΥΘΜΙΣΕΙΣ</string>
<string name="settings_section_title_settings">Ρυθμίσεις</string>
<string name="setup_database_passphrase">Όρισε τη φράση πρόσβασης της βάσης δεδομένων</string>
<string name="v5_7_shape_profile_images">Διαμόρφωση εικόνων προφίλ</string>
<string name="share_verb">Διαμοίρασε</string>
@@ -2260,7 +2260,7 @@
<string name="smp_server">Διακομιστής SMP</string>
<string name="smp_servers">Διακομιστές SMP</string>
<string name="network_socks_proxy">Διακομιστής μεσολάβησης SOCKS</string>
<string name="settings_section_title_socks">ΔΙΑΚΟΜΙΣΤΗΣ ΜΕΣΟΛΑΒΗΣΗΣ SOCKS</string>
<string name="settings_section_title_socks">Διακομιστής μεσολάβησης SOCKS</string>
<string name="network_socks_proxy_settings">Ρυθμίσεις διακομιστή μεσολάβησης SOCKS</string>
<string name="privacy_media_blur_radius_soft">Απαλό</string>
<string name="chat_database_exported_not_all_files">Κάποιο/α αρχείο/α δεν εξήχθησαν</string>
@@ -2309,7 +2309,7 @@
<string name="subscription_results_ignored">Η εγγραφή αγνοήθηκε</string>
<string name="migrate_from_device_bytes_uploaded">%s ανεβασμένα</string>
<string name="v4_6_audio_video_calls_descr">Υποστήριξη bluetooth και άλλων βελτιώσεων.</string>
<string name="settings_section_title_support">ΥΠΟΣΤΗΡΙΞΗ SIMPLEX CHAT</string>
<string name="settings_section_title_support">Υποστήριξη SimpleX Chat</string>
<string name="switch_verb">Ενάλλαξε</string>
<string name="v6_1_better_calls_descr">Εναλλαγή ήχου και βίντεο κατά τη διάρκεια της κλήσης.</string>
<string name="v6_1_switch_chat_profile_descr">Αλλαγή προφίλ συνομιλίας για προσκλήσεις 1-χρήσης.</string>
@@ -2414,7 +2414,7 @@
<string name="network_smp_proxy_fallback_allow">Ναι</string>
<string name="privacy_chat_list_open_links_yes">Ναι</string>
<string name="sender_you_pronoun">εσύ</string>
<string name="settings_section_title_you">ΕΣΥ</string>
<string name="settings_section_title_you">Εσύ</string>
<string name="group_info_member_you">εσύ: %1$s</string>
<string name="you_accepted_connection">Αποδέχθηκες τη σύνδεση</string>
<string name="snd_group_event_member_accepted">αποδέχθηκες αυτό το μέλος</string>
@@ -20,7 +20,7 @@
<string name="allow_your_contacts_to_send_voice_messages">Permites que tus contactos envien mensajes de voz.</string>
<string name="chat_preferences_always">siempre</string>
<string name="notifications_mode_off_desc">La aplicación sólo puede recibir notificaciones cuando se está ejecutando. No se iniciará ningún servicio en segundo plano.</string>
<string name="settings_section_title_icon">ICONO DE LA APLICACIÓN</string>
<string name="settings_section_title_icon">Icono de la aplicación</string>
<string name="turning_off_service_and_periodic">La optimización de la batería está activa, desactivando el servicio en segundo plano y las solicitudes periódicas de nuevos mensajes. Puedes volver a activarlos en Configuración.</string>
<string name="notifications_mode_service_desc">El servicio está siempre en funcionamiento en segundo plano. Las notificaciones se muestran en cuanto haya mensajes nuevos.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><![CDATA[<b>Se puede desactivar en la configuración</b>. En ese caso las notificaciones se seguirán mostrando mientras la aplicación esté en funcionamiento.]]></string>
@@ -200,7 +200,7 @@
<string name="smp_servers_delete_server">Eliminar servidor</string>
<string name="display_name">Introduce tu nombre:</string>
<string name="callstate_connected">conectado</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_section_title_device">Dispositivo</string>
<string name="database_passphrase">Contraseña base de datos</string>
<string name="delete_database">Eliminar base de datos</string>
<string name="delete_files_and_media_all">Eliminar todos los archivos</string>
@@ -243,7 +243,7 @@
<string name="core_version">Core versión: v%s</string>
<string name="delete_image">Eliminar imagen</string>
<string name="edit_image">Editar imagen</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_section_title_chats">Chats</string>
<string name="change_verb">Cambiar</string>
<string name="notifications_mode_periodic_desc">Se realizan comprobaciones de mensajes nuevos periódicas de hasta un minuto de duración cada 10 minutos</string>
<string name="clear_contacts_selection_button">Limpiar</string>
@@ -274,7 +274,7 @@
<string name="chat_preferences">Preferencias generales</string>
<string name="feature_cancelled_item">cancelado %s</string>
<string name="chat_is_stopped">SimpleX está parado</string>
<string name="settings_section_title_calls">LLAMADAS</string>
<string name="settings_section_title_calls">Llamadas</string>
<string name="chat_is_running">SimpleX está en ejecución</string>
<string name="rcv_conn_event_switch_queue_phase_changing">está cambiando de servidor…</string>
<string name="chat_with_developers">habla con los desarrolladores</string>
@@ -295,7 +295,7 @@
<string name="call_on_lock_screen">Llamadas en la ventana de bloqueo</string>
<string name="alert_title_cant_invite_contacts">¡No se pueden invitar contactos!</string>
<string name="chat_console">Consola de Chat</string>
<string name="chat_database_section">BASE DE DATOS DE SIMPLEX</string>
<string name="chat_database_section">Base de datos de SimpleX</string>
<string name="chat_database_deleted">Base de datos eliminada</string>
<string name="chat_database_imported">Base de datos importada</string>
<string name="smp_servers_check_address">Comprueba la dirección del servidor e inténtalo de nuevo.</string>
@@ -393,15 +393,15 @@
<string name="file_not_found">Archivo no encontrado</string>
<string name="how_to_use_simplex_chat">Guía de uso</string>
<string name="callstate_ended">finalizado</string>
<string name="settings_section_title_help">AYUDA</string>
<string name="settings_section_title_help">Ayuda</string>
<string name="export_database">Exportar base de datos</string>
<string name="error_exporting_chat_database">Error al exportar base de datos</string>
<string name="error_starting_chat">Error al iniciar Chat</string>
<string name="rcv_group_event_invited_via_your_group_link">se ha unido mediante tu enlace de grupo</string>
<string name="error_updating_link_for_group">Error al actualizar enlace de grupo</string>
<string name="section_title_for_console">PARA CONSOLA</string>
<string name="section_title_for_console">Para consola</string>
<string name="error_changing_role">Error al cambiar rol</string>
<string name="conn_stats_section_title_servers">SERVIDORES</string>
<string name="conn_stats_section_title_servers">Servidores</string>
<string name="group_display_name_field">Nombre del grupo:</string>
<string name="group_preferences">Preferencias del grupo</string>
<string name="group_members_can_send_dms">Los miembros pueden enviar mensajes directos.</string>
@@ -455,7 +455,7 @@
\n2. El descifrado ha fallado porque tu o tu contacto estáis usando una copia de seguridad antigua de la base de datos.
\n3. La conexión ha sido comprometida.</string>
<string name="notification_preview_mode_message">Contacto y texto</string>
<string name="member_info_section_title_member">MIEMBRO</string>
<string name="member_info_section_title_member">Miembro</string>
<string name="chat_item_ttl_none">nunca</string>
<string name="network_use_onion_hosts_no_desc">No se usarán hosts .onion</string>
<string name="settings_notification_preview_title">Vista previa de notificaciones</string>
@@ -524,7 +524,7 @@
<string name="video_call_no_encryption">videollamada (sin cifrar)</string>
<string name="status_no_e2e_encryption">sin cifrar</string>
<string name="import_database">Importar base de datos</string>
<string name="settings_section_title_messages">MENSAJES Y ARCHIVOS</string>
<string name="settings_section_title_messages">Mensajes y archivos</string>
<string name="import_database_question">¿Importar base de datos\?</string>
<string name="no_received_app_files">Sin archivos recibidos o enviados</string>
<string name="messages_section_title">Mensajes</string>
@@ -661,7 +661,7 @@
<string name="prohibit_sending_disappearing_messages">No se permiten mensajes temporales.</string>
<string name="only_you_can_send_voice">Sólo tú puedes enviar mensajes de voz.</string>
<string name="only_your_contact_can_send_voice">Sólo tu contacto puede enviar mensajes de voz.</string>
<string name="run_chat_section">EJECUTAR SIMPLEX</string>
<string name="run_chat_section">Ejecutar SimpleX</string>
<string name="restart_the_app_to_use_imported_chat_database">Reinicia la aplicación para poder usar la base de datos importada.</string>
<string name="enter_correct_current_passphrase">Introduce la contraseña actual correcta.</string>
<string name="feature_received_prohibited">recepción no permitida</string>
@@ -703,8 +703,8 @@
<string name="network_session_mode_transport_isolation">Aislamiento de transporte</string>
<string name="strikethrough_text">tachado</string>
<string name="use_chat">Abrir SimpleX</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_themes">TEMAS</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="settings_section_title_themes">Temas</string>
<string name="stop_chat_confirmation">Parar</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Esta acción es irreversible. Tu perfil, contactos, mensajes y archivos se perderán.</string>
<string name="skip_inviting_button">Omitir invitación a miembros</string>
@@ -786,7 +786,7 @@
<string name="profile_is_only_shared_with_your_contacts">El perfil sólo se comparte con tus contactos.</string>
<string name="callstate_starting">inicializando…</string>
<string name="alert_title_skipped_messages">Mensajes omitidos</string>
<string name="settings_section_title_settings">CONFIGURACIÓN</string>
<string name="settings_section_title_settings">Configuración</string>
<string name="stop_chat_question">¿Parar SimpleX?</string>
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
<string name="group_invitation_tap_to_join">Pulsa para unirte</string>
@@ -794,7 +794,7 @@
<string name="network_option_tcp_connection_timeout">Timeout de la conexión TCP</string>
<string name="theme">Tema</string>
<string name="set_group_preferences">Establece preferencias de grupo</string>
<string name="settings_section_title_support">SOPORTE SIMPLEX CHAT</string>
<string name="settings_section_title_support">Soporte SimpleX Chat</string>
<string name="set_password_to_export">Escribe la contraseña para exportar</string>
<string name="update_database">Actualizar</string>
<string name="update_database_passphrase">Actualizar contraseña base de datos</string>
@@ -899,7 +899,7 @@
<string name="your_calls">Llamadas</string>
<string name="your_ice_servers">Servidores ICE</string>
<string name="your_privacy">Privacidad</string>
<string name="settings_section_title_you">MIS DATOS</string>
<string name="settings_section_title_you">Mis datos</string>
<string name="your_chat_database">Base de datos</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Puedes iniciar el chat en Configuración / Base de datos o reiniciando la aplicación.</string>
<string name="you_sent_group_invitation">Has enviado una invitación de grupo</string>
@@ -990,7 +990,7 @@
<string name="incompatible_database_version">Versión de base de datos incompatible</string>
<string name="confirm_database_upgrades">Confirmar actualizaciones de la bases de datos</string>
<string name="mtr_error_no_down_migration">la versión de la base de datos es más reciente que la aplicación, pero no hay migración hacia versión anterior para: %s</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="developer_options">IDs de la base de datos y opciones de aislamiento de transporte.</string>
<string name="file_will_be_received_when_contact_completes_uploading">El archivo se recibirá cuando el contacto termine de subirlo.</string>
<string name="image_will_be_received_when_contact_completes_uploading">La imagen se recibirá cuando el contacto termine de subirla.</string>
@@ -1142,7 +1142,7 @@
<string name="color_sent_message">Mensaje enviado</string>
<string name="stop_sharing">Dejar de compartir</string>
<string name="stop_sharing_address">¿Dejar de compartir la dirección\?</string>
<string name="theme_colors_section_title">COLORES DE LA INTERFAZ</string>
<string name="theme_colors_section_title">Colores de la interfaz</string>
<string name="you_can_create_it_later">Puedes crearla más tarde</string>
<string name="share_address_with_contacts_question">¿Compartir la dirección con los contactos SimpleX?</string>
<string name="share_with_contacts">Compartir con contactos SimpleX</string>
@@ -1229,7 +1229,7 @@
<string name="item_info_no_text">sin texto</string>
<string name="non_fatal_errors_occured_during_import">Han ocurrido algunos errores no críticos durante la importación:</string>
<string name="shutdown_alert_question">¿Salir de SimpleX?</string>
<string name="settings_section_title_app">APLICACIÓN</string>
<string name="settings_section_title_app">Aplicación</string>
<string name="settings_restart_app">Reiniciar</string>
<string name="settings_shutdown">Salir</string>
<string name="shutdown_alert_desc">Las notificaciones dejarán de funcionar hasta que vuelvas a iniciar la aplicación</string>
@@ -1291,7 +1291,7 @@
<string name="receipts_contacts_enable_for_all">Activar para todos</string>
<string name="receipts_contacts_enable_keep_overrides">Activar (conservar anulaciones)</string>
<string name="receipts_contacts_disable_for_all">Desactivar para todos</string>
<string name="settings_section_title_delivery_receipts">ENVIAR CONFIRMACIONES DE ENTREGA A</string>
<string name="settings_section_title_delivery_receipts">Enviar confirmaciones de entrega a</string>
<string name="delivery_receipts_are_disabled">¡Las confirmaciones de entrega están desactivadas!</string>
<string name="dont_enable_receipts">No activar</string>
<string name="error_enabling_delivery_receipts">¡Error al activar confirmaciones de entrega!</string>
@@ -1776,7 +1776,7 @@
<string name="network_smp_proxy_mode_always_description">Usar siempre enrutamiento privado.</string>
<string name="message_delivery_warning_title">Aviso de entrega de mensaje</string>
<string name="network_smp_proxy_mode_never">Nunca</string>
<string name="settings_section_title_private_message_routing">ENRUTAMIENTO PRIVADO DE MENSAJES</string>
<string name="settings_section_title_private_message_routing">Enrutamiento privado de mensajes</string>
<string name="srv_error_host">La dirección del servidor es incompatible con la configuración de la red.</string>
<string name="network_smp_proxy_mode_unprotected">Con IP desprotegida</string>
<string name="snd_error_auth">Clave incorrecta o conexión desconocida - probablemente esta conexión fue eliminada</string>
@@ -1787,7 +1787,7 @@
\n%1$s.</string>
<string name="protect_ip_address">Proteger dirección IP</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Sin Tor o VPN, tu dirección IP será visible para los servidores de archivos.</string>
<string name="settings_section_title_files">ARCHIVOS</string>
<string name="settings_section_title_files">Archivos</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">La aplicación pedirá que confirmes las descargas desde servidores de archivos desconocidos (excepto si son .onion o cuando esté habilitado el proxy SOCKS).</string>
<string name="settings_section_title_chat_colors">Colores del chat</string>
<string name="settings_section_title_chat_theme">Tema del chat</string>
@@ -2053,7 +2053,7 @@
<string name="error_parsing_uri_desc">Por favor, comprueba que el enlace SimpleX es correcto.</string>
<string name="forward_files_in_progress_desc">%1$d archivo(s) se está(n) descargando todavía.</string>
<string name="n_other_file_errors">%1$d otro(s) error(es) de archivo.</string>
<string name="settings_section_title_chat_database">BASE DE DATOS</string>
<string name="settings_section_title_chat_database">Base de datos</string>
<string name="error_forwarding_messages">Error en reenvío de mensajes</string>
<string name="forward_alert_title_messages_to_forward">¿Reenviar %1$s mensaje(s)?</string>
<string name="forward_multiple">Reenviar mensajes…</string>
@@ -2508,7 +2508,7 @@
<string name="share_old_link_alert_button">Compartir enlace antiguo</string>
<string name="share_group_profile_via_link_alert_text">El enlace será corto y el perfil del grupo se compartirá mediante el enlace.</string>
<string name="upgrade_group_link">Actualizar enlace de grupo</string>
<string name="settings_section_title_contact_requests_from_groups">SOLICITUDES DE CONTACTO EN GRUPOS</string>
<string name="settings_section_title_contact_requests_from_groups">Solicitudes de contacto en grupos</string>
<string name="rcv_direct_event_group_inv_link_received">conexión solicitada desde el grupo %1$s</string>
<string name="this_setting_is_for_your_current_profile">Esta configuración se aplica al perfil actual</string>
<string name="member_is_deleted_cant_accept_request">Miembro eliminado, no puede aceptar solicitudes</string>
@@ -2597,7 +2597,7 @@
<string name="snd_channel_event_channel_profile_updated">perfil del canal actualizado</string>
<string name="delete_channel_for_all_subscribers_cannot_undo_warning">El canal será eliminado para todos los suscriptores. ¡No puede deshacerse!</string>
<string name="delete_channel_for_self_cannot_undo_warning">El canal será eliminado para tí. ¡No puede deshacerse!</string>
<string name="info_row_connection_failed">CONEXIÓN FALLIDA</string>
<string name="info_row_connection_failed">Conexión fallida</string>
<string name="create_channel_title">Crear canal público</string>
<string name="create_channel_button">Crear canal público</string>
<string name="create_channel_beta_button">Crear canal público (BETA)</string>
@@ -2631,12 +2631,12 @@
<string name="not_all_relays_connected">Hay servidores no conectados</string>
<string name="connect_plan_open_channel">Abrir canal</string>
<string name="connect_plan_open_new_channel">Abrir canal nuevo</string>
<string name="member_info_section_title_owner">PROPIETARIO</string>
<string name="member_info_section_title_owner">Propietario</string>
<string name="channel_members_section_owners">Propietarios</string>
<string name="preset_relay_address">Direcciones predefinidas</string>
<string name="preset_relay_name">Nombres predefinidos</string>
<string name="group_member_role_relay">servidor</string>
<string name="member_info_section_title_relay">SERVIDOR</string>
<string name="member_info_section_title_relay">Servidor</string>
<string name="info_row_relay_address">Dirección servidor</string>
<string name="relay_address_alert_title">Dirección del servidor</string>
<string name="info_row_relay_link">Enlace servidor</string>
@@ -2647,7 +2647,7 @@
<string name="error_relay_test_server_auth">El servidor requiere autorización para conectar con el servidor, comprueba la contraseña.</string>
<string name="server_warning">Alerta del servidor</string>
<string name="share_relay_address">Compartir dirección del servidor</string>
<string name="member_info_section_title_subscriber">SUSCRIPTOR</string>
<string name="member_info_section_title_subscriber">Suscriptor</string>
<string name="channel_members_title_subscribers">Suscriptores</string>
<string name="relay_section_footer_owner">Los suscriptores usan el enlace del servidor para conectarse a los canales.\nLa dirección del servidor se usó para establecer el servidor para el canal.</string>
<string name="subscriber_will_be_removed_from_channel_cannot_be_undone">El suscriptor será eliminado del canal. ¡No puede deshacerse!</string>
@@ -781,7 +781,7 @@
<string name="la_mode_off">خاموش</string>
<string name="receipts_groups_override_enabled">ارسال رسید برای %d گروه فعال است</string>
<string name="receipts_groups_override_disabled">ارسال رسید برای %d گروه غیرفعال است</string>
<string name="settings_section_title_support">حمایت از SIMPLEX CHAT</string>
<string name="settings_section_title_support">حمایت از SimpleX Chat</string>
<string name="settings_section_title_socks">پروکسی SOCKS</string>
<string name="settings_section_title_use_from_desktop">استفاده از کامپیوتر</string>
<string name="new_database_archive">آرشیو پایگاه داده جدید</string>
@@ -39,9 +39,9 @@
<string name="allow_to_delete_messages">Salli lähetettyjen viestien peruuttamaton poistaminen.</string>
<string name="allow_to_send_disappearing">Salli katoavien viestien lähettäminen.</string>
<string name="v5_1_self_destruct_passcode_descr">Kaikki tiedot poistetaan, kun se syötetään.</string>
<string name="settings_section_title_icon">SOVELLUKSEN KUVAKE</string>
<string name="settings_section_title_icon">Sovelluksen kuvake</string>
<string name="full_backup">Sovelluksen tietojen varmuuskopiointi</string>
<string name="settings_section_title_calls">PUHELUT</string>
<string name="settings_section_title_calls">Puhelut</string>
<string name="icon_descr_video_asked_to_receive">Pyydettiin videon vastaanottamista</string>
<string name="la_authenticate">Tunnistaudu</string>
<string name="auth_unavailable">Tunnistautuminen ei ole käytettävissä</string>
@@ -54,7 +54,7 @@
<string name="database_encryption_will_be_updated">Tietokannan salauksen tunnuslause päivitetään ja tallennetaan Keystoreen.</string>
<string name="users_delete_profile_for">Poista keskusteluprofiili käyttäjälle</string>
<string name="deleted_description">poistettu</string>
<string name="settings_section_title_device">LAITE</string>
<string name="settings_section_title_device">Laite</string>
<string name="ttl_h">%dh</string>
<string name="connection_error">Yhteysvirhe</string>
<string name="cannot_receive_file">Tiedostoa ei voi vastaanottaa</string>
@@ -153,7 +153,7 @@
<string name="change_self_destruct_mode">Vaihda itsetuhotilaa</string>
<string name="change_self_destruct_passcode">Vaihda itsetuhoutuva pääsykoodi</string>
<string name="app_passcode_replaced_with_self_destruct">Sovelluksen salasana korvataan itsetuhoutuvalla pääsykoodilla.</string>
<string name="chat_database_section">KESKUSTELUJEN TIETOKANTA</string>
<string name="chat_database_section">Keskustelujen tietokanta</string>
<string name="settings_developer_tools">Kehittäjän työkalut</string>
<string name="cannot_access_keychain">Ei pääsyä Keystoreen tietokannan salasanan tallentamiseksi</string>
<string name="share_text_database_id">Tietokannan tunnus: %d</string>
@@ -308,7 +308,7 @@
<string name="auto_accept_images">Hyväksy kuvat automaattisesti</string>
<string name="alert_title_msg_bad_id">Virheellinen viestin tunniste</string>
<string name="change_lock_mode">Vaihda lukitustilaa</string>
<string name="settings_section_title_chats">KESKUSTELUT</string>
<string name="settings_section_title_chats">Keskustelut</string>
<string name="all_group_members_will_remain_connected">Kaikki ryhmän jäsenet pysyvät yhteydessä.</string>
<string name="alert_title_cant_invite_contacts">Kontaktia ei voi kutsua!</string>
<string name="group_member_status_complete">valmis</string>
@@ -453,7 +453,7 @@
<string name="error_starting_chat">Virhe käynnistettäessä keskustelua</string>
<string name="error_stopping_chat">Virhe keskustelun lopettamisessa</string>
<string name="error_changing_message_deletion">Virhe asetuksen muuttamisessa</string>
<string name="settings_section_title_experimenta">KOKEELLINEN</string>
<string name="settings_section_title_experimenta">Kokeellinen</string>
<string name="hide_dev_options">Piilota:</string>
<string name="how_it_works">Kuinka se toimii</string>
<string name="encrypted_video_call">e2e-salattu videopuhelu</string>
@@ -526,7 +526,7 @@
<string name="image_saved">Kuva tallennettu galleriaan</string>
<string name="image_will_be_received_when_contact_completes_uploading">Kuva vastaanotetaan, kun kontaktisi on ladannut sen.</string>
<string name="choose_file">Tiedosto</string>
<string name="settings_section_title_help">APUA</string>
<string name="settings_section_title_help">Apua</string>
<string name="error_encrypting_database">Virhe tietokannan salauksessa</string>
<string name="downgrade_and_open_chat">Alenna ja avaa chat</string>
<string name="icon_descr_group_inactive">Ei-aktiivinen ryhmä</string>
@@ -576,7 +576,7 @@
<string name="immune_to_spam_and_abuse">Immuuni roskapostille ja väärinkäytöksille</string>
<string name="error_exporting_chat_database">Virhe vietäessä keskustelujen tietokantaa</string>
<string name="user_hide">Piilota</string>
<string name="section_title_for_console">KONSOLIIN</string>
<string name="section_title_for_console">Konsoliin</string>
<string name="group_member_status_group_deleted">poistettu ryhmä</string>
<string name="snd_group_event_group_profile_updated">ryhmäprofiili päivitetty</string>
<string name="alert_title_group_invitation_expired">Vanhentunut kutsu!</string>
@@ -655,7 +655,7 @@
<string name="network_option_ping_interval">PING-väli</string>
<string name="users_delete_with_connections">Profiili- ja palvelinyhteydet</string>
<string name="set_group_preferences">Aseta ryhmän asetukset</string>
<string name="conn_stats_section_title_servers">PALVELIMET</string>
<string name="conn_stats_section_title_servers">Palvelimet</string>
<string name="save_and_notify_contact">Tallenna ja ilmoita kontaktille</string>
<string name="save_and_notify_contacts">Tallenna ja ilmoita kontakteille</string>
<string name="alert_title_skipped_messages">Ohitetut viestit</string>
@@ -715,7 +715,7 @@
<string name="self_destruct">Itsetuho</string>
<string name="self_destruct_passcode_changed">Itsetuhoutuva pääsykoodi vaihdettu!</string>
<string name="self_destruct_passcode_enabled">Itsetuhoutuva pääsykoodi käytössä!</string>
<string name="settings_section_title_socks">SUKAT VÄLITYSPALVELIN</string>
<string name="settings_section_title_socks">SOCKS välityspalvelin</string>
<string name="new_database_archive">Uusi tietokanta-arkisto</string>
<string name="no_received_app_files">Ei vastaanotettuja tai lähetettyjä tiedostoja</string>
<string name="remove_passphrase_from_keychain">Poistetaanko tunnuslause Keystoresta\?</string>
@@ -752,7 +752,7 @@
<string name="save_and_notify_group_members">Tallenna ja ilmoita ryhmän jäsenille</string>
<string name="stop_chat_confirmation">Lopeta</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Pysäytä keskustelut viedäksesi, tuodaksesi tai poistaaksesi keskustelujen tietokannan. Et voi vastaanottaa ja lähettää viestejä, kun keskustelut on pysäytetty.</string>
<string name="run_chat_section">SUORITA CHAT</string>
<string name="run_chat_section">Suorita chat</string>
<string name="set_password_to_export">Aseta tunnuslause vientiä varten</string>
<string name="enter_correct_current_passphrase">Anna oikea nykyinen tunnuslause.</string>
<string name="restore_database_alert_confirm">Palauta</string>
@@ -836,7 +836,7 @@
<string name="open_simplex_chat_to_accept_call">Avaa SimpleX Chat hyväksyäksesi puhelun</string>
<string name="status_no_e2e_encryption">ei e2e-salausta</string>
<string name="settings_section_title_support">TUE SIMPLEX CHATia</string>
<string name="settings_section_title_messages">VIESTIT JA TIEDOSTOT</string>
<string name="settings_section_title_messages">Viestit ja tiedostot</string>
<string name="share_address">Jaa osoite</string>
<string name="users_delete_data_only">Vain paikalliset profiilitiedot</string>
<string name="color_received_message">Vastaanotettu viesti</string>
@@ -867,7 +867,7 @@
<string name="ok">OK</string>
<string name="no_details">ei tietoja</string>
<string name="add_contact">Kertakutsulinkki</string>
<string name="settings_section_title_settings">ASETUKSET</string>
<string name="settings_section_title_settings">Asetukset</string>
<string name="new_passphrase">Uusi tunnuslause…</string>
<string name="restore_database">Palauta tietokannan varmuuskopio</string>
<string name="database_backup_can_be_restored">Tietokannan tunnuslauseen muuttamista ei suoritettu loppuun.</string>
@@ -967,7 +967,7 @@
<string name="share_text_updated_at">Päivitetty: %s</string>
<string name="info_row_sent_at">Lähetetty klo</string>
<string name="share_text_sent_at">Lähetetty: %s</string>
<string name="member_info_section_title_member">JÄSEN</string>
<string name="member_info_section_title_member">Jäsen</string>
<string name="share_text_moderated_at">Moderoitu klo: %s</string>
<string name="current_version_timestamp">%s (nykyinen)</string>
<string name="switch_verb">Vaihda</string>
@@ -1061,7 +1061,7 @@
<string name="you_control_your_chat">Hallitset keskustelujasi!</string>
<string name="your_current_profile">Nykyinen profiilisi</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Profiilisi tallennetaan laitteeseesi ja jaetaan vain kontaktiesi kanssa. SimpleX -palvelimet eivät näe profiiliasi.</string>
<string name="settings_section_title_themes">TEEMAT</string>
<string name="settings_section_title_themes">Teemat</string>
<string name="messages_section_description">Tämä asetus koskee nykyisen keskusteluprofiilisi viestejä</string>
<string name="delete_files_and_media_desc">Tätä toimintoa ei voi kumota - kaikki vastaanotetut ja lähetetyt tiedostot ja media poistetaan. Matalan resoluution kuvat säilyvät.</string>
<string name="unknown_error">Tuntematon virhe</string>
@@ -1116,7 +1116,7 @@
<string name="your_SMP_servers">SMP-palvelimesi</string>
<string name="your_XFTP_servers">XFTP-palvelimesi</string>
<string name="use_simplex_chat_servers__question">Käytä SimpleX Chat palvelimia\?</string>
<string name="theme_colors_section_title">KÄYTTÖLIITTYMÄN VÄRIT</string>
<string name="theme_colors_section_title">Käyttöliittymän värit</string>
<string name="update_network_session_mode_question">Päivitä kuljetuksen eristystila\?</string>
<string name="you_can_create_it_later">Voit luoda sen myöhemmin</string>
<string name="to_reveal_profile_enter_password">Voit paljastaa piilotetun profiilisi kirjoittamalla koko salasanan Keskusteluprofiilit-sivun hakukenttään.</string>
@@ -1151,7 +1151,7 @@
<string name="icon_descr_video_snd_complete">Video lähetetty</string>
<string name="icon_descr_waiting_for_video">Odottaa videota</string>
<string name="this_string_is_not_a_connection_link">Tämä merkkijono ei ole yhteyslinkki!</string>
<string name="settings_section_title_you">SINÄ</string>
<string name="settings_section_title_you">Sinä</string>
<string name="upgrade_and_open_chat">Päivitä ja avaa keskustelu</string>
<string name="v4_5_private_filenames_descr">Aikavyöhykkeen suojaamiseksi kuva-/äänitiedostot käyttävät UTC:tä.</string>
<string name="v5_0_large_files_support">Videot ja tiedostot 1 Gt asti</string>
@@ -1228,7 +1228,7 @@
<string name="custom_time_unit_weeks">viikkoa</string>
<string name="shutdown_alert_desc">Ilmoitukset lakkaavat toimimasta, kunnes käynnistät sovelluksen uudelleen</string>
<string name="settings_shutdown">Sulje</string>
<string name="settings_section_title_app">SOVELLUS</string>
<string name="settings_section_title_app">Sovellus</string>
<string name="settings_restart_app">Käynnistä uudelleen</string>
<string name="shutdown_alert_question">Sulje\?</string>
<string name="la_mode_off">Pois</string>
@@ -1305,7 +1305,7 @@
<string name="receipts_contacts_title_enable">Salli kuittaukset\?</string>
<string name="receipts_contacts_override_disabled">Kuittauksien lähettäminen on pois käytöstä %d kontakteilta</string>
<string name="receipts_contacts_override_enabled">Kuittauksien lähettäminen on käytössä %d kontakteille</string>
<string name="settings_section_title_delivery_receipts">LÄHETÄ TOIMITUSKUITTAUKSET VASTAANOTTAJALLE</string>
<string name="settings_section_title_delivery_receipts">Lähetä toimituskuittaukset vastaanottajalle</string>
<string name="rcv_conn_event_verification_code_reset">turvakoodi on muuttunut</string>
<string name="conn_event_ratchet_sync_started">hyväksyy salausta…</string>
<string name="snd_conn_event_ratchet_sync_allowed">salauksen uudelleenneuvottelu sallittu %s:lle</string>
@@ -1465,7 +1465,7 @@
<string name="permissions_camera">Kamera</string>
<string name="permissions_open_settings">Avaa asetukset</string>
<string name="protect_ip_address">Suojaa IP-osoite</string>
<string name="settings_section_title_files">TIEDOSTOT</string>
<string name="settings_section_title_files">Tiedostot</string>
<string name="settings_section_title_profile_images">Profiilikuvat</string>
<string name="group_member_status_unknown_short">tuntematon</string>
<string name="remove_member_button">Poista jäsen</string>
@@ -453,7 +453,7 @@
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Consomme davantage de batterie </b> L\'app fonctionne toujours en arrière-plan - les notifications s\'affichent instantanément.]]></string>
<string name="integrity_msg_skipped">%1$d message(s) manqué(s)</string>
<string name="integrity_msg_bad_id">ID du message incorrect</string>
<string name="settings_section_title_settings">PARAMÈTRES</string>
<string name="settings_section_title_settings">Paramètres</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Cela peut arriver quand :
\n1. Les messages ont expiré dans le client expéditeur après 2 jours ou sur le serveur après 30 jours.
\n2. Le déchiffrement du message a échoué, car vous ou votre contact avez utilisé une ancienne sauvegarde de base de données.
@@ -487,12 +487,12 @@
<string name="icon_descr_call_progress">Appel en cours</string>
<string name="icon_descr_call_ended">Appel terminé</string>
<string name="your_privacy">Votre vie privée</string>
<string name="settings_section_title_device">APPAREIL</string>
<string name="settings_section_title_chats">DISCUSSIONS</string>
<string name="settings_section_title_device">Appareil</string>
<string name="settings_section_title_chats">Discussions</string>
<string name="settings_developer_tools">Outils du développeur</string>
<string name="settings_section_title_icon">ICONE DE L\'APP</string>
<string name="settings_section_title_icon">Icone de l\'app</string>
<string name="your_chat_database">Votre base de données de chat</string>
<string name="run_chat_section">LANCER LE CHAT</string>
<string name="run_chat_section">Lancer le chat</string>
<string name="stop_chat_question">Arrêter le chat \?</string>
<string name="restart_the_app_to_use_imported_chat_database">Redémarrez l\'application pour utiliser la base de données de chat importée.</string>
<string name="chat_item_ttl_day">1 jour</string>
@@ -522,10 +522,10 @@
<string name="settings_audio_video_calls">Appels audio et vidéo</string>
<string name="status_e2e_encrypted">chiffré de bout en bout</string>
<string name="settings_experimental_features">Fonctionnalités expérimentales</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_themes">THEMES</string>
<string name="settings_section_title_messages">MESSAGES ET FICHIERS</string>
<string name="settings_section_title_calls">APPELS</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="settings_section_title_themes">Themes</string>
<string name="settings_section_title_messages">Messages et fichiers</string>
<string name="settings_section_title_calls">Appels</string>
<string name="import_database">Importer la base de données</string>
<string name="new_database_archive">Nouvelle archive de base de données</string>
<string name="old_database_archive">Archives de l\'ancienne base de données</string>
@@ -601,13 +601,13 @@
<string name="protect_app_screen">Protéger l\'écran de l\'app</string>
<string name="auto_accept_images">Acceptation automatique des images</string>
<string name="full_backup">Sauvegarde des données de l\'app</string>
<string name="settings_section_title_you">VOUS</string>
<string name="settings_section_title_help">AIDE</string>
<string name="settings_section_title_support">SOUTENEZ SIMPLEX CHAT</string>
<string name="settings_section_title_you">Vous</string>
<string name="settings_section_title_help">Aide</string>
<string name="settings_section_title_support">Soutenez SimpleX Chat</string>
<string name="settings_section_title_incognito">Mode Incognito</string>
<string name="chat_is_running">Le chat est en cours d\'exécution</string>
<string name="chat_is_stopped">Le chat est arrêté</string>
<string name="chat_database_section">BASE DE DONNÉES DU CHAT</string>
<string name="chat_database_section">Base de données du chat</string>
<string name="database_passphrase">Phrase secrète de la base de données</string>
<string name="export_database">Exporter la base de données</string>
<string name="stop_chat_confirmation">Arrêter</string>
@@ -694,7 +694,7 @@
<string name="button_create_group_link">Créer un lien</string>
<string name="button_edit_group_profile">Modifier le profil du groupe</string>
<string name="remove_member_confirmation">Supprimer</string>
<string name="member_info_section_title_member">MEMBRE</string>
<string name="member_info_section_title_member">Membre</string>
<string name="live_message">Message dynamique !</string>
<string name="send_live_message">Envoyer un message dynamique</string>
<string name="send_live_message_desc">Envoyez un message dynamique - il sera mis à jour pour le⸱s destinataire⸱s au fur et à mesure que vous le tapez</string>
@@ -708,7 +708,7 @@
<string name="error_deleting_link_for_group">Erreur lors de la suppression du lien du groupe</string>
<string name="error_creating_link_for_group">Erreur lors de la création du lien du groupe</string>
<string name="only_group_owners_can_change_prefs">Seuls les propriétaires du groupe peuvent modifier les préférences du groupe.</string>
<string name="section_title_for_console">POUR TERMINAL</string>
<string name="section_title_for_console">Pour terminal</string>
<string name="change_member_role_question">Changer le rôle du groupe \?</string>
<string name="member_role_will_be_changed_with_notification">Son rôle est désormais %s. Tous les membres du groupe en seront informés.</string>
<string name="icon_descr_contact_checked">Contact vérifié⸱e</string>
@@ -747,7 +747,7 @@
<string name="direct_messages">Messages directs</string>
<string name="full_deletion">Supprimer pour tous</string>
<string name="only_you_can_delete_messages">Vous êtes le seul à pouvoir supprimer des messages de manière irréversible (votre contact peut les marquer comme supprimé). (24 heures)</string>
<string name="conn_stats_section_title_servers">SERVEURS</string>
<string name="conn_stats_section_title_servers">Serveurs</string>
<string name="receiving_via">Réception via</string>
<string name="theme_system">Système</string>
<string name="allow_direct_messages">Autoriser l\'envoi de messages directs aux membres.</string>
@@ -996,7 +996,7 @@
<string name="show_developer_options">Afficher les options pour les développeurs</string>
<string name="file_will_be_received_when_contact_completes_uploading">Le fichier sera reçu lorsque votre contact aura terminé de le mettre en ligne.</string>
<string name="developer_options">IDs de base de données et option d\'isolement du transport.</string>
<string name="settings_section_title_experimenta">EXPÉRIMENTALE</string>
<string name="settings_section_title_experimenta">Expérimentale</string>
<string name="hide_dev_options">Cacher :</string>
<string name="unhide_chat_profile">Dévoiler le profil de chat</string>
<string name="unhide_profile">Dévoiler le profil</string>
@@ -1102,7 +1102,7 @@
<string name="you_wont_lose_your_contacts_if_delete_address">Vous ne perdrez pas vos contacts si vous supprimez votre adresse ultérieurement.</string>
<string name="simplex_address">Adresse SimpleX</string>
<string name="you_can_accept_or_reject_connection">Vous pouvez accepter ou refuser les demandes de contacts.</string>
<string name="theme_colors_section_title">COULEURS DE L\'INTERFACE</string>
<string name="theme_colors_section_title">Couleurs de l\'interface</string>
<string name="your_contacts_will_remain_connected">Vos contacts resteront connectés.</string>
<string name="share_address_with_contacts_question">Partager l\'adresse avec vos contacts ?</string>
<string name="share_with_contacts">Partager avec vos contacts</string>
@@ -1232,7 +1232,7 @@
<string name="shutdown_alert_question">Arrêt \?</string>
<string name="settings_shutdown">Mise à l\'arrêt</string>
<string name="settings_restart_app">Redémarrer</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="abort_switch_receiving_address_confirm">Abandonner</string>
<string name="error_aborting_address_change">Erreur lors de l\'annulation du changement d\'adresse</string>
<string name="abort_switch_receiving_address_question">Abandonner le changement d\'adresse \?</string>
@@ -1251,7 +1251,7 @@
<string name="group_members_can_send_files">Les membres peuvent envoyer des fichiers et des médias.</string>
<string name="files_are_prohibited_in_group">Les fichiers et les médias sont interdits.</string>
<string name="fix_connection_not_supported_by_group_member">Correction non prise en charge par un membre du groupe</string>
<string name="settings_section_title_delivery_receipts">ENVOYER DES ACCUSÉS DE RÉCEPTION AUX</string>
<string name="settings_section_title_delivery_receipts">Envoyer des accusés de réception aux</string>
<string name="sync_connection_force_desc">Le chiffrement fonctionne et le nouvel accord de chiffrement n\'est pas nécessaire. Cela peut provoquer des erreurs de connexion !</string>
<string name="v5_2_more_things">Encore quelques points</string>
<string name="delivery_receipts_title">Justificatifs de réception!</string>
@@ -1776,8 +1776,8 @@
<string name="update_network_smp_proxy_fallback_question">Rabattement du routage des messages</string>
<string name="private_routing_show_message_status">Afficher le statut du message</string>
<string name="protect_ip_address">Protection de l\'adresse IP</string>
<string name="settings_section_title_files">FICHIERS</string>
<string name="settings_section_title_private_message_routing">ROUTAGE PRIVÉ DES MESSAGES</string>
<string name="settings_section_title_files">Fichiers</string>
<string name="settings_section_title_private_message_routing">Routage privé des messages</string>
<string name="snd_error_relay">Erreur au niveau du serveur de destination: %1$s</string>
<string name="ci_status_other_error">Erreur: %1$s</string>
<string name="snd_error_quota">Capacité dépassée - le destinataire n\'a pas pu recevoir les messages envoyés précédemment.</string>
@@ -2091,7 +2091,7 @@
<string name="network_proxy_random_credentials">Utiliser des identifiants aléatoires</string>
<string name="network_proxy_username">Nom d\'utilisateur</string>
<string name="delete_messages_cannot_be_undone_warning">Les messages seront supprimés - il n\'est pas possible de revenir en arrière!</string>
<string name="settings_section_title_chat_database">BASE DE DONNÉES DU CHAT</string>
<string name="settings_section_title_chat_database">Base de données du chat</string>
<string name="system_mode_toast">Mode système</string>
<string name="network_session_mode_server">Serveur</string>
<string name="network_session_mode_server_description">De nouveaux identifiants SOCKS seront utilisées pour chaque serveur.</string>
@@ -2374,7 +2374,7 @@
<string name="compose_view_connect">Se connecter</string>
<string name="relay_test_step_connect">Se connecter</string>
<string name="relay_conn_status_connected">connecté</string>
<string name="info_row_connection_failed">CONNEXION ÉCHOUÉE</string>
<string name="info_row_connection_failed">Connexion échouée</string>
<string name="cant_send_message_contact_deleted">contact supprimé</string>
<string name="cant_send_message_contact_disabled">contact désactivé</string>
<string name="contact_should_accept">le contact devrait accepter…</string>
@@ -2410,7 +2410,7 @@
<string name="group_member_status_rejected">rejeté</string>
<string name="reject_pending_member_alert_title">Rejeter le membre?</string>
<string name="group_member_role_relay">relais</string>
<string name="member_info_section_title_relay">RELAIS</string>
<string name="member_info_section_title_relay">Relais</string>
<string name="info_row_relay_address">Adresse de relais</string>
<string name="relay_address_alert_title">Adresse de relais</string>
<string name="relay_connection_failed">Échec de la connexion au relais</string>
@@ -29,7 +29,7 @@
<string name="callstatus_accepted">prihvati poziv</string>
<string name="permissions_required">Dodeliti dozvolu</string>
<string name="audio_device_wired_headphones">Slušalice</string>
<string name="settings_section_title_help">POMOĆ</string>
<string name="settings_section_title_help">Pomoć</string>
<string name="delete_group_for_self_cannot_undo_warning">Grupa će biti obrisana za Vas ovo ne može da se poništi!</string>
<string name="color_primary">Akcenat</string>
<string name="v4_2_group_links">Grupni linkovi</string>
@@ -120,15 +120,15 @@
<string name="servers_info_modal_error_title">Greška</string>
<string name="create_1_time_link">Napravi jednokratnu poveznicu</string>
<string name="paste_button">Nalepiti</string>
<string name="settings_section_title_settings">PODEŠAVANJE</string>
<string name="settings_section_title_settings">Podešavanje</string>
<string name="settings_section_title_profile_images">Profilne slike</string>
<string name="acknowledged">Razumeo</string>
<string name="deleted">Odstranjeno</string>
<string name="deleted_description">odstranjeno</string>
<string name="create_profile_button">Napraviti</string>
<string name="settings_section_title_messages">PORUKE I DATOTEKE</string>
<string name="settings_section_title_messages">Poruke i datoteke</string>
<string name="compose_message_placeholder">Poruka</string>
<string name="conn_stats_section_title_servers">SERVERI</string>
<string name="conn_stats_section_title_servers">Serveri</string>
<string name="delete_chat_profile">Odstraniti profil razgovora</string>
<string name="feature_roles_admins">administratori</string>
<string name="random_port">Nasumično</string>
@@ -240,7 +240,7 @@
<string name="forward_files_not_accepted_receive_files">Preuzimanje</string>
<string name="network_settings_title">Napredna podešavanja</string>
<string name="icon_descr_call_progress">Poziv u toku</string>
<string name="settings_section_title_calls">POZIVI</string>
<string name="settings_section_title_calls">Pozivi</string>
<string name="v5_4_block_group_members">Blokiraj članove grupe</string>
<string name="file_not_approved_title">Nepoznati serveri!</string>
<string name="icon_descr_file">Datoteka</string>
@@ -253,7 +253,7 @@
<string name="blocked_items_description">%d poruka blokirano</string>
<string name="server_connecting">povezivanje</string>
<string name="connected_mobile">Povezan telefon</string>
<string name="settings_section_title_you">VI</string>
<string name="settings_section_title_you">Vi</string>
<string name="v6_0_privacy_blur">Zamućeno za bolju privatnost.</string>
<string name="ttl_months">%d meseca(i)</string>
<string name="icon_descr_call_ended">Poziv završen</string>
@@ -295,7 +295,7 @@
<string name="la_minutes">%d minut(a)</string>
<string name="app_check_for_updates">Proveri ažuriranje</string>
<string name="app_check_for_updates_stable">Stabilno</string>
<string name="settings_section_title_files">DATOTEKE</string>
<string name="settings_section_title_files">Datoteke</string>
<string name="migrate_from_device_bytes_uploaded">%s otpremljeno</string>
<string name="disable_notifications_button">Onemogućiti obavještenja</string>
<string name="is_not_verified">%s nije verifikovan</string>
@@ -312,7 +312,7 @@
<string name="scan_QR_code">Skenirati QR kod</string>
<string name="network_session_mode_server">Server</string>
<string name="no_call_on_lock_screen">Onemogućiti</string>
<string name="settings_section_title_chat_database">BAZA PODATAKA CHATA</string>
<string name="settings_section_title_chat_database">Baza podataka chata</string>
<string name="send_receipts_disabled">onemogućeno</string>
<string name="import_theme_error">Greška pri uvoženju teme</string>
<string name="files_are_prohibited_in_group">Datoteke i medijski sadržaji su zabranjeni.</string>
@@ -328,7 +328,7 @@
<string name="or_scan_qr_code">Ili skenirati QR kod</string>
<string name="app_check_for_updates_disabled">Onemogućeno</string>
<string name="settings_section_title_app">Aplikacija</string>
<string name="settings_section_title_chats">RAZGOVORI</string>
<string name="settings_section_title_chats">Razgovori</string>
<string name="files_and_media_prohibited">Datoteke i medijski sadržaji su zabranjeni!</string>
<string name="disappearing_prohibited_in_this_chat">Poruke koje nestaju su zabranjene u ovom razgovoru.</string>
<string name="chat_is_stopped_indication">Chat je zaustavljen</string>
@@ -370,7 +370,7 @@
<string name="image_descr_qr_code">QR kod</string>
<string name="chat_is_running">Chat je pokrenut</string>
<string name="import_database">Uvesti bazu podataka</string>
<string name="chat_database_section">BAZA PODATAKA CHATA</string>
<string name="chat_database_section">Baza podataka chata</string>
<string name="chat_is_stopped">Chat je zaustavljen</string>
<string name="rcv_group_event_n_members_connected">%s, %s i %d ostali članovi povezani</string>
<string name="migrate_to_device_import_failed">Uvoz neuspešan</string>
@@ -428,7 +428,7 @@
<string name="simplex_address">SimpleX adresa</string>
<string name="image_descr_simplex_logo">SimpleX Logo</string>
<string name="show_dev_options">Prikazati:</string>
<string name="settings_section_title_device">UREĐAJ</string>
<string name="settings_section_title_device">Uređaj</string>
<string name="new_message">Nova poruka</string>
<string name="color_secondary">Sekundarni</string>
<string name="receipts_section_contacts">Kontakti</string>
@@ -474,7 +474,7 @@
<string name="favorite_chat">Omiljen</string>
<string name="network_smp_proxy_mode_never">Nikada</string>
<string name="network_session_mode_entity">Veza</string>
<string name="settings_section_title_themes">TEME</string>
<string name="settings_section_title_themes">Teme</string>
<string name="audio_video_calls">Audio/video pozivi</string>
<string name="chat_preferences_no">ne</string>
<string name="conn_event_ratchet_sync_ok">šifrovanje ok</string>
@@ -491,7 +491,7 @@
<string name="icon_descr_address">SimpleX Adresa</string>
<string name="save_servers_button">Sačuvati</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="settings_section_title_experimenta">EKSPERIMENTALNO</string>
<string name="settings_section_title_experimenta">Eksperimentalno</string>
<string name="chat_item_ttl_none">nikada</string>
<string name="clear_contacts_selection_button">Očistiti</string>
<string name="v4_6_chinese_spanish_interface_descr">Zahvaljujući korisnicima doprinesi pomoću Weblate!</string>
@@ -694,7 +694,7 @@
<string name="select_chat_profile">Izabrati profil razgovora</string>
<string name="smp_servers_scan_qr">Skenirati QR kod servera</string>
<string name="network_settings">Napredna mrežna podešavanja</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="settings_section_title_incognito">Anonimni režim</string>
<string name="network_option_ping_count">broj PING</string>
<string name="servers_info_reset_stats_alert_title">Obnoviti statistiku?</string>
@@ -725,7 +725,7 @@
<string name="migrate_from_device_archiving_database">Arhiviraj bazu podataka</string>
<string name="onboarding_notifications_mode_periodic">Periodično</string>
<string name="remove_member_confirmation">Ukloniti</string>
<string name="member_info_section_title_member">ČLAN</string>
<string name="member_info_section_title_member">Član</string>
<string name="joining_group">Pristupanje grupi</string>
<string name="smp_server">SMP server</string>
<string name="invite_to_chat_button">Pozvati u razgovor</string>
@@ -986,7 +986,7 @@
<string name="smp_servers_new_server">Novi server</string>
<string name="subscription_percentage">Prikazati procente</string>
<string name="exit_without_saving">Napustiti bez čuvanja</string>
<string name="run_chat_section">POKRENUTI RAZGOVOR</string>
<string name="run_chat_section">Pokrenuti razgovor</string>
<string name="unblock_for_all_question">Odblokirati člana za sve?</string>
<string name="migrate_to_device_database_init">Priprema za preuzimanje</string>
<string name="proxied">Proxied(posredovan)</string>
@@ -1260,9 +1260,9 @@
<string name="passcode_set">Pin kod postavljen!</string>
<string name="all_app_data_will_be_cleared">Svi podaci u aplikaciji su odstranjeni.</string>
<string name="app_passcode_replaced_with_self_destruct">Pin kod aplikacije je zamenjen pin kodom za samouništenje.</string>
<string name="settings_section_title_support">POTPORI SIMPLEX CHAT</string>
<string name="settings_section_title_support">Potpori SimpleX Chat</string>
<string name="settings_section_title_message_shape">Oblik poruke</string>
<string name="settings_section_title_icon">IKONA APLIKACIJE</string>
<string name="settings_section_title_icon">Ikona aplikacije</string>
<string name="database_passphrase">Pristupna fraza baze podataka</string>
<string name="set_passphrase">Odrediti pristupnu frazu</string>
<string name="database_will_be_encrypted">Baza podataka će biti šifrovana.</string>
@@ -71,7 +71,7 @@
<string name="v5_4_better_groups">Továbbfejlesztett csoportok</string>
<string name="clear_chat_warning">Az összes üzenet törölve lesz ez a művelet nem vonható vissza! Az üzenetek CSAK az Ön számára törlődnek.</string>
<string name="icon_descr_call_ended">A hívás véget ért</string>
<string name="settings_section_title_calls">HÍVÁSOK</string>
<string name="settings_section_title_calls">Hívások</string>
<string name="rcv_group_and_other_events">és további %d esemény</string>
<string name="address_section_title">Cím</string>
<string name="connect_plan_already_joining_the_group">A csatlakozás folyamatban van a csoporthoz!</string>
@@ -149,13 +149,13 @@
<string name="callstatus_in_progress">hívás folyamatban</string>
<string name="auto_accept_images">Képek automatikus elfogadása</string>
<string name="allow_your_contacts_to_call">A hívások kezdeményezése engedélyezve van a partnerei számára.</string>
<string name="settings_section_title_icon">ALKALMAZÁSIKON</string>
<string name="settings_section_title_icon">Alkalmazásikon</string>
<string name="v4_3_improved_server_configuration_desc">Kiszolgáló hozzáadása QR-kód beolvasásával.</string>
<string name="allow_to_send_disappearing">Az eltűnő üzenetek küldése engedélyezve van.</string>
<string name="allow_disappearing_messages_only_if">Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha a partnere is engedélyezi.</string>
<string name="icon_descr_audio_off">Hang kikapcsolva</string>
<string name="allow_direct_messages">A közvetlen üzenetek küldése a tagok között engedélyezve van.</string>
<string name="settings_section_title_app">ALKALMAZÁS</string>
<string name="settings_section_title_app">Alkalmazás</string>
<string name="icon_descr_call_progress">Hívás folyamatban</string>
<string name="both_you_and_your_contact_can_add_message_reactions">Mindkét fél hozzáadhat az üzenetekhez reakciókat.</string>
<string name="both_you_and_your_contact_can_make_calls">Mindkét fél tud hívásokat kezdeményezni.</string>
@@ -300,7 +300,7 @@
<string name="icon_descr_call_connecting">Hívás kapcsolása</string>
<string name="delete_files_and_media_question">Törli a fájlokat és a médiatartalmakat?</string>
<string name="group_member_status_complete">kész</string>
<string name="chat_database_section">CSEVEGÉSI ADATBÁZIS</string>
<string name="chat_database_section">Csevegési adatbázis</string>
<string name="change_self_destruct_passcode">Önmegsemmisítő jelkód módosítása</string>
<string name="smp_server_test_create_queue">Várólista létrehozása</string>
<string name="colored_text">színezett</string>
@@ -313,7 +313,7 @@
<string name="server_connecting">kapcsolódás</string>
<string name="send_disappearing_message_custom_time">Egyéni időköz</string>
<string name="connect_via_link_incognito">Kapcsolódás inkognitóban</string>
<string name="settings_section_title_chats">CSEVEGÉSEK</string>
<string name="settings_section_title_chats">Csevegések</string>
<string name="v5_3_new_desktop_app_descr">Új profil létrehozása a számítógépes alkalmazásban. 💻</string>
<string name="group_member_status_announced">kapcsolódás (bejelentve)</string>
<string name="contact_connection_pending">kapcsolódás…</string>
@@ -393,7 +393,7 @@
<string name="dont_show_again">Ne jelenjen meg újra</string>
<string name="auth_disable_simplex_lock">SimpleX-zár kikapcsolása</string>
<string name="status_e2e_encrypted">végpontok között titkosított</string>
<string name="settings_section_title_device">ESZKÖZ</string>
<string name="settings_section_title_device">Eszköz</string>
<string name="encrypted_video_call">végpontok között titkosított videóhívás</string>
<string name="conn_level_desc_direct">közvetlen</string>
<string name="desktop_device">Számítógép</string>
@@ -522,7 +522,7 @@
<string name="v5_2_disappear_one_message_descr">Akkor is, ha le van tiltva a beszélgetésben.</string>
<string name="v5_4_better_groups_descr">Gyorsabb csatlakozás és megbízhatóbb üzenetkézbesítés.</string>
<string name="enable_lock">Zárolás engedélyezése</string>
<string name="settings_section_title_help">SÚGÓ</string>
<string name="settings_section_title_help">Súgó</string>
<string name="group_is_decentralized">Teljesen decentralizált csak a tagok számára látható.</string>
<string name="file_with_path">Fájl: %s</string>
<string name="icon_descr_hang_up">Hívás befejezése</string>
@@ -530,7 +530,7 @@
<string name="file_saved">Fájl mentve</string>
<string name="fix_connection_question">Kapcsolat javítása?</string>
<string name="files_and_media">Fájlok és médiatartalmak</string>
<string name="section_title_for_console">KONZOLHOZ</string>
<string name="section_title_for_console">Konzolhoz</string>
<string name="alert_text_encryption_renegotiation_failed">Nem sikerült a titkosítást újraegyeztetni.</string>
<string name="error_deleting_user">Hiba történt a felhasználói profil törlésekor</string>
<string name="fix_connection_not_supported_by_group_member">Csoporttag általi javítás nem támogatott</string>
@@ -579,7 +579,7 @@
<string name="group_full_name_field">A csoport teljes neve:</string>
<string name="icon_descr_help">súgó</string>
<string name="enabled_self_destruct_passcode">Önmegsemmisítő jelkód engedélyezése</string>
<string name="settings_section_title_experimenta">KÍSÉRLETI</string>
<string name="settings_section_title_experimenta">Kísérleti</string>
<string name="error_aborting_address_change">Hiba történt a cím módosításának megszakításakor</string>
<string name="error_receiving_file">Hiba történt a fájl fogadásakor</string>
<string name="conn_event_ratchet_sync_ok">titkosítása rendben van</string>
@@ -722,7 +722,7 @@
<string name="message_reactions_are_prohibited">A reakciók hozzáadása az üzenetekhez le van tiltva.</string>
<string name="network_use_onion_hosts_no">Nem</string>
<string name="item_info_no_text">nincs szöveg</string>
<string name="member_info_section_title_member">TAG</string>
<string name="member_info_section_title_member">Tag</string>
<string name="onboarding_notifications_mode_subtitle">Hogyan befolyásolja az akkumulátort</string>
<string name="new_member_role">Új tag szerepköre</string>
<string name="la_mode_off">Kikapcsolva</string>
@@ -842,7 +842,7 @@
<string name="notification_preview_mode_message">Név és üzenet</string>
<string name="notifications_will_be_hidden">Az értesítések csak az alkalmazás bezárásáig érkeznek!</string>
<string name="info_menu">Információ</string>
<string name="settings_section_title_messages">ÜZENETEK ÉS FÁJLOK</string>
<string name="settings_section_title_messages">Üzenetek és fájlok</string>
<string name="group_member_role_member">tag</string>
<string name="make_private_connection">Privát kapcsolat létrehozása</string>
<string name="moderated_item_description">%s moderálta ezt az üzenetet</string>
@@ -918,7 +918,7 @@
<string name="button_welcome_message">Üdvözlőüzenet</string>
<string name="rcv_group_event_n_members_connected">%s, %s és további %d tag kapcsolódott</string>
<string name="only_your_contact_can_make_calls">Csak a partnere kezdeményezhet hívásokat.</string>
<string name="settings_section_title_themes">TÉMÁK</string>
<string name="settings_section_title_themes">Témák</string>
<string name="videos_limit_title">Túl sok videó!</string>
<string name="welcome">Üdvözöljük!</string>
<string name="v5_1_self_destruct_passcode">Önmegsemmisítő jelkód</string>
@@ -963,7 +963,7 @@
<string name="you_accepted_connection">Ön elfogadta a kapcsolatot</string>
<string name="reject_contact_button">Elutasítás</string>
<string name="notification_preview_mode_message_desc">Partner nevének és az üzenet tartalmának megjelenítése</string>
<string name="settings_section_title_settings">BEÁLLÍTÁSOK</string>
<string name="settings_section_title_settings">Beállítások</string>
<string name="save_profile_password">Profiljelszó mentése</string>
<string name="stop_snd_file__title">Megállítja a fájlküldést?</string>
<string name="unlink_desktop_question">Leválasztja a számítógépet?</string>
@@ -1007,7 +1007,7 @@
<string name="scan_QR_code">QR-kód beolvasása</string>
<string name="smp_servers_test_server">Kiszolgáló tesztelése</string>
<string name="send_us_an_email">Küldjön nekünk e-mailt</string>
<string name="conn_stats_section_title_servers">KISZOLGÁLÓK</string>
<string name="conn_stats_section_title_servers">Kiszolgálók</string>
<string name="smp_servers_test_servers">Kiszolgálók tesztelése</string>
<string name="la_lock_mode_passcode">Jelkód bevitele</string>
<string name="la_mode_system">Rendszer</string>
@@ -1018,12 +1018,12 @@
<string name="prohibit_message_reactions">A reakciók hozzáadása az üzenethez le van tiltva.</string>
<string name="use_random_passphrase">Véletlenszerű jelmondat használata</string>
<string name="call_connection_peer_to_peer">egyenrangú</string>
<string name="run_chat_section">CSEVEGÉSI SZOLGÁLTATÁS INDÍTÁSA</string>
<string name="run_chat_section">Csevegési szolgáltatás indítása</string>
<string name="paste_the_link_you_received">Kapott hivatkozás beillesztése</string>
<string name="smp_save_servers_question">Menti a kiszolgálókat?</string>
<string name="v4_2_security_assessment_desc">A SimpleX Chat biztonsága a Trail of Bits által lett auditálva.</string>
<string name="rcv_group_event_updated_group_profile">frissítette a csoportprofilt</string>
<string name="settings_section_title_support">SIMPLEX CHAT TÁMOGATÁSA</string>
<string name="settings_section_title_support">SimpleX Chat támogatása</string>
<string name="simplex_service_notification_title">SimpleX Chat szolgáltatás</string>
<string name="observer_cant_send_message_title">Ön megfigyelő</string>
<string name="is_verified">%s ellenőrizve</string>
@@ -1072,10 +1072,10 @@
<string name="simplex_link_invitation">Egyszer használható SimpleX meghívó</string>
<string name="your_calls">Hívások</string>
<string name="icon_descr_sent_msg_status_send_failed">nem sikerült elküldeni</string>
<string name="theme_colors_section_title">KEZELŐFELÜLET SZÍNEI</string>
<string name="theme_colors_section_title">Kezelőfelület színei</string>
<string name="restore_database_alert_desc">Adja meg a korábbi jelszót az adatbázis biztonsági mentésének visszaállítása után. Ez a művelet nem vonható vissza.</string>
<string name="color_secondary">Másodlagos szín</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="save_servers_button">Mentés</string>
<string name="settings_restart_app">Újraindítás</string>
<string name="smp_servers">SMP-kiszolgálók</string>
@@ -1106,7 +1106,7 @@
<string name="chat_preferences_yes">igen</string>
<string name="voice_message">Hangüzenet</string>
<string name="settings_section_title_use_from_desktop">Társítás számítógéppel</string>
<string name="settings_section_title_you">PROFIL</string>
<string name="settings_section_title_you">Profil</string>
<string name="network_proxy_port">%d-s port</string>
<string name="to_connect_via_link_title">Kapcsolódás egy hivatkozáson keresztül</string>
<string name="share_address">Cím megosztása</string>
@@ -1457,7 +1457,7 @@
<string name="receipts_section_groups">Kis csoportok (legfeljebb 20 tag)</string>
<string name="connection_you_accepted_will_be_cancelled">Az Ön által elfogadott kapcsolat vissza lesz vonva!</string>
<string name="send_live_message_desc">Élő üzenet küldése az üzenet a címzett(ek) számára valós időben frissül, ahogy Ön beírja az üzenetet</string>
<string name="settings_section_title_delivery_receipts">A KÉZBESÍTÉSI JELENTÉSEKET A KÖVETKEZŐ CÍMRE KELL KÜLDENI</string>
<string name="settings_section_title_delivery_receipts">A kézbesítési jelentéseket a következő címre kell küldeni</string>
<string name="alert_text_msg_bad_id">A következő üzenet azonosítója érvénytelen (kisebb vagy egyenlő az előzővel).\nEz valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő.</string>
<string name="this_device_name_shared_with_mobile">Az eszköz neve meg lesz osztva a társított hordozható eszközön használt alkalmazással.</string>
<string name="v4_4_live_messages_desc">A címzettek a beírás közben látják a szövegváltozásokat.</string>
@@ -1747,11 +1747,11 @@
<string name="network_smp_proxy_fallback_allow_description">Közvetlen üzenetküldés, ha a saját kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
<string name="private_routing_explanation">Az IP-cím védelmének érdekében a privát útválasztás az SMP-kiszolgálókat használja az üzenetek kézbesítéséhez.</string>
<string name="update_network_smp_proxy_fallback_question">Üzenet-útválasztási tartalék</string>
<string name="settings_section_title_private_message_routing">PRIVÁT ÜZENET-ÚTVÁLASZTÁS</string>
<string name="settings_section_title_private_message_routing">Privát üzenet-útválasztás</string>
<string name="network_smp_proxy_mode_unprotected_description">Privát útválasztás használata az ismeretlen kiszolgálókkal, ha az IP-cím nem védett.</string>
<string name="network_smp_proxy_fallback_prohibit_description">NE küldjön üzeneteket közvetlenül, még akkor sem, ha a saját kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Tor vagy VPN nélkül az IP-címe láthatóvá válik a fájlkiszolgálók számára.</string>
<string name="settings_section_title_files">FÁJLOK</string>
<string name="settings_section_title_files">Fájlok</string>
<string name="protect_ip_address">IP-cím védelme</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">Az alkalmazás kérni fogja az ismeretlen fájlkiszolgálókról történő letöltések megerősítését (kivéve, ha az .onion vagy a SOCKS proxy engedélyezve van).</string>
<string name="file_not_approved_title">Ismeretlen kiszolgálók!</string>
@@ -2019,7 +2019,7 @@
<string name="delete_messages_cannot_be_undone_warning">Az üzenetek törölve lesznek ez a művelet nem vonható vissza!</string>
<string name="migrate_from_device_remove_archive_question">Eltávolítja az archívumot?</string>
<string name="migrate_from_device_uploaded_archive_will_be_removed">A feltöltött adatbázis-archívum véglegesen el lesz távolítva a kiszolgálókról.</string>
<string name="settings_section_title_chat_database">CSEVEGÉSI ADATBÁZIS</string>
<string name="settings_section_title_chat_database">Csevegési adatbázis</string>
<string name="new_chat_share_profile">Profil megosztása</string>
<string name="system_mode_toast">Rendszerbeállítások használata</string>
<string name="select_chat_profile">Csevegési profil kiválasztása</string>
@@ -2476,7 +2476,7 @@
<string name="share_group_profile_via_link_alert_text">A hivatkozás rövid lesz és a csoportprofil meg lesz osztva a hivatkozáson keresztül.</string>
<string name="share_old_address_alert_button">Régi cím megosztása</string>
<string name="share_old_link_alert_button">Régi (hosszú) hivatkozás megosztása</string>
<string name="settings_section_title_contact_requests_from_groups">PARTNERI KAPCSOLATKÉRÉSEK A CSOPORTOKBÓL</string>
<string name="settings_section_title_contact_requests_from_groups">Partneri kapcsolatkérések a csoportokból</string>
<string name="member_is_deleted_cant_accept_request">A tag törölve lett nem lehet elfogadni a kérést</string>
<string name="rcv_direct_event_group_inv_link_received">a(z) %1$s nevű csoportból partneri kapcsolatot kért</string>
<string name="this_setting_is_for_your_current_profile">Ez a beállítás a jelenlegi profiljára vonatkozik</string>
@@ -2519,7 +2519,7 @@
<string name="placeholder_search_voice_messages">Hangüzenetek keresése</string>
<string name="content_filter_videos">Videók</string>
<string name="content_filter_voice_messages">Hangüzenetek</string>
<string name="info_row_connection_failed">NEM SIKERÜLT LÉTREHOZNI A KAPCSOLATOT</string>
<string name="info_row_connection_failed">Nem sikerült létrehozni a kapcsolatot</string>
<string name="member_info_member_failed">sikertelen</string>
<string name="down_migration_warning_chat_relays">Ha csatornákat hozott létre vagy csak csatlakozott hozzájuk, akkor azok véglegesen le fognak állni.</string>
<string name="relay_status_active">aktív</string>
@@ -2545,7 +2545,7 @@
<string name="relay_status_invited">meghíva</string>
<string name="connect_plan_open_channel">Csatorna megnyitása</string>
<string name="connect_plan_open_new_channel">Új csatorna megnyitása</string>
<string name="member_info_section_title_owner">TULAJDONOS</string>
<string name="member_info_section_title_owner">Tulajdonos</string>
<string name="channel_members_section_owners">Tulajdonosok</string>
<string name="button_leave_channel">Csatorna elhagyása</string>
<string name="leave_channel_question">Elhagyja a csatornát?</string>
@@ -2555,7 +2555,7 @@
<string name="channel_member_you">Ön</string>
<string name="chat_banner_your_channel">Saját csatorna</string>
<string name="connect_plan_this_is_your_link_for_channel">Saját csatorna</string>
<string name="member_info_section_title_subscriber">FELIRATKOZÓ</string>
<string name="member_info_section_title_subscriber">Feliratkozó</string>
<string name="channel_members_title_subscribers">Feliratkozók</string>
<string name="channel_subscriber_count_singular">%1$d feliratkozó</string>
<string name="channel_subscriber_count_plural">%1$d feliratkozó</string>
@@ -2607,7 +2607,7 @@
<string name="relay_bar_active">%1$d/%2$d átjátszó aktív</string>
<string name="relay_bar_connected_with_errors">%1$d/%2$d átjátszó kapcsolódva, %3$d hiba</string>
<string name="relay_bar_connected">%1$d/%2$d átjátszó kapcsolódva</string>
<string name="member_info_section_title_relay">ÁTJÁTSZÓ</string>
<string name="member_info_section_title_relay">Átjátszó</string>
<string name="info_row_relay_link">Átjátszóhivatkozás</string>
<string name="info_row_relay_address">Átjátszó címe</string>
<string name="via_relay_hostname">a következőn keresztül: %1$s</string>
@@ -44,7 +44,7 @@
<string name="smp_servers_add_to_another_device">Tambahkan ke perangkat lain</string>
<string name="turn_off_battery_optimization_button">Boleh</string>
<string name="network_smp_proxy_mode_always">Selalu</string>
<string name="settings_section_title_app">APLIKASI</string>
<string name="settings_section_title_app">Aplikasi</string>
<string name="appearance_settings">Tampilan</string>
<string name="about_simplex_chat">Tentang SimpleX Chat</string>
<string name="accept">Terima</string>
@@ -293,7 +293,7 @@
<string name="images_limit_title">Terlalu banyak gambar!</string>
<string name="info_view_search_button">cari</string>
<string name="info_view_call_button">panggilan</string>
<string name="settings_section_title_settings">PENGATURAN</string>
<string name="settings_section_title_settings">Pengaturan</string>
<string name="for_everybody">Untuk semua orang</string>
<string name="stop_file__action">Hentikan berkas</string>
<string name="revoke_file__action">Cabut berkas</string>
@@ -643,9 +643,9 @@
<string name="self_destruct_passcode">Kode sandi hapus otomatis</string>
<string name="enable_self_destruct">Aktifkan hapus otomatis</string>
<string name="set_passcode">Pasang kode sandi</string>
<string name="settings_section_title_help">BANTUAN</string>
<string name="settings_section_title_support">DUKUNG SIMPLEX CHAT</string>
<string name="settings_section_title_calls">PANGGILAN</string>
<string name="settings_section_title_help">Bantuan</string>
<string name="settings_section_title_support">Dukung SimpleX Chat</string>
<string name="settings_section_title_calls">Panggilan</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Mulai ulang aplikasi untuk buat profil obrolan baru.</string>
<string name="delete_messages">Hapus pesan</string>
<string name="rcv_group_event_member_left">keluar</string>
@@ -729,9 +729,9 @@
<string name="privacy_media_blur_radius_medium">Sedang</string>
<string name="privacy_media_blur_radius">Buram media</string>
<string name="privacy_media_blur_radius_strong">Kuat</string>
<string name="settings_section_title_you">ANDA</string>
<string name="settings_section_title_you">Anda</string>
<string name="privacy_media_blur_radius_soft">Lunak</string>
<string name="settings_section_title_chat_database">BASIS DATA OBROLAN</string>
<string name="settings_section_title_chat_database">Basis data obrolan</string>
<string name="set_password_to_export">Setel frasa sandi untuk diekspor</string>
<string name="open_database_folder">Buka folder basis data</string>
<string name="rcv_group_event_user_deleted">menghapus anda</string>
@@ -968,7 +968,7 @@
<string name="app_version_code">Build aplikasi: %s</string>
<string name="core_version">Versi inti: v%s</string>
<string name="network_smp_proxy_fallback_allow_protected">Ketika IP disembunyikan</string>
<string name="theme_colors_section_title">WARNA ANTARMUKA</string>
<string name="theme_colors_section_title">Warna antarmuka</string>
<string name="update_network_smp_proxy_fallback_question">Fallback perutean pesan</string>
<string name="update_network_smp_proxy_mode_question">Mode routing pesan</string>
<string name="network_smp_proxy_mode_private_routing">Routing pribadi</string>
@@ -1003,7 +1003,7 @@
<string name="your_ice_servers">Server ICE Anda</string>
<string name="webrtc_ice_servers">Server ICE WebRTC</string>
<string name="if_you_enter_self_destruct_code">Jika Anda memasukkan kode sandi hapus otomatis saat membuka aplikasi:</string>
<string name="settings_section_title_icon">IKON APLIKASI</string>
<string name="settings_section_title_icon">Ikon aplikasi</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">Aplikasi akan meminta untuk mengonfirmasi unduhan dari server berkas yang tidak dikenal (kecuali .onion atau saat proxy SOCKS diaktifkan).</string>
<string name="message_reactions_prohibited_in_this_chat">Reaksi pesan dilarang dalam obrolan ini.</string>
<string name="migrate_from_device_to_another_device">Pindah ke perangkat lain</string>
@@ -1020,8 +1020,8 @@
<string name="icon_descr_call_missed">Panggilan tak terjawab</string>
<string name="icon_descr_call_rejected">Panggilan ditolak</string>
<string name="alert_text_msg_bad_id">ID pesan berikutnya salah (kurang atau sama dengan yang sebelumnya).\nHal ini dapat terjadi karena beberapa bug atau ketika koneksi terganggu.</string>
<string name="settings_section_title_themes">TEMA</string>
<string name="settings_section_title_delivery_receipts">KIRIM TANDA TERIMA KIRIMAN KE</string>
<string name="settings_section_title_themes">Tema</string>
<string name="settings_section_title_delivery_receipts">Kirim tanda terima kiriman ke</string>
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Hal ini dapat terjadi ketika Anda atau koneksi Anda menggunakan cadangan basis data lama.</string>
<string name="keychain_is_storing_securely">Android Keystore digunakan untuk menyimpan frasa sandi dengan aman - memungkinkan layanan notifikasi berfungsi.</string>
<string name="remove_passphrase">Hapus</string>
@@ -1134,9 +1134,9 @@
<string name="acknowledged">Dikenal</string>
<string name="waiting_for_image">Menunggu gambar</string>
<string name="waiting_for_video">Menunggu video</string>
<string name="settings_section_title_device">PERANGKAT</string>
<string name="settings_section_title_chats">OBROLAN</string>
<string name="settings_section_title_files">BERKAS</string>
<string name="settings_section_title_device">Perangkat</string>
<string name="settings_section_title_chats">Obrolan</string>
<string name="settings_section_title_files">Berkas</string>
<string name="reset_all_hints">Reset semua petunjuk</string>
<string name="error_adding_members">Gagal menambah anggota</string>
<string name="error_joining_group">Gagal gabung ke grup</string>
@@ -1281,7 +1281,7 @@
<string name="unblock_for_all_question">Buka blokir anggota untuk semua?</string>
<string name="unblock_for_all">Buka untuk semua</string>
<string name="member_blocked_by_admin">Diblokir oleh admin</string>
<string name="member_info_section_title_member">ANGGOTA</string>
<string name="member_info_section_title_member">Anggota</string>
<string name="remove_member_button">Hapus anggota</string>
<string name="share_text_message_status">Status pesan: %s</string>
<string name="share_text_file_status">Status berkas: %s</string>
@@ -1326,7 +1326,7 @@
<string name="fix_connection_not_supported_by_contact">Perbaikan tidak didukung oleh kontak</string>
<string name="info_row_chat">Obrolan</string>
<string name="accept_conditions">Terima kondisi</string>
<string name="conn_stats_section_title_servers">SERVER</string>
<string name="conn_stats_section_title_servers">Server</string>
<string name="create_group_button">Buat grup</string>
<string name="group_full_name_field">Nama lengkap grup:</string>
<string name="save_group_profile">Simpan profil grup</string>
@@ -1466,7 +1466,7 @@
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>Terbaik untuk baterai</b>. Anda akan menerima notifikasi saat aplikasi sedang berjalan (TANPA layanan latar belakang).]]></string>
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Baik untuk baterai</b>. Aplikasi memeriksa pesan setiap 10 menit. Anda mungkin melewatkan panggilan atau pesan penting.]]></string>
<string name="settings_section_title_chat_theme">Tema obrolan</string>
<string name="chat_database_section">BASIS DATA OBROLAN</string>
<string name="chat_database_section">Basis data obrolan</string>
<string name="set_password_to_export_desc">Basis data dienkripsi menggunakan frasa sandi acak. Harap ubah frasa sandi sebelum mengekspor.</string>
<string name="chat_database_exported_title">Basis data obrolan diekspor</string>
<string name="current_passphrase">Frasa sandi saat ini…</string>
@@ -1685,7 +1685,7 @@
<string name="files_and_media_section">Berkas dan media</string>
<string name="encrypt_database_question">Enkripsi basis data?</string>
<string name="incompatible_database_version">Versi basis data tidak kompatibel</string>
<string name="section_title_for_console">UNTUK KONSOL</string>
<string name="section_title_for_console">Untuk konsol</string>
<string name="connect_plan_group_already_exists">Grup sudah ada!</string>
<string name="migrate_to_device_enter_passphrase">Masukkan frasa sandi</string>
<string name="enable_automatic_deletion_question">Aktifkan hapus pesan otomatis?</string>
@@ -1703,7 +1703,7 @@
<string name="migrate_from_device_error_verifying_passphrase">Gagal verifikasi frasa sandi:</string>
<string name="servers_info_reconnect_server_error">Gagal hubungkan ulang server</string>
<string name="servers_info_reconnect_servers_error">Gagal hubungkan ulang server</string>
<string name="settings_section_title_experimenta">EKSPERIMENTAL</string>
<string name="settings_section_title_experimenta">Eksperimental</string>
<string name="export_database">Ekspor basis data</string>
<string name="import_database">Impor basis data</string>
<string name="error_stopping_chat">Gagal hentikan obrolan</string>
@@ -1830,7 +1830,7 @@
<string name="migrate_to_device_bytes_downloaded">%s diunduh</string>
<string name="servers_info_messages_received">Pesan diterima</string>
<string name="info_row_updated_at">Catatan diperbarui pada</string>
<string name="settings_section_title_messages">PESAN DAN BERKAS</string>
<string name="settings_section_title_messages">Pesan dan berkas</string>
<string name="settings_section_title_user_theme">Tema profil</string>
<string name="settings_section_title_profile_images">Gambar profil</string>
<string name="enter_correct_current_passphrase">Harap masukkan frasa sandi saat ini yang benar.</string>
@@ -1908,7 +1908,7 @@
<string name="network_options_save">Simpan</string>
<string name="make_profile_private">Jadikan profil pribadi!</string>
<string name="remote_hosts_section">Ponsel jarak jauh</string>
<string name="run_chat_section">JALANKAN OBROLAN</string>
<string name="run_chat_section">Jalankan obrolan</string>
<string name="store_passphrase_securely_without_recover">Harap simpan frasa sandi dengan aman, Anda TIDAK akan dapat mengakses obrolan jika hilang.</string>
<string name="rcv_group_event_member_deleted">dihapus %1$s</string>
<string name="share_text_sent_at">Dikirim pada: %s</string>
@@ -1979,7 +1979,7 @@
<string name="smp_servers_new_server">Server baru</string>
<string name="message_queue_info">Info antrian pesan</string>
<string name="settings_section_title_message_shape">Bentuk pesan</string>
<string name="settings_section_title_private_message_routing">ROUTING PESAN PRIBADI</string>
<string name="settings_section_title_private_message_routing">Routing pesan pribadi</string>
<string name="message_queue_info_server_info">info antrean server: %1$s\n\npesan terakhir diterima: %2$s</string>
<string name="users_delete_data_only">Hanya data profil lokal</string>
<string name="operator_open_changes">Buka perubahan</string>
@@ -2024,7 +2024,7 @@
<string name="your_profile_is_stored_on_your_device">Profil, kontak, dan pesan terkirim Anda disimpan di perangkat Anda.</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">Platform perpesanan dan aplikasi yang melindungi privasi dan keamanan Anda.</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">Untuk melindungi privasi Anda, SimpleX gunakan ID terpisah untuk setiap kontak.</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="upgrade_and_open_chat">Tingkatkan dan buka obrolan</string>
<string name="group_invitation_tap_to_join_incognito">Ketuk untuk gabung ke samaran</string>
<string name="snd_group_event_member_blocked">Anda memblokir %s</string>
@@ -2423,7 +2423,7 @@
<string name="v6_4_review_members_descr">Chat dengan anggota sebelum mereka bergabung.</string>
<string name="compose_view_connect">Hubungkan</string>
<string name="v6_4_connect_faster">Terhubung lebih cepat! 🚀</string>
<string name="settings_section_title_contact_requests_from_groups">PERMINTAAN KONTAK DARI GRUP</string>
<string name="settings_section_title_contact_requests_from_groups">Permintaan kontak dari grup</string>
<string name="contact_should_accept">kontak harus menerima…</string>
<string name="v6_4_1_short_address_create">Buat alamat Anda</string>
<string name="deprecated_options_section">Opsi tidak berlaku</string>
@@ -269,7 +269,7 @@
<string name="keychain_is_storing_securely">L\'archivio chiavi di Android è usato per memorizzare in modo sicuro la password; permette il funzionamento del servizio di notifica.</string>
<string name="allow_your_contacts_to_send_voice_messages">Permetti ai tuoi contatti di inviare messaggi vocali.</string>
<string name="chat_database_deleted">Database della chat eliminato</string>
<string name="settings_section_title_icon">ICONA APP</string>
<string name="settings_section_title_icon">Icona app</string>
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>Ideale per la batteria</b>. Riceverai notifiche solo quando l\'app è in esecuzione (NESSUN servizio in secondo piano).]]></string>
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Consuma più batteria</b>! L\'app funziona sempre in secondo piano: le notifiche vengono mostrate istantaneamente.]]></string>
<string name="callstatus_calling">chiamata…</string>
@@ -378,24 +378,24 @@
<string name="allow_accepting_calls_from_lock_screen">Attiva le chiamate dalla schermata di blocco tramite le impostazioni.</string>
<string name="icon_descr_flip_camera">Fotocamera frontale/posteriore</string>
<string name="icon_descr_hang_up">Riaggancia</string>
<string name="settings_section_title_calls">CHIAMATE</string>
<string name="chat_database_section">DATABASE DELLA CHAT</string>
<string name="settings_section_title_calls">Chiamate</string>
<string name="chat_database_section">Database della chat</string>
<string name="chat_database_imported">Database della chat importato</string>
<string name="chat_is_running">Chat in esecuzione</string>
<string name="settings_section_title_chats">CHAT</string>
<string name="settings_section_title_chats">Chat</string>
<string name="set_password_to_export_desc">Il database è crittografato con una password casuale. Cambiala prima di esportare.</string>
<string name="database_passphrase">Password del database</string>
<string name="delete_chat_profile_question">Eliminare il profilo di chat\?</string>
<string name="delete_database">Elimina database</string>
<string name="settings_developer_tools">Strumenti di sviluppo</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_section_title_device">Dispositivo</string>
<string name="error_deleting_database">Errore nell\'eliminazione del database della chat</string>
<string name="error_exporting_chat_database">Errore nell\'esportazione del database della chat</string>
<string name="error_starting_chat">Errore nell\'avvio della chat</string>
<string name="error_stopping_chat">Errore nell\'interruzione della chat</string>
<string name="settings_experimental_features">Funzionalità sperimentali</string>
<string name="export_database">Esporta database</string>
<string name="settings_section_title_help">AIUTO</string>
<string name="settings_section_title_help">Aiuto</string>
<string name="chat_is_stopped_indication">Chat fermata</string>
<string name="database_error">Errore del database</string>
<string name="passphrase_is_different">La password del database è diversa da quella salvata nell\'archivio chiavi.</string>
@@ -437,7 +437,7 @@
<string name="error_creating_link_for_group">Errore nella creazione del link del gruppo</string>
<string name="error_deleting_link_for_group">Errore nell\'eliminazione del link del gruppo</string>
<string name="icon_descr_expand_role">Espandi la selezione dei ruoli</string>
<string name="section_title_for_console">PER CONSOLE</string>
<string name="section_title_for_console">Per console</string>
<string name="group_link">Link del gruppo</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Il gruppo verrà eliminato per tutti i membri. Non è reversibile!</string>
<string name="delete_group_for_self_cannot_undo_warning">Il gruppo verrà eliminato per te. Non è reversibile!</string>
@@ -697,23 +697,23 @@
<string name="import_database_question">Importare il database della chat\?</string>
<string name="import_database">Importa database</string>
<string name="settings_section_title_incognito">Modalità incognito</string>
<string name="settings_section_title_messages">MESSAGGI E FILE</string>
<string name="settings_section_title_messages">Messaggi e file</string>
<string name="new_database_archive">Nuovo archivio database</string>
<string name="old_database_archive">Vecchio archivio del database</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Riavvia l\'app per creare un profilo di chat nuovo.</string>
<string name="restart_the_app_to_use_imported_chat_database">Riavvia l\'app per usare il database della chat importato.</string>
<string name="run_chat_section">AVVIA CHAT</string>
<string name="run_chat_section">Avvia chat</string>
<string name="send_link_previews">Invia le anteprime dei link</string>
<string name="set_password_to_export">Imposta la password per esportare</string>
<string name="settings_section_title_settings">IMPOSTAZIONI</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_settings">Impostazioni</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="stop_chat_confirmation">Ferma</string>
<string name="stop_chat_question">Fermare la chat\?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Ferma la chat per esportare, importare o eliminare il database della chat. Non potrai ricevere e inviare messaggi mentre la chat è ferma.</string>
<string name="settings_section_title_support">SUPPORTA SIMPLEX CHAT</string>
<string name="settings_section_title_themes">TEMI</string>
<string name="settings_section_title_support">Supporta SimpleX Chat</string>
<string name="settings_section_title_themes">Temi</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.</string>
<string name="settings_section_title_you">TU</string>
<string name="settings_section_title_you">Tu</string>
<string name="your_chat_database">Il tuo database della chat</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Il tuo attuale database di chat verrà ELIMINATO e SOSTITUITO con quello importato.
\nQuesta azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.</string>
@@ -774,7 +774,7 @@
<string name="invite_to_group_button">Invita al gruppo</string>
<string name="button_leave_group">Esci dal gruppo</string>
<string name="info_row_local_name">Nome locale</string>
<string name="member_info_section_title_member">MEMBRO</string>
<string name="member_info_section_title_member">Membro</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Il membro verrà rimosso dal gruppo, non è reversibile!</string>
<string name="new_member_role">Nuovo ruolo del membro</string>
<string name="no_contacts_selected">Nessun contatto selezionato</string>
@@ -806,7 +806,7 @@
<string name="save_group_profile">Salva il profilo del gruppo</string>
<string name="network_option_seconds_label">sec</string>
<string name="sending_via">Invio tramite</string>
<string name="conn_stats_section_title_servers">SERVER</string>
<string name="conn_stats_section_title_servers">Server</string>
<string name="switch_receiving_address">Cambia indirizzo di ricezione</string>
<string name="theme_system">Sistema</string>
<string name="network_option_tcp_connection_timeout">Scadenza connessione TCP</string>
@@ -994,7 +994,7 @@
<string name="confirm_database_upgrades">Conferma aggiornamenti database</string>
<string name="mtr_error_different">migrazione diversa nell\'app/nel database: %s / %s</string>
<string name="invalid_migration_confirmation">Conferma di migrazione non valida</string>
<string name="settings_section_title_experimenta">SPERIMENTALE</string>
<string name="settings_section_title_experimenta">Sperimentale</string>
<string name="image_will_be_received_when_contact_completes_uploading">L\'immagine verrà ricevuta quando il tuo contatto completerà l\'invio.</string>
<string name="mtr_error_no_down_migration">la versione del database è più recente di quella dell\'app, ma nessuna migrazione downgrade per: %s</string>
<string name="file_will_be_received_when_contact_completes_uploading">Il file verrà ricevuto quando il tuo contatto completerà l\'invio.</string>
@@ -1102,7 +1102,7 @@
<string name="scan_qr_to_connect_to_contact">Per connettervi, il tuo contatto può scansionare il codice QR o usare il link nell\'app.</string>
<string name="you_can_accept_or_reject_connection">Quando le persone chiedono di connettersi, puoi accettare o rifiutare.</string>
<string name="simplex_address">Indirizzo SimpleX</string>
<string name="theme_colors_section_title">COLORI DELL\'INTERFACCIA</string>
<string name="theme_colors_section_title">Colori dell\'interfaccia</string>
<string name="your_contacts_will_remain_connected">I tuoi contatti resteranno connessi.</string>
<string name="add_address_to_your_profile">Aggiungi l\'indirizzo al tuo profilo, in modo che i tuoi contatti di SimpleX possano condividerlo con altre persone. L\'aggiornamento del profilo verrà inviato ai tuoi contatti di SimpleX.</string>
<string name="create_address_and_let_people_connect">Crea un indirizzo per consentire alle persone di connettersi con te.</string>
@@ -1230,7 +1230,7 @@
<string name="item_info_no_text">nessun testo</string>
<string name="non_fatal_errors_occured_during_import">Si sono verificati alcuni errori non fatali durante l\'importazione:</string>
<string name="settings_restart_app">Riavvia</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="shutdown_alert_desc">Le notifiche smetteranno di funzionare fino a quando non riavvierai l\'app</string>
<string name="settings_shutdown">Spegni</string>
<string name="shutdown_alert_question">Spegnere\?</string>
@@ -1261,7 +1261,7 @@
<string name="sending_delivery_receipts_will_be_enabled">L\'invio delle ricevute di consegna sarà attivo per tutti i contatti.</string>
<string name="error_enabling_delivery_receipts">Errore nell\'attivazione delle ricevute di consegna!</string>
<string name="you_can_enable_delivery_receipts_later">Puoi attivarle più tardi nelle impostazioni</string>
<string name="settings_section_title_delivery_receipts">INVIA RICEVUTE DI CONSEGNA A</string>
<string name="settings_section_title_delivery_receipts">Invia ricevute di consegna a</string>
<string name="snd_conn_event_ratchet_sync_started">concordando la crittografia per %s…</string>
<string name="delivery_receipts_title">Ricevute di consegna!</string>
<string name="receipts_section_contacts">Contatti</string>
@@ -1779,7 +1779,7 @@
<string name="network_smp_proxy_fallback_prohibit_description">NON inviare messaggi direttamente, anche se il tuo server o quello di destinazione non supporta l\'instradamento privato.</string>
<string name="network_smp_proxy_mode_never_description">NON usare l\'instradamento privato.</string>
<string name="network_smp_proxy_fallback_prohibit">No</string>
<string name="settings_section_title_private_message_routing">INSTRADAMENTO PRIVATO DEI MESSAGGI</string>
<string name="settings_section_title_private_message_routing">Instradamento privato dei messaggi</string>
<string name="network_smp_proxy_fallback_allow_protected_description">Invia messaggi direttamente quando l\'indirizzo IP è protetto e il tuo server o quello di destinazione non supporta l\'instradamento privato.</string>
<string name="private_routing_explanation">Per proteggere il tuo indirizzo IP, l\'instradamento privato usa i tuoi server SMP per consegnare i messaggi.</string>
<string name="network_smp_proxy_mode_unprotected">Non protetto</string>
@@ -1787,7 +1787,7 @@
<string name="protect_ip_address">Proteggi l\'indirizzo IP</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">L\'app chiederà di confermare i download da server di file sconosciuti (eccetto .onion o quando il proxy SOCKS è attivo).</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Senza Tor o VPN, il tuo indirizzo IP sarà visibile ai server di file.</string>
<string name="settings_section_title_files">FILE</string>
<string name="settings_section_title_files">File</string>
<string name="file_not_approved_descr">Senza Tor o VPN, il tuo indirizzo IP sarà visibile a questi relay XFTP:
\n%1$s.</string>
<string name="settings_section_title_chat_theme">Tema della chat</string>
@@ -2056,7 +2056,7 @@
<string name="switching_profile_error_title">Errore nel cambio di profilo</string>
<string name="select_chat_profile">Seleziona il profilo di chat</string>
<string name="new_chat_share_profile">Condividi il profilo</string>
<string name="settings_section_title_chat_database">DATABASE DELLA CHAT</string>
<string name="settings_section_title_chat_database">Database della chat</string>
<string name="system_mode_toast">Modalità di sistema</string>
<string name="migrate_from_device_remove_archive_question">Rimuovere l\'archivio?</string>
<string name="delete_messages_cannot_be_undone_warning">I messaggi verranno eliminati. Non è reversibile!</string>
@@ -2512,7 +2512,7 @@
<string name="share_old_link_alert_button">Condividi il link vecchio</string>
<string name="share_group_profile_via_link_alert_text">Il link sarà breve e il profilo del gruppo verrà condiviso attraverso il link.</string>
<string name="upgrade_group_link">Aggiorna il link del gruppo</string>
<string name="settings_section_title_contact_requests_from_groups">RICHIESTE DI CONTATTO DAI GRUPPI</string>
<string name="settings_section_title_contact_requests_from_groups">Richieste di contatto dai gruppi</string>
<string name="member_is_deleted_cant_accept_request">Il membro è eliminato - impossibile accettare la richiesta</string>
<string name="rcv_direct_event_group_inv_link_received">connessione richiesta dal gruppo %1$s</string>
<string name="this_setting_is_for_your_current_profile">Questa impostazione è per il tuo profilo attuale</string>
@@ -2555,7 +2555,7 @@
<string name="content_filter_videos">Video</string>
<string name="content_filter_voice_messages">Messaggi vocali</string>
<string name="content_filter_menu_item">Filtro</string>
<string name="info_row_connection_failed">CONNESSIONE FALLITA</string>
<string name="info_row_connection_failed">Connessione fallita</string>
<string name="member_info_member_failed">fallito</string>
<string name="down_migration_warning_chat_relays">Se sei dentro canali o ne hai creati, essi smetteranno di funzionare definitivamente.</string>
<string name="relay_bar_active">%1$d/%2$d relay attivo/i</string>
@@ -2620,12 +2620,12 @@
<string name="not_all_relays_connected">Non tutti i relay sono connessi</string>
<string name="connect_plan_open_channel">Apri canale</string>
<string name="connect_plan_open_new_channel">Apri un canale nuovo</string>
<string name="member_info_section_title_owner">PROPRIETARIO</string>
<string name="member_info_section_title_owner">Proprietario</string>
<string name="channel_members_section_owners">Proprietari</string>
<string name="preset_relay_address">Indirizzo relay preimpostato</string>
<string name="preset_relay_name">Nome relay preimpostato</string>
<string name="group_member_role_relay">relay</string>
<string name="member_info_section_title_relay">RELAY</string>
<string name="member_info_section_title_relay">Relay</string>
<string name="info_row_relay_address">Indirizzo del relay</string>
<string name="relay_address_alert_title">Indirizzo del relay</string>
<string name="relay_connection_failed">Connessione del relay fallita</string>
@@ -2636,7 +2636,7 @@
<string name="error_relay_test_server_auth">Il server richiede l\'autorizzazione per connettersi al relay, controlla la password.</string>
<string name="server_warning">Avviso del server</string>
<string name="share_relay_address">Condividi l\'indirizzo del relay</string>
<string name="member_info_section_title_subscriber">ISCRITTO</string>
<string name="member_info_section_title_subscriber">Iscritto</string>
<string name="channel_members_title_subscribers">Iscritti</string>
<string name="relay_section_footer_owner">Gli iscritti usano il link del relay per connettersi al canale.\nL\'indirizzo del relay è stato usato per impostare questo relay per il canale.</string>
<string name="subscriber_will_be_removed_from_channel_cannot_be_undone">L\'iscritto verrà rimosso dal canale, non è reversibile!</string>
@@ -973,7 +973,7 @@
<string name="icon_descr_speaker_off">רמקול כבוי</string>
<string name="icon_descr_speaker_on">רמקול פעיל</string>
<string name="settings_section_title_settings">הגדרות</string>
<string name="settings_section_title_support">תמיכה ב־SIMPLEX CHAT</string>
<string name="settings_section_title_support">תמיכה ב־SimpleX Chat</string>
<string name="stop_chat_question">לעצור צ׳אט\?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">עיצרו את הצ׳אט כדי לייצא, לייבא או למחוק את מסד הנתונים. לא תוכלו לקבל ולשלוח הודעות בזמן שהצ׳אט מופסק.</string>
<string name="stop_chat_confirmation">עצור</string>
@@ -880,7 +880,7 @@
<string name="send_us_an_email">メールを送る</string>
<string name="share_image">メディア共有…</string>
<string name="simplex_link_mode">SimpleXリンク</string>
<string name="settings_section_title_support">SIMPLEX CHATを支援</string>
<string name="settings_section_title_support">SimpleX Chatを支援</string>
<string name="smp_servers_test_servers">テストサーバ</string>
<string name="switch_receiving_address_desc">受信アドレスは別のサーバーに変更されます。アドレス変更は送信者がオンラインになった後に完了します。</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">あなたのプライバシーを守るために、他のアプリと違って、ユーザーIDの変わりに SimpleX メッセージ束毎にIDを配布し、各連絡先が別々と扱います。</string>
@@ -822,7 +822,7 @@
<string name="settings_section_title_settings">설정</string>
<string name="send_link_previews">링크 미리보기 보내기</string>
<string name="settings_section_title_socks">SOCKS 프록시</string>
<string name="settings_section_title_support">SIMPLEX CHAT 도와주기</string>
<string name="settings_section_title_support">SimpleX Chat 도와주기</string>
<string name="settings_section_title_you"></string>
<string name="settings_experimental_features">실험적 기능</string>
<string name="show_dev_options">표시 :</string>
@@ -282,13 +282,13 @@
<string name="server_address">Adresa serverê</string>
<string name="address_section_title">Adres</string>
<string name="srv_error_host">Adresa serverê li eyarên torê nayê.</string>
<string name="conn_stats_section_title_servers">SERVER</string>
<string name="conn_stats_section_title_servers">Server</string>
<string name="servers_info">Melûmata serveran</string>
<string name="smp_servers_test_failed">Ceribandina serverê bi ser neket!</string>
<string name="srv_error_version">Versiyona serverê li eyarên torê nayê.</string>
<string name="accept_feature_set_1_day">1 roj deyne</string>
<string name="set_group_preferences">Tercihên komê diyar bike</string>
<string name="settings_section_title_settings">EYAR</string>
<string name="settings_section_title_settings">Eyar</string>
<string name="share_verb">Parve bike</string>
<string name="share_invitation_link">Lînka 1-carê parve bike</string>
<string name="share_address">Adresê parve bike</string>
@@ -337,7 +337,7 @@
<string name="strikethrough_text">xet/xêz/xîşk</string>
<string name="privacy_media_blur_radius_strong">Biqewet</string>
<string name="subscribed">Abonekirî</string>
<string name="settings_section_title_support">PIŞT BIDE SIMPLEX CHATÊ</string>
<string name="settings_section_title_support">Pişt bide SimpleX Chatê</string>
<string name="switch_verb">Biguhere</string>
<string name="la_mode_system">Sîstem</string>
<string name="color_mode_system">Sîstem</string>
@@ -513,7 +513,7 @@
<string name="remote_ctrl_error_inactive">Kompîter ne aktîv e</string>
<string name="remote_ctrl_error_disconnected">Girêdana bi kompîterê re qut bû</string>
<string name="servers_info_details">Detay</string>
<string name="settings_section_title_device">CIHAZ</string>
<string name="settings_section_title_device">Cihaz</string>
<string name="total_files_count_and_size">%d dosya bi mezibnbûniya timam ya %s</string>
<string name="rcv_group_events_count">%d hewadîsên komê</string>
<string name="ttl_hour">%d seet</string>
@@ -588,7 +588,7 @@
<string name="chat_preferences_you_allow">Tu dihêlî</string>
<string name="snd_group_event_member_accepted">te ev endam qebûl kir</string>
<string name="group_info_member_you">tu: %1$s</string>
<string name="settings_section_title_you">TU</string>
<string name="settings_section_title_you">Tu</string>
<string name="sender_you_pronoun">tu</string>
<string name="privacy_chat_list_open_links_yes">Erê</string>
<string name="chat_preferences_yes">erê</string>
@@ -633,11 +633,11 @@
<string name="privacy_chat_list_open_web_link">Lînkê veke</string>
<string name="privacy_chat_list_open_full_web_link">Lînka timam veke</string>
<string name="privacy_chat_list_open_clean_web_link">Lînka paqij veke</string>
<string name="settings_section_title_help">ARÎKARÎ</string>
<string name="settings_section_title_app">APLÎKASYON</string>
<string name="settings_section_title_files">DOSYA</string>
<string name="settings_section_title_help">Arîkarî</string>
<string name="settings_section_title_app">Aplîkasyon</string>
<string name="settings_section_title_files">Dosya</string>
<string name="settings_restart_app">Ji nû ve veke</string>
<string name="settings_section_title_socks">PROKSIYA SOCKSÊ</string>
<string name="settings_section_title_socks">Proksiya SOCKSê</string>
<string name="settings_section_title_profile_images">Sûretên profîlan</string>
<string name="settings_section_title_network_connection">Girêdana torê</string>
<string name="settings_section_title_use_from_desktop">Ji kompîterê bişuxulîne</string>
@@ -687,7 +687,7 @@
<string name="member_blocked_by_admin">Ji admîn blokkirî</string>
<string name="member_info_member_blocked">blokkirî</string>
<string name="member_info_member_inactive">ne aktîv</string>
<string name="member_info_section_title_member">ENDAM</string>
<string name="member_info_section_title_member">Endam</string>
<string name="role_in_group">Rol</string>
<string name="info_row_group">Kom</string>
<string name="receiving_via">Te standin bi riya</string>
@@ -785,10 +785,10 @@
<string name="network_session_mode_user">Profîla siḧbetê</string>
<string name="you_control_your_chat">Tu siḧbeta xwe qontrol dikî!</string>
<string name="use_chat">Siḧbetê bişuxulîne</string>
<string name="settings_section_title_chats">SIḦBET</string>
<string name="settings_section_title_chats">Siḧbet</string>
<string name="settings_section_title_chat_colors">Rengên siḧbetê</string>
<string name="chat_is_stopped">Siḧbet sekinandî ye</string>
<string name="chat_database_section">DATABASA SIḦBETÊ</string>
<string name="chat_database_section">Databasa siḧbetê</string>
<string name="stop_chat_question">Ber siḧbet were sekinandin?</string>
<string name="error_stopping_chat">Xeletî di sekinandina siḧbetê de</string>
<string name="delete_chat_profile_question">Ber profîla siḧbetê were jêbirin?</string>
@@ -17,10 +17,10 @@
<string name="call_already_ended">Skambutis jau baigtas!</string>
<string name="answer_call">Atsiliepti</string>
<string name="icon_descr_call_ended">Skambutis baigtas</string>
<string name="settings_section_title_calls">SKAMBUČIAI</string>
<string name="settings_section_title_calls">Skambučiai</string>
<string name="allow_your_contacts_irreversibly_delete">Leisti jūsų kontaktams negrįžtamai ištrinti išsiųstas žinutes. (24 valandas)</string>
<string name="back">Atgal</string>
<string name="settings_section_title_icon">PROGRAMĖLĖS PIKTOGRAMA</string>
<string name="settings_section_title_icon">Programėlės piktograma</string>
<string name="chat_preferences_always">visada</string>
<string name="allow_your_contacts_to_send_voice_messages">Leisti jūsų kontaktams siųsti balso žinutes.</string>
<string name="allow_irreversible_message_deletion_only_if">Leisti negrįžtamą žinučių ištrynimą tik tuo atveju, jei jūsų kontaktas jums tai leidžia. (24 valandas)</string>
@@ -78,8 +78,8 @@
<string name="icon_descr_flip_camera">Apversti kamerą</string>
<string name="icon_descr_call_rejected">Atmestas skambutis</string>
<string name="privacy_and_security">Privatumas ir saugumas</string>
<string name="settings_section_title_device">ĮRENGINYS</string>
<string name="settings_section_title_help">PAGALBA</string>
<string name="settings_section_title_device">Įrenginys</string>
<string name="settings_section_title_help">Pagalba</string>
<string name="encrypt_database">Šifruoti</string>
<string name="remove_passphrase">Šalinti</string>
<string name="button_delete_group">Ištrinti grupę</string>
@@ -241,7 +241,7 @@
<string name="icon_descr_speaker_off">Išjungti garsiakalbį</string>
<string name="icon_descr_speaker_on">Įjungti garsiakalbį</string>
<string name="alert_title_skipped_messages">Praleistos žinutės</string>
<string name="settings_section_title_settings">NUSTATYMAI</string>
<string name="settings_section_title_settings">Nustatymai</string>
<string name="theme_system">Sistemos</string>
<string name="unknown_message_format">nežinomas žinutės formatas</string>
<string name="simplex_link_contact">SimpleX kontakto adresas</string>
@@ -292,7 +292,7 @@
<string name="icon_descr_video_off">Išjungti vaizdą</string>
<string name="icon_descr_video_on">Įjungti vaizdą</string>
<string name="your_privacy">Jūsų privatumas</string>
<string name="settings_section_title_you">JŪS</string>
<string name="settings_section_title_you">Jūs</string>
<string name="wrong_passphrase_title">Neteisinga slaptafrazė!</string>
<string name="app_name">SimpleX</string>
<string name="sender_you_pronoun">jūs</string>
@@ -348,10 +348,10 @@
<string name="save_and_notify_group_members">Įrašyti ir pranešti grupės nariams</string>
<string name="callstate_received_confirmation">gautas patvirtinimas…</string>
<string name="icon_descr_call_missed">Praleistas skambutis</string>
<string name="settings_section_title_chats">POKALBIAI</string>
<string name="settings_section_title_themes">APIPAVIDALINIMAI</string>
<string name="settings_section_title_chats">Pokalbiai</string>
<string name="settings_section_title_themes">Apipavidalinimai</string>
<string name="settings_section_title_incognito">Inkognito veiksena</string>
<string name="settings_section_title_messages">ŽINUTĖS IR FAILAI</string>
<string name="settings_section_title_messages">Žinutės ir failai</string>
<string name="restart_the_app_to_use_imported_chat_database">Norėdami naudoti importuotą pokalbio duomenų bazę, paleiskite programėlę iš naujo.</string>
<string name="button_add_members">Pakviesti narius</string>
<string name="disappearing_prohibited_in_this_chat">Išnykstančios žinutės šiame pokalbyje yra uždraustos.</string>
@@ -420,7 +420,7 @@
<string name="network_session_mode_user">Pokalbio profilis</string>
<string name="profile_is_only_shared_with_your_contacts">Profilis yra bendrinamas tik su jūsų kontaktais.</string>
<string name="read_more_in_github_with_link"><![CDATA[Išsamiau skaitykite mūsų <font color="#0088ff">„GitHub“ saugykloje</font>.]]></string>
<string name="settings_section_title_socks">SOCKS ĮGALIOTASIS SERVERIS</string>
<string name="settings_section_title_socks">SOCKS įgaliotasis serveris</string>
<string name="save_passphrase_and_open_chat">Įrašyti slaptafrazę ir atverti pokalbį</string>
<string name="restore_database">Atkurti atsarginę duomenų bazės kopiją</string>
<string name="restore_database_alert_title">Atkurti atsarginę duomenų bazės kopiją\?</string>
@@ -459,7 +459,7 @@
<string name="contact_preferences">Kontakto nuostatos</string>
<string name="join_group_button">Prisijungti</string>
<string name="change_verb">Keisti</string>
<string name="conn_stats_section_title_servers">SERVERIAI</string>
<string name="conn_stats_section_title_servers">Serveriai</string>
<string name="clear_chat_menu_action">Išvalyti</string>
<string name="unhide_profile">Nebeslėpti profilio</string>
<string name="videos_limit_title">Per daug vaizdo įrašų!</string>
@@ -545,7 +545,7 @@
<string name="icon_descr_audio_off">Išjungti garsą</string>
<string name="all_app_data_will_be_cleared">Visi programėlės duomenys bus ištrinti.</string>
<string name="empty_chat_profile_is_created">Sukuriamas tuščias pokalbių profilis nurodytu pavadinimu ir programėlė atveriama kaip įprasta.</string>
<string name="settings_section_title_app">PROGRAMĖLĖ</string>
<string name="settings_section_title_app">Programėlė</string>
<string name="keychain_is_storing_securely">Saugiam slaptafrazės saugojimui yra naudojama „Android Keystore“ tai įgalina pranešimų tarnybą veikti.</string>
<string name="color_secondary_variant">Papildoma antrinė spalva</string>
<string name="color_primary_variant">Papildomas akcentavimas</string>
@@ -636,7 +636,7 @@
<string name="create_group_button_to_create_new_group"><![CDATA[<b>Sukurti grupę</b>: sukurti naują grupę.]]></string>
<string name="add_contact_tab">Pridėti kontaktą</string>
<string name="customize_theme_title">Tinkinti apipavidalinimą</string>
<string name="chat_database_section">POKALBIO DUOMENŲ BAZĖ</string>
<string name="chat_database_section">Pokalbio duomenų bazė</string>
<string name="v4_6_chinese_spanish_interface">Naudotojo sąsaja kinų ir ispanų kalbomis</string>
<string name="delivery_receipts_title">Pranešimai apie pristatymą!</string>
<string name="auth_disable_simplex_lock">Išjungti SimpleX užraktą</string>
@@ -855,7 +855,7 @@
<string name="connect_via_link_incognito">Prisijungti inkognito režimu</string>
<string name="enter_passphrase_notification_title">Reikalinga slaptafrazė</string>
<string name="prohibit_sending_voice_messages">Uždrausti siųsti balso žinutes.</string>
<string name="settings_section_title_experimenta">EKSPERIMENTINIS</string>
<string name="settings_section_title_experimenta">Eksperimentinis</string>
<string name="v5_0_large_files_support_descr">Greitai ir nelaukiant kol siuntėjas prisijungs!</string>
<string name="files_and_media">Failai ir medija</string>
<string name="files_are_prohibited_in_group">Failai ir medija yra draudžiami šioje grupėje.</string>
@@ -1000,7 +1000,7 @@
<string name="rcv_direct_event_contact_deleted">ištrintas kontaktas</string>
<string name="group_member_status_invited">pakviestas</string>
<string name="info_row_deleted_at">Ištrinta</string>
<string name="section_title_for_console">KONSOLEI</string>
<string name="section_title_for_console">Konsolei</string>
<string name="block_member_confirmation">Blokuoti</string>
<string name="network_option_protocol_timeout">Protokolui skirtas laikas</string>
<string name="chat_preferences_default">numatyta (%s)</string>
@@ -1106,7 +1106,7 @@
<string name="connection_you_accepted_will_be_cancelled">Prisijungimas, kurį priėmėte, bus atšauktas!</string>
<string name="tap_to_paste_link">Bakstelėkite, kad įklijuoti nuorodą</string>
<string name="smp_servers_test_server">Testuoti serverį</string>
<string name="theme_colors_section_title">TEMOS SPALVOS</string>
<string name="theme_colors_section_title">Temos spalvos</string>
<string name="show_slow_api_calls">Rodyti lėtus API iškvietimus</string>
<string name="stop_sharing_address">Nustoti bendrinti adresą?</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">Žinučių siuntimo ir programų platforma, apsauganti jūsų privatumą ir saugumą.</string>
@@ -1217,7 +1217,7 @@
<string name="set_database_passphrase">Nustatyti duomenų slaptafrazę</string>
<string name="set_passphrase">Nustatyti slaptafrazę</string>
<string name="privacy_show_last_messages">Rodyti paskutines žinutes</string>
<string name="settings_section_title_support">PALAIKYKITE SIMPLEX CHAT</string>
<string name="settings_section_title_support">Palaikykite SimpleX Chat</string>
<string name="receipts_section_description_1">Jų galima nepaisyti kontaktų ir grupių nustatymuose.</string>
<string name="enable_automatic_deletion_message">Šis veiksmas negali būti atšauktas - žinutės išsiųstos ir gautos anksčiau nei pasirinkta bus ištrintos. Tai gali užtrukti kelias minutes.</string>
<string name="rcv_group_event_n_members_connected">%s, %s ir %d kiti nariai prisijungė</string>
@@ -1516,7 +1516,7 @@
<string name="secret_text">paslaptis</string>
<string name="shutdown_alert_desc">Pranešimai nustos veikti iki tol kol paleisite programėlę iš naujo</string>
<string name="you_can_use_markdown_to_format_messages__prompt">Galite naudoti markdown, kad formatuoti žinutes:</string>
<string name="run_chat_section">PALEISTI POKALBIUS</string>
<string name="run_chat_section">Paleisti pokalbius</string>
<string name="settings_section_title_use_from_desktop">Naudoti iš darbastalio</string>
<string name="welcome_message_is_too_long">Sveikinimo žinutė yra per ilga</string>
<string name="v5_1_message_reactions">Žinučių reakcijos</string>
@@ -1618,7 +1618,7 @@
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Galite paleisti pokalbius per programėlės nustatymus/ duomenų bazę arba paleisdami programėlę iš naujo.</string>
<string name="rcv_group_event_user_deleted">pašalino jus</string>
<string name="info_row_moderated_at">Moderuota</string>
<string name="member_info_section_title_member">NARYS</string>
<string name="member_info_section_title_member">Narys</string>
<string name="sender_at_ts">%s %s</string>
<string name="item_info_no_text">nėra teksto</string>
<string name="color_surface">Meniu ir įspėjimai</string>
@@ -1651,7 +1651,7 @@
<string name="use_random_passphrase">Naudoti atsiktinę slaptafrazę</string>
<string name="call_connection_peer_to_peer">lygiaverčiai mazgai</string>
<string name="remove_passphrase_from_settings">Pašalinti slaptafrazę iš nustatymų?</string>
<string name="settings_section_title_delivery_receipts">SIŲSTI PRISTATYMO KVITUS PAS</string>
<string name="settings_section_title_delivery_receipts">Siųsti pristatymo kvitus pas</string>
<string name="receipts_groups_override_disabled">Pristatymo kvitai yra išjungti %d grupėms</string>
<string name="you_must_use_the_most_recent_version_of_database">Turite naudoti pačią naujausią pokalbių duomenų bazės versiją TIK viename įrenginyje, kitaip galite nebegauti žinučių iš kai kurių kontaktų.</string>
<string name="new_passphrase">Nauja slaptafrazė…</string>
@@ -124,7 +124,7 @@
<string name="report_reason_other">En annen grunn</string>
<string name="answer_call">Svar anrop</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Hvem som helst kan være vert for servere.</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="onboarding_notifications_mode_service_desc_short">Appen kjører alltid i bakgrunnen</string>
<string name="app_version_code">App build: %s</string>
<string name="notifications_mode_off_desc">Appen kan bare motta varsler når den er åpen, ingen bakgrunnstjeneste vil bli startet.</string>
@@ -5,7 +5,7 @@
<string name="call_on_lock_screen">Oproepen op vergrendelscherm:</string>
<string name="callstatus_in_progress">oproep bezig</string>
<string name="icon_descr_call_progress">Gesprek bezig</string>
<string name="settings_section_title_calls">OPROEPEN</string>
<string name="settings_section_title_calls">Oproepen</string>
<string name="cancel_verb">Annuleren</string>
<string name="icon_descr_cancel_file_preview">Bestandsvoorbeeld annuleren</string>
<string name="icon_descr_cancel_image_preview">Annuleer afbeeldingsvoorbeeld</string>
@@ -23,7 +23,7 @@
<string name="allow_to_send_voice">Sta toe om spraak berichten te verzenden.</string>
<string name="chat_is_running">Chat is actief</string>
<string name="clear_chat_menu_action">Wissen</string>
<string name="chat_database_section">CHAT DATABASE</string>
<string name="chat_database_section">Chat database</string>
<string name="chat_console">Chat console</string>
<string name="chat_database_imported">Chat database geïmporteerd</string>
<string name="chat_database_deleted">Chat database verwijderd</string>
@@ -85,7 +85,7 @@
<string name="app_version_code">App build: %s</string>
<string name="notifications_mode_off_desc">App kan alleen meldingen ontvangen wanneer deze actief is, er wordt geen achtergrondservice gestart</string>
<string name="appearance_settings">Uiterlijk</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="settings_section_title_icon">App icon</string>
<string name="app_version_title">App versie</string>
<string name="app_version_name">App versie: v%s</string>
<string name="network_session_mode_user_description"><![CDATA[Er wordt een aparte TCP-verbinding (en SOCKS-referentie) gebruikt <b> voor elk chatprofiel dat je in de app hebt </b>.]]></string>
@@ -119,7 +119,7 @@
<string name="chat_is_stopped_indication">Chat is gestopt</string>
<string name="chat_preferences">Chat voorkeuren</string>
<string name="network_session_mode_user">Chatprofiel</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_section_title_chats">Chats</string>
<string name="chat_with_developers">Praat met de ontwikkelaars</string>
<string name="smp_servers_check_address">Controleer het server adres en probeer het opnieuw.</string>
<string name="choose_file">Bestand</string>
@@ -231,7 +231,7 @@
<string name="full_deletion">Verwijderen voor iedereen</string>
<string name="delete_link">Link verwijderen</string>
<string name="conn_level_desc_direct">direct</string>
<string name="settings_section_title_device">APPARAAT</string>
<string name="settings_section_title_device">Apparaat</string>
<string name="delete_files_and_media_all">Verwijder alle bestanden</string>
<string name="delete_messages_after">Berichten verwijderen na</string>
<string name="direct_messages">Directe berichten</string>
@@ -309,7 +309,7 @@
<string name="encrypted_video_call">e2e versleuteld video gesprek</string>
<string name="allow_accepting_calls_from_lock_screen">Schakel oproepen vanaf het vergrendelscherm in via Instellingen.</string>
<string name="icon_descr_hang_up">Ophangen</string>
<string name="settings_section_title_help">HELP</string>
<string name="settings_section_title_help">Help</string>
<string name="settings_experimental_features">Experimentele functies</string>
<string name="error_starting_chat">Fout bij het starten van de chat</string>
<string name="export_database">Database exporteren</string>
@@ -358,7 +358,7 @@
<string name="error_accepting_contact_request">Fout bij het accepteren van een contactverzoek</string>
<string name="group_invitation_expired">Groep uitnodiging verlopen</string>
<string name="icon_descr_file">Bestand</string>
<string name="section_title_for_console">VOOR CONSOLE</string>
<string name="section_title_for_console">Voor console</string>
<string name="group_profile_is_stored_on_members_devices">Groep profiel wordt opgeslagen op de apparaten van de leden, niet op de servers.</string>
<string name="notification_preview_mode_hidden">Verborgen</string>
<string name="delete_group_for_self_cannot_undo_warning">De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt!</string>
@@ -473,8 +473,8 @@
<string name="leave_group_button">Verlaten</string>
<string name="group_member_role_member">Lid</string>
<string name="image_descr_link_preview">link voorbeeld afbeelding</string>
<string name="member_info_section_title_member">LID</string>
<string name="settings_section_title_messages">BERICHTEN EN BESTANDEN</string>
<string name="member_info_section_title_member">Lid</string>
<string name="settings_section_title_messages">Berichten en bestanden</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app"><![CDATA[📱 mobiel: tik op <b>Openen in mobiele app</b> en tik vervolgens op <b>Verbinden</b> in de app.]]></string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Lid wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!</string>
<string name="message_delivery_error_title">Fout bij bezorging van bericht</string>
@@ -730,10 +730,10 @@
<string name="protect_app_screen">App scherm verbergen</string>
<string name="your_privacy">Uw privacy</string>
<string name="send_link_previews">Link voorbeelden verzenden</string>
<string name="settings_section_title_settings">INSTELLINGEN</string>
<string name="settings_section_title_support">ONDERSTEUNING SIMPLEX CHAT</string>
<string name="settings_section_title_you">JIJ</string>
<string name="run_chat_section">CHAT UITVOEREN</string>
<string name="settings_section_title_settings">Instellingen</string>
<string name="settings_section_title_support">Ondersteuning SimpleX Chat</string>
<string name="settings_section_title_you">Jij</string>
<string name="run_chat_section">Chat uitvoeren</string>
<string name="your_chat_database">Uw chat database</string>
<string name="set_password_to_export">Wachtwoord instellen om te exporteren</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Start de app opnieuw om een nieuw chatprofiel aan te maken.</string>
@@ -790,7 +790,7 @@
<string name="button_send_direct_message">Direct bericht sturen</string>
<string name="member_role_will_be_changed_with_invitation">De rol wordt gewijzigd in "%s". De gebruiker ontvangt een nieuwe uitnodiging.</string>
<string name="sending_via">Verzenden via</string>
<string name="conn_stats_section_title_servers">SERVERS</string>
<string name="conn_stats_section_title_servers">Servers</string>
<string name="network_options_reset_to_defaults">Resetten naar standaardwaarden</string>
<string name="switch_receiving_address">Ontvangst adres wijzigen</string>
<string name="network_option_protocol_timeout">Protocol timeout</string>
@@ -874,11 +874,11 @@
<string name="share_message">Bericht delen…</string>
<string name="la_notice_title_simplex_lock">SimpleX Vergrendelen</string>
<string name="save_passphrase_in_keychain">Sla het wachtwoord op in Keychain</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_socks">SOCKS proxy</string>
<string name="v4_5_italian_interface_descr">Dank aan de gebruikers draag bij via Weblate!</string>
<string name="periodic_notifications_desc">De app haalt regelmatig nieuwe berichten op - het gebruikt een paar procent van de batterij per dag. De app maakt geen gebruik van push meldingen, gegevens van uw apparaat worden niet naar de servers verzonden.</string>
<string name="image_decoding_exception_desc">De afbeelding kan niet worden gedecodeerd. Probeer een andere afbeelding of neem contact op met de ontwikkelaars.</string>
<string name="settings_section_title_themes">THEMA\'S</string>
<string name="settings_section_title_themes">Thema\'s</string>
<string name="smp_servers_scan_qr">Scan server QR-code</string>
<string name="this_string_is_not_a_connection_link">Deze string is geen verbinding link!</string>
<string name="enable_automatic_deletion_message">Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren.</string>
@@ -994,7 +994,7 @@
<string name="developer_options">Database-ID\'s en Transport isolatie optie.</string>
<string name="hide_dev_options">Verbergen:</string>
<string name="show_developer_options">Ontwikkelaars opties tonen</string>
<string name="settings_section_title_experimenta">EXPERIMENTEEL</string>
<string name="settings_section_title_experimenta">Experimenteel</string>
<string name="delete_profile">Verwijder profiel</string>
<string name="profile_password">Profiel wachtwoord</string>
<string name="unhide_chat_profile">Chatprofiel zichtbaar maken</string>
@@ -1146,7 +1146,7 @@
<string name="import_theme_error_desc">Zorg ervoor dat het bestand de juiste YAML-syntaxis heeft. Exporteer het thema om een voorbeeld te hebben van de themabestandsstructuur.</string>
<string name="opening_database">Database openen…</string>
<string name="read_more_in_user_guide_with_link"><![CDATA[Lees meer in de <font color="#0088ff">Gebruikershandleiding</font>.]]></string>
<string name="theme_colors_section_title">INTERFACE KLEUREN</string>
<string name="theme_colors_section_title">Interface kleuren</string>
<string name="you_can_share_your_address">U kunt uw adres delen als een link of QR-code - iedereen kan verbinding met u maken.</string>
<string name="all_app_data_will_be_cleared">Alle app-gegevens worden verwijderd.</string>
<string name="empty_chat_profile_is_created">Er wordt een leeg chatprofiel met de opgegeven naam gemaakt en de app wordt zoals gewoonlijk geopend.</string>
@@ -1226,7 +1226,7 @@
<string name="item_info_no_text">geen tekst</string>
<string name="non_fatal_errors_occured_during_import">Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren:</string>
<string name="shutdown_alert_question">Afsluiten\?</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="settings_restart_app">Herstarten</string>
<string name="settings_shutdown">Afsluiten</string>
<string name="shutdown_alert_desc">Meldingen werken niet meer totdat u de app opnieuw start</string>
@@ -1285,7 +1285,7 @@
<string name="receipts_contacts_enable_keep_overrides">Inschakelen (overschrijvingen behouden)</string>
<string name="receipts_contacts_override_disabled">Het verzenden van ontvangst bevestiging is uitgeschakeld voor %d-contactpersonen</string>
<string name="receipts_contacts_disable_for_all">Uitschakelen voor iedereen</string>
<string name="settings_section_title_delivery_receipts">STUUR ONTVANGST BEVESTIGING NAAR</string>
<string name="settings_section_title_delivery_receipts">Stuur ontvangst bevestiging naar</string>
<string name="send_receipts">Ontvangst bevestiging verzenden</string>
<string name="v5_2_message_delivery_receipts_descr">De tweede vink die we gemist hebben! ✅</string>
<string name="v5_2_favourites_filter_descr">Filter ongelezen en favoriete chats.</string>
@@ -1779,13 +1779,13 @@
<string name="private_routing_explanation">Om uw IP-adres te beschermen, gebruikt privéroutering uw SMP-servers om berichten te bezorgen.</string>
<string name="network_smp_proxy_fallback_prohibit_description">Stuur GEEN berichten rechtstreeks, zelfs als uw of de bestemmingsserver geen privéroutering ondersteunt.</string>
<string name="update_network_smp_proxy_fallback_question">Terugval op berichtroutering</string>
<string name="settings_section_title_private_message_routing">PRIVÉBERICHT ROUTING</string>
<string name="settings_section_title_private_message_routing">Privébericht routing</string>
<string name="network_smp_proxy_fallback_allow_protected_description">Stuur berichten rechtstreeks als het IP-adres beschermd is en uw of bestemmingsserver geen privéroutering ondersteunt.</string>
<string name="file_not_approved_title">Onbekende servers!</string>
<string name="file_not_approved_descr">Zonder Tor of VPN is uw IP-adres zichtbaar voor deze XFTP-relays:
\n%1$s.</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Zonder Tor of VPN is uw IP-adres zichtbaar voor bestandsservers.</string>
<string name="settings_section_title_files">BESTANDEN</string>
<string name="settings_section_title_files">Bestanden</string>
<string name="protect_ip_address">Bescherm het IP-adres</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">De app vraagt om downloads van onbekende bestandsservers te bevestigen (behalve .onion of wanneer SOCKS-proxy is ingeschakeld).</string>
<string name="error_initializing_web_view">Fout bij het initialiseren van WebView. Update uw systeem naar de nieuwe versie. Neem contact op met ontwikkelaars.
@@ -2055,7 +2055,7 @@
<string name="select_chat_profile">Selecteer chatprofiel</string>
<string name="new_chat_share_profile">Profiel delen</string>
<string name="switching_profile_error_message">Uw verbinding is verplaatst naar %s, maar er is een onverwachte fout opgetreden tijdens het omleiden naar het profiel.</string>
<string name="settings_section_title_chat_database">CHAT DATABASE</string>
<string name="settings_section_title_chat_database">Chat database</string>
<string name="system_mode_toast">Systeemmodus</string>
<string name="migrate_from_device_remove_archive_question">Archief verwijderen?</string>
<string name="delete_messages_cannot_be_undone_warning">Berichten worden verwijderd. Dit kan niet ongedaan worden gemaakt!</string>
@@ -495,36 +495,36 @@
<string name="alert_title_skipped_messages">Pominięte wiadomości</string>
<string name="your_privacy">Twoja prywatność</string>
<string name="full_backup">Kopia zapasowa danych aplikacji</string>
<string name="settings_section_title_icon">IKONA APLIKACJI</string>
<string name="settings_section_title_icon">Ikona aplikacji</string>
<string name="auto_accept_images">Automatyczne akceptowanie obrazów</string>
<string name="settings_section_title_calls">POŁĄCZENIA</string>
<string name="chat_database_section">BAZA DANYCH CZATU</string>
<string name="settings_section_title_calls">Połączenia</string>
<string name="chat_database_section">Baza danych czatu</string>
<string name="chat_is_running">Czat jest uruchomiony</string>
<string name="chat_is_stopped">Czat jest zatrzymany</string>
<string name="settings_section_title_chats">CZATY</string>
<string name="settings_section_title_chats">Czaty</string>
<string name="database_passphrase">Hasło do bazy danych</string>
<string name="delete_database">Usuń bazę danych</string>
<string name="settings_developer_tools">Narzędzia deweloperskie</string>
<string name="settings_section_title_device">URZĄDZENIE</string>
<string name="settings_section_title_device">Urządzenie</string>
<string name="error_starting_chat">Błąd uruchamiania czatu</string>
<string name="settings_section_title_experimenta">EKSPERYMENTALNE</string>
<string name="settings_section_title_experimenta">Eksperymentalne</string>
<string name="settings_experimental_features">Funkcje eksperymentalne</string>
<string name="export_database">Eksportuj bazę danych</string>
<string name="settings_section_title_help">POMOC</string>
<string name="settings_section_title_help">Pomoc</string>
<string name="import_database">Importuj bazę danych</string>
<string name="settings_section_title_incognito">Tryb incognito</string>
<string name="settings_section_title_messages">WIADOMOŚCI I PLIKI</string>
<string name="settings_section_title_messages">Wiadomości i pliki</string>
<string name="new_database_archive">Nowe archiwum bazy danych</string>
<string name="old_database_archive">Stare archiwum bazy danych</string>
<string name="protect_app_screen">Chroń ekran aplikacji</string>
<string name="run_chat_section">URUCHOM CZAT</string>
<string name="run_chat_section">Uruchom czat</string>
<string name="send_link_previews">Wyślij podgląd linku</string>
<string name="settings_section_title_settings">USTAWIENIA</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_settings">Ustawienia</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="stop_chat_question">Zatrzymać czat\?</string>
<string name="settings_section_title_support">WSPIERAJ SIMPLEX CHAT</string>
<string name="settings_section_title_themes">MOTYWY</string>
<string name="settings_section_title_you">TY</string>
<string name="settings_section_title_support">Wspieraj SimpleX Chat</string>
<string name="settings_section_title_themes">Motywy</string>
<string name="settings_section_title_you">Ty</string>
<string name="your_chat_database">Twoja baza danych czatu</string>
<string name="set_password_to_export">Ustaw hasło do eksportu</string>
<string name="stop_chat_confirmation">Zatrzymaj</string>
@@ -707,12 +707,12 @@
<string name="error_creating_link_for_group">Błąd tworzenia linku grupy</string>
<string name="error_deleting_link_for_group">Błąd usuwania linku grupy</string>
<string name="error_removing_member">Błąd usuwania członka</string>
<string name="section_title_for_console">DLA KONSOLI</string>
<string name="section_title_for_console">Dla konsoli</string>
<string name="info_row_group">Grupa</string>
<string name="group_display_name_field">Wprowadź nazwę grupy:</string>
<string name="group_full_name_field">Pełna nazwa grupy:</string>
<string name="info_row_local_name">Nazwa lokalna</string>
<string name="member_info_section_title_member">CZŁONEK</string>
<string name="member_info_section_title_member">Członek</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Członek zostanie usunięty z grupy - nie można tego cofnąć!</string>
<string name="network_status">Status sieci</string>
<string name="only_group_owners_can_change_prefs">Tylko właściciele grup mogą zmieniać preferencje grupy.</string>
@@ -724,7 +724,7 @@
<string name="save_welcome_message_question">Zapisać wiadomość powitalną\?</string>
<string name="button_send_direct_message">Wyślij wiadomość bezpośrednią</string>
<string name="sending_via">Wysyłanie przez</string>
<string name="conn_stats_section_title_servers">SERWERY</string>
<string name="conn_stats_section_title_servers">Serwery</string>
<string name="switch_verb">Przełącz</string>
<string name="switch_receiving_address">Zmień adres odbioru</string>
<string name="group_is_decentralized">W pełni zdecentralizowana widoczna tylko dla członków.</string>
@@ -1136,7 +1136,7 @@
<string name="you_can_accept_or_reject_connection">Kiedy ludzie proszą o połączenie, możesz je zaakceptować lub odrzucić.</string>
<string name="you_wont_lose_your_contacts_if_delete_address">Nie stracisz kontaktów, jeśli później usuniesz swój adres.</string>
<string name="customize_theme_title">Dostosuj motyw</string>
<string name="theme_colors_section_title">KOLORY INTERFEJSU</string>
<string name="theme_colors_section_title">Kolory interfejsu</string>
<string name="your_contacts_will_remain_connected">Twoje kontakty pozostaną połączone.</string>
<string name="add_address_to_your_profile">Dodaj adres do swojego profilu, aby Twoje kontakty mogły go udostępnić innym osobom. Aktualizacja profilu zostanie wysłana do Twoich kontaktów.</string>
<string name="create_address_and_let_people_connect">Utwórz adres, aby ludzie mogli się z Tobą połączyć.</string>
@@ -1229,7 +1229,7 @@
<string name="item_info_no_text">brak tekstu</string>
<string name="non_fatal_errors_occured_during_import">Podczas importu wystąpiły niekrytyczne błędy:</string>
<string name="settings_restart_app">Restart</string>
<string name="settings_section_title_app">APLIKACJA</string>
<string name="settings_section_title_app">Aplikacja</string>
<string name="shutdown_alert_desc">Powiadomienia przestaną działać do momentu ponownego uruchomienia aplikacji.</string>
<string name="settings_shutdown">Wyłączenie</string>
<string name="shutdown_alert_question">Wyłączyć\?</string>
@@ -1262,7 +1262,7 @@
<string name="v5_2_disappear_one_message">Spraw, aby jedna wiadomość zniknęła</string>
<string name="renegotiate_encryption">Renegocjuj szyfrowanie</string>
<string name="rcv_conn_event_verification_code_reset">kod bezpieczeństwa zmieniony</string>
<string name="settings_section_title_delivery_receipts">WYŚLIJ POTWIERDZENIA DOSTAWY DO</string>
<string name="settings_section_title_delivery_receipts">Wyślij potwierdzenia dostawy do</string>
<string name="sending_delivery_receipts_will_be_enabled_all_profiles">Wysyłanie potwierdzeń dostawy zostanie włączone dla wszystkich kontaktów we wszystkich widocznych profilach czatu.</string>
<string name="receipts_section_contacts">Kontakty</string>
<string name="receipts_contacts_title_enable">Włączyć potwierdzenia\?</string>
@@ -1772,7 +1772,7 @@
<string name="network_smp_proxy_fallback_prohibit">Nie</string>
<string name="network_smp_proxy_fallback_allow_protected">Gdy IP ukryty</string>
<string name="private_routing_show_message_status">Pokaż status wiadomości</string>
<string name="settings_section_title_private_message_routing">TRASOWANIE PRYWATNYCH WIADOMOŚCI</string>
<string name="settings_section_title_private_message_routing">Trasowanie prywatnych wiadomości</string>
<string name="network_smp_proxy_fallback_prohibit_description">NIE wysyłaj wiadomości bezpośrednio, nawet jeśli serwer docelowy nie obsługuje prywatnego trasowania.</string>
<string name="private_routing_explanation">Aby chronić Twój adres IP, prywatne trasowanie używa Twoich serwerów SMP, aby dostarczyć wiadomości.</string>
<string name="network_smp_proxy_mode_unknown">Nieznane serwery</string>
@@ -1788,7 +1788,7 @@
<string name="protect_ip_address">Chroń adres IP</string>
<string name="app_will_ask_to_confirm_unknown_file_servers">Aplikacja będzie prosić o potwierdzenie pobierań z nieznanych serwerów plików (z wyjątkiem .onion lub gdy proxy SOCKS jest włączone).</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Bez Tor lub VPN, Twój adres IP będzie widoczny do serwerów plików.</string>
<string name="settings_section_title_files">PLIKI</string>
<string name="settings_section_title_files">Pliki</string>
<string name="settings_section_title_user_theme">Motyw profilu</string>
<string name="chat_list_always_visible">Pokaż listę czatów w nowym oknie</string>
<string name="dark_mode_colors">Kolory ciemnego trybu</string>
@@ -2065,7 +2065,7 @@
<string name="forward_files_in_progress_desc">%1$d plik(ów/i) dalej są pobierane.</string>
<string name="forward_files_failed_to_receive_desc">%1$d plik(ów/i) nie udało się pobrać.</string>
<string name="switching_profile_error_title">Błąd zmiany profilu</string>
<string name="settings_section_title_chat_database">BAZA CZATU</string>
<string name="settings_section_title_chat_database">Baza czatu</string>
<string name="n_file_errors">%1$d błędów plików:\n%2$s</string>
<string name="n_other_file_errors">%1$d innych błędów plików.</string>
<string name="forward_files_messages_deleted_after_selection_desc">Wiadomości zostały usunięte po wybraniu ich.</string>
@@ -2233,7 +2233,7 @@
<string name="cant_send_message_contact_deleted">kontakt usunięty</string>
<string name="cant_send_message_contact_disabled">kontakt wyłączony</string>
<string name="cant_send_message_contact_not_ready">kontakt nie gotowy</string>
<string name="settings_section_title_contact_requests_from_groups">PROŚBY O KONTAKT OD GRUP</string>
<string name="settings_section_title_contact_requests_from_groups">Prośby o kontakt od grup</string>
<string name="contact_should_accept">kontakt powinien zaakceptować…</string>
<string name="v6_4_1_short_address_create">Stwórz swój adres</string>
<string name="group_new_support_chats_short">%d czat(y)</string>
@@ -74,16 +74,16 @@
<string name="network_session_mode_user_description"><![CDATA[Uma conexão TCP separada (e credencial SOCKS) será usada <b>para cada perfil de bate-papo que você tiver no aplicativo</b>.]]></string>
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>Melhor para bateria</b>. Você receberá notificações apenas quando o aplicativo estiver em execução (SEM o serviço em segundo plano).]]></string>
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Consome mais bateria</b>! O aplicativo em segundo plano está sempre em execução - as notificações são exibidas instantaneamente.]]></string>
<string name="settings_section_title_chats">BATE-PAPOS</string>
<string name="settings_section_title_icon">ÍCONE DO APLICATIVO</string>
<string name="chat_database_section">BANCO DE DADOS DE BATE-PAPO</string>
<string name="settings_section_title_chats">Bate-papos</string>
<string name="settings_section_title_icon">Ícone do aplicativo</string>
<string name="chat_database_section">Banco de dados de bate-papo</string>
<string name="chat_is_running">O bate-papo está em execução</string>
<string name="chat_is_stopped">O bate-papo está parado</string>
<string name="change_database_passphrase_question">Alterar senha do banco de dados\?</string>
<string name="rcv_conn_event_switch_queue_phase_completed">endereço alterado para você</string>
<string name="both_you_and_your_contact_can_send_disappearing">Você e seu contato podem enviar mensagens temporárias.</string>
<string name="full_backup">Backup de dados do aplicativo</string>
<string name="settings_section_title_calls">CHAMADAS</string>
<string name="settings_section_title_calls">Chamadas</string>
<string name="v4_2_auto_accept_contact_requests">Aceitar solicitações de contato automaticamente</string>
<string name="appearance_settings">Aparência</string>
<string name="notifications_mode_service_desc">O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis.</string>
@@ -247,7 +247,7 @@
<string name="connection_timeout">Tempo de conexão esgotado</string>
<string name="delete_member_message__question">Excluir mensagem do membro\?</string>
<string name="smp_server_test_delete_queue">Excluir fila</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_section_title_device">Dispositivo</string>
<string name="settings_developer_tools">Ferramentas de desenvolvedor</string>
<string name="group_member_status_introduced">conectando (introduzido)</string>
<string name="color_primary">Tonalidade</string>
@@ -378,7 +378,7 @@
<string name="file_saved">Arquivo salvo</string>
<string name="group_members_can_send_voice">Os membros podem enviar mensagens de voz.</string>
<string name="delete_group_for_all_members_cannot_undo_warning">O grupo será excluído para todos os membros - isso não pode ser desfeito!</string>
<string name="settings_section_title_help">AJUDA</string>
<string name="settings_section_title_help">Ajuda</string>
<string name="notification_display_mode_hidden_desc">Ocultar contato e mensagem</string>
<string name="how_to_use_simplex_chat">Como usar</string>
<string name="how_to_use_markdown">Como usar markdown</string>
@@ -420,7 +420,7 @@
<string name="enter_one_ICE_server_per_line">Servidores ICE (um por linha)</string>
<string name="ignore">Ignorar</string>
<string name="image_will_be_received_when_contact_is_online">A imagem será recebida quando seu contato estiver online, aguarde ou verifique mais tarde!</string>
<string name="conn_stats_section_title_servers">SERVIDORES</string>
<string name="conn_stats_section_title_servers">Servidores</string>
<string name="receiving_via">Recebendo via</string>
<string name="network_status">Status da conexão</string>
<string name="network_option_seconds_label">seg</string>
@@ -495,8 +495,8 @@
<string name="network_enable_socks">Usar proxy SOCKS\?</string>
<string name="icon_descr_call_rejected">Chamada rejeitada</string>
<string name="restore_database">Restaurar o backup do banco de dados</string>
<string name="section_title_for_console">PARA CONSOLE</string>
<string name="run_chat_section">EXECUTAR BATE-PAPO</string>
<string name="section_title_for_console">Para console</string>
<string name="run_chat_section">Executar bate-papo</string>
<string name="stop_chat_confirmation">Parar</string>
<string name="set_password_to_export">Definir senha para exportar</string>
<string name="restart_the_app_to_use_imported_chat_database">Reinicie o aplicativo para usar o banco de dados do chat importado.</string>
@@ -571,7 +571,7 @@
<string name="snd_group_event_changed_member_role">você mudou o cargo de %s para %s</string>
<string name="new_member_role">Novo cargo de membro</string>
<string name="remove_member_confirmation">Remover</string>
<string name="member_info_section_title_member">MEMBRO</string>
<string name="member_info_section_title_member">Membro</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">O membro será removido do grupo - isso não pode ser desfeito!</string>
<string name="role_in_group">Cargo</string>
<string name="sending_via">Enviando via</string>
@@ -663,8 +663,8 @@
<string name="v4_6_chinese_spanish_interface">Interface chinesa e espanhola</string>
<string name="v4_6_reduced_battery_usage">Maior redução no uso da bateria</string>
<string name="v4_6_reduced_battery_usage_descr">Mais melhorias chegarão em breve!</string>
<string name="settings_section_title_you">VOCÊ</string>
<string name="settings_section_title_messages">MENSAGENS E ARQUIVOS</string>
<string name="settings_section_title_you">Você</string>
<string name="settings_section_title_messages">Mensagens e arquivos</string>
<string name="your_chat_database">Seu banco de dados de bate-papo</string>
<string name="snd_group_event_member_deleted">Você removeu %1$s</string>
<string name="group_member_status_removed">removido</string>
@@ -800,7 +800,7 @@
<string name="hide_profile">Ocultar perfil</string>
<string name="callstate_received_confirmation">confirmação recebida…</string>
<string name="relay_server_protects_ip">O servidor de relay protege seu endereço IP, mas pode observar a duração da chamada.</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="snd_conn_event_switch_queue_phase_completed">você alterou o endereço</string>
<string name="database_upgrade">Atualização do banco de dados</string>
<string name="member_role_will_be_changed_with_invitation">O cargo será alterado para "%s". O membro receberá um novo convite.</string>
@@ -819,7 +819,7 @@
<string name="only_group_owners_can_enable_voice">Somente o proprietários de grupo podem ativar mensagens de voz</string>
<string name="description_you_shared_one_time_link">você compartilhou um link de uso único</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Você será conectado quando sua solicitação de conexão for aceita, aguarde ou verifique mais tarde!</string>
<string name="settings_section_title_settings">CONFIGURAÇÕES</string>
<string name="settings_section_title_settings">Configurações</string>
<string name="v4_6_group_welcome_message_descr">Defina a mensagem mostrada aos novos membros!</string>
<string name="icon_descr_settings">Configurações</string>
<string name="switch_receiving_address">Alternar endereço de recebimento</string>
@@ -848,7 +848,7 @@
<string name="la_notice_turn_on">Ligar</string>
<string name="welcome">Bem-vindo(a)!</string>
<string name="next_generation_of_private_messaging">O futuro da transmissão de mensagens</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="database_backup_can_be_restored">A tentativa de alterar a senha do banco de dados não foi concluída.</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Pare o bate-papo para exportar, importar ou excluir o banco de dados do chat. Você não poderá receber e enviar mensagens enquanto o chat estiver interrompido.</string>
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
@@ -887,7 +887,7 @@
<string name="icon_descr_video_call">chamada de vídeo</string>
<string name="show_call_on_lock_screen">Mostrar</string>
<string name="webrtc_ice_servers">Servidores ICE WebRTC</string>
<string name="settings_section_title_themes">TEMAS</string>
<string name="settings_section_title_themes">Temas</string>
<string name="update_database">Atualizar</string>
<string name="periodic_notifications_desc">O app busca novas mensagens periodicamente ele usa alguns por cento da bateria por dia. O aplicativo não usa notificações por push os dados do seu dispositivo não são enviados para os servidores.</string>
<string name="enter_passphrase_notification_desc">Para receber notificações, por favor, digite a senha do banco de dados</string>
@@ -1001,7 +1001,7 @@
<string name="feature_off">desativado</string>
<string name="downgrade_and_open_chat">Desatualizar e abrir o bate-papo</string>
<string name="chat_preferences_off">desativado</string>
<string name="settings_section_title_support">APOIE SIMPLEX CHAT</string>
<string name="settings_section_title_support">Apoie SimpleX Chat</string>
<string name="enable_automatic_deletion_message">Esta ação não pode ser desfeita - as mensagens enviadas e recebidas antes do selecionado serão excluídas. Pode levar vários minutos.</string>
<string name="confirm_database_upgrades">Confirme as atualizações do banco de dados</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Somente o cliente dos dispositivos armazenam perfis de usuários, contatos, grupos e mensagens.</string>
@@ -1127,7 +1127,7 @@
<string name="you_wont_lose_your_contacts_if_delete_address">Você não perderá seus contatos se, posteriormente, excluir seu endereço.</string>
<string name="simplex_address">Endereço SimpleX</string>
<string name="you_can_accept_or_reject_connection">Quando as pessoas solicitam uma conexão, você pode aceitá-la ou rejeitá-la.</string>
<string name="theme_colors_section_title">CORES DA INTERFACE</string>
<string name="theme_colors_section_title">Cores da interface</string>
<string name="share_with_contacts">compartilhar com os contatos</string>
<string name="profile_update_will_be_sent_to_contacts">A atualização do perfil será enviada aos seus contatos.</string>
<string name="save_settings_question">Salvar configurações\?</string>
@@ -1253,7 +1253,7 @@
<string name="fix_connection_not_supported_by_group_member">Correção não suportada pelo membro do grupo</string>
<string name="conn_event_ratchet_sync_started">concordando com criptografia…</string>
<string name="allow_to_send_files">Permitir o envio de arquivos e mídia.</string>
<string name="settings_section_title_app">APP</string>
<string name="settings_section_title_app">App</string>
<string name="conn_event_ratchet_sync_ok">criptografia OK</string>
<string name="conn_event_ratchet_sync_required">renegociação de criptografia necessária</string>
<string name="snd_conn_event_ratchet_sync_agreed">criptografia concordada para %s</string>
@@ -1284,7 +1284,7 @@
<string name="receipts_contacts_title_enable">Ativar recibos?</string>
<string name="v5_2_favourites_filter">Encontrar conversas mais rápido</string>
<string name="receipts_section_contacts">Contatos</string>
<string name="settings_section_title_delivery_receipts">ENVIAR RECIBOS DE ENTREGA PARA</string>
<string name="settings_section_title_delivery_receipts">Enviar recibos de entrega para</string>
<string name="receipts_contacts_override_disabled">Enviar confirmações está desativado para %d contatos.</string>
<string name="receipts_contacts_override_enabled">Enviar confirmações está ativado para %d contatos.</string>
<string name="send_receipts">Enviar confirmações</string>
@@ -1862,9 +1862,9 @@
<string name="audio_device_speaker">Alto falante</string>
<string name="audio_device_wired_headphones">Headphones</string>
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Sem Tor ou VPN, seu endereço de IP ficará visível para servidores de arquivo.</string>
<string name="settings_section_title_files">ARQUIVOS</string>
<string name="settings_section_title_files">Arquivos</string>
<string name="settings_section_title_profile_images">Fotos de perfil</string>
<string name="settings_section_title_private_message_routing">ROTEAMENTO DE MENSAGEM PRIVADA</string>
<string name="settings_section_title_private_message_routing">Roteamento de mensagem privada</string>
<string name="conn_event_disabled_pq">criptografia padrão ponta a ponta</string>
<string name="feature_roles_owners">proprietários</string>
<string name="migrate_from_device_to_another_device">Migrar para outro dispositivo</string>
@@ -2055,7 +2055,7 @@
<string name="one_hand_ui">Barras de ferramentas de aplicativos acessível</string>
<string name="forward_files_failed_to_receive_desc">Falha no baixar de %1$d arquivo(s).</string>
<string name="forward_files_messages_deleted_after_selection_title">%1$s mensagens não encaminhadas.</string>
<string name="settings_section_title_chat_database">DADOS DO BATE-PAPO</string>
<string name="settings_section_title_chat_database">Dados do bate-papo</string>
<string name="network_proxy_random_credentials">Utilize credenciais aleatórias</string>
<string name="migrate_from_device_uploaded_archive_will_be_removed">O arquivo de banco de dados enviado será removido permanentemente dos servidores.</string>
<string name="network_proxy_auth_mode_isolate_by_auth_entity">Use credenciais diferentes de proxy para cada conexão.</string>
@@ -28,9 +28,9 @@
<string name="full_backup">Backup de dados da aplicação</string>
<string name="auto_accept_images">Aceitar imagens automaticamente</string>
<string name="passcode_set">Código de acesso definido!</string>
<string name="settings_section_title_you">VOCÊ</string>
<string name="settings_section_title_messages">MENSAGENS E FICHEIROS</string>
<string name="settings_section_title_icon">ÍCONE DA APLICAÇÃO</string>
<string name="settings_section_title_you">Você</string>
<string name="settings_section_title_messages">Mensagens e ficheiros</string>
<string name="settings_section_title_icon">Ícone da aplicação</string>
<string name="chat_item_ttl_month">1 mês</string>
<string name="messages_section_title">Mensagens</string>
<string name="button_add_welcome_message">Adicionar mensagem de boas-vindas</string>
@@ -137,7 +137,7 @@
<string name="delete_group_menu_action">Eliminar</string>
<string name="delete_files_and_media_all">Eliminar todos os ficheiros</string>
<string name="delete_database">Eliminar base de dados</string>
<string name="chat_database_section">BASE DE DADOS DE CONVERSA</string>
<string name="chat_database_section">Base de dados de conversa</string>
<string name="chat_database_deleted">Base de dados de conversa eliminada</string>
<string name="display_name">Nome para Exibição</string>
<string name="show_dev_options">Mostrar:</string>
@@ -184,7 +184,7 @@
<string name="paste_the_link_you_received">Colar ligação recebida</string>
<string name="restore_passphrase_not_found_desc">Senha não encontrada na Keystore, por favor insira-a manualmente. Isto pode ter acontecido se você restaurou os dados da aplicação usando uma ferramenta de backup. Se não for o caso, entre em contato com os desenvolvedores.</string>
<string name="error_smp_test_server_auth">O servidor requer autorização para criar filas, verifique a senha</string>
<string name="conn_stats_section_title_servers">SERVIDORES</string>
<string name="conn_stats_section_title_servers">Servidores</string>
<string name="error_xftp_test_server_auth">O servidor requer autorização para fazer upload, verifique a senha</string>
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Defina <i>Usar hosts .onion</i> como Não se o proxy SOCKS não o suportar.]]></string>
<string name="network_use_onion_hosts">Usar hosts .onion</string>
@@ -226,7 +226,7 @@
<string name="call_already_ended">Chamada já finalizada!</string>
<string name="icon_descr_call_progress">Chamada em curso</string>
<string name="icon_descr_call_ended">Chamada finalizada</string>
<string name="settings_section_title_calls">CHAMADAS</string>
<string name="settings_section_title_calls">Chamadas</string>
<string name="v4_5_transport_isolation_descr">Por perfil de conversa (padrão) ou por ligação (BETA).</string>
<string name="cannot_access_keychain">Não é possível aceder à Keystore para salvar a senha da base de dados</string>
<string name="invite_prohibited">Não é possível convidar o contato!</string>
@@ -251,7 +251,7 @@
<string name="error_deleting_link_for_group">Erro ao eliminar ligação de grupo</string>
<string name="network_session_mode_user">Perfil de conversa</string>
<string name="change_lock_mode">Alterar o modo de bloqueio</string>
<string name="settings_section_title_chats">CONVERSAS</string>
<string name="settings_section_title_chats">Conversas</string>
<string name="chat_is_running">Conversa em execução</string>
<string name="error_changing_message_deletion">Erro ao alterar configuração</string>
<string name="change_database_passphrase_question">Alterar a senha da base de dados\?</string>
@@ -471,7 +471,7 @@
<string name="info_row_database_id">ID da base de dados</string>
<string name="smp_server_test_delete_file">Eliminar ficheiro</string>
<string name="delete_contact_question">Eliminar contacto?</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_section_title_device">Dispositivo</string>
<string name="direct_messages">Mensagens diretas</string>
<string name="decentralized">Descentralizado</string>
<string name="integrity_msg_duplicate">mensagem duplicada</string>
@@ -540,7 +540,7 @@
<string name="alert_text_decryption_error_too_many_skipped">%1$d mensagens ignoradas.</string>
<string name="import_database">Importar base de dados</string>
<string name="your_settings">As suas definições</string>
<string name="settings_section_title_settings">DEFINIÇÕES</string>
<string name="settings_section_title_settings">Definições</string>
<string name="share_verb">Partilhar</string>
<string name="share_address">Partilhar endereço</string>
<string name="icon_descr_settings">Definições</string>
@@ -554,12 +554,12 @@
\nEsta ação é irreversível - o seu perfil, contactos, mensagens e ficheiros serão irreversivelmente perdidos.</string>
<string name="mark_unread">Marcar como não lido</string>
<string name="group_member_role_member">membro</string>
<string name="member_info_section_title_member">MEMBRO</string>
<string name="member_info_section_title_member">Membro</string>
<string name="v4_3_voice_messages_desc">Máximo de 40 segundos, recebido instantaneamente.</string>
<string name="icon_descr_more_button">Mais</string>
<string name="network_and_servers">Rede e servidores</string>
<string name="network_settings_title">Configurações avançadas</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Você pode iniciar a conversa através das Definições da aplicação / Base de Dados ou reiniciando a aplicação.</string>
<string name="update_network_settings_confirmation">Atualizar</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">A atualização das definições reconectará o cliente a todos os servidores.</string>
@@ -572,10 +572,10 @@
<string name="message_delivery_error_desc">Muito provavelmente este contato eliminou a conexão consigo.</string>
<string name="this_text_is_available_in_settings">Este texto está disponível nas definições</string>
<string name="onboarding_notifications_mode_subtitle">Pode ser alterado mais tarde através das definições.</string>
<string name="settings_section_title_help">AJUDA</string>
<string name="settings_section_title_support">SUPORTE SIMPLEX CHAT</string>
<string name="settings_section_title_help">Ajuda</string>
<string name="settings_section_title_support">Suporte SimpleX Chat</string>
<string name="settings_experimental_features">Funcionalidades experimentais</string>
<string name="settings_section_title_themes">TEMAS</string>
<string name="settings_section_title_themes">Temas</string>
<string name="theme_dark">Escuro</string>
<string name="dark_theme">Tema escuro</string>
<string name="chat_item_ttl_none">nunca</string>
@@ -98,7 +98,7 @@
<string name="rcv_group_and_other_events">și %d alte evenimente</string>
<string name="answer_call">Răspunde la apel</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore va fi folosit pentru a stoca în siguranță parola după ce repornești aplicația sau schimbi parola — acest lucru va permite primirea de notificări.</string>
<string name="settings_section_title_app">APLICAȚIE</string>
<string name="settings_section_title_app">Aplicație</string>
<string name="create_group_button">Creează grup</string>
<string name="v4_6_audio_video_calls">Apeluri audio și video</string>
<string name="migrate_from_device_archive_and_upload">Arhivează și încarcă</string>
@@ -109,7 +109,7 @@
<string name="call_service_notification_audio_call">Apel audio</string>
<string name="icon_descr_audio_call">apel audio</string>
<string name="icon_descr_audio_off">Audio oprit</string>
<string name="settings_section_title_icon">PICTOGRAMĂ APLICAȚIE</string>
<string name="settings_section_title_icon">Pictogramă aplicație</string>
<string name="la_app_passcode">Cod de acces aplicație</string>
<string name="create_secret_group_title">Creează grup secret</string>
<string name="smp_server_test_create_queue">Creează coadă</string>
@@ -292,11 +292,11 @@
<string name="show_dev_options">Afișează:</string>
<string name="show_internal_errors">Afișează erorile interne</string>
<string name="secret_text">secret</string>
<string name="settings_section_title_settings">SETĂRI</string>
<string name="settings_section_title_settings">Setări</string>
<string name="rcv_group_event_1_member_connected">%s conectat</string>
<string name="profile_update_event_set_new_picture">setați o nouă poză de profil</string>
<string name="share_text_sent_at">Trimis la: %s</string>
<string name="conn_stats_section_title_servers">SERVERE</string>
<string name="conn_stats_section_title_servers">Servere</string>
<string name="send_live_message">Trimite mesaj în direct</string>
<string name="migrate_to_device_bytes_downloaded">%s descărcat</string>
<string name="share_address_with_contacts_question">Partajați adresa cu contactele?</string>
@@ -376,7 +376,7 @@
<string name="alert_title_msg_bad_hash">Hash mesaj incorect</string>
<string name="switch_receiving_address">Schimbă adresa de primire</string>
<string name="chat_is_stopped_you_should_transfer_database">Conversația este oprită. Dacă ai folosit deja această bază de date pe alt dispozitiv, ar trebui să o transferi înapoi înainte de a porni conversația.</string>
<string name="settings_section_title_calls">APELURI</string>
<string name="settings_section_title_calls">Apeluri</string>
<string name="snd_group_event_changed_role_for_yourself">v-ați schimbat rolul în %s</string>
<string name="snd_error_quota">Capacitate depășită - destinatarul nu a primit mesajele trimise anterior.</string>
<string name="change_self_destruct_passcode">Schimbă codul de acces autodistructibil</string>
@@ -431,8 +431,8 @@
<string name="status_contact_has_e2e_encryption">contactul are criptare e2e</string>
<string name="status_contact_has_no_e2e_encryption">contactul nu are criptare e2e</string>
<string name="receipts_section_contacts">Contacte</string>
<string name="settings_section_title_chats">CONVERSAȚII</string>
<string name="chat_database_section">BAZĂ DE DATE CONVERSAȚIE</string>
<string name="settings_section_title_chats">Conversații</string>
<string name="chat_database_section">Bază de date conversație</string>
<string name="chat_database_deleted">Baza de date a conversației a fost ștearsă</string>
<string name="chat_is_running">Conversația rulează</string>
<string name="your_chat_database">Baza de date a conversațiilor tale</string>
@@ -684,7 +684,7 @@
<string name="app_check_for_updates_notice_title">Verifică pentru actualizări</string>
<string name="create_address_button">Creează</string>
<string name="privacy_media_blur_radius">Estompează media</string>
<string name="settings_section_title_chat_database">BAZĂ DE DATE CONVERSAȚIE</string>
<string name="settings_section_title_chat_database">Bază de date conversație</string>
<string name="v6_0_connect_faster_descr">Conectează-te cu prietenii mai ușor.</string>
<string name="attempts_label">încercări</string>
<string name="completed">Finalizat</string>
@@ -719,11 +719,11 @@
<string name="your_settings">Setări</string>
<string name="encrypted_audio_call">apel audio criptat e2e</string>
<string name="encrypted_video_call">apel video criptat e2e</string>
<string name="settings_section_title_device">DISPOZITIV</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="settings_section_title_device">Dispozitiv</string>
<string name="settings_section_title_experimenta">Experimental</string>
<string name="encrypt_database">Criptează</string>
<string name="decryption_errors">erori de decriptare</string>
<string name="settings_section_title_you">TU</string>
<string name="settings_section_title_you">Tu</string>
<string name="status_no_e2e_encryption">nicio criptare e2e</string>
<string name="status_e2e_encrypted">criptat e2e</string>
<string name="incoming_video_call">Apel video primit</string>
@@ -825,7 +825,7 @@
<string name="onboarding_notifications_mode_battery">Notificări și baterie</string>
<string name="open_verb">Deschide</string>
<string name="receipts_groups_title_enable">Activați confirmarea de primire pentru grupuri?</string>
<string name="section_title_for_console">PENTRU CONSOLĂ</string>
<string name="section_title_for_console">Pentru consolă</string>
<string name="info_row_moderated_at">Moderat la</string>
<string name="fix_connection">Remediați conexiunea</string>
<string name="v4_5_multiple_chat_profiles">Profiluri de conversație multiple</string>
@@ -915,7 +915,7 @@
<string name="no_chats_in_list">Nicio conversație în lista %s.</string>
<string name="selected_chat_items_nothing_selected">Nimic selectat</string>
<string name="info_view_open_button">deschis</string>
<string name="settings_section_title_help">AJUTOR</string>
<string name="settings_section_title_help">Ajutor</string>
<string name="only_your_contact_can_send_disappearing">Doar contactul tău poate trimite mesaje care dispar.</string>
<string name="migrate_to_device_importing_archive">Se importă arhiva</string>
<string name="migrate_from_device_title">Migrare dispozitiv</string>
@@ -1010,7 +1010,7 @@
<string name="theme_light">Luminos</string>
<string name="privacy_chat_list_open_links_no">Nu</string>
<string name="privacy_chat_list_open_web_link_question">Deschizi linkul web?</string>
<string name="settings_section_title_messages">MESAJE ȘI FIȘIERE</string>
<string name="settings_section_title_messages">Mesaje și fișiere</string>
<string name="group_member_role_moderator">moderator</string>
<string name="initial_member_role">Rol inițial</string>
<string name="only_group_owners_can_change_prefs">Doar proprietarii grupului pot modifica preferințele grupului.</string>
@@ -1043,7 +1043,7 @@
<string name="onboarding_notifications_mode_subtitle">Cum afectează bateria</string>
<string name="receipts_contacts_enable_keep_overrides">Activare (păstrați suprascrierile)</string>
<string name="enabled_self_destruct_passcode">Activează codul de autodistrugere</string>
<string name="member_info_section_title_member">MEMBRU</string>
<string name="member_info_section_title_member">Membru</string>
<string name="operator_info_title">Operator de rețea</string>
<string name="linked_desktops">Desktop-uri conectate</string>
<string name="error_accepting_member">Eroare la acceptarea membrului</string>
@@ -1148,7 +1148,7 @@
<string name="receipts_contacts_title_enable">Activați confirmarea de primire?</string>
<string name="self_destruct_new_display_name">Nume nou afișat:</string>
<string name="settings_developer_tools">Instrumente pentru dezvoltatori</string>
<string name="settings_section_title_files">FIȘIERE</string>
<string name="settings_section_title_files">Fișiere</string>
<string name="privacy_chat_list_open_links">Deschide linkurile din lista de conversații</string>
<string name="settings_section_title_message_shape">Forma mesajului</string>
<string name="import_database">Importați baza de date</string>
@@ -1393,7 +1393,7 @@
<string name="delete_chat_list_menu_action">Șterge</string>
<string name="install_simplex_chat_for_terminal">Instalați SimpleX Chat pentru terminal</string>
<string name="error_saving_ICE_servers">Eroare la salvarea serverelor ICE</string>
<string name="theme_colors_section_title">CULORILE INTERFEȚEI</string>
<string name="theme_colors_section_title">Culorile interfeței</string>
<string name="total_files_count_and_size">%d fișier(e) cu dimensiunea totală de %s</string>
<string name="files_and_media_section">Fișiere și media</string>
<string name="rcv_group_event_member_added">invitat %1$s</string>
@@ -1636,7 +1636,7 @@
<string name="users_delete_with_connections">Conexiuni de profil și server</string>
<string name="callstate_received_answer">răspuns primit…</string>
<string name="onboarding_conditions_privacy_policy_and_conditions_of_use">Politica de confidențialitate și condițiile de utilizare.</string>
<string name="settings_section_title_private_message_routing">RUTAREA MESAJELOR PRIVATE</string>
<string name="settings_section_title_private_message_routing">Rutarea mesajelor private</string>
<string name="store_passphrase_securely">Te rugăm să stochezi parola în siguranță, altfel NU o vei putea schimba dacă o pierzi.</string>
<string name="restore_passphrase_not_found_desc">Parola nu a fost găsită în Keystore. Te rugăm să o introduci manual. Acest lucru s-ar putea întâmpla dacă ai restaurat datele aplicației folosind un instrument de backup. Dacă nu este cazul, te rugăm să contactezi dezvoltatorii.</string>
<string name="restore_passphrase_can_not_be_read_desc">Parola stocată în Keystore nu poate fi citită. Acest lucru se poate întâmpla după o actualizare a sistemului incompatibilă cu aplicația. Dacă nu este cazul, te rugăm să contactezi dezvoltatorii.</string>
@@ -1767,7 +1767,7 @@
<string name="reviewed_by_admins">revizuit de administratori</string>
<string name="onboarding_choose_server_operators">Operatori de server</string>
<string name="relay_server_protects_ip">Serverul de retransmisie protejează adresa IP, dar poate observa durata apelului.</string>
<string name="run_chat_section">PORNIȚI CHATUL</string>
<string name="run_chat_section">Porniți chatul</string>
<string name="rcv_group_event_user_deleted">te-a eliminat</string>
<string name="sender_at_ts">%s la %s</string>
<string name="error_server_protocol_changed">Protocolul serverului a fost modificat.</string>
@@ -1800,7 +1800,7 @@
<string name="select_chat_profile">Selectează profilul de conversație</string>
<string name="save_auto_accept_settings">Salvează setările adresei SimpleX</string>
<string name="save_list">Salvează lista</string>
<string name="settings_section_title_delivery_receipts">TRIMITE CONFIRMĂRI DE LIVRARE LA</string>
<string name="settings_section_title_delivery_receipts">Trimite confirmări de livrare la</string>
<string name="self_destruct_passcode_changed">Parola de autodistrugere a fost schimbată!</string>
<string name="info_row_updated_at">Înregistrare actualizată la</string>
<string name="onboarding_select_network_operators_to_use">Selectează operatorii de rețea de utilizat.</string>
@@ -1973,9 +1973,9 @@
<string name="app_will_ask_to_confirm_unknown_file_servers">Aplicația va cere să confirmați descărcările de pe servere de fișiere necunoscute (cu excepția celor .onion sau când proxy-ul SOCKS este activat).</string>
<string name="la_mode_system">Sistem</string>
<string name="receipts_section_description_1">Acestea pot fi ignorate în setările de contact și de grup.</string>
<string name="settings_section_title_support">SUPORT SIMPLEX CHAT</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_themes">TEME</string>
<string name="settings_section_title_support">Suport SimpleX Chat</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="settings_section_title_themes">Teme</string>
<string name="non_fatal_errors_occured_during_import">În timpul importului au apărut câteva erori non-fatale:</string>
<string name="group_invitation_tap_to_join">Atingeți pentru a vă alătura</string>
<string name="database_downgrade_warning">Atenție: este posibil să pierdeți unele date!</string>
@@ -2430,7 +2430,7 @@
<string name="sent_to_your_contact_after_connection">Trimis contactului tău după conectare.</string>
<string name="share_profile_via_link">Actualizezi la o adresă permanentă?</string>
<string name="address_welcome_message">Mesaj de bun venit</string>
<string name="settings_section_title_contact_requests_from_groups">SOLICITĂRI DE CONTACT DE LA GRUPURI</string>
<string name="settings_section_title_contact_requests_from_groups">Solicitări de contact de la grupuri</string>
<string name="this_setting_is_for_your_current_profile">Această setare este pentru profilul tău actual</string>
<string name="share_old_address_alert_button">Partajează adresa veche</string>
<string name="share_old_link_alert_button">Partajează linkul vechi</string>
@@ -548,26 +548,26 @@
<string name="send_link_previews">Отправлять картинки ссылок</string>
<string name="full_backup">Резервная копия данных</string>
<!-- Settings sections -->
<string name="settings_section_title_you">ВЫ</string>
<string name="settings_section_title_settings">НАСТРОЙКИ</string>
<string name="settings_section_title_help">ПОМОЩЬ</string>
<string name="settings_section_title_support">ПОДДЕРЖАТЬ SIMPLEX CHAT</string>
<string name="settings_section_title_device">УСТРОЙСТВО</string>
<string name="settings_section_title_chats">ЧАТЫ</string>
<string name="settings_section_title_you">Вы</string>
<string name="settings_section_title_settings">Настройки</string>
<string name="settings_section_title_help">Помощь</string>
<string name="settings_section_title_support">Поддержать SimpleX Chat</string>
<string name="settings_section_title_device">Устройство</string>
<string name="settings_section_title_chats">Чаты</string>
<string name="settings_developer_tools">Инструменты разработчика</string>
<string name="settings_experimental_features">Экспериментальные функции</string>
<string name="settings_section_title_socks">SOCKS-ПРОКСИ</string>
<string name="settings_section_title_icon">ЗНАЧОК</string>
<string name="settings_section_title_themes">ТЕМЫ</string>
<string name="settings_section_title_messages">СООБЩЕНИЯ И ФАЙЛЫ</string>
<string name="settings_section_title_calls">ЗВОНКИ</string>
<string name="settings_section_title_socks">SOCKS-прокси</string>
<string name="settings_section_title_icon">Значок</string>
<string name="settings_section_title_themes">Темы</string>
<string name="settings_section_title_messages">Сообщения и файлы</string>
<string name="settings_section_title_calls">Звонки</string>
<string name="settings_section_title_incognito">Режим Инкогнито</string>
<!-- DatabaseView.kt -->
<string name="your_chat_database">База данных</string>
<string name="run_chat_section">ЗАПУСТИТЬ ЧАТ</string>
<string name="run_chat_section">Запустить чат</string>
<string name="chat_is_running">Чат запущен</string>
<string name="chat_is_stopped">Чат остановлен</string>
<string name="chat_database_section">БАЗА ДАННЫХ</string>
<string name="chat_database_section">База данных</string>
<string name="database_passphrase">Пароль базы данных</string>
<string name="export_database">Экспорт архива чата</string>
<string name="import_database">Импорт архива чата</string>
@@ -767,7 +767,7 @@
<string name="error_deleting_link_for_group">Ошибка при удалении ссылки группы</string>
<string name="only_group_owners_can_change_prefs">Только владельцы группы могут изменять предпочтения группы.</string>
<!-- For Console chat info section -->
<string name="section_title_for_console">ДЛЯ КОНСОЛИ</string>
<string name="section_title_for_console">Для консоли</string>
<string name="info_row_local_name">Локальное имя</string>
<string name="info_row_database_id">ID базы данных</string>
<!-- GroupMemberInfoView.kt -->
@@ -775,7 +775,7 @@
<string name="button_send_direct_message">Отправить сообщение</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Член группы будет удалён - это действие нельзя отменить!</string>
<string name="remove_member_confirmation">Удалить</string>
<string name="member_info_section_title_member">ЧЛЕН ГРУППЫ</string>
<string name="member_info_section_title_member">Член группы</string>
<string name="role_in_group">Роль</string>
<string name="change_role">Поменять роль</string>
<string name="change_verb">Поменять</string>
@@ -790,7 +790,7 @@
<string name="conn_level_desc_direct">прямое</string>
<string name="conn_level_desc_indirect">непрямое (%1$s)</string>
<!-- ConnectionStats -->
<string name="conn_stats_section_title_servers">СЕРВЕРЫ</string>
<string name="conn_stats_section_title_servers">Серверы</string>
<string name="receiving_via">Получение через</string>
<string name="sending_via">Отправка через</string>
<string name="network_status">Состояние сети</string>
@@ -1084,7 +1084,7 @@
<string name="waiting_for_video">Ожидание видео</string>
<string name="video_will_be_received_when_contact_completes_uploading">Видео будет получено когда Ваш контакт загрузит его.</string>
<string name="hide_dev_options">Скрыть:</string>
<string name="settings_section_title_experimenta">ЭКСПЕРИМЕНТАЛЬНЫЕ</string>
<string name="settings_section_title_experimenta">Экспериментальные</string>
<string name="videos_limit_desc">Только 10 видео могут быть отправлены одновременно</string>
<string name="unhide_profile">Раскрыть профиль</string>
<string name="video_will_be_received_when_contact_is_online">Видео будет получено, когда Ваш контакт будет онлайн, пожалуйста, подождите или проверьте позже!</string>
@@ -1226,7 +1226,7 @@
<string name="prohibit_message_reactions">Запретить реакции на сообщения.</string>
<string name="prohibit_message_reactions_group">Запретить реакции на сообщения.</string>
<string name="custom_time_unit_seconds">секунд</string>
<string name="theme_colors_section_title">ЦВЕТА ИНТЕРФЕЙСА</string>
<string name="theme_colors_section_title">Цвета интерфейса</string>
<string name="share_address_with_contacts_question">Поделиться адресом с контактами SimpleX?</string>
<string name="profile_update_will_be_sent_to_contacts">Обновление профиля будет отправлено Вашим SimpleX контактам.</string>
<string name="learn_more_about_address">Об адресе SimpleX</string>
@@ -1347,15 +1347,15 @@
<string name="only_owners_can_enable_files_and_media">Только владельцы группы могут разрешить файлы и медиа.</string>
<string name="files_and_media">Файлы и медиа</string>
<string name="shutdown_alert_question">Выключить\?</string>
<string name="settings_section_title_app">ПРИЛОЖЕНИЕ</string>
<string name="settings_section_title_app">Приложение</string>
<string name="settings_restart_app">Перезапустить</string>
<string name="settings_shutdown">Выключить</string>
<string name="receipts_contacts_disable_for_all">Выключить для всех</string>
<string name="receipts_contacts_enable_for_all">Включить для всех</string>
<string name="receipts_contacts_enable_keep_overrides">Включить (кроме исключений)</string>
<string name="receipts_contacts_title_enable">Выключить отчёты о доставке\?</string>
<string name="settings_section_title_delivery_receipts">ОТПРАВКА ОТЧЁТОВ О ДОСТАВКЕ</string>
<string name="settings_section_title_contact_requests_from_groups">ЗАПРОСЫ НА СОЕДИНЕНИЕ ИЗ ГРУПП</string>
<string name="settings_section_title_delivery_receipts">Отправка отчётов о доставке</string>
<string name="settings_section_title_contact_requests_from_groups">Запросы на соединение из групп</string>
<string name="conn_event_ratchet_sync_agreed">шифрование согласовано</string>
<string name="snd_conn_event_ratchet_sync_agreed">шифрование согласовано для %s</string>
<string name="conn_event_ratchet_sync_ok">шифрование работает</string>
@@ -1829,7 +1829,7 @@
<string name="v5_7_shape_profile_images">Форма картинок профилей</string>
<string name="v5_7_shape_profile_images_descr">Квадрат, круг и все, что между ними.</string>
<string name="v5_7_quantum_resistant_encryption_descr">Будет включено в прямых разговорах!</string>
<string name="settings_section_title_files">ФАЙЛЫ</string>
<string name="settings_section_title_files">Файлы</string>
<string name="v5_8_chat_themes">Новые темы чатов</string>
<string name="message_queue_info_none">нет</string>
<string name="color_mode_light">Светлая</string>
@@ -1898,7 +1898,7 @@
<string name="private_routing_show_message_status">Показать статус сообщения</string>
<string name="update_network_smp_proxy_fallback_question">Прямая доставка сообщений</string>
<string name="update_network_smp_proxy_mode_question">Режим доставки сообщений</string>
<string name="settings_section_title_private_message_routing">КОНФИДЕНЦИАЛЬНАЯ ДОСТАВКА СООБЩЕНИЙ</string>
<string name="settings_section_title_private_message_routing">Конфиденциальная доставка сообщений</string>
<string name="settings_section_title_chat_colors">Цвета чата</string>
<string name="settings_section_title_chat_theme">Тема чата</string>
<string name="settings_section_title_user_theme">Тема профиля</string>
@@ -2151,7 +2151,7 @@
<string name="forward_multiple">Переслать сообщения…</string>
<string name="error_parsing_uri_desc">Проверьте правильность ссылки SimpleX.</string>
<string name="error_parsing_uri_title">Ошибка ссылки</string>
<string name="settings_section_title_chat_database">БАЗА ДАННЫХ</string>
<string name="settings_section_title_chat_database">База данных</string>
<string name="error_initializing_web_view_wrong_arch">Ошибка инициализации WebView. Убедитесь, что у вас установлен WebView и его поддерживаемая архитектура - arm64.\nОшибка: %s</string>
<string name="icon_descr_sound_muted">Звук отключен</string>
<string name="delete_messages_cannot_be_undone_warning">Сообщения будут удалены - это нельзя отменить!</string>
@@ -2719,9 +2719,9 @@
<string name="connect_plan_open_channel">Открыть канал</string>
<string name="connect_plan_open_new_channel">Открыть новый канал</string>
<string name="channel_members_section_owners">Владельцы</string>
<string name="member_info_section_title_owner">ВЛАДЕЛЕЦ</string>
<string name="member_info_section_title_owner">Владелец</string>
<string name="group_member_role_relay">релей</string>
<string name="member_info_section_title_relay">РЕЛЕЙ</string>
<string name="member_info_section_title_relay">Релей</string>
<string name="info_row_relay_address">Адрес релея</string>
<string name="relay_address_alert_title">Адрес релея</string>
<string name="relay_connection_failed">Ошибка подключения релея</string>
@@ -2740,7 +2740,7 @@
<string name="share_relay_address">Поделиться адресом релея</string>
<string name="share_via_chat">Поделиться в чате</string>
<string name="owner_verification_failed">⚠️ Ошибка проверки подписи: %s.</string>
<string name="member_info_section_title_subscriber">ПОДПИСЧИК</string>
<string name="member_info_section_title_subscriber">Подписчик</string>
<string name="channel_members_title_subscribers">Подписчики</string>
<string name="subscriber_will_be_removed_from_channel_cannot_be_undone">Подписчик будет удалён из канала - это нельзя отменить!</string>
<string name="talk_to_someone">Начните разговор</string>
@@ -2801,7 +2801,7 @@
<string name="you_will_stop_receiving_messages_from_this_channel_chat_history_will_be_preserved">Вы перестанете получать сообщения из этого канала. История чата сохранится.</string>
<string name="rcv_channel_event_updated_channel_profile">обновлён профиль канала</string>
<string name="member_info_member_failed">ошибка</string>
<string name="info_row_connection_failed">ОШИБКА СОЕДИНЕНИЯ</string>
<string name="info_row_connection_failed">Ошибка соединения</string>
<string name="chat_with_admins">Чат с админами</string>
<string name="allow_chat_with_admins">Разрешить членам группы общаться с админами.</string>
<string name="prohibit_chat_with_admins">Запретить чаты с админами.</string>
@@ -996,7 +996,7 @@
<string name="alert_title_skipped_messages">ข้อความที่ข้ามไป</string>
<string name="submit_passcode">ส่ง</string>
<string name="la_mode_system">ระบบ</string>
<string name="settings_section_title_support">สนับสนุน SIMPLEX แชท</string>
<string name="settings_section_title_support">สนับสนุน SimpleX Chat</string>
<string name="settings_section_title_socks">พร็อกซี SOCKS</string>
<string name="stop_chat_confirmation">หยุด</string>
<string name="stop_chat_question">หยุดแชท\?</string>
@@ -50,8 +50,8 @@
<string name="answer_call">Aramayı cevapla</string>
<string name="full_backup">Uygulama veri yedekleme</string>
<string name="all_app_data_will_be_cleared">Tüm uygulama verileri silinir.</string>
<string name="settings_section_title_app">UYGULAMA</string>
<string name="settings_section_title_icon">UYGULAMA SİMGESİ</string>
<string name="settings_section_title_app">Uygulama</string>
<string name="settings_section_title_icon">Uygulama simgesi</string>
<string name="chat_item_ttl_week">1 hafta</string>
<string name="conn_event_ratchet_sync_started">şifreleme kabul ediliyor…</string>
<string name="group_member_role_admin">yönetici</string>
@@ -86,7 +86,7 @@
<string name="scan_code_from_contacts_app">Konuştuğunuz kişinin uygulamasından güvenlik kodunu okut.</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">WebRTC ICE sunucu adreslerinin doğru formatta olduğundan emin olun: Satırlara ayrılmış ve yinelenmemiş şekilde.</string>
<string name="save_servers_button">Kaydet</string>
<string name="theme_colors_section_title">ARAYÜZ RENKLERİ</string>
<string name="theme_colors_section_title">Arayüz renkleri</string>
<string name="save_auto_accept_settings">SimpleX adres ayarlarını kaydet</string>
<string name="save_settings_question">Ayarlar kaydedilsin mi?</string>
<string name="save_and_notify_contacts">Kaydet ve konuştuğun kişilere bildir</string>
@@ -97,7 +97,7 @@
<string name="icon_descr_audio_off">Ses kapalı</string>
<string name="authentication_cancelled">Doğrulama iptal edildi</string>
<string name="settings_restart_app">Yeniden başlat</string>
<string name="settings_section_title_themes">TEMALAR</string>
<string name="settings_section_title_themes">Temalar</string>
<string name="restart_the_app_to_use_imported_chat_database">İçe aktarılan konuşma veri tabanını kullanmak için uygulamayı yeniden başlat.</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Yeni bir konuşma profili oluşturmak için uygulamayı yeniden başlatın.</string>
<string name="restore_database_alert_confirm">Geri Yükle</string>
@@ -184,7 +184,7 @@
<string name="deleted_description">silindi</string>
<string name="receiving_files_not_yet_supported">dosya alma henüz desteklenmiyor</string>
<string name="sender_you_pronoun">sen</string>
<string name="invalid_chat">geçersi̇z sohbet</string>
<string name="invalid_chat">geçersiz sohbet</string>
<string name="connection_local_display_name">bağlantı %1$d</string>
<string name="simplex_link_mode_browser">Tarayıcı ile</string>
<string name="simplex_link_connection">%1$s tarafından</string>
@@ -287,10 +287,10 @@
<string name="color_secondary_variant">Ek ikincil renk</string>
<string name="button_remove_member">Üyeyi çıkar</string>
<string name="remove_member_confirmation">Kaldır</string>
<string name="settings_section_title_calls">ARAMALAR</string>
<string name="settings_section_title_chats">SOHBETLER</string>
<string name="settings_section_title_you">SEN</string>
<string name="chat_database_section">SOHBET VERİTABANI</string>
<string name="settings_section_title_calls">Aramalar</string>
<string name="settings_section_title_chats">Sohbetler</string>
<string name="settings_section_title_you">Sen</string>
<string name="chat_database_section">Sohbet veritabanı</string>
<string name="remove_passphrase">Kaldır</string>
<string name="wrong_passphrase_title">Yanlış parola!</string>
<string name="confirm_database_upgrades">Veritabanı yükseltmelerini onayla</string>
@@ -300,7 +300,7 @@
<string name="group_member_status_announced">bağlanılıyor (duyuruldu)</string>
<string name="group_info_member_you">sen: %1$s</string>
<string name="group_member_status_removed">kaldırıldı</string>
<string name="member_info_section_title_member">ÜYE</string>
<string name="member_info_section_title_member">Üye</string>
<string name="group_members_can_send_disappearing">Üyeler kendiliğinden yok olan mesajlar gönderebilir.</string>
<string name="prohibit_sending_disappearing">Kendiliğinden yok olan mesaj gönderimini engelle.</string>
<string name="allow_voice_messages_only_if">Yalnızca kişiniz sesli mesaj göndermeye izin veriyorsa sen de ver.</string>
@@ -422,7 +422,7 @@
<string name="if_you_enter_self_destruct_code">Eğer uygulamayı açarken tüm verileri yok eden erişim kodunu girersen:</string>
<string name="if_you_enter_passcode_data_removed">Eğer uygulamayı açarken bu erişim kodunu kullanırsan uygulama içi tüm veriler kalıcı olarak silinecektir!</string>
<string name="set_passcode">Erişim kodu belirle</string>
<string name="settings_section_title_device">AYGIT</string>
<string name="settings_section_title_device">Aygit</string>
<string name="database_passphrase">Veri tabanı parolası</string>
<string name="set_password_to_export_desc">Veri tabanı, rastgele bir parola ile şifrelendi. Dışa aktarmadan önce lütfen değiştir.</string>
<string name="delete_files_and_media_question">Dosyaları ve medyayı sil\?</string>
@@ -600,7 +600,7 @@
<string name="error_saving_ICE_servers">ICE sonucuları kaydedilirken hata oluştu</string>
<string name="error_updating_user_privacy">Kullanıcı gizliliği güncellenirken hata oluştu</string>
<string name="favorite_chat">Gözde</string>
<string name="settings_section_title_experimenta">DENEYSEL</string>
<string name="settings_section_title_experimenta">Deneysel</string>
<string name="revoke_file__message">Dosya, sunuculardan silinecektir.</string>
<string name="v5_2_fix_encryption_descr">Yedekleri geri yükledikten sonra şifrelemeyi onar.</string>
<string name="v4_4_french_interface">Fransız arayüzü</string>
@@ -622,7 +622,7 @@
<string name="error_starting_chat">Konuşma başlatılırken hata oluştu</string>
<string name="settings_experimental_features">Deneysel özellikler</string>
<string name="export_database">Veri tabanını dışa aktar</string>
<string name="settings_section_title_help">YARDIM</string>
<string name="settings_section_title_help">Yardim</string>
<string name="import_database">Veri tabanını içe aktar</string>
<string name="error_stopping_chat">Konuşma durdulurken hata oluştu</string>
<string name="import_database_confirmation">İçe aktar</string>
@@ -634,7 +634,7 @@
<string name="snd_group_event_group_profile_updated">grup profili güncellendi</string>
<string name="group_member_status_group_deleted">grup silindi</string>
<string name="error_updating_link_for_group">Toplu konuşma bağlantısı güncellenirken hata oluştu</string>
<string name="section_title_for_console">UÇBİRİM İÇİN</string>
<string name="section_title_for_console">Uçbirim için</string>
<string name="group_link">Grup bağlantısı</string>
<string name="info_row_group">Grup</string>
<string name="conn_level_desc_indirect">dolaylı (%1$s)</string>
@@ -801,7 +801,7 @@
<string name="callstatus_ended">arama sona erdi %1$s</string>
<string name="call_on_lock_screen">Kilit ekranında aramalar:</string>
<string name="alert_title_msg_bad_id">Kötü mesaj kimliği</string>
<string name="settings_section_title_messages">MESAJLAR VE DOSYALAR</string>
<string name="settings_section_title_messages">Mesajlar ve dosyalar</string>
<string name="change_database_passphrase_question">Veri tabanı parolasını değiştir\?</string>
<string name="restore_passphrase_not_found_desc">Parola Keystore\'da bulunamadı, lütfen manuel olarak girin. Bu, uygulamanın verilerini bir yedekleme aracı kullanarak geri yüklediyseniz olabilir. Eğer durum böyle değilse, lütfen geliştiricilerle iletişime geçin.</string>
<string name="leave_group_button">Ayrıl</string>
@@ -1037,7 +1037,7 @@
<string name="auth_stop_chat">Sohbeti durdur</string>
<string name="connect_use_current_profile">Mevcut profili kullan</string>
<string name="la_mode_system">Sistem</string>
<string name="settings_section_title_support">SIMPLEX CHAT\'İ DESTEKLE</string>
<string name="settings_section_title_support">SimpleX Chat\'i destekle</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Sohbet veri tabanını dışa aktarmak, içe aktarmak veya silmek için sohbeti durdur. Sohbet durdurulduğunda mesaj alamaz ve gönderemezsiniz.</string>
<string name="desktop_device">Masaüstü</string>
<string name="contact_tap_to_connect">Bağlanmak için dokun</string>
@@ -1134,7 +1134,7 @@
<string name="share_link">Bağlantı paylaş</string>
<string name="icon_descr_simplex_team">SimpleX Ekibi</string>
<string name="rcv_group_event_3_members_connected">%s, %s ve %s bağlandı</string>
<string name="settings_section_title_socks">SOCKS VEKİLİ</string>
<string name="settings_section_title_socks">SOCKS vekili</string>
<string name="desktop_devices">Masaüstür cihazlar</string>
<string name="smp_servers">SMP sunucuları</string>
<string name="not_compatible">Uyumlu değil!</string>
@@ -1217,7 +1217,7 @@
<string name="rcv_conn_event_verification_code_reset">güvenlik kodu değiştirildi</string>
<string name="v4_6_audio_video_calls_descr">Bluetooth desteği ve diğer iyileştirmeler.</string>
<string name="icon_descr_settings">Ayarlar</string>
<string name="settings_section_title_settings">AYARLAR</string>
<string name="settings_section_title_settings">Ayarlar</string>
<string name="compose_send_direct_message_to_connect">Bağlanmak için doğrudan mesaj gönderin</string>
<string name="security_code">Güvenlik kodu</string>
<string name="v5_4_better_groups_descr">Daha hızlı gruplara katılma ve daha güvenilir mesajlar.</string>
@@ -1352,7 +1352,7 @@
<string name="relay_server_if_necessary">Yönlendirici sunucusu sadece lazım ise kullanılacak. Diğer taraf IP adresini görebilir.</string>
<string name="remote_host_was_disconnected_toast"><![CDATA[Telefon bağlantılı <b>%s</b> ın bağlantısı kesildi]]></string>
<string name="smp_servers_test_server">Sunucuyu test et</string>
<string name="conn_stats_section_title_servers">SUNUCULAR</string>
<string name="conn_stats_section_title_servers">Sunucular</string>
<string name="smp_servers_test_servers">Sunucuları test et</string>
<string name="privacy_message_draft">Mesaj taslağı</string>
<string name="v5_2_disappear_one_message">Bir mesajı yok edin</string>
@@ -1361,7 +1361,7 @@
<string name="icon_descr_contact_checked">Kişi doğrulandı</string>
<string name="use_random_passphrase">Rasgele parola kullan</string>
<string name="v5_0_app_passcode_descr">Sistem yetkilendirilmesi yerine ayarla.</string>
<string name="run_chat_section">SOHBETİ ÇALIŞTIR</string>
<string name="run_chat_section">Sohbeti çalıştır</string>
<string name="network_disable_socks">Direkt internet bağlantısı kullan?</string>
<string name="rcv_group_event_updated_group_profile">grup profili güncellendi</string>
<string name="network_use_onion_hosts_required_desc">Onion ana bilgisayarları bağlantı için gerekli olacaktır.
@@ -1446,7 +1446,7 @@
<string name="new_chat">Yeni sohbet</string>
<string name="send_live_message_desc">Bir canlı mesaj gönder - bu yazdıklarını anlık olarak alıcıya(lara) güncelleyen bir mesajdır</string>
<string name="remove_passphrase_from_keychain">Şifre Yöneticisindeki parola silinsin mi?</string>
<string name="settings_section_title_delivery_receipts">LERE GÖNDER</string>
<string name="settings_section_title_delivery_receipts">Lere gönder</string>
<string name="connect_via_link_incognito">Takma adla bağlan</string>
<string name="always_use_relay">Her zaman yönlendirici kullan.</string>
<string name="auth_unlock">Kilidini aç</string>
@@ -1778,7 +1778,7 @@
<string name="network_smp_proxy_fallback_prohibit_description">Sizin veya hedef sunucunun özel yönlendirmeyi desteklememesi durumunda bile mesajları doğrudan GÖNDERMEYİN.</string>
<string name="network_smp_proxy_fallback_allow_protected_description">IP adresi korumalı olduğunda ve sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin.</string>
<string name="network_smp_proxy_fallback_allow_description">Sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin.</string>
<string name="settings_section_title_private_message_routing">GİZLİ MESAJ YÖNLENDİRME</string>
<string name="settings_section_title_private_message_routing">Gizli mesaj yönlendirme</string>
<string name="private_routing_show_message_status">Mesaj durumunu göster</string>
<string name="private_routing_explanation">IP adresinizi korumak için,gizli yönlendirme mesajları iletmek için SMP sunucularınızı kullanır.</string>
<string name="network_smp_proxy_mode_unprotected">Korumasız</string>
@@ -1805,7 +1805,7 @@
<string name="color_mode_dark">Karanlık</string>
<string name="chat_theme_apply_to_light_mode">Aydınlık mod</string>
<string name="protect_ip_address">IP adresini koru</string>
<string name="settings_section_title_files">DOSYALAR</string>
<string name="settings_section_title_files">Dosyalar</string>
<string name="settings_section_title_chat_colors">Sohbet renkleri</string>
<string name="wallpaper_scale_fit">Sığdır</string>
<string name="color_received_quote">Alınan cevap</string>
@@ -33,14 +33,14 @@
<string name="allow_to_send_disappearing">Дозволити надсилати зникаючі повідомлення.</string>
<string name="callstatus_accepted">прийнятий виклик</string>
<string name="always_use_relay">Завжди використовувати реле</string>
<string name="settings_section_title_app">ДОДАТОК</string>
<string name="settings_section_title_app">Додаток</string>
<string name="allow_direct_messages">Дозволити надсилання приватних повідомлень учасникам.</string>
<string name="allow_to_delete_messages">Дозволити безповоротно видаляти надіслані повідомлення. (24 години)</string>
<string name="allow_to_send_voice">Дозволяйте надсилати голосові повідомлення.</string>
<string name="allow_message_reactions">Дозволити реакції на повідомлення.</string>
<string name="v5_1_self_destruct_passcode_descr">Вся інформація стирається при його введенні.</string>
<string name="v5_0_app_passcode">Пароль для додатка</string>
<string name="settings_section_title_icon">ІКОНКА ДОДАТКУ</string>
<string name="settings_section_title_icon">Іконка додатку</string>
<string name="allow_disappearing_messages_only_if">Дозволити зникаючі повідомлення тільки за умови, що ваш контакт дозволяє їх.</string>
<string name="allow_your_contacts_adding_message_reactions">Дозвольте вашим контактам додавати реакції на повідомлення.</string>
<string name="allow_message_reactions_only_if">Дозволити реакції на повідомлення тільки за умови, що ваш контакт дозволяє їх.</string>
@@ -278,8 +278,8 @@
<string name="icon_descr_flip_camera">Повернути камеру</string>
<string name="icon_descr_call_rejected">Відхилений виклик</string>
<string name="integrity_msg_skipped">%1$d пропущено повідомлень</string>
<string name="settings_section_title_chats">ЧАТИ</string>
<string name="settings_section_title_socks">SOCKS-ПРОКСІ</string>
<string name="settings_section_title_chats">Чати</string>
<string name="settings_section_title_socks">SOCKS-проксі</string>
<string name="error_starting_chat">Помилка при запуску чату</string>
<string name="stop_chat_confirmation">Зупинити</string>
<string name="import_database_confirmation">Імпортувати</string>
@@ -416,9 +416,9 @@
<string name="icon_descr_call_connecting">Підключення виклику</string>
<string name="privacy_and_security">Конфіденційність і безпека</string>
<string name="your_privacy">Конфіденційність</string>
<string name="settings_section_title_settings">НАЛАШТУВАННЯ</string>
<string name="settings_section_title_help">ДОПОМОГА</string>
<string name="settings_section_title_support">ПІДТРИМАЙТЕ SIMPLEX CHAT</string>
<string name="settings_section_title_settings">Налаштування</string>
<string name="settings_section_title_help">Допомога</string>
<string name="settings_section_title_support">Підтримайте SimpleX Chat</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Зупиніть чат, щоб експортувати, імпортувати або видалити базу даних чату. Ви не зможете отримувати та надсилати повідомлення, поки чат зупинено.</string>
<string name="error_deleting_database">Помилка видалення бази даних чату</string>
<string name="notifications_will_be_hidden">Сповіщення будуть доставлятися лише до зупинки додатка!</string>
@@ -464,7 +464,7 @@
<string name="settings_restart_app">Перезапустити</string>
<string name="your_chat_database">База даних чату</string>
<string name="chat_is_stopped">Чат зупинено</string>
<string name="chat_database_section">БАЗА ДАНИХ ЧАТУ</string>
<string name="chat_database_section">База даних чату</string>
<string name="new_database_archive">Новий архів бази даних</string>
<string name="stop_chat_question">Зупинити чат\?</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Ваша поточна база даних чату буде ВИДАЛЕНА та ЗАМІНЕНА імпортованою.
@@ -658,11 +658,11 @@
<string name="self_destruct_passcode_enabled">Пароль самознищення увімкнено!</string>
<string name="self_destruct_passcode_changed">Пароль самознищення змінено!</string>
<string name="your_profile_is_stored_on_your_device">Ваш профіль, контакти та доставлені повідомлення зберігаються на вашому пристрої.</string>
<string name="settings_section_title_you">ВИ</string>
<string name="settings_section_title_device">ПРИСТРІЙ</string>
<string name="settings_section_title_you">Ви</string>
<string name="settings_section_title_device">Пристрій</string>
<string name="settings_shutdown">Вимкнути</string>
<string name="settings_section_title_themes">ТЕМИ</string>
<string name="settings_section_title_messages">ПОВІДОМЛЕННЯ ТА ФАЙЛИ</string>
<string name="settings_section_title_themes">Теми</string>
<string name="settings_section_title_messages">Повідомлення та файли</string>
<string name="chat_is_running">Чат працює</string>
<string name="import_database">Імпортувати базу даних</string>
<string name="old_database_archive">Старий архів бази даних</string>
@@ -782,7 +782,7 @@
<string name="custom_time_unit_months">місяці</string>
<string name="you_are_already_connected_to_vName_via_this_link">Ви вже підключені до %1$s через це посилання.</string>
<string name="settings_section_title_incognito">Режим інкогніто</string>
<string name="conn_stats_section_title_servers">СЕРВЕРИ</string>
<string name="conn_stats_section_title_servers">Сервери</string>
<string name="save_welcome_message_question">Зберегти вітальне повідомлення?</string>
<string name="receiving_via">Отримання через</string>
<string name="muted_when_inactive">Приглушено, коли неактивно!</string>
@@ -879,7 +879,7 @@
<string name="ttl_day">%d день</string>
<string name="ttl_days">%d днів</string>
<string name="feature_cancelled_item">скасовано %s</string>
<string name="run_chat_section">ЗАПУСК ЧАТУ</string>
<string name="run_chat_section">Запуск чату</string>
<string name="database_passphrase">Пароль бази даних</string>
<string name="export_database">Експортувати базу даних</string>
<string name="delete_files_and_media_all">Видалити всі файли</string>
@@ -930,7 +930,7 @@
<string name="snd_conn_event_switch_queue_phase_changing">змінює адресу…</string>
<string name="leave_group_button">Залишити</string>
<string name="group_member_role_observer">спостерігач</string>
<string name="member_info_section_title_member">УЧАСНИК</string>
<string name="member_info_section_title_member">Учасник</string>
<string name="incognito_info_protects">Режим інкогніто захищає вашу конфіденційність, використовуючи новий випадковий профіль для кожного контакту.</string>
<string name="v4_5_reduced_battery_usage_descr">Більше поліпшень незабаром!</string>
<string name="only_group_owners_can_enable_voice">Тільки власники груп можуть увімкнути голосові повідомлення.</string>
@@ -979,7 +979,7 @@
<string name="icon_descr_contact_checked">Контакт відмічено</string>
<string name="invite_prohibited_description">Ви намагаєтеся запросити контакт, з яким ви поділилися інкогніто-профілем, до групи, в якій ви використовуєте основний профіль</string>
<string name="error_creating_link_for_group">Помилка при створенні посилання на групу</string>
<string name="section_title_for_console">ДЛЯ КОНСОЛІ</string>
<string name="section_title_for_console">Для консолі</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Учасника буде вилучено з групи - цю дію неможливо скасувати!</string>
<string name="change_role">Змінити роль</string>
<string name="you_will_still_receive_calls_and_ntfs">Ви все ще отримуватимете дзвінки та сповіщення від приглушених профілів, коли вони активні.</string>
@@ -1021,7 +1021,7 @@
<string name="host_verb">Хост</string>
<string name="port_verb">Порт</string>
<string name="network_use_onion_hosts_required">Обов\'язково</string>
<string name="theme_colors_section_title">КОЛЬОРИ ІНТЕРФЕЙСУ</string>
<string name="theme_colors_section_title">Кольори інтерфейсу</string>
<string name="create_address_and_let_people_connect">Створіть адресу, щоб дозволити людям підключатися до вас.</string>
<string name="your_contacts_will_remain_connected">Контакти залишатимуться підключеними.</string>
<string name="create_simplex_address">Створити SimpleX-адресу</string>
@@ -1110,7 +1110,7 @@
<string name="from_gallery_button">Галерея</string>
<string name="icon_descr_simplex_team">Команда SimpleX</string>
<string name="contact_wants_to_connect_with_you">хоче підключитися до вас!</string>
<string name="settings_section_title_experimenta">ЕКСПЕРИМЕНТАЛЬНІ ФУНКЦІЇ</string>
<string name="settings_section_title_experimenta">Експериментальні функції</string>
<string name="you_must_use_the_most_recent_version_of_database">Ви повинні використовувати найновішу версію бази даних чату лише на одному пристрої, інакше ви можете припинити отримання повідомлень від деяких контактів.</string>
<string name="messages_section_description">Цей параметр застосовується до повідомлень у вашому поточному профілі чату</string>
<string name="encrypted_database">Зашифрована база даних</string>
@@ -1163,7 +1163,7 @@
<string name="opensource_protocol_and_code_anybody_can_run_servers">Кожен може хостити сервери.</string>
<string name="settings_developer_tools">Інструменти розробника</string>
<string name="settings_experimental_features">Експериментальні функції</string>
<string name="settings_section_title_calls">ДЗВІНКИ</string>
<string name="settings_section_title_calls">Дзвінки</string>
<string name="save_passphrase_in_keychain">Зберегти ключову фразу в сховищі ключів</string>
<string name="error_encrypting_database">Помилка шифрування бази даних</string>
<string name="remove_passphrase_from_keychain">Вилучити ключову фразу із сховища ключів?</string>
@@ -1259,7 +1259,7 @@
<string name="files_and_media_prohibited">Заборонено файли та медіа!</string>
<string name="connect__your_profile_will_be_shared">Буде відправлено ваш профіль %1$s.</string>
<string name="receipts_groups_disable_for_all">Вимкнути для всіх груп</string>
<string name="settings_section_title_delivery_receipts">НАДСИЛАТИ ПОВІДОМЛЕННЯ ПРО ДОСТАВКУ</string>
<string name="settings_section_title_delivery_receipts">Надсилати повідомлення про доставку</string>
<string name="connect_via_member_address_alert_title">Підключитися безпосередньо?</string>
<string name="recipient_colon_delivery_status">%s: %s</string>
<string name="connect_via_member_address_alert_desc">Запит на підключення буде відправлено учаснику групи.</string>
@@ -1734,7 +1734,7 @@
<string name="v5_7_call_sounds">Звуки вхідного дзвінка</string>
<string name="chat_theme_apply_to_light_mode">Світлий режим</string>
<string name="update_network_smp_proxy_fallback_question">Запасний варіант маршрутизації повідомлень</string>
<string name="settings_section_title_private_message_routing">МАРШРУТИЗАЦІЯ ПРИВАТНИХ ПОВІДОМЛЕНЬ</string>
<string name="settings_section_title_private_message_routing">Маршрутизація приватних повідомлень</string>
<string name="forwarded_description">переслано</string>
<string name="network_type_other">Інше</string>
<string name="allow_to_send_simplex_links">Дозволити надсилати посилання SimpleX.</string>
@@ -1746,7 +1746,7 @@
<string name="permissions_camera_and_record_audio">Камера та мікрофон</string>
<string name="permissions_grant">Надайте дозвіл(и) на здійснення дзвінків</string>
<string name="permissions_open_settings">Відкрити налаштування</string>
<string name="settings_section_title_files">ФАЙЛИ</string>
<string name="settings_section_title_files">Файли</string>
<string name="settings_section_title_profile_images">Зображення профілів</string>
<string name="settings_section_title_network_connection">Підключення до мережі</string>
<string name="feature_roles_admins">адміністратори</string>
@@ -2049,7 +2049,7 @@
<string name="reset_all_hints">Скинути всі підказки</string>
<string name="app_check_for_updates_update_available">Доступно оновлення: %s</string>
<string name="app_check_for_updates_canceled">Завантаження оновлення скасовано</string>
<string name="settings_section_title_chat_database">БАЗА ДАНИХ ЧАТУ</string>
<string name="settings_section_title_chat_database">База даних чату</string>
<string name="select_chat_profile">Вибрати профіль чату</string>
<string name="switching_profile_error_title">Помилка при зміні профілю</string>
<string name="delete_messages_cannot_be_undone_warning">Повідомлення будуть видалені — це не можна скасувати!</string>
@@ -2513,7 +2513,7 @@
<string name="allow_your_contacts_to_send_files_and_media">Дозвольте своїм контактам надсилати файли та медіа.</string>
<string name="chat_banner_bot">Бот</string>
<string name="both_you_and_your_contact_can_send_files">Ви, і ваш контакт можете надсилати файли та медіа.</string>
<string name="settings_section_title_contact_requests_from_groups">ЗАПИТИ НА ЗВ’ЯЗОК ВІД ГРУП</string>
<string name="settings_section_title_contact_requests_from_groups">Запити на зв’язок від груп</string>
<string name="deprecated_options_section">Застарілі опції</string>
<string name="error_marking_member_support_chat_read">Помилка при відмітці як прочитане</string>
<string name="files_prohibited_in_this_chat">Файли та медіа заборонені у цьому чаті.</string>
@@ -93,14 +93,14 @@
<string name="notifications_mode_off_desc">Ứng dụng chỉ có thể nhận thông báo khi nó đang chạy, không có dịch vụ nền nào được khởi động</string>
<string name="app_version_code">Bản dựng ứng dụng: %s</string>
<string name="appearance_settings">Giao diện</string>
<string name="settings_section_title_app">NG DỤNG</string>
<string name="settings_section_title_app">ng dụng</string>
<string name="v5_6_app_data_migration">Di chuyển dữ liệu ứng dụng</string>
<string name="full_backup">Sao lưu dữ liệu ứng dụng</string>
<string name="app_passcode_replaced_with_self_destruct">Mã truy cập ứng dụng đã được thay thế bằng mã tự hủy.</string>
<string name="v5_3_encrypt_local_files_descr">Ứng dụng mã hóa các tệp cục bộ mới (trừ video).</string>
<string name="migrate_to_device_apply_onion">Áp dụng</string>
<string name="la_app_passcode">Mã truy cập ứng dụng</string>
<string name="settings_section_title_icon">BIỂU TƯỢNG ỨNG DỤNG</string>
<string name="settings_section_title_icon">Biểu tượng ứng dụng</string>
<string name="v5_0_app_passcode">Mã truy cập</string>
<string name="app_version_name">Phiên bản ứng dụng: v%s</string>
<string name="app_version_title">Phiên bản ứng dụng</string>
@@ -184,7 +184,7 @@
<string name="icon_descr_call_ended">Cuộc gọi kết thúc</string>
<string name="callstatus_ended">cuộc gọi kết thúc %1$s</string>
<string name="callstatus_error">lỗi cuộc gọi</string>
<string name="settings_section_title_calls">CUỘC GỌI</string>
<string name="settings_section_title_calls">Cuộc gọi</string>
<string name="icon_descr_cancel_image_preview">Hủy xem trước ảnh</string>
<string name="icon_descr_cancel_file_preview">Hủy xem trước tệp</string>
<string name="cancel_verb">Hủy</string>
@@ -234,11 +234,11 @@
<string name="snd_conn_event_switch_queue_phase_changing_for_member">đang thay đổi địa chỉ cho %s…</string>
<string name="chat_preferences">Tùy chọn trò chuyện</string>
<string name="settings_section_title_chat_colors">Màu trò chuyện</string>
<string name="chat_database_section">CƠ SỞ DỮ LIỆU TRÒ CHUYỆN</string>
<string name="chat_database_section">Cơ sở dữ liệu trò chuyện</string>
<string name="chat_is_stopped">Kết nối trò chuyện đã được dừng lại</string>
<string name="migrate_to_device_chat_migrated">Cơ sở dữ liệu đã được di chuyển!</string>
<string name="your_chats">Các cuộc trò chuyện</string>
<string name="settings_section_title_chats">CÁC CUỘC TRÒ CHUYỆN</string>
<string name="settings_section_title_chats">Các cuộc trò chuyện</string>
<string name="notifications_mode_periodic_desc">Kiểm tra tin nhắn mới mỗi 10 phút trong tối đa 1 phút</string>
<string name="v4_6_chinese_spanish_interface">Giao diện Trung Quốc và Tây Ban Nha</string>
<string name="chat_with_developers">Trò chuyện với nhà phát triển</string>
@@ -463,7 +463,7 @@
<string name="smp_servers_delete_server">Xóa máy chủ</string>
<string name="smp_server_test_delete_queue">Xóa hàng đợi</string>
<string name="settings_developer_tools">Công cụ nhà phát triển</string>
<string name="settings_section_title_device">THIẾT BỊ</string>
<string name="settings_section_title_device">Thiết bị</string>
<string name="developer_options_section">Tùy chọn cho nhà phát triển</string>
<string name="auth_device_authentication_is_disabled_turning_off">Xác thực thiết bị đã bị vô hiệu hóa. Tắt Khóa SimpleX.</string>
<string name="snd_error_relay">Lỗi máy chủ đích: %1$s</string>
@@ -738,7 +738,7 @@
<string name="error_setting_network_config">Lỗi cập nhật cấu hình mạng</string>
<string name="error_updating_user_privacy">Lỗi cập nhật quyền riêng tư người dùng</string>
<string name="icon_descr_expand_role">Mở rộng chọn chức vụ</string>
<string name="settings_section_title_experimenta">THỬ NGHIỆM</string>
<string name="settings_section_title_experimenta">Thử nghiệm</string>
<string name="expand_verb">Mở rộng</string>
<string name="exit_without_saving">Thoát mà không lưu</string>
<string name="expired_label">đã hết hạn</string>
@@ -748,7 +748,7 @@
<string name="export_database">Xuất cơ sở dữ liệu</string>
<string name="migrate_from_device_error_uploading_archive">Lỗi tải lên kho lưu trữ</string>
<string name="migrate_from_device_exported_file_doesnt_exist">Tập tin đã xuất không tồn tại</string>
<string name="settings_section_title_files">TẬP TIN</string>
<string name="settings_section_title_files">Tập tin</string>
<string name="failed_to_parse_chats_title">Không thể tải các cuộc trò chuyện</string>
<string name="file_error_no_file">Không tìm thấy tệp - có thể tập tin đã bị xóa và hủy bỏ.</string>
<string name="file_error">Lỗi tệp</string>
@@ -776,7 +776,7 @@
<string name="file_will_be_received_when_contact_is_online">Tệp sẽ được nhận khi liên hệ của bạn hoạt động, vui lòng chờ hoặc kiểm tra lại sau!</string>
<string name="share_text_file_status">Trạng thái tệp: %s</string>
<string name="wallpaper_scale_fill">Lấp đầy</string>
<string name="settings_section_title_chat_database">CƠ SỞ DỮ LIỆU TRÒ CHUYỆN</string>
<string name="settings_section_title_chat_database">Cơ sở dữ liệu trò chuyện</string>
<string name="switching_profile_error_title">Lỗi chuyển đổi hồ sơ</string>
<string name="v5_2_favourites_filter_descr">Lọc các cuộc hội thoại chưa đọc và các cuộc hội thoại yêu thích.</string>
<string name="v5_1_message_reactions_descr">Cuối cùng, chúng ta đã có chúng! 🚀</string>
@@ -821,7 +821,7 @@
<string name="proxy_destination_error_failed_to_connect">Máy chủ chuyển tiếp %1$s không thể kết nối tới máy chủ đích %2$s. Vui lòng thử lại sau.</string>
<string name="smp_proxy_error_broker_host">Địa chỉ máy chủ chuyển tiếp không tương thích với cài đặt mạng: %1$s.</string>
<string name="smp_proxy_error_broker_version">Phiên bản máy chủ chuyển tiếp không tương thích với cài đặt mạng: %1$s.</string>
<string name="section_title_for_console">CHO CONSOLE</string>
<string name="section_title_for_console">Cho console</string>
<string name="forward_message">Chuyển tiếp tin nhắn…</string>
<string name="v4_6_reduced_battery_usage">Giảm thiểu sử dụng pin hơn nữa</string>
<string name="forward_alert_forward_messages_without_files">Chuyển tiếp tin nhắn mà không có tệp?</string>
@@ -863,7 +863,7 @@
<string name="email_invite_body">Xin chào!
\nKết nối với tôi qua SimpleX Chat: %s</string>
<string name="hide_profile">Ẩn hồ sơ</string>
<string name="settings_section_title_help">TRỢ GIÚP</string>
<string name="settings_section_title_help">Trợ giúp</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Nhóm sẽ bị xóa cho tất cả các thành viên - điều này không thể hoàn tác!</string>
<string name="delete_group_for_self_cannot_undo_warning">Nhóm sẽ bị xóa cho bạn - điều này không thể hoàn tác!</string>
<string name="group_preferences">Tùy chọn nhóm</string>
@@ -952,7 +952,7 @@
<string name="app_check_for_updates_button_install">Cài đặt cập nhật</string>
<string name="incoming_video_call">Cuộc gọi video đến</string>
<string name="desktop_incompatible_version">Phiên bản không tương thích</string>
<string name="theme_colors_section_title">MÀU SẮC GIAO DIỆN</string>
<string name="theme_colors_section_title">Màu sắc giao diện</string>
<string name="group_member_status_invited">đã được mời</string>
<string name="error_parsing_uri_title">Đường dẫn không hợp lệ</string>
<string name="invalid_chat">cuộc trò chuyện không hợp lệ</string>
@@ -1001,7 +1001,7 @@
<string name="button_add_members">Mời thành viên</string>
<string name="invite_to_group_button">Mời vào nhóm</string>
<string name="button_leave_group">Rời nhóm</string>
<string name="member_info_section_title_member">THÀNH VIÊN</string>
<string name="member_info_section_title_member">Thành viên</string>
<string name="message_queue_info">Thông tin hàng đợi tin nhắn</string>
<string name="users_delete_data_only">Chỉ dữ liệu hồ sơ cục bộ</string>
<string name="v5_2_fix_encryption">Giữ lại các kết nối của bạn</string>
@@ -1050,7 +1050,7 @@
<string name="member_will_be_removed_from_group_cannot_be_undone">Thành viên sẽ bị xóa khỏi nhóm - việc này không thể được hoàn tác!</string>
<string name="chat_theme_apply_to_light_mode">Chế độ sáng</string>
<string name="v5_7_new_interface_languages">UI tiếng Litva</string>
<string name="settings_section_title_messages">TIN NHẮN VÀ TỆP</string>
<string name="settings_section_title_messages">Tin nhắn và tệp</string>
<string name="message_deletion_prohibited_in_chat">Việc xóa tin nhắn mà không thể phục hồi là bị cấm.</string>
<string name="v5_5_join_group_conversation">Tham gia vào các cuộc trò chuyện nhóm</string>
<string name="update_network_smp_proxy_mode_question">Chế độ định tuyến tin nhắn</string>
@@ -1323,7 +1323,7 @@
<string name="profile_password">Mật khẩu hồ sơ</string>
<string name="note_folder_local_display_name">Ghi chú riêng tư</string>
<string name="prohibit_message_deletion">Cấm xóa tin nhắn mà không thể phục hồi.</string>
<string name="settings_section_title_private_message_routing">ĐỊNH TUYẾN TIN NHẮN RIÊNG TƯ</string>
<string name="settings_section_title_private_message_routing">Định tuyến tin nhắn riêng tư</string>
<string name="display_name__field">Tên hồ sơ:</string>
<string name="image_descr_profile_image">ảnh đại diện</string>
<string name="users_delete_with_connections">Hồ sơ và các kết nối máy chủ</string>
@@ -1581,7 +1581,7 @@
<string name="servers_info_reset_stats_alert_title">Đặt lại tất cả số liệu thống kê?</string>
<string name="save_passphrase_and_open_chat">Lưu mật khẩu và mở kết nối trò chuyện</string>
<string name="send_verb">Gửi</string>
<string name="run_chat_section">KHỞI CHẠY KẾT NỐI TRÒ CHUYỆN</string>
<string name="run_chat_section">Khởi chạy kết nối trò chuyện</string>
<string name="save_verb">Lưu</string>
<string name="scan_paste_link">Quét / Dán đường dẫn</string>
<string name="smp_servers_scan_qr">Quét mã QR máy chủ</string>
@@ -1623,7 +1623,7 @@
<string name="save_welcome_message_question">Lưu lời chào?</string>
<string name="icon_descr_sent_msg_status_send_failed">gửi thất bại</string>
<string name="scan_code_from_contacts_app">Quét mã bảo mật từ ứng dụng của liên hệ bạn.</string>
<string name="settings_section_title_delivery_receipts">GỬI CHỈ BÁO ĐÃ NHẬN TỚI</string>
<string name="settings_section_title_delivery_receipts">Gửi chỉ báo đã nhận tới</string>
<string name="search_verb">Tìm kiếm</string>
<string name="search_or_paste_simplex_link">Tìm kiếm hoặc dán đường dẫn SimpleX</string>
<string name="save_list">Lưu danh sách</string>
@@ -1685,7 +1685,7 @@
<string name="profile_update_event_set_new_picture">đặt ảnh đại diện mới</string>
<string name="v4_4_disappearing_messages_desc">Các tin nhắn đã gửi sẽ bị xóa sau thời gian đã cài.</string>
<string name="message_queue_info_server_info">thông tin hàng đợi máy chủ: %1$s\n\ntin nhắn được nhận cuối cùng: %2$s</string>
<string name="settings_section_title_settings">CÀI ĐẶT</string>
<string name="settings_section_title_settings">Cài đặt</string>
<string name="info_row_sent_at">Đã gửi vào</string>
<string name="server_address">Địa chỉ máy chủ</string>
<string name="session_code">Mã phiên</string>
@@ -1716,7 +1716,7 @@
<string name="set_passphrase">Đặt mật khẩu</string>
<string name="toolbar_settings">Cài đặt</string>
<string name="network_error_broker_host_desc">Địa chỉ máy chủ không tương thích với cài đặt mạng: %1$s.</string>
<string name="conn_stats_section_title_servers">CÁC MÁY CHỦ</string>
<string name="conn_stats_section_title_servers">Các máy chủ</string>
<string name="error_xftp_test_server_auth">Máy chủ yêu cầu xác thực để tải lên, kiểm tra mật khẩu</string>
<string name="network_session_mode_server">Máy chủ</string>
<string name="set_passcode">Đặt mã truy cập</string>
@@ -1828,7 +1828,7 @@
<string name="icon_descr_speaker_on">Loa ngoài bật</string>
<string name="icon_descr_sound_muted">Âm thanh đã bị tắt</string>
<string name="app_check_for_updates_stable">Ổn định</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_socks">Proxy SOCKS</string>
<string name="receipts_section_groups">Các nhóm nhỏ (tối đa 20 thành viên)</string>
<string name="non_fatal_errors_occured_during_import">Một vài lỗi không nghiêm trọng đã xảy ra trong lúc nhập:</string>
<string name="icon_descr_speaker_off">Loa ngoài tắt</string>
@@ -1896,7 +1896,7 @@
<string name="v4_6_chinese_spanish_interface_descr">Xin gửi lời cảm ơn tới các người dùng đã góp công qua Weblate!</string>
<string name="v5_0_polish_interface_descr">Xin gửi lời cảm ơn tới các người dùng đã góp công qua Weblate!</string>
<string name="system_mode_toast">Chế độ hệ thống</string>
<string name="settings_section_title_support">HỖ TRỢ SIMPLEX CHAT</string>
<string name="settings_section_title_support">Hỗ trợ SimpleX Chat</string>
<string name="temporary_file_error">Lỗi tệp tạm thời</string>
<string name="chat_help_tap_button">Nhấn nút</string>
<string name="network_option_tcp_connection">Kết nối TCP</string>
@@ -1947,7 +1947,7 @@
<string name="alert_text_msg_bad_id">ID của tin nhắn tiếp theo là không chính xác (nhỏ hơn hoặc bằng với cái trước).\nViệc này có thể xảy ra do một vài lỗi hoặc khi kết nối bị xâm phạm.</string>
<string name="database_backup_can_be_restored">Nỗ lực đổi mật khẩu cơ sở dữ liệu đã không được hoàn thành.</string>
<string name="this_device_name_shared_with_mobile">Tên thiết bị sẽ được chia sẻ với thiết bị di động đã được kết nối.</string>
<string name="settings_section_title_themes">CÁC CHỦ ĐỀ</string>
<string name="settings_section_title_themes">Các chủ đề</string>
<string name="failed_to_create_user_invalid_desc">Tên hiển thị này không hợp lệ. Xin vui lòng chọn một cái tên khác.</string>
<string name="profile_is_only_shared_with_your_contacts">Hồ sơ chỉ được chia sẻ với các liên hệ của bạn.</string>
<string name="e2ee_info_pq_short">Cuộc trò chuyện này được bảo vệ bằng mã hóa đầu cuối có kháng lượng tử.</string>
@@ -2196,7 +2196,7 @@
<string name="one_hand_ui_change_instruction">Bạn có thể thay đổi nói trong cài đặt Giao diện.</string>
<string name="connect_plan_you_are_already_joining_the_group_via_this_link">Bạn đang tham gia nhóm thông qua đường dẫn này.</string>
<string name="you_can_enable_delivery_receipts_later">Bạn có thể bật vào lúc sau thông qua Cài đặt</string>
<string name="settings_section_title_you">BẠN</string>
<string name="settings_section_title_you">Bạn</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Bạn có thể chia sẻ một đường dẫn hoặc mã QR - bất kỳ ai cũng sẽ có thể tham gia nhóm. Bạn sẽ không mất các thành viên của nhóm nếu sau này bạn xóa nó đi.</string>
<string name="migrate_to_device_try_again">Bạn có thể thử một lần nữa.</string>
<string name="connected_to_server_to_receive_messages_from_contact">Bạn đã kết nối tới máy chủ dùng để nhận tin nhắn từ liên hệ này.</string>
@@ -754,7 +754,7 @@
<string name="next_generation_of_private_messaging">下一代私密通讯软件</string>
<string name="paste_the_link_you_received">粘贴你收到的链接</string>
<string name="alert_title_skipped_messages">已跳过消息</string>
<string name="settings_section_title_support">支持 SIMPLEX CHAT</string>
<string name="settings_section_title_support">支持 SimpleX Chat</string>
<string name="send_link_previews">发送链接预览</string>
<string name="settings_section_title_socks">SOCKS 代理</string>
<string name="stop_chat_question">停止聊天程序?</string>
@@ -668,7 +668,7 @@
<string name="settings_section_title_device">裝置</string>
<string name="settings_section_title_help">幫助</string>
<string name="settings_section_title_settings">設定</string>
<string name="settings_section_title_support">幫助 SIMPLEX CHAT</string>
<string name="settings_section_title_support">幫助 SimpleX Chat</string>
<string name="settings_section_title_chats">聊天</string>
<string name="settings_developer_tools">開發者工具</string>
<string name="settings_section_title_socks">SOCKS 代理伺服器</string>
@@ -1,6 +1,5 @@
package chat.simplex.common.views.chatlist
import SectionDivider
import androidx.compose.foundation.*
import androidx.compose.foundation.interaction.InteractionSource
import androidx.compose.foundation.layout.*
@@ -62,6 +61,6 @@ actual fun ChatListNavLinkLayout(
if (selectedChat.value || nextChatSelected.value) {
Divider()
} else {
SectionDivider()
Divider(Modifier.padding(horizontal = 8.dp))
}
}
@@ -1,10 +1,11 @@
package chat.simplex.common.views.usersettings
import CARD_PADDING
import SectionBottomSpacer
import SectionDividerSpaced
import SectionSpacer
import SectionTextFooter
import SectionView
import itemHPadding
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -23,7 +24,7 @@ import chat.simplex.common.model.CloseBehavior
import chat.simplex.common.model.SharedPreference
import chat.simplex.common.trayIsAvailable
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import dev.icerock.moko.resources.compose.stringResource
@@ -82,10 +83,10 @@ fun AppearanceScope.AppearanceLayout(
SectionDividerSpaced()
ProfileImageSection()
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
FontScaleSection()
SectionDividerSpaced(maxTopPadding = true)
SectionDividerSpaced()
DensityScaleSection()
SectionBottomSpacer()
@@ -110,8 +111,8 @@ private fun MinimizeToTraySection() {
@Composable
fun DensityScaleSection() {
val localDensityScale = remember { mutableStateOf(appPrefs.densityScale.get()) }
SectionView(stringResource(MR.strings.appearance_zoom).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
Row(Modifier.padding(top = 10.dp), verticalAlignment = Alignment.CenterVertically) {
SectionView(stringResource(MR.strings.appearance_zoom), contentPadding = PaddingValues(horizontal = CARD_PADDING)) {
Row(Modifier.padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically) {
Box(Modifier.size(50.dp)
.background(MaterialTheme.colors.surface, RoundedCornerShape(percent = 22))
.clip(RoundedCornerShape(percent = 22))