Skip to content

Commit 156c2a7

Browse files
Use compose for desktop
1 parent 72ca481 commit 156c2a7

File tree

34 files changed

+395
-168
lines changed

34 files changed

+395
-168
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ dependencies {
179179
implementation(libs.glide.imageViewFactory)
180180
implementation(libs.konfetti.xml)
181181
implementation(libs.animatedBottomBar)
182+
implementation(project(":ui"))
182183

183184
// Compose
184185
implementation(platform(libs.androidx.compose.bom))

app/src/main/java/com/mrboomdev/awery/ui/tv/components/MediaCard.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ import androidx.tv.material3.Text
2323
import coil3.compose.AsyncImage
2424
import com.mrboomdev.awery.ext.data.CatalogMedia
2525

26+
/**
27+
* An media card with components optimized for TV.
28+
*/
2629
@Composable
2730
fun MediaCard(
2831
media: CatalogMedia,

app/src/main/java/com/mrboomdev/awery/ui/tv/screens/HomeScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.padding
88
import androidx.compose.foundation.selection.selectableGroup
99
import androidx.compose.runtime.Composable
1010
import androidx.compose.runtime.LaunchedEffect
11+
import androidx.compose.runtime.SideEffect
1112
import androidx.compose.runtime.getValue
1213
import androidx.compose.runtime.mutableIntStateOf
1314
import androidx.compose.runtime.mutableStateListOf
@@ -58,7 +59,7 @@ fun HomeScreen(
5859
val sectionsState = remember { mutableStateListOf<MediaRowContent>() }
5960
val featuredState = remember { mutableStateListOf<CatalogMedia>() }
6061
val tabs = remember { mutableStateListOf<Pair<DBTab, IconStateful>>() }
61-
val savedDefaultTab = AwerySettings.DEFAULT_HOME_TAB.value
62+
val savedDefaultTab = remember { AwerySettings.DEFAULT_HOME_TAB.value }
6263

6364
LaunchedEffect("HomeScreenEffect") {
6465
/*if(AwerySettings.AUTO_CHECK_APP_UPDATE.value) {

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ plugins {
1818
alias(libs.plugins.compose) apply false
1919
alias(libs.plugins.kotlin.multiplatform) apply false
2020
alias(libs.plugins.android.library) apply false
21+
alias(libs.plugins.jetbrains.kotlin.jvm) apply false
2122
}

desktop/build.gradle.kts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,39 @@
1-
plugins {
2-
id("java")
3-
}
1+
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
42

5-
java {
6-
sourceCompatibility = JavaVersion.VERSION_17
7-
targetCompatibility = JavaVersion.VERSION_17
3+
plugins {
4+
kotlin("jvm")
5+
id("org.jetbrains.compose") version "1.6.10"
6+
id("org.jetbrains.kotlin.plugin.compose")
87
}
98

10-
tasks.register<JavaExec>("runWithJavaExec") {
11-
mainClass = "com.mrboomdev.awery.desktop.Main"
12-
errorOutput = System.err
13-
}
9+
group = "com.mrboomdev.awery.desktop"
10+
version = "1.0.0"
1411

1512
dependencies {
13+
// Core
14+
implementation(project(":ext"))
15+
implementation(project(":ui"))
16+
implementation(kotlin("stdlib-jdk8"))
17+
implementation(compose.desktop.currentOs)
18+
1619
// Utils
17-
implementation(project(":ext"))
1820
implementation(libs.moshi)
1921

2022
// Networking
2123
implementation(libs.okhttp)
2224
implementation(libs.okhttp.logging)
2325
implementation(libs.okhttp.dnsoverhttps)
2426
implementation(libs.okhttp.brotli)
27+
}
28+
29+
compose.desktop {
30+
application {
31+
mainClass = "Main"
32+
33+
nativeDistributions {
34+
targetFormats(TargetFormat.Exe, TargetFormat.Deb)
35+
packageName = "com.mrboomdev.awery"
36+
packageVersion = "1.0.0"
37+
}
38+
}
2539
}
Lines changed: 60 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,66 @@
1-
package com.mrboomdev.awery.desktop;
1+
package com.mrboomdev.awery.desktop
22

3-
import com.mrboomdev.awery.desktop.ui.components.Button;
3+
import androidx.compose.foundation.border
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.fillMaxSize
6+
import androidx.compose.foundation.shape.AbsoluteRoundedCornerShape
7+
import androidx.compose.foundation.window.WindowDraggableArea
8+
import androidx.compose.material.Button
9+
import androidx.compose.material.MaterialTheme
10+
import androidx.compose.material.Surface
11+
import androidx.compose.material.Text
12+
import androidx.compose.material.darkColors
13+
import androidx.compose.runtime.Composable
14+
import androidx.compose.runtime.remember
15+
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.draw.clip
17+
import androidx.compose.ui.graphics.Brush
18+
import androidx.compose.ui.graphics.Color
19+
import androidx.compose.ui.input.pointer.PointerIcon
20+
import androidx.compose.ui.input.pointer.pointerHoverIcon
21+
import androidx.compose.ui.unit.dp
22+
import androidx.compose.ui.window.MenuBar
23+
import androidx.compose.ui.window.Window
24+
import androidx.compose.ui.window.application
25+
import com.mrboomdev.awery.desktop.ui.components.StatusBar
26+
import java.awt.Dimension
27+
import kotlin.system.exitProcess
428

5-
import java.awt.Toolkit;
29+
fun main() = application {
30+
Window(
31+
title = "Awery",
32+
undecorated = true,
33+
transparent = true,
34+
onCloseRequest = { exitApplication() }
35+
) {
36+
remember {
37+
window.minimumSize = Dimension(500, 350)
38+
window.requestFocus()
39+
}
640

7-
import javax.swing.JFrame;
8-
import javax.swing.JLabel;
41+
WindowDraggableArea(
42+
modifier = Modifier.clip(AbsoluteRoundedCornerShape(4.dp))
43+
) {
44+
MaterialTheme(colors = darkColors()) {
45+
Surface(
46+
modifier = Modifier.fillMaxSize(),
47+
color = MaterialTheme.colors.background
48+
) {
49+
Column {
50+
StatusBar(
51+
title = "Awery",
52+
windowScope = this@Window
53+
)
954

10-
public class Main {
11-
12-
public static void main(String[] args) {
13-
var toolkit = Toolkit.getDefaultToolkit();
14-
15-
var frame = new JFrame();
16-
frame.setTitle("Awery");
17-
frame.setAutoRequestFocus(true);
18-
frame.setResizable(true);
19-
20-
frame.setSize(
21-
Math.round(toolkit.getScreenSize().width * .75f),
22-
Math.round(toolkit.getScreenSize().height * .75f));
23-
24-
frame.setLocation(
25-
toolkit.getScreenSize().width / 2 - frame.getWidth() / 2,
26-
toolkit.getScreenSize().height / 2 - frame.getHeight() / 2);
27-
28-
var label = new JLabel("Welcome to Awery!");
29-
label.setBounds(200, 0, 200, 200);
30-
frame.add(label);
31-
32-
var button = new Button("Hello, World!");
33-
button.setBounds(150, 200, 220, 50);
34-
frame.add(button);
35-
36-
frame.setVisible(true);
37-
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
55+
Button(
56+
modifier = Modifier.pointerHoverIcon(PointerIcon.Hand),
57+
onClick = { println("Hello, World!") }
58+
) {
59+
Text("Hello, Everynyan UwU")
60+
}
61+
}
62+
}
63+
}
64+
}
3865
}
3966
}

desktop/src/main/java/com/mrboomdev/awery/desktop/extensions/support/js/JsBridge.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

desktop/src/main/java/com/mrboomdev/awery/desktop/extensions/support/js/JsManager.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

desktop/src/main/java/com/mrboomdev/awery/desktop/extensions/support/js/JsProvider.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

desktop/src/main/java/com/mrboomdev/awery/desktop/extensions/support/yomi/YomiManager.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)