Skip to content

Commit 40ae0a7

Browse files
enhance(dialog): use MaterialAlertDialogBuilder (#3491)
* Fix example insets * Add app-region: drag * Use `Theme.Material3.DayNight.NoActionBar` * Re-generate some kotlin files * Use MaterialAlertDialogBuilder * Add change file * Revert back to margin-top: 0.5rem * Re-generate outdated gradle wrapper from #3039 * Move title bar to its own file * Fix cancel message
1 parent edc52ea commit 40ae0a7

15 files changed

Lines changed: 185 additions & 133 deletions

File tree

.changes/material-dialog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
dialog: patch
3+
dialog-js: patch
4+
---
5+
6+
Use `com.google.android.material.dialog.MaterialAlertDialogBuilder` instead of `AlertDialog` so the dialog follows the app's theme

examples/api/src-tauri/capabilities/base.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
"core:default",
1818
"fs:default",
1919
"core:window:allow-minimize",
20-
"core:window:allow-maximize",
21-
"core:window:allow-unmaximize",
20+
"core:window:allow-toggle-maximize",
2221
"core:window:allow-close",
2322
"core:window:allow-start-dragging",
2423
"notification:default",
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
package com.tauri.api
22

3-
class MainActivity : TauriActivity()
3+
import android.os.Bundle
4+
import androidx.activity.enableEdgeToEdge
5+
6+
class MainActivity : TauriActivity() {
7+
override fun onCreate(savedInstanceState: Bundle?) {
8+
enableEdgeToEdge()
9+
super.onCreate(savedInstanceState)
10+
}
11+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.api" parent="Theme.MaterialComponents.DayNight.NoActionBar">
3+
<style name="Theme.api" parent="Theme.Material3.DayNight.NoActionBar">
44
<!-- Customize your theme here. -->
55
</style>
66
</resources>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.api" parent="Theme.MaterialComponents.DayNight.NoActionBar">
3+
<style name="Theme.api" parent="Theme.Material3.DayNight.NoActionBar">
44
<!-- Customize your theme here. -->
55
</style>
66
</resources>

examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,23 @@ open class BuildTask : DefaultTask() {
2121
runTauriCli(executable)
2222
} catch (e: Exception) {
2323
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
24-
runTauriCli("$executable.cmd")
24+
// Try different Windows-specific extensions
25+
val fallbacks = listOf(
26+
"$executable.exe",
27+
"$executable.cmd",
28+
"$executable.bat",
29+
)
30+
31+
var lastException: Exception = e
32+
for (fallback in fallbacks) {
33+
try {
34+
runTauriCli(fallback)
35+
return
36+
} catch (fallbackException: Exception) {
37+
lastException = fallbackException
38+
}
39+
}
40+
throw lastException
2541
} else {
2642
throw e;
2743
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Tue May 10 19:22:52 CST 2022
22
distributionBase=GRADLE_USER_HOME
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
44
distributionPath=wrapper/dists
55
zipStorePath=wrapper/dists
66
zipStoreBase=GRADLE_USER_HOME

examples/api/src/App.svelte

Lines changed: 15 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<script>
2+
import { onMount, tick } from 'svelte'
23
import { writable } from 'svelte/store'
34
import { getCurrentWindow } from '@tauri-apps/api/window'
45
import { getCurrentWebview } from '@tauri-apps/api/webview'
@@ -23,11 +24,10 @@
2324
import Biometric from './views/Biometric.svelte'
2425
import Geolocation from './views/Geolocation.svelte'
2526
import Haptics from './views/Haptics.svelte'
26-
27-
import { onMount, tick } from 'svelte'
28-
import { ask } from '@tauri-apps/plugin-dialog'
2927
import Nfc from './views/Nfc.svelte'
3028
29+
import TitleBar from './lib/TitleBar.svelte'
30+
3131
const appWindow = getCurrentWindow()
3232
3333
if (appWindow.label !== 'main') {
@@ -155,44 +155,9 @@
155155
selected = view
156156
}
157157
158-
// Window controls
159-
let isWindowMaximized
160-
onMount(async () => {
161-
isWindowMaximized = await appWindow.isMaximized()
162-
appWindow.onResized(async () => {
163-
isWindowMaximized = await appWindow.isMaximized()
164-
})
165-
})
166-
167-
function minimize() {
168-
appWindow.minimize()
169-
}
170-
171-
async function toggleMaximize() {
172-
;(await appWindow.isMaximized())
173-
? appWindow.unmaximize()
174-
: appWindow.maximize()
175-
}
176-
177-
let confirmed_close = false
178-
async function close() {
179-
if (!confirmed_close) {
180-
confirmed_close = await ask(
181-
'Are you sure that you want to close this window?',
182-
{
183-
title: 'Tauri API'
184-
}
185-
)
186-
if (confirmed_close) {
187-
appWindow.close()
188-
}
189-
}
190-
}
191-
192158
// dark/light
193-
let isDark
159+
let isDark = localStorage.getItem('theme') == 'dark'
194160
onMount(() => {
195-
isDark = localStorage && localStorage.getItem('theme') == 'dark'
196161
applyTheme(isDark)
197162
})
198163
function applyTheme(isDark) {
@@ -213,9 +178,9 @@
213178
...r,
214179
{
215180
html:
216-
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> ` +
217-
(typeof value === 'string' ? value : JSON.stringify(value, null, 1)) +
218-
'</pre>'
181+
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> `
182+
+ (typeof value === 'string' ? value : JSON.stringify(value, null, 1))
183+
+ '</pre>'
219184
}
220185
])
221186
await tick()
@@ -229,9 +194,9 @@
229194
...r,
230195
{
231196
html:
232-
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> ` +
233-
html +
234-
'</pre>'
197+
`<pre><strong class="text-accent dark:text-darkAccent">[${new Date().toLocaleTimeString()}]:</strong> `
198+
+ html
199+
+ '</pre>'
235200
}
236201
])
237202
await tick()
@@ -265,10 +230,7 @@
265230
document.addEventListener('mousemove', moveHandler)
266231
}
267232
268-
let isWindows
269-
onMount(async () => {
270-
isWindows = (await os.platform()) === 'windows'
271-
})
233+
let isWindows = os.platform() === 'windows'
272234
273235
// mobile
274236
let isSideBarOpen = false
@@ -340,65 +302,13 @@
340302

341303
<!-- custom titlebar for Windows -->
342304
{#if isWindows}
343-
<div
344-
class="w-screen select-none h-8 pl-2 flex justify-between items-center absolute text-primaryText dark:text-darkPrimaryText"
345-
data-tauri-drag-region
346-
>
347-
<span class="lt-sm:pl-10 text-darkPrimaryText">Tauri API Validation</span>
348-
<span
349-
class="
350-
h-100%
351-
children:h-100% children:w-12 children:inline-flex
352-
children:items-center children:justify-center"
353-
>
354-
<button
355-
aria-label="Toggle dark mode"
356-
title={isDark ? 'Switch to Light mode' : 'Switch to Dark mode'}
357-
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
358-
on:click={toggleDark}
359-
>
360-
{#if isDark}
361-
<div class="i-ph-sun"></div>
362-
{:else}
363-
<div class="i-ph-moon"></div>
364-
{/if}
365-
</button>
366-
<button
367-
aria-label="Minimize window"
368-
title="Minimize"
369-
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
370-
on:click={minimize}
371-
>
372-
<div class="i-codicon-chrome-minimize"></div>
373-
</button>
374-
<button
375-
aria-label="Maximize window"
376-
title={isWindowMaximized ? 'Restore' : 'Maximize'}
377-
class="bg-inherit border-none hover:bg-hoverOverlay active:bg-hoverOverlayDarker dark:hover:bg-darkHoverOverlay dark:active:bg-darkHoverOverlayDarker"
378-
on:click={toggleMaximize}
379-
>
380-
{#if isWindowMaximized}
381-
<div class="i-codicon-chrome-restore"></div>
382-
{:else}
383-
<div class="i-codicon-chrome-maximize"></div>
384-
{/if}
385-
</button>
386-
<button
387-
aria-label="Close window"
388-
title="Close"
389-
class="bg-inherit border-none hover:bg-red-700 dark:hover:bg-red-700 hover:text-darkPrimaryText active:bg-red-700/90 dark:active:bg-red-700/90 active:text-darkPrimaryText"
390-
on:click={close}
391-
>
392-
<div class="i-codicon-chrome-close"></div>
393-
</button>
394-
</span>
395-
</div>
305+
<TitleBar {appWindow} {isDark} {toggleDark} />
396306
{/if}
397307

398308
<!-- Sidebar toggle, only visible on small screens -->
399309
<div
400310
id="sidebarToggle"
401-
class="z-2000 sidebar-toggle hidden lt-sm:flex justify-center absolute items-center w-8 h-8 rd-8
311+
class="z-2000 hidden lt-sm:flex justify-center absolute items-center w-8 h-8 rd-8
402312
bg-accent dark:bg-darkAccent active:bg-accentDark dark:active:bg-darkAccentDark"
403313
>
404314
{#if isSideBarOpen}
@@ -409,7 +319,7 @@
409319
</div>
410320

411321
<div
412-
class="flex h-screen w-screen overflow-hidden children-pt8 children-pb-2 text-primaryText dark:text-darkPrimaryText"
322+
class="flex h-screen w-screen overflow-hidden text-primaryText dark:text-darkPrimaryText"
413323
>
414324
<aside
415325
id="sidebar"
@@ -512,7 +422,7 @@
512422
<p class="font-semibold">Console</p>
513423
<button
514424
aria-label="Clear Console"
515-
class="cursor-pointer h-85% rd-1 p-1 flex justify-center items-center border-none bg-inherit
425+
class="cursor-pointer h-85% rd-1 p-1 flex justify-center items-center border-none
516426
hover:bg-hoverOverlay dark:hover:bg-darkHoverOverlay
517427
active:bg-hoverOverlay/25 dark:active:bg-darkHoverOverlay/25
518428
"

examples/api/src/app.css

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
font-family: 'Rubik', sans-serif;
99
}
1010

11+
button {
12+
color: inherit;
13+
background-color: inherit;
14+
}
15+
1116
::-webkit-scrollbar {
1217
width: 0.25rem;
1318
height: 3px;
@@ -33,27 +38,34 @@ code.code-block {
3338
width: 18.75rem;
3439
}
3540

36-
@media screen and (max-width: 640px) {
41+
@media screen and (width < 640px) {
3742
#sidebar {
3843
--translate-x: -18.75rem;
3944
transform: translateX(var(--translate-x));
4045
}
4146
}
4247

43-
.sidebar-toggle {
44-
margin-top: 0.5rem;
45-
margin-left: 0.5rem;
48+
#sidebar,
49+
main {
50+
padding-top: calc(env(safe-area-inset-top) + 2rem);
51+
}
52+
53+
#sidebar {
54+
padding-left: calc(env(safe-area-inset-left) + 0.5rem);
55+
}
56+
57+
main {
58+
padding-right: env(safe-area-inset-right);
4659
}
4760

48-
body {
49-
overflow: hidden;
50-
padding: env(safe-area-inset-top) env(safe-area-inset-right)
51-
env(safe-area-inset-bottom) env(safe-area-inset-left);
61+
#sidebarToggle {
62+
margin-top: calc(env(safe-area-inset-top) + 0.5rem);
63+
margin-left: calc(env(safe-area-inset-left) + 0.5rem);
5264
}
5365

5466
#sidebar,
5567
#console {
56-
padding-bottom: calc(env(safe-area-inset-bottom) + 24px);
68+
padding-bottom: calc(env(safe-area-inset-bottom) + 1.5rem);
5769
}
5870

5971
.transparent {

0 commit comments

Comments
 (0)