Chastity game angefangen

This commit is contained in:
2026-03-15 22:51:10 +01:00
parent 3e23ae788b
commit 57a7c78037
359 changed files with 27638 additions and 1109 deletions

View File

@@ -0,0 +1,745 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
import org.gradle.plugin.use.PluginDependency;
import org.gradle.api.artifacts.ExternalModuleDependencyBundle;
import org.gradle.api.artifacts.MutableVersionConstraint;
import org.gradle.api.provider.Provider;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory;
import org.gradle.api.internal.catalog.DefaultVersionCatalog;
import java.util.Map;
import org.gradle.api.internal.attributes.ImmutableAttributesFactory;
import org.gradle.api.internal.artifacts.dsl.CapabilityNotationParser;
import javax.inject.Inject;
/**
* A catalog of dependencies accessible via the {@code libs} extension.
*/
@NonNullApi
public class LibrariesForLibs extends AbstractExternalDependencyFactory {
private final AbstractExternalDependencyFactory owner = this;
private final AndroidxLibraryAccessors laccForAndroidxLibraryAccessors = new AndroidxLibraryAccessors(owner);
private final CoilLibraryAccessors laccForCoilLibraryAccessors = new CoilLibraryAccessors(owner);
private final KotlinxLibraryAccessors laccForKotlinxLibraryAccessors = new KotlinxLibraryAccessors(owner);
private final OkhttpLibraryAccessors laccForOkhttpLibraryAccessors = new OkhttpLibraryAccessors(owner);
private final RetrofitLibraryAccessors laccForRetrofitLibraryAccessors = new RetrofitLibraryAccessors(owner);
private final VersionAccessors vaccForVersionAccessors = new VersionAccessors(providers, config);
private final BundleAccessors baccForBundleAccessors = new BundleAccessors(objects, providers, config, attributesFactory, capabilityNotationParser);
private final PluginAccessors paccForPluginAccessors = new PluginAccessors(providers, config);
@Inject
public LibrariesForLibs(DefaultVersionCatalog config, ProviderFactory providers, ObjectFactory objects, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) {
super(config, providers, objects, attributesFactory, capabilityNotationParser);
}
/**
* Dependency provider for <b>gson</b> with <b>com.google.code.gson:gson</b> coordinates and
* with version reference <b>gson</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getGson() {
return create("gson");
}
/**
* Group of libraries at <b>androidx</b>
*/
public AndroidxLibraryAccessors getAndroidx() {
return laccForAndroidxLibraryAccessors;
}
/**
* Group of libraries at <b>coil</b>
*/
public CoilLibraryAccessors getCoil() {
return laccForCoilLibraryAccessors;
}
/**
* Group of libraries at <b>kotlinx</b>
*/
public KotlinxLibraryAccessors getKotlinx() {
return laccForKotlinxLibraryAccessors;
}
/**
* Group of libraries at <b>okhttp</b>
*/
public OkhttpLibraryAccessors getOkhttp() {
return laccForOkhttpLibraryAccessors;
}
/**
* Group of libraries at <b>retrofit</b>
*/
public RetrofitLibraryAccessors getRetrofit() {
return laccForRetrofitLibraryAccessors;
}
/**
* Group of versions at <b>versions</b>
*/
public VersionAccessors getVersions() {
return vaccForVersionAccessors;
}
/**
* Group of bundles at <b>bundles</b>
*/
public BundleAccessors getBundles() {
return baccForBundleAccessors;
}
/**
* Group of plugins at <b>plugins</b>
*/
public PluginAccessors getPlugins() {
return paccForPluginAccessors;
}
public static class AndroidxLibraryAccessors extends SubDependencyFactory {
private final AndroidxActivityLibraryAccessors laccForAndroidxActivityLibraryAccessors = new AndroidxActivityLibraryAccessors(owner);
private final AndroidxComposeLibraryAccessors laccForAndroidxComposeLibraryAccessors = new AndroidxComposeLibraryAccessors(owner);
private final AndroidxCoreLibraryAccessors laccForAndroidxCoreLibraryAccessors = new AndroidxCoreLibraryAccessors(owner);
private final AndroidxDatastoreLibraryAccessors laccForAndroidxDatastoreLibraryAccessors = new AndroidxDatastoreLibraryAccessors(owner);
private final AndroidxLifecycleLibraryAccessors laccForAndroidxLifecycleLibraryAccessors = new AndroidxLifecycleLibraryAccessors(owner);
private final AndroidxMaterialLibraryAccessors laccForAndroidxMaterialLibraryAccessors = new AndroidxMaterialLibraryAccessors(owner);
private final AndroidxNavigationLibraryAccessors laccForAndroidxNavigationLibraryAccessors = new AndroidxNavigationLibraryAccessors(owner);
private final AndroidxUiLibraryAccessors laccForAndroidxUiLibraryAccessors = new AndroidxUiLibraryAccessors(owner);
public AndroidxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>material3</b> with <b>androidx.compose.material3:material3</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getMaterial3() {
return create("androidx.material3");
}
/**
* Group of libraries at <b>androidx.activity</b>
*/
public AndroidxActivityLibraryAccessors getActivity() {
return laccForAndroidxActivityLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.compose</b>
*/
public AndroidxComposeLibraryAccessors getCompose() {
return laccForAndroidxComposeLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.core</b>
*/
public AndroidxCoreLibraryAccessors getCore() {
return laccForAndroidxCoreLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.datastore</b>
*/
public AndroidxDatastoreLibraryAccessors getDatastore() {
return laccForAndroidxDatastoreLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.lifecycle</b>
*/
public AndroidxLifecycleLibraryAccessors getLifecycle() {
return laccForAndroidxLifecycleLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.material</b>
*/
public AndroidxMaterialLibraryAccessors getMaterial() {
return laccForAndroidxMaterialLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.navigation</b>
*/
public AndroidxNavigationLibraryAccessors getNavigation() {
return laccForAndroidxNavigationLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.ui</b>
*/
public AndroidxUiLibraryAccessors getUi() {
return laccForAndroidxUiLibraryAccessors;
}
}
public static class AndroidxActivityLibraryAccessors extends SubDependencyFactory {
public AndroidxActivityLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.activity:activity-compose</b> coordinates and
* with version reference <b>activityCompose</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getCompose() {
return create("androidx.activity.compose");
}
}
public static class AndroidxComposeLibraryAccessors extends SubDependencyFactory {
public AndroidxComposeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>bom</b> with <b>androidx.compose:compose-bom</b> coordinates and
* with version reference <b>composeBom</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getBom() {
return create("androidx.compose.bom");
}
}
public static class AndroidxCoreLibraryAccessors extends SubDependencyFactory {
public AndroidxCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ktx</b> with <b>androidx.core:core-ktx</b> coordinates and
* with version reference <b>coreKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getKtx() {
return create("androidx.core.ktx");
}
}
public static class AndroidxDatastoreLibraryAccessors extends SubDependencyFactory {
public AndroidxDatastoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>preferences</b> with <b>androidx.datastore:datastore-preferences</b> coordinates and
* with version reference <b>datastore</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getPreferences() {
return create("androidx.datastore.preferences");
}
}
public static class AndroidxLifecycleLibraryAccessors extends SubDependencyFactory {
private final AndroidxLifecycleRuntimeLibraryAccessors laccForAndroidxLifecycleRuntimeLibraryAccessors = new AndroidxLifecycleRuntimeLibraryAccessors(owner);
private final AndroidxLifecycleViewmodelLibraryAccessors laccForAndroidxLifecycleViewmodelLibraryAccessors = new AndroidxLifecycleViewmodelLibraryAccessors(owner);
public AndroidxLifecycleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.lifecycle.runtime</b>
*/
public AndroidxLifecycleRuntimeLibraryAccessors getRuntime() {
return laccForAndroidxLifecycleRuntimeLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.lifecycle.viewmodel</b>
*/
public AndroidxLifecycleViewmodelLibraryAccessors getViewmodel() {
return laccForAndroidxLifecycleViewmodelLibraryAccessors;
}
}
public static class AndroidxLifecycleRuntimeLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleRuntimeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ktx</b> with <b>androidx.lifecycle:lifecycle-runtime-ktx</b> coordinates and
* with version reference <b>lifecycleRuntimeKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getKtx() {
return create("androidx.lifecycle.runtime.ktx");
}
}
public static class AndroidxLifecycleViewmodelLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleViewmodelLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.lifecycle:lifecycle-viewmodel-compose</b> coordinates and
* with version reference <b>lifecycleRuntimeKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getCompose() {
return create("androidx.lifecycle.viewmodel.compose");
}
}
public static class AndroidxMaterialLibraryAccessors extends SubDependencyFactory {
private final AndroidxMaterialIconsLibraryAccessors laccForAndroidxMaterialIconsLibraryAccessors = new AndroidxMaterialIconsLibraryAccessors(owner);
public AndroidxMaterialLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.material.icons</b>
*/
public AndroidxMaterialIconsLibraryAccessors getIcons() {
return laccForAndroidxMaterialIconsLibraryAccessors;
}
}
public static class AndroidxMaterialIconsLibraryAccessors extends SubDependencyFactory {
public AndroidxMaterialIconsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>extended</b> with <b>androidx.compose.material:material-icons-extended</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getExtended() {
return create("androidx.material.icons.extended");
}
}
public static class AndroidxNavigationLibraryAccessors extends SubDependencyFactory {
public AndroidxNavigationLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.navigation:navigation-compose</b> coordinates and
* with version reference <b>navigationCompose</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getCompose() {
return create("androidx.navigation.compose");
}
}
public static class AndroidxUiLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final AndroidxUiToolingLibraryAccessors laccForAndroidxUiToolingLibraryAccessors = new AndroidxUiToolingLibraryAccessors(owner);
public AndroidxUiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ui</b> with <b>androidx.compose.ui:ui</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> asProvider() {
return create("androidx.ui");
}
/**
* Dependency provider for <b>graphics</b> with <b>androidx.compose.ui:ui-graphics</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getGraphics() {
return create("androidx.ui.graphics");
}
/**
* Group of libraries at <b>androidx.ui.tooling</b>
*/
public AndroidxUiToolingLibraryAccessors getTooling() {
return laccForAndroidxUiToolingLibraryAccessors;
}
}
public static class AndroidxUiToolingLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
public AndroidxUiToolingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>tooling</b> with <b>androidx.compose.ui:ui-tooling</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> asProvider() {
return create("androidx.ui.tooling");
}
/**
* Dependency provider for <b>preview</b> with <b>androidx.compose.ui:ui-tooling-preview</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getPreview() {
return create("androidx.ui.tooling.preview");
}
}
public static class CoilLibraryAccessors extends SubDependencyFactory {
public CoilLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>io.coil-kt:coil-compose</b> coordinates and
* with version reference <b>coil</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getCompose() {
return create("coil.compose");
}
}
public static class KotlinxLibraryAccessors extends SubDependencyFactory {
private final KotlinxCoroutinesLibraryAccessors laccForKotlinxCoroutinesLibraryAccessors = new KotlinxCoroutinesLibraryAccessors(owner);
public KotlinxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>kotlinx.coroutines</b>
*/
public KotlinxCoroutinesLibraryAccessors getCoroutines() {
return laccForKotlinxCoroutinesLibraryAccessors;
}
}
public static class KotlinxCoroutinesLibraryAccessors extends SubDependencyFactory {
public KotlinxCoroutinesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>android</b> with <b>org.jetbrains.kotlinx:kotlinx-coroutines-android</b> coordinates and
* with version reference <b>coroutines</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getAndroid() {
return create("kotlinx.coroutines.android");
}
}
public static class OkhttpLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final OkhttpLoggingLibraryAccessors laccForOkhttpLoggingLibraryAccessors = new OkhttpLoggingLibraryAccessors(owner);
public OkhttpLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>okhttp</b> with <b>com.squareup.okhttp3:okhttp</b> coordinates and
* with version reference <b>okhttp</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> asProvider() {
return create("okhttp");
}
/**
* Group of libraries at <b>okhttp.logging</b>
*/
public OkhttpLoggingLibraryAccessors getLogging() {
return laccForOkhttpLoggingLibraryAccessors;
}
}
public static class OkhttpLoggingLibraryAccessors extends SubDependencyFactory {
public OkhttpLoggingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>interceptor</b> with <b>com.squareup.okhttp3:logging-interceptor</b> coordinates and
* with version reference <b>okhttp</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getInterceptor() {
return create("okhttp.logging.interceptor");
}
}
public static class RetrofitLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final RetrofitConverterLibraryAccessors laccForRetrofitConverterLibraryAccessors = new RetrofitConverterLibraryAccessors(owner);
public RetrofitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>retrofit</b> with <b>com.squareup.retrofit2:retrofit</b> coordinates and
* with version reference <b>retrofit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> asProvider() {
return create("retrofit");
}
/**
* Group of libraries at <b>retrofit.converter</b>
*/
public RetrofitConverterLibraryAccessors getConverter() {
return laccForRetrofitConverterLibraryAccessors;
}
}
public static class RetrofitConverterLibraryAccessors extends SubDependencyFactory {
public RetrofitConverterLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>gson</b> with <b>com.squareup.retrofit2:converter-gson</b> coordinates and
* with version reference <b>retrofit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*/
public Provider<MinimalExternalModuleDependency> getGson() {
return create("retrofit.converter.gson");
}
}
public static class VersionAccessors extends VersionFactory {
public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>activityCompose</b> with value <b>1.9.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getActivityCompose() { return getVersion("activityCompose"); }
/**
* Version alias <b>agp</b> with value <b>8.5.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getAgp() { return getVersion("agp"); }
/**
* Version alias <b>coil</b> with value <b>2.7.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoil() { return getVersion("coil"); }
/**
* Version alias <b>composeBom</b> with value <b>2024.09.03</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeBom() { return getVersion("composeBom"); }
/**
* Version alias <b>coreKtx</b> with value <b>1.13.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoreKtx() { return getVersion("coreKtx"); }
/**
* Version alias <b>coroutines</b> with value <b>1.9.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoroutines() { return getVersion("coroutines"); }
/**
* Version alias <b>datastore</b> with value <b>1.1.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getDatastore() { return getVersion("datastore"); }
/**
* Version alias <b>gson</b> with value <b>2.11.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getGson() { return getVersion("gson"); }
/**
* Version alias <b>kotlin</b> with value <b>2.0.21</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getKotlin() { return getVersion("kotlin"); }
/**
* Version alias <b>lifecycleRuntimeKtx</b> with value <b>2.8.6</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getLifecycleRuntimeKtx() { return getVersion("lifecycleRuntimeKtx"); }
/**
* Version alias <b>material3</b> with value <b>1.3.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getMaterial3() { return getVersion("material3"); }
/**
* Version alias <b>navigationCompose</b> with value <b>2.8.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getNavigationCompose() { return getVersion("navigationCompose"); }
/**
* Version alias <b>okhttp</b> with value <b>4.12.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getOkhttp() { return getVersion("okhttp"); }
/**
* Version alias <b>retrofit</b> with value <b>2.11.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getRetrofit() { return getVersion("retrofit"); }
}
public static class BundleAccessors extends BundleFactory {
public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); }
}
public static class PluginAccessors extends PluginFactory {
private final AndroidPluginAccessors paccForAndroidPluginAccessors = new AndroidPluginAccessors(providers, config);
private final KotlinPluginAccessors paccForKotlinPluginAccessors = new KotlinPluginAccessors(providers, config);
public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Group of plugins at <b>plugins.android</b>
*/
public AndroidPluginAccessors getAndroid() {
return paccForAndroidPluginAccessors;
}
/**
* Group of plugins at <b>plugins.kotlin</b>
*/
public KotlinPluginAccessors getKotlin() {
return paccForKotlinPluginAccessors;
}
}
public static class AndroidPluginAccessors extends PluginFactory {
public AndroidPluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>android.application</b> with plugin id <b>com.android.application</b> and
* with version reference <b>agp</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getApplication() { return createPlugin("android.application"); }
}
public static class KotlinPluginAccessors extends PluginFactory {
public KotlinPluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>kotlin.android</b> with plugin id <b>org.jetbrains.kotlin.android</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getAndroid() { return createPlugin("kotlin.android"); }
/**
* Plugin provider for <b>kotlin.compose</b> with plugin id <b>org.jetbrains.kotlin.plugin.compose</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getCompose() { return createPlugin("kotlin.compose"); }
}
}

View File

@@ -0,0 +1,993 @@
package org.gradle.accessors.dm;
import org.gradle.api.NonNullApi;
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
import org.gradle.plugin.use.PluginDependency;
import org.gradle.api.artifacts.ExternalModuleDependencyBundle;
import org.gradle.api.artifacts.MutableVersionConstraint;
import org.gradle.api.provider.Provider;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory;
import org.gradle.api.internal.catalog.DefaultVersionCatalog;
import java.util.Map;
import org.gradle.api.internal.attributes.ImmutableAttributesFactory;
import org.gradle.api.internal.artifacts.dsl.CapabilityNotationParser;
import javax.inject.Inject;
/**
* A catalog of dependencies accessible via the {@code libs} extension.
*/
@NonNullApi
public class LibrariesForLibsInPluginsBlock extends AbstractExternalDependencyFactory {
private final AbstractExternalDependencyFactory owner = this;
private final AndroidxLibraryAccessors laccForAndroidxLibraryAccessors = new AndroidxLibraryAccessors(owner);
private final CoilLibraryAccessors laccForCoilLibraryAccessors = new CoilLibraryAccessors(owner);
private final KotlinxLibraryAccessors laccForKotlinxLibraryAccessors = new KotlinxLibraryAccessors(owner);
private final OkhttpLibraryAccessors laccForOkhttpLibraryAccessors = new OkhttpLibraryAccessors(owner);
private final RetrofitLibraryAccessors laccForRetrofitLibraryAccessors = new RetrofitLibraryAccessors(owner);
private final VersionAccessors vaccForVersionAccessors = new VersionAccessors(providers, config);
private final BundleAccessors baccForBundleAccessors = new BundleAccessors(objects, providers, config, attributesFactory, capabilityNotationParser);
private final PluginAccessors paccForPluginAccessors = new PluginAccessors(providers, config);
@Inject
public LibrariesForLibsInPluginsBlock(DefaultVersionCatalog config, ProviderFactory providers, ObjectFactory objects, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) {
super(config, providers, objects, attributesFactory, capabilityNotationParser);
}
/**
* Dependency provider for <b>gson</b> with <b>com.google.code.gson:gson</b> coordinates and
* with version reference <b>gson</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getGson() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("gson");
}
/**
* Group of libraries at <b>androidx</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLibraryAccessors getAndroidx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLibraryAccessors;
}
/**
* Group of libraries at <b>coil</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public CoilLibraryAccessors getCoil() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForCoilLibraryAccessors;
}
/**
* Group of libraries at <b>kotlinx</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public KotlinxLibraryAccessors getKotlinx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForKotlinxLibraryAccessors;
}
/**
* Group of libraries at <b>okhttp</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public OkhttpLibraryAccessors getOkhttp() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForOkhttpLibraryAccessors;
}
/**
* Group of libraries at <b>retrofit</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public RetrofitLibraryAccessors getRetrofit() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForRetrofitLibraryAccessors;
}
/**
* Group of versions at <b>versions</b>
*/
public VersionAccessors getVersions() {
return vaccForVersionAccessors;
}
/**
* Group of bundles at <b>bundles</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public BundleAccessors getBundles() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return baccForBundleAccessors;
}
/**
* Group of plugins at <b>plugins</b>
*/
public PluginAccessors getPlugins() {
return paccForPluginAccessors;
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLibraryAccessors extends SubDependencyFactory {
private final AndroidxActivityLibraryAccessors laccForAndroidxActivityLibraryAccessors = new AndroidxActivityLibraryAccessors(owner);
private final AndroidxComposeLibraryAccessors laccForAndroidxComposeLibraryAccessors = new AndroidxComposeLibraryAccessors(owner);
private final AndroidxCoreLibraryAccessors laccForAndroidxCoreLibraryAccessors = new AndroidxCoreLibraryAccessors(owner);
private final AndroidxDatastoreLibraryAccessors laccForAndroidxDatastoreLibraryAccessors = new AndroidxDatastoreLibraryAccessors(owner);
private final AndroidxLifecycleLibraryAccessors laccForAndroidxLifecycleLibraryAccessors = new AndroidxLifecycleLibraryAccessors(owner);
private final AndroidxMaterialLibraryAccessors laccForAndroidxMaterialLibraryAccessors = new AndroidxMaterialLibraryAccessors(owner);
private final AndroidxNavigationLibraryAccessors laccForAndroidxNavigationLibraryAccessors = new AndroidxNavigationLibraryAccessors(owner);
private final AndroidxUiLibraryAccessors laccForAndroidxUiLibraryAccessors = new AndroidxUiLibraryAccessors(owner);
public AndroidxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>material3</b> with <b>androidx.compose.material3:material3</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getMaterial3() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.material3");
}
/**
* Group of libraries at <b>androidx.activity</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxActivityLibraryAccessors getActivity() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxActivityLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.compose</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxComposeLibraryAccessors getCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxComposeLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.core</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxCoreLibraryAccessors getCore() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxCoreLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.datastore</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxDatastoreLibraryAccessors getDatastore() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxDatastoreLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.lifecycle</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLifecycleLibraryAccessors getLifecycle() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLifecycleLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.material</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxMaterialLibraryAccessors getMaterial() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxMaterialLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.navigation</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxNavigationLibraryAccessors getNavigation() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxNavigationLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.ui</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxUiLibraryAccessors getUi() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxUiLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxActivityLibraryAccessors extends SubDependencyFactory {
public AndroidxActivityLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.activity:activity-compose</b> coordinates and
* with version reference <b>activityCompose</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.activity.compose");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxComposeLibraryAccessors extends SubDependencyFactory {
public AndroidxComposeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>bom</b> with <b>androidx.compose:compose-bom</b> coordinates and
* with version reference <b>composeBom</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getBom() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.compose.bom");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxCoreLibraryAccessors extends SubDependencyFactory {
public AndroidxCoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ktx</b> with <b>androidx.core:core-ktx</b> coordinates and
* with version reference <b>coreKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getKtx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.core.ktx");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxDatastoreLibraryAccessors extends SubDependencyFactory {
public AndroidxDatastoreLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>preferences</b> with <b>androidx.datastore:datastore-preferences</b> coordinates and
* with version reference <b>datastore</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getPreferences() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.datastore.preferences");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLifecycleLibraryAccessors extends SubDependencyFactory {
private final AndroidxLifecycleRuntimeLibraryAccessors laccForAndroidxLifecycleRuntimeLibraryAccessors = new AndroidxLifecycleRuntimeLibraryAccessors(owner);
private final AndroidxLifecycleViewmodelLibraryAccessors laccForAndroidxLifecycleViewmodelLibraryAccessors = new AndroidxLifecycleViewmodelLibraryAccessors(owner);
public AndroidxLifecycleLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.lifecycle.runtime</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLifecycleRuntimeLibraryAccessors getRuntime() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLifecycleRuntimeLibraryAccessors;
}
/**
* Group of libraries at <b>androidx.lifecycle.viewmodel</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxLifecycleViewmodelLibraryAccessors getViewmodel() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxLifecycleViewmodelLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLifecycleRuntimeLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleRuntimeLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ktx</b> with <b>androidx.lifecycle:lifecycle-runtime-ktx</b> coordinates and
* with version reference <b>lifecycleRuntimeKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getKtx() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.lifecycle.runtime.ktx");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxLifecycleViewmodelLibraryAccessors extends SubDependencyFactory {
public AndroidxLifecycleViewmodelLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.lifecycle:lifecycle-viewmodel-compose</b> coordinates and
* with version reference <b>lifecycleRuntimeKtx</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.lifecycle.viewmodel.compose");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxMaterialLibraryAccessors extends SubDependencyFactory {
private final AndroidxMaterialIconsLibraryAccessors laccForAndroidxMaterialIconsLibraryAccessors = new AndroidxMaterialIconsLibraryAccessors(owner);
public AndroidxMaterialLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>androidx.material.icons</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxMaterialIconsLibraryAccessors getIcons() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxMaterialIconsLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxMaterialIconsLibraryAccessors extends SubDependencyFactory {
public AndroidxMaterialIconsLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>extended</b> with <b>androidx.compose.material:material-icons-extended</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getExtended() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.material.icons.extended");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxNavigationLibraryAccessors extends SubDependencyFactory {
public AndroidxNavigationLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>androidx.navigation:navigation-compose</b> coordinates and
* with version reference <b>navigationCompose</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.navigation.compose");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxUiLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final AndroidxUiToolingLibraryAccessors laccForAndroidxUiToolingLibraryAccessors = new AndroidxUiToolingLibraryAccessors(owner);
public AndroidxUiLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>ui</b> with <b>androidx.compose.ui:ui</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> asProvider() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.ui");
}
/**
* Dependency provider for <b>graphics</b> with <b>androidx.compose.ui:ui-graphics</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getGraphics() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.ui.graphics");
}
/**
* Group of libraries at <b>androidx.ui.tooling</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public AndroidxUiToolingLibraryAccessors getTooling() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForAndroidxUiToolingLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class AndroidxUiToolingLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
public AndroidxUiToolingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>tooling</b> with <b>androidx.compose.ui:ui-tooling</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> asProvider() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.ui.tooling");
}
/**
* Dependency provider for <b>preview</b> with <b>androidx.compose.ui:ui-tooling-preview</b> coordinates and
* with <b>no version specified</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getPreview() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("androidx.ui.tooling.preview");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class CoilLibraryAccessors extends SubDependencyFactory {
public CoilLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>compose</b> with <b>io.coil-kt:coil-compose</b> coordinates and
* with version reference <b>coil</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getCompose() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("coil.compose");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class KotlinxLibraryAccessors extends SubDependencyFactory {
private final KotlinxCoroutinesLibraryAccessors laccForKotlinxCoroutinesLibraryAccessors = new KotlinxCoroutinesLibraryAccessors(owner);
public KotlinxLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Group of libraries at <b>kotlinx.coroutines</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public KotlinxCoroutinesLibraryAccessors getCoroutines() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForKotlinxCoroutinesLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class KotlinxCoroutinesLibraryAccessors extends SubDependencyFactory {
public KotlinxCoroutinesLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>android</b> with <b>org.jetbrains.kotlinx:kotlinx-coroutines-android</b> coordinates and
* with version reference <b>coroutines</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getAndroid() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("kotlinx.coroutines.android");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class OkhttpLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final OkhttpLoggingLibraryAccessors laccForOkhttpLoggingLibraryAccessors = new OkhttpLoggingLibraryAccessors(owner);
public OkhttpLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>okhttp</b> with <b>com.squareup.okhttp3:okhttp</b> coordinates and
* with version reference <b>okhttp</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> asProvider() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("okhttp");
}
/**
* Group of libraries at <b>okhttp.logging</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public OkhttpLoggingLibraryAccessors getLogging() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForOkhttpLoggingLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class OkhttpLoggingLibraryAccessors extends SubDependencyFactory {
public OkhttpLoggingLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>interceptor</b> with <b>com.squareup.okhttp3:logging-interceptor</b> coordinates and
* with version reference <b>okhttp</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getInterceptor() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("okhttp.logging.interceptor");
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class RetrofitLibraryAccessors extends SubDependencyFactory implements DependencyNotationSupplier {
private final RetrofitConverterLibraryAccessors laccForRetrofitConverterLibraryAccessors = new RetrofitConverterLibraryAccessors(owner);
public RetrofitLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>retrofit</b> with <b>com.squareup.retrofit2:retrofit</b> coordinates and
* with version reference <b>retrofit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> asProvider() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("retrofit");
}
/**
* Group of libraries at <b>retrofit.converter</b>
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public RetrofitConverterLibraryAccessors getConverter() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return laccForRetrofitConverterLibraryAccessors;
}
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class RetrofitConverterLibraryAccessors extends SubDependencyFactory {
public RetrofitConverterLibraryAccessors(AbstractExternalDependencyFactory owner) { super(owner); }
/**
* Dependency provider for <b>gson</b> with <b>com.squareup.retrofit2:converter-gson</b> coordinates and
* with version reference <b>retrofit</b>
* <p>
* This dependency was declared in catalog libs.versions.toml
*
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public Provider<MinimalExternalModuleDependency> getGson() {
org.gradle.internal.deprecation.DeprecationLogger.deprecateBehaviour("Accessing libraries or bundles from version catalogs in the plugins block.").withAdvice("Only use versions or plugins from catalogs in the plugins block.").willBeRemovedInGradle9().withUpgradeGuideSection(8, "kotlin_dsl_deprecated_catalogs_plugins_block").nagUser();
return create("retrofit.converter.gson");
}
}
public static class VersionAccessors extends VersionFactory {
public VersionAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Version alias <b>activityCompose</b> with value <b>1.9.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getActivityCompose() { return getVersion("activityCompose"); }
/**
* Version alias <b>agp</b> with value <b>8.5.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getAgp() { return getVersion("agp"); }
/**
* Version alias <b>coil</b> with value <b>2.7.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoil() { return getVersion("coil"); }
/**
* Version alias <b>composeBom</b> with value <b>2024.09.03</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getComposeBom() { return getVersion("composeBom"); }
/**
* Version alias <b>coreKtx</b> with value <b>1.13.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoreKtx() { return getVersion("coreKtx"); }
/**
* Version alias <b>coroutines</b> with value <b>1.9.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getCoroutines() { return getVersion("coroutines"); }
/**
* Version alias <b>datastore</b> with value <b>1.1.1</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getDatastore() { return getVersion("datastore"); }
/**
* Version alias <b>gson</b> with value <b>2.11.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getGson() { return getVersion("gson"); }
/**
* Version alias <b>kotlin</b> with value <b>2.0.21</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getKotlin() { return getVersion("kotlin"); }
/**
* Version alias <b>lifecycleRuntimeKtx</b> with value <b>2.8.6</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getLifecycleRuntimeKtx() { return getVersion("lifecycleRuntimeKtx"); }
/**
* Version alias <b>material3</b> with value <b>1.3.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getMaterial3() { return getVersion("material3"); }
/**
* Version alias <b>navigationCompose</b> with value <b>2.8.2</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getNavigationCompose() { return getVersion("navigationCompose"); }
/**
* Version alias <b>okhttp</b> with value <b>4.12.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getOkhttp() { return getVersion("okhttp"); }
/**
* Version alias <b>retrofit</b> with value <b>2.11.0</b>
* <p>
* If the version is a rich version and cannot be represented as a
* single version string, an empty string is returned.
* <p>
* This version was declared in catalog libs.versions.toml
*/
public Provider<String> getRetrofit() { return getVersion("retrofit"); }
}
/**
* @deprecated Will be removed in Gradle 9.0.
*/
@Deprecated
public static class BundleAccessors extends BundleFactory {
public BundleAccessors(ObjectFactory objects, ProviderFactory providers, DefaultVersionCatalog config, ImmutableAttributesFactory attributesFactory, CapabilityNotationParser capabilityNotationParser) { super(objects, providers, config, attributesFactory, capabilityNotationParser); }
}
public static class PluginAccessors extends PluginFactory {
private final AndroidPluginAccessors paccForAndroidPluginAccessors = new AndroidPluginAccessors(providers, config);
private final KotlinPluginAccessors paccForKotlinPluginAccessors = new KotlinPluginAccessors(providers, config);
public PluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Group of plugins at <b>plugins.android</b>
*/
public AndroidPluginAccessors getAndroid() {
return paccForAndroidPluginAccessors;
}
/**
* Group of plugins at <b>plugins.kotlin</b>
*/
public KotlinPluginAccessors getKotlin() {
return paccForKotlinPluginAccessors;
}
}
public static class AndroidPluginAccessors extends PluginFactory {
public AndroidPluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>android.application</b> with plugin id <b>com.android.application</b> and
* with version reference <b>agp</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getApplication() { return createPlugin("android.application"); }
}
public static class KotlinPluginAccessors extends PluginFactory {
public KotlinPluginAccessors(ProviderFactory providers, DefaultVersionCatalog config) { super(providers, config); }
/**
* Plugin provider for <b>kotlin.android</b> with plugin id <b>org.jetbrains.kotlin.android</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getAndroid() { return createPlugin("kotlin.android"); }
/**
* Plugin provider for <b>kotlin.compose</b> with plugin id <b>org.jetbrains.kotlin.plugin.compose</b> and
* with version reference <b>kotlin</b>
* <p>
* This plugin was declared in catalog libs.versions.toml
*/
public Provider<PluginDependency> getCompose() { return createPlugin("kotlin.compose"); }
}
}

View File

@@ -0,0 +1,2 @@
#Fri Mar 13 14:11:29 CET 2026
gradle.version=8.9

View File

@@ -0,0 +1,2 @@
#Fri Mar 13 14:11:07 CET 2026
java.home=C\:\\Program Files\\Android\\Android Studio\\jbr

Binary file not shown.

3
xxxthegame-android/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

6
xxxthegame-android/.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

19
xxxthegame-android/.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

10
xxxthegame-android/.idea/migrations.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

9
xxxthegame-android/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

6
xxxthegame-android/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,65 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
android {
namespace = "de.oaa.xxx.app"
compileSdk = 35
defaultConfig {
applicationId = "de.oaa.xxx.app"
minSdk = 26
targetSdk = 35
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
buildConfigField("String", "BASE_URL", "\"http://10.0.2.2:8080\"")
}
release {
isMinifyEnabled = false
buildConfigField("String", "BASE_URL", "\"https://your-server.example.com\"")
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
buildConfig = true
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.datastore.preferences)
implementation(libs.retrofit)
implementation(libs.retrofit.converter.gson)
implementation(libs.okhttp)
implementation(libs.okhttp.logging.interceptor)
implementation(libs.gson)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.coil.compose)
debugImplementation(libs.androidx.ui.tooling)
}

View File

@@ -0,0 +1,6 @@
# Add project specific ProGuard rules here.
-keep class de.oaa.xxx.app.data.model.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn okhttp3.**
-dontwarn retrofit2.**

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".XxxApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/Theme.XxxGame"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.XxxGame">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -0,0 +1,360 @@
package de.oaa.xxx.app
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.*
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import de.oaa.xxx.app.data.model.User
import de.oaa.xxx.app.ui.navigation.Routes
import de.oaa.xxx.app.ui.screens.aufgaben.AufgabenScreen
import de.oaa.xxx.app.ui.screens.auth.LoginScreen
import de.oaa.xxx.app.ui.screens.auth.RegisterScreen
import de.oaa.xxx.app.ui.screens.feed.FeedScreen
import de.oaa.xxx.app.ui.screens.gruppen.GruppenScreen
import de.oaa.xxx.app.ui.screens.home.HomeScreen
import de.oaa.xxx.app.ui.screens.profile.ProfileScreen
import de.oaa.xxx.app.ui.screens.session.SessionInGameScreen
import de.oaa.xxx.app.ui.screens.session.SessionSetupScreen
import de.oaa.xxx.app.ui.screens.social.ConversationScreen
import de.oaa.xxx.app.ui.screens.social.FriendsScreen
import de.oaa.xxx.app.ui.screens.social.MessagesScreen
import de.oaa.xxx.app.ui.theme.XxxGameTheme
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Checkbox
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import de.oaa.xxx.app.data.model.AufgabenGruppenRef
import de.oaa.xxx.app.ui.viewmodel.AufgabenViewModel
import de.oaa.xxx.app.ui.viewmodel.AuthState
import de.oaa.xxx.app.ui.viewmodel.AuthViewModel
import de.oaa.xxx.app.ui.viewmodel.FeedViewModel
import de.oaa.xxx.app.ui.viewmodel.SessionViewModel
import de.oaa.xxx.app.ui.viewmodel.SocialViewModel
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
XxxGameTheme {
XxxApp()
}
}
}
}
@Composable
fun XxxApp() {
val navController = rememberNavController()
val authViewModel: AuthViewModel = viewModel()
val sessionViewModel: SessionViewModel = viewModel()
val aufgabenViewModel: AufgabenViewModel = viewModel()
val socialViewModel: SocialViewModel = viewModel()
val feedViewModel: FeedViewModel = viewModel()
val authState by authViewModel.state.collectAsState()
var currentUser by remember { mutableStateOf<User?>(null) }
var conversationPartnerName by remember { mutableStateOf("") }
LaunchedEffect(authState) {
when (authState) {
is AuthState.LoggedIn -> {
currentUser = (authState as AuthState.LoggedIn).user
navController.navigate(Routes.HOME) {
popUpTo(Routes.LOGIN) { inclusive = true }
}
}
is AuthState.LoggedOut -> {
navController.navigate(Routes.LOGIN) {
popUpTo(0) { inclusive = true }
}
}
else -> {}
}
}
NavHost(navController = navController, startDestination = Routes.LOGIN) {
composable(Routes.LOGIN) {
LoginScreen(
viewModel = authViewModel,
onLoginSuccess = {},
onNavigateToRegister = { navController.navigate(Routes.REGISTER) }
)
}
composable(Routes.REGISTER) {
RegisterScreen(
viewModel = authViewModel,
onNavigateBack = { navController.popBackStack() }
)
}
composable(Routes.HOME) {
currentUser?.let { user ->
HomeScreen(
user = user,
onNavigate = { route -> navController.navigate(route) },
onLogout = { authViewModel.logout() }
)
}
}
composable(Routes.AUFGABEN) {
AufgabenScreen(
viewModel = aufgabenViewModel,
onNavigateBack = { navController.popBackStack() },
onGruppeClick = { gruppenId ->
navController.navigate("aufgaben/$gruppenId")
}
)
}
composable(
"aufgaben/{gruppenId}",
arguments = listOf(navArgument("gruppenId") { type = NavType.StringType })
) { backStack ->
val gruppenId = backStack.arguments?.getString("gruppenId") ?: return@composable
LaunchedEffect(gruppenId) { aufgabenViewModel.loadGruppe(gruppenId) }
// Group detail - reuse AufgabenScreen for now
AufgabenScreen(
viewModel = aufgabenViewModel,
onNavigateBack = { navController.popBackStack() },
onGruppeClick = {}
)
}
composable(Routes.SESSION_SETUP) {
currentUser?.let { user ->
SessionSetupScreen(
viewModel = sessionViewModel,
currentUser = user,
onNavigateBack = { navController.popBackStack() },
onSessionCreated = { sessionId ->
navController.navigate("session/players/$sessionId")
}
)
}
}
composable(
"session/players/{sessionId}",
arguments = listOf(navArgument("sessionId") { type = NavType.StringType })
) { backStack ->
val sessionId = backStack.arguments?.getString("sessionId") ?: return@composable
// Navigate directly to task selection
navController.navigate("session/tasks/$sessionId") {
popUpTo("session/players/$sessionId") { inclusive = true }
}
}
composable(
"session/tasks/{sessionId}",
arguments = listOf(navArgument("sessionId") { type = NavType.StringType })
) { backStack ->
val sessionId = backStack.arguments?.getString("sessionId") ?: return@composable
// Show task group selection for session
SessionTaskSelectionScreen(
sessionId = sessionId,
aufgabenViewModel = aufgabenViewModel,
sessionViewModel = sessionViewModel,
onNavigateBack = { navController.popBackStack() },
onReady = { navController.navigate("session/ingame/$sessionId") }
)
}
composable(
Routes.SESSION_INGAME,
arguments = listOf(navArgument("sessionId") { type = NavType.StringType })
) { backStack ->
val sessionId = backStack.arguments?.getString("sessionId") ?: return@composable
SessionInGameScreen(
viewModel = sessionViewModel,
sessionId = sessionId,
onSessionEnd = {
navController.navigate(Routes.HOME) {
popUpTo(Routes.HOME) { inclusive = true }
}
},
onNavigateBack = { navController.popBackStack() }
)
}
composable(Routes.PROFILE) {
currentUser?.let { user ->
ProfileScreen(
currentUser = user,
onNavigateBack = { navController.popBackStack() },
onUserUpdated = { updatedUser -> currentUser = updatedUser }
)
}
}
composable(Routes.FRIENDS) {
FriendsScreen(
viewModel = socialViewModel,
currentUserId = currentUser?.userId ?: "",
onNavigateBack = { navController.popBackStack() },
onOpenMessages = { partnerId ->
navController.navigate("messages/$partnerId")
}
)
}
composable(Routes.MESSAGES) {
MessagesScreen(
viewModel = socialViewModel,
onNavigateBack = { navController.popBackStack() },
onOpenConversation = { partnerId ->
navController.navigate("messages/$partnerId")
}
)
}
composable(
"messages/{partnerId}",
arguments = listOf(navArgument("partnerId") { type = NavType.StringType })
) { backStack ->
val partnerId = backStack.arguments?.getString("partnerId") ?: return@composable
ConversationScreen(
viewModel = socialViewModel,
partnerId = partnerId,
currentUserId = currentUser?.userId ?: "",
partnerName = conversationPartnerName.ifBlank { "Konversation" },
onNavigateBack = { navController.popBackStack() }
)
}
composable(Routes.GRUPPEN) {
GruppenScreen(
currentUserId = currentUser?.userId ?: "",
onNavigateBack = { navController.popBackStack() }
)
}
composable(Routes.FEED) {
FeedScreen(
viewModel = feedViewModel,
onNavigateBack = { navController.popBackStack() }
)
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SessionTaskSelectionScreen(
sessionId: String,
aufgabenViewModel: AufgabenViewModel,
sessionViewModel: SessionViewModel,
onNavigateBack: () -> Unit,
onReady: () -> Unit
) {
val userGruppen by aufgabenViewModel.userGruppen.collectAsState()
val subscriptions by aufgabenViewModel.subscriptions.collectAsState()
val isLoading by sessionViewModel.isLoading.collectAsState()
val selectedGruppenIds = remember { mutableStateListOf<String>() }
LaunchedEffect(Unit) {
aufgabenViewModel.loadUserGruppen()
aufgabenViewModel.loadSubscriptions()
}
Scaffold(
topBar = {
TopAppBar(
title = { Text("Aufgaben auswählen") },
navigationIcon = {
IconButton(onClick = onNavigateBack) {
Icon(Icons.Default.ArrowBack, contentDescription = "Zurück")
}
}
)
}
) { padding ->
val allGruppen = (userGruppen + subscriptions).distinctBy { it.gruppenId }
LazyColumn(
modifier = Modifier.fillMaxSize().padding(padding).padding(horizontal = 16.dp),
verticalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(8.dp),
contentPadding = androidx.compose.foundation.layout.PaddingValues(vertical = 16.dp)
) {
items(allGruppen) { gruppe ->
val isSelected = gruppe.gruppenId in selectedGruppenIds
Card(
onClick = {
if (isSelected) selectedGruppenIds.remove(gruppe.gruppenId)
else gruppe.gruppenId?.let { selectedGruppenIds.add(it) }
},
modifier = Modifier.fillMaxWidth(),
colors = CardDefaults.cardColors(
containerColor = if (isSelected) MaterialTheme.colorScheme.primary.copy(alpha = 0.2f)
else MaterialTheme.colorScheme.surface
)
) {
Row(
modifier = Modifier.padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = isSelected,
onCheckedChange = {
if (isSelected) selectedGruppenIds.remove(gruppe.gruppenId)
else gruppe.gruppenId?.let { id -> selectedGruppenIds.add(id) }
}
)
Text(gruppe.name ?: "(Unbekannt)", modifier = Modifier.weight(1f))
}
}
}
item {
Spacer(modifier = Modifier.height(8.dp))
Button(
onClick = {
if (selectedGruppenIds.isNotEmpty()) {
val refs = selectedGruppenIds.map { AufgabenGruppenRef(gruppenId = it) }
sessionViewModel.setAufgaben(sessionId, refs) { onReady() }
}
},
modifier = Modifier.fillMaxWidth().height(52.dp),
enabled = selectedGruppenIds.isNotEmpty() && !isLoading
) {
if (isLoading) CircularProgressIndicator(modifier = Modifier.size(24.dp))
else Text("Session starten", fontSize = 16.sp)
}
}
}
}
}

View File

@@ -0,0 +1,9 @@
package de.oaa.xxx.app
import android.app.Application
class XxxApplication : Application() {
override fun onCreate() {
super.onCreate()
}
}

View File

@@ -0,0 +1,69 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.BuildConfig
import okhttp3.Cookie
import okhttp3.CookieJar
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
object ApiClient {
private val cookieStore = mutableMapOf<String, MutableList<Cookie>>()
val cookieJar = object : CookieJar {
override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
cookieStore.getOrPut(url.host) { mutableListOf() }.apply {
removeAll { existing -> cookies.any { it.name == existing.name } }
addAll(cookies)
}
}
override fun loadForRequest(url: HttpUrl): List<Cookie> =
cookieStore[url.host] ?: emptyList()
}
fun getJwtToken(): String? =
cookieStore.values.flatten().find { it.name == "jwt" }?.value
fun setJwtToken(token: String) {
val host = HttpUrl.parse(BuildConfig.BASE_URL)?.host ?: return
val cookie = Cookie.Builder()
.name("jwt")
.value(token)
.domain(host)
.path("/")
.httpOnly()
.build()
cookieStore.getOrPut(host) { mutableListOf() }.apply {
removeAll { it.name == "jwt" }
add(cookie)
}
}
fun clearCookies() = cookieStore.clear()
private val okHttpClient = OkHttpClient.Builder()
.cookieJar(cookieJar)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.build()
private val retrofit = Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL + "/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
val authApi: AuthApi = retrofit.create(AuthApi::class.java)
val aufgabenApi: AufgabenApi = retrofit.create(AufgabenApi::class.java)
val sessionApi: SessionApi = retrofit.create(SessionApi::class.java)
val socialApi: SocialApi = retrofit.create(SocialApi::class.java)
val gruppenApi: GruppenApi = retrofit.create(GruppenApi::class.java)
val feedApi: FeedApi = retrofit.create(FeedApi::class.java)
}

View File

@@ -0,0 +1,162 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.Aufgabe
import de.oaa.xxx.app.data.model.AufgabenGruppe
import de.oaa.xxx.app.data.model.AufgabenGruppeDisplay
import de.oaa.xxx.app.data.model.Favorit
import de.oaa.xxx.app.data.model.Finisher
import de.oaa.xxx.app.data.model.Sperre
import de.oaa.xxx.app.data.model.Strafe
import de.oaa.xxx.app.data.model.Toy
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Query
interface AufgabenApi {
// --- Aufgabengruppen ---
@GET("gruppe/list/user")
suspend fun getUserGruppen(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<AufgabenGruppeDisplay>>
@GET("gruppe/list/system")
suspend fun getSystemGruppen(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<AufgabenGruppeDisplay>>
@GET("gruppe/all")
suspend fun getAllGruppen(
@Query("name") name: String? = null,
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<AufgabenGruppeDisplay>>
@GET("gruppe/{gruppeId}")
suspend fun getGruppe(@Path("gruppeId") gruppeId: String): Response<AufgabenGruppe>
@POST("gruppe")
suspend fun createGruppe(@Body gruppe: AufgabenGruppe): Response<AufgabenGruppe>
@PUT("gruppe/{gruppeId}")
suspend fun updateGruppe(
@Path("gruppeId") gruppeId: String,
@Body gruppe: AufgabenGruppe
): Response<AufgabenGruppe>
@DELETE("gruppe/{gruppeId}")
suspend fun deleteGruppe(@Path("gruppeId") gruppeId: String): Response<Unit>
@POST("gruppe/copy/{gruppeId}")
suspend fun copyGruppe(@Path("gruppeId") gruppeId: String): Response<AufgabenGruppe>
// --- Aufgaben ---
@GET("aufgabe/{aufgabeId}")
suspend fun getAufgabe(@Path("aufgabeId") aufgabeId: String): Response<Aufgabe>
@POST("aufgabe")
suspend fun createAufgabe(@Body aufgabe: Aufgabe): Response<Aufgabe>
@PUT("aufgabe/{aufgabeId}")
suspend fun updateAufgabe(
@Path("aufgabeId") aufgabeId: String,
@Body aufgabe: Aufgabe
): Response<Aufgabe>
@DELETE("aufgabe")
suspend fun deleteAufgabe(@Body aufgabe: Aufgabe): Response<Unit>
// --- Toys ---
@GET("toy/list/user")
suspend fun getUserToys(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<Toy>>
@GET("toy/list/system")
suspend fun getSystemToys(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<Toy>>
@GET("toy/available")
suspend fun getAvailableToys(): Response<List<Toy>>
@POST("toy")
suspend fun createToy(@Body toy: Toy): Response<Toy>
@PUT("toy/{toyId}")
suspend fun updateToy(@Path("toyId") toyId: String, @Body toy: Toy): Response<Toy>
@DELETE("toy/{toyId}")
suspend fun deleteToy(@Path("toyId") toyId: String): Response<Unit>
@POST("toy/copy/{toyId}")
suspend fun copyToy(@Path("toyId") toyId: String): Response<Toy>
// --- Favoriten ---
@GET("favorit")
suspend fun getFavoriten(): Response<List<Favorit>>
@POST("favorit")
suspend fun addFavorit(@Body favorit: Favorit): Response<Favorit>
@DELETE("favorit")
suspend fun removeFavorit(@Body favorit: Favorit): Response<Unit>
// --- Abonnements ---
@GET("abo/list")
suspend fun getAbonnements(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<AufgabenGruppeDisplay>>
@GET("abo/discover")
suspend fun discoverGruppen(@Query("name") name: String? = null): Response<List<AufgabenGruppeDisplay>>
@POST("abo/{gruppenId}")
suspend fun subscribe(@Path("gruppenId") gruppenId: String): Response<Unit>
@DELETE("abo/{gruppenId}")
suspend fun unsubscribe(@Path("gruppenId") gruppenId: String): Response<Unit>
// --- Sperren ---
@POST("sperre")
suspend fun createSperre(@Body sperre: Sperre): Response<Sperre>
@PUT("sperre/{sperreId}")
suspend fun updateSperre(@Path("sperreId") sperreId: String, @Body sperre: Sperre): Response<Sperre>
@DELETE("sperre")
suspend fun deleteSperre(@Body sperre: Sperre): Response<Unit>
// --- Strafen ---
@POST("strafe")
suspend fun createStrafe(@Body strafe: Strafe): Response<Strafe>
@PUT("strafe/{strafeId}")
suspend fun updateStrafe(@Path("strafeId") strafeId: String, @Body strafe: Strafe): Response<Strafe>
@DELETE("strafe")
suspend fun deleteStrafe(@Body strafe: Strafe): Response<Unit>
// --- Finisher ---
@POST("finisher")
suspend fun createFinisher(@Body finisher: Finisher): Response<Finisher>
@PUT("finisher/{finisherId}")
suspend fun updateFinisher(
@Path("finisherId") finisherId: String,
@Body finisher: Finisher
): Response<Finisher>
@DELETE("finisher")
suspend fun deleteFinisher(@Body finisher: Finisher): Response<Unit>
}

View File

@@ -0,0 +1,30 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.RegistrationRequest
import de.oaa.xxx.app.data.model.User
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
interface AuthApi {
@GET("login")
suspend fun login(
@Query("email") email: String,
@Query("hash") hash: String
): Response<User>
@GET("login/me")
suspend fun me(): Response<User>
@GET("login/logout")
suspend fun logout(): Response<Unit>
@POST("registration")
suspend fun register(@Body request: RegistrationRequest): Response<Unit>
@POST("user")
suspend fun createUser(@Body user: User): Response<User>
}

View File

@@ -0,0 +1,45 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.FeedItemDto
import de.oaa.xxx.app.data.model.FeedPostRequest
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
interface FeedApi {
@POST("feed/posts")
suspend fun createPost(@Body request: FeedPostRequest): Response<FeedItemDto>
@GET("feed/mine")
suspend fun getMyFeed(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<FeedItemDto>>
@GET("feed/public")
suspend fun getPublicFeed(
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<FeedItemDto>>
@GET("feed/user/{userId}")
suspend fun getUserFeed(
@Path("userId") userId: String,
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<FeedItemDto>>
@POST("feed/posts/{id}/like")
suspend fun toggleLike(@Path("id") id: String): Response<Unit>
@POST("feed/posts/{id}/vote")
suspend fun vote(@Path("id") id: String, @Body body: Map<String, String>): Response<Unit>
@DELETE("feed/posts/{id}")
suspend fun deletePost(@Path("id") id: String): Response<Unit>
}

View File

@@ -0,0 +1,95 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.BeitrittsanfrageDto
import de.oaa.xxx.app.data.model.CountResponse
import de.oaa.xxx.app.data.model.GruppeDto
import de.oaa.xxx.app.data.model.GruppenbeitragDto
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Query
interface GruppenApi {
@GET("gruppen/search")
suspend fun search(@Query("q") query: String): Response<List<GruppeDto>>
@GET("gruppen/mine")
suspend fun getMine(): Response<List<GruppeDto>>
@GET("gruppen/{id}")
suspend fun getGruppe(@Path("id") id: String): Response<GruppeDto>
@POST("gruppen")
suspend fun createGruppe(@Body gruppe: GruppeDto): Response<GruppeDto>
@PUT("gruppen/{id}")
suspend fun updateGruppe(@Path("id") id: String, @Body gruppe: GruppeDto): Response<GruppeDto>
@DELETE("gruppen/{id}")
suspend fun deleteGruppe(@Path("id") id: String): Response<Unit>
@POST("gruppen/{id}/join")
suspend fun join(@Path("id") id: String): Response<Unit>
@DELETE("gruppen/{id}/leave")
suspend fun leave(@Path("id") id: String): Response<Unit>
@GET("gruppen/{id}/members")
suspend fun getMembers(@Path("id") id: String): Response<List<Map<String, Any>>>
@DELETE("gruppen/{id}/members/{userId}")
suspend fun removeMember(@Path("id") id: String, @Path("userId") userId: String): Response<Unit>
@POST("gruppen/{id}/members/{userId}/promote")
suspend fun promoteMember(@Path("id") id: String, @Path("userId") userId: String): Response<Unit>
@GET("gruppen/{id}/requests")
suspend fun getRequests(@Path("id") id: String): Response<List<BeitrittsanfrageDto>>
@POST("gruppen/{id}/requests/{reqId}/approve")
suspend fun approveRequest(@Path("id") id: String, @Path("reqId") reqId: String): Response<Unit>
@DELETE("gruppen/{id}/requests/{reqId}")
suspend fun rejectRequest(@Path("id") id: String, @Path("reqId") reqId: String): Response<Unit>
@GET("gruppen/requests/pending/count")
suspend fun getPendingRequestsCount(): Response<CountResponse>
@GET("gruppen/requests/mine")
suspend fun getMyRequests(): Response<List<BeitrittsanfrageDto>>
// --- Beitraege ---
@GET("gruppen/{id}/beitraege")
suspend fun getBeitraege(
@Path("id") id: String,
@Query("page") page: Int = 0,
@Query("size") size: Int = 20
): Response<List<GruppenbeitragDto>>
@POST("gruppen/{id}/beitraege")
suspend fun createBeitrag(
@Path("id") id: String,
@Body beitrag: GruppenbeitragDto
): Response<GruppenbeitragDto>
@POST("gruppen/{id}/beitraege/{beitragId}/like")
suspend fun toggleLike(@Path("id") id: String, @Path("beitragId") beitragId: String): Response<Unit>
@POST("gruppen/{id}/beitraege/{beitragId}/vote")
suspend fun vote(
@Path("id") id: String,
@Path("beitragId") beitragId: String,
@Body body: Map<String, String>
): Response<Unit>
@DELETE("gruppen/{id}/beitraege/{beitragId}")
suspend fun deleteBeitrag(
@Path("id") id: String,
@Path("beitragId") beitragId: String
): Response<Unit>
}

View File

@@ -0,0 +1,49 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.AufgabeAnzeige
import de.oaa.xxx.app.data.model.AufgabenList
import de.oaa.xxx.app.data.model.Mitspieler
import de.oaa.xxx.app.data.model.Session
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
interface SessionApi {
@GET("session/{sessionId}")
suspend fun getBySessionId(@Path("sessionId") sessionId: String): Response<Session>
@GET("session")
suspend fun getByUserId(@Query("userId") userId: String): Response<Session>
@POST("session")
suspend fun createSession(@Body session: Session): Response<Unit>
@DELETE("session")
suspend fun deleteSession(@Body session: Session): Response<Unit>
@POST("session/{sessionId}/aufgaben")
suspend fun setAufgaben(
@Path("sessionId") sessionId: String,
@Body list: AufgabenList
): Response<Unit>
@GET("session/{sessionId}/aufgaben/next")
suspend fun getNextAufgabe(@Path("sessionId") sessionId: String): Response<AufgabeAnzeige>
@POST("session/{sessionId}/mitspieler")
suspend fun addMitspieler(
@Path("sessionId") sessionId: String,
@Body mitspieler: Mitspieler
): Response<Unit>
@GET("session/{sessionId}/finisher")
suspend fun getFinisher(@Path("sessionId") sessionId: String): Response<List<AufgabeAnzeige>>
@POST("session/{sessionId}/backToLevel5")
suspend fun backToLevel5(@Path("sessionId") sessionId: String): Response<Unit>
}

View File

@@ -0,0 +1,71 @@
package de.oaa.xxx.app.data.api
import de.oaa.xxx.app.data.model.ConversationSummary
import de.oaa.xxx.app.data.model.CountResponse
import de.oaa.xxx.app.data.model.FriendshipDto
import de.oaa.xxx.app.data.model.MessageDto
import de.oaa.xxx.app.data.model.PinnwandEintragDto
import de.oaa.xxx.app.data.model.User
import de.oaa.xxx.app.data.model.UserProfile
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
interface SocialApi {
// --- User profiles ---
@GET("social/users/{userId}")
suspend fun getUserProfile(@Path("userId") userId: String): Response<UserProfile>
@GET("social/users/search")
suspend fun searchUsers(@Query("q") query: String): Response<List<User>>
// --- Friends ---
@POST("social/friends/request")
suspend fun sendFriendRequest(@Body body: Map<String, String>): Response<Unit>
@POST("social/friends/accept")
suspend fun acceptFriendRequest(@Body body: Map<String, String>): Response<Unit>
@DELETE("social/friends/reject")
suspend fun rejectFriend(@Body body: Map<String, String>): Response<Unit>
@GET("social/friends")
suspend fun getFriends(): Response<List<FriendshipDto>>
@GET("social/friends/pending")
suspend fun getPendingRequests(): Response<List<FriendshipDto>>
@GET("social/friends/pending/count")
suspend fun getPendingCount(): Response<CountResponse>
// --- Messages ---
@POST("social/messages")
suspend fun sendMessage(@Body body: Map<String, String>): Response<Unit>
@GET("social/messages")
suspend fun getConversations(): Response<List<ConversationSummary>>
@GET("social/messages/unread/count")
suspend fun getUnreadCount(): Response<CountResponse>
@GET("social/messages/{partnerId}")
suspend fun getConversation(@Path("partnerId") partnerId: String): Response<List<MessageDto>>
// --- Pinnwand ---
@GET("social/pinnwand/{userId}")
suspend fun getPinnwand(@Path("userId") userId: String): Response<List<PinnwandEintragDto>>
@POST("social/pinnwand/{userId}")
suspend fun createPinnwandEintrag(
@Path("userId") userId: String,
@Body body: Map<String, String>
): Response<Unit>
@DELETE("social/pinnwand/{eintragId}")
suspend fun deletePinnwandEintrag(@Path("eintragId") eintragId: String): Response<Unit>
}

View File

@@ -0,0 +1,40 @@
package de.oaa.xxx.app.data.local
import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "xxx_session")
class TokenStore(private val context: Context) {
companion object {
private val JWT_KEY = stringPreferencesKey("jwt_token")
private val USER_ID_KEY = stringPreferencesKey("user_id")
private val USER_NAME_KEY = stringPreferencesKey("user_name")
}
val jwtToken: Flow<String?> = context.dataStore.data.map { it[JWT_KEY] }
val userId: Flow<String?> = context.dataStore.data.map { it[USER_ID_KEY] }
val userName: Flow<String?> = context.dataStore.data.map { it[USER_NAME_KEY] }
suspend fun saveToken(token: String) {
context.dataStore.edit { it[JWT_KEY] = token }
}
suspend fun saveUser(userId: String, name: String) {
context.dataStore.edit {
it[USER_ID_KEY] = userId
it[USER_NAME_KEY] = name
}
}
suspend fun clear() {
context.dataStore.edit { it.clear() }
}
}

View File

@@ -0,0 +1,269 @@
package de.oaa.xxx.app.data.model
import com.google.gson.JsonObject
// ---- User ----
data class User(
val userId: String? = null,
val name: String? = null,
val email: String? = null,
val profilePicture: String? = null,
val alter: Int? = null,
val groesse: Int? = null,
val gewicht: Int? = null,
val geschlecht: String? = null,
val neigung: String? = null,
val beziehungsstatus: String? = null,
val beschreibung: String? = null
)
data class UserProfile(
val user: User? = null,
val friendshipStatus: String? = null
)
// ---- Aufgaben ----
data class AufgabenGruppe(
val gruppenId: String? = null,
val name: String? = null,
val beschreibung: String? = null,
val userId: String? = null,
val privateGruppe: Boolean = false,
val bild: String? = null,
val von: String? = null,
val aufgaben: List<Aufgabe> = emptyList(),
val strafen: List<Strafe> = emptyList(),
val sperren: List<Sperre> = emptyList(),
val finisher: List<Finisher> = emptyList()
)
data class AufgabenGruppeDisplay(
val gruppenId: String? = null,
val name: String? = null,
val beschreibung: String? = null,
val userId: String? = null,
val privateGruppe: Boolean = false,
val bild: String? = null,
val von: String? = null
)
data class Aufgabe(
val aufgabeId: String? = null,
val kurzText: String? = null,
val text: String? = null,
val level: Int? = null,
val sekundenVon: Int? = null,
val sekundenBis: Int? = null,
val benoetigtAktiv: List<String>? = null,
val benoetigtPassiv: List<String>? = null,
val benoetigteToys: List<String>? = null
)
data class Strafe(
val strafeId: String? = null,
val kurzText: String? = null,
val text: String? = null,
val level: Int? = null,
val sekundenVon: Int? = null,
val sekundenBis: Int? = null
)
data class Sperre(
val sperreId: String? = null,
val kurzText: String? = null,
val text: String? = null,
val releaseText: String? = null,
val minutenVon: Int? = null,
val minutenBis: Int? = null,
val sperreFuer: String? = null
)
data class Finisher(
val finisherId: String? = null,
val kurzText: String? = null,
val text: String? = null,
val geschlecht: String? = null,
val benoetigtAktiv: List<String>? = null,
val benoetigtPassiv: List<String>? = null
)
data class Toy(
val toyId: String? = null,
val name: String? = null,
val beschreibung: String? = null,
val bild: String? = null,
val userId: String? = null
)
data class Favorit(
val favoritId: String? = null,
val gruppenId: String? = null,
val userId: String? = null
)
data class GruppenAbo(
val aboId: String? = null,
val gruppenId: String? = null,
val userId: String? = null
)
// ---- Session ----
data class Session(
val sessionId: String? = null,
val userId: String? = null,
val wahrscheinlichkeitSperre: Int? = null,
val wahrscheinlichkeitStrafe: Int? = null,
val aufgabenProLevel: Int? = null,
val zeitfaktorZeitstrafen: Double? = null,
val level: Int? = null,
val aufgabenAufAktuellemLevel: Int? = null,
val startZeit: String? = null,
val letzteAktivitaet: String? = null
)
data class Mitspieler(
val mitspielerId: String? = null,
val name: String? = null,
val geschlecht: String? = null,
val rollen: List<String>? = null,
val spieltMit: List<String>? = null,
val verfuegbareWerkzeuge: List<String>? = null
)
data class AufgabeAnzeige(
val nameAktiverMitspieler: String? = null,
val aufgabeText: String? = null,
val timer: Int? = null,
val callback: JsonObject? = null,
val level: Int? = null
)
data class AufgabenList(
val aufgaben: List<AufgabenGruppenRef> = emptyList()
)
data class AufgabenGruppenRef(
val gruppenId: String,
val aktiv: Boolean = true,
val passiv: Boolean = true
)
// ---- Social ----
data class FriendshipDto(
val friendshipId: String? = null,
val senderId: String? = null,
val receiverId: String? = null,
val senderName: String? = null,
val receiverName: String? = null,
val status: String? = null,
val createdAt: String? = null
)
data class MessageDto(
val messageId: String? = null,
val senderId: String? = null,
val receiverId: String? = null,
val text: String? = null,
val sentAt: String? = null,
val readAt: String? = null
)
data class ConversationSummary(
val partnerId: String? = null,
val partnerName: String? = null,
val lastMessage: String? = null,
val lastMessageAt: String? = null,
val unreadCount: Int? = null
)
data class PinnwandEintragDto(
val eintragId: String? = null,
val profilUserId: String? = null,
val authorId: String? = null,
val authorName: String? = null,
val text: String? = null,
val createdAt: String? = null
)
// ---- Community Gruppen ----
data class GruppeDto(
val gruppeId: String? = null,
val name: String? = null,
val beschreibung: String? = null,
val bild: String? = null,
val isPrivate: Boolean = false,
val createdAt: String? = null,
val createdByUserId: String? = null,
val memberCount: Int? = null,
val userRole: String? = null
)
data class GruppenbeitragDto(
val beitragId: String? = null,
val gruppeId: String? = null,
val authorId: String? = null,
val authorName: String? = null,
val text: String? = null,
val beitragTyp: String? = null,
val createdAt: String? = null,
val likeCount: Int? = null,
val userHasLiked: Boolean = false,
val umfrageOptionen: List<UmfrageOptionDto>? = null
)
data class UmfrageOptionDto(
val optionId: String? = null,
val text: String? = null,
val stimmenAnzahl: Int? = null,
val userHasVoted: Boolean = false
)
data class BeitrittsanfrageDto(
val anfrageId: String? = null,
val gruppeId: String? = null,
val userId: String? = null,
val userName: String? = null,
val nachricht: String? = null,
val angefragtAt: String? = null,
val status: String? = null
)
// ---- Feed ----
data class FeedItemDto(
val postId: String? = null,
val authorId: String? = null,
val authorName: String? = null,
val text: String? = null,
val beitragTyp: String? = null,
val isPublic: Boolean = false,
val createdAt: String? = null,
val likeCount: Int? = null,
val userHasLiked: Boolean = false,
val umfrageOptionen: List<UmfrageOptionDto>? = null
)
data class FeedPostRequest(
val text: String,
val beitragTyp: String = "TEXT",
val isPublic: Boolean = false,
val umfrageOptionen: List<String>? = null,
val multiChoice: Boolean = false
)
// ---- Registration ----
data class RegistrationRequest(
val name: String,
val email: String,
val password: String
)
// ---- Count responses ----
data class CountResponse(val count: Int)
// ---- Page responses ----
data class PageResponse<T>(
val content: List<T> = emptyList(),
val totalElements: Long = 0,
val totalPages: Int = 0,
val number: Int = 0
)

View File

@@ -0,0 +1,22 @@
package de.oaa.xxx.app.ui.navigation
object Routes {
const val LOGIN = "login"
const val REGISTER = "register"
const val HOME = "home"
const val AUFGABEN = "aufgaben"
const val AUFGABEN_DETAIL = "aufgaben/{gruppenId}"
const val TOYS = "toys"
const val SESSION_SETUP = "session/setup"
const val SESSION_PLAYERS = "session/players/{sessionId}"
const val SESSION_TASKS = "session/tasks/{sessionId}"
const val SESSION_INGAME = "session/ingame/{sessionId}"
const val PROFILE = "profile"
const val FRIENDS = "friends"
const val MESSAGES = "messages"
const val CONVERSATION = "messages/{partnerId}"
const val USER_PROFILE = "user/{userId}"
const val GRUPPEN = "gruppen"
const val GRUPPE_DETAIL = "gruppen/{gruppeId}"
const val FEED = "feed"
}

View File

@@ -0,0 +1,133 @@
package de.oaa.xxx.app.ui.screens.aufgaben
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import de.oaa.xxx.app.data.model.AufgabenGruppeDisplay
import de.oaa.xxx.app.ui.viewmodel.AufgabenViewModel
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AufgabenScreen(
viewModel: AufgabenViewModel,
onNavigateBack: () -> Unit,
onGruppeClick: (String) -> Unit
) {
val userGruppen by viewModel.userGruppen.collectAsState()
val systemGruppen by viewModel.systemGruppen.collectAsState()
val subscriptions by viewModel.subscriptions.collectAsState()
val isLoading by viewModel.isLoading.collectAsState()
var selectedTab by remember { mutableIntStateOf(0) }
val tabs = listOf("Eigene", "System", "Abonniert")
LaunchedEffect(Unit) {
viewModel.loadUserGruppen()
viewModel.loadSystemGruppen()
viewModel.loadSubscriptions()
}
Scaffold(
topBar = {
TopAppBar(
title = { Text("Aufgabengruppen") },
navigationIcon = {
IconButton(onClick = onNavigateBack) {
Icon(Icons.Default.ArrowBack, contentDescription = "Zurück")
}
}
)
}
) { padding ->
Column(modifier = Modifier.fillMaxSize().padding(padding)) {
TabRow(selectedTabIndex = selectedTab) {
tabs.forEachIndexed { index, title ->
Tab(
selected = selectedTab == index,
onClick = { selectedTab = index },
text = { Text(title) }
)
}
}
if (isLoading) {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
CircularProgressIndicator()
}
} else {
val currentList = when (selectedTab) {
0 -> userGruppen
1 -> systemGruppen
else -> subscriptions
}
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(currentList) { gruppe ->
GruppeCard(
gruppe = gruppe,
showCopy = selectedTab == 1,
onClick = { gruppe.gruppenId?.let(onGruppeClick) },
onCopy = { gruppe.gruppenId?.let { viewModel.copyGruppe(it) {} } }
)
}
}
}
}
}
}
@Composable
fun GruppeCard(
gruppe: AufgabenGruppeDisplay,
showCopy: Boolean,
onClick: () -> Unit,
onCopy: () -> Unit
) {
Card(
onClick = onClick,
modifier = Modifier.fillMaxWidth(),
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface)
) {
Row(
modifier = Modifier.padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Column(modifier = Modifier.weight(1f)) {
Text(
text = gruppe.name ?: "(Unbekannt)",
fontWeight = FontWeight.Bold,
fontSize = 16.sp
)
gruppe.beschreibung?.takeIf { it.isNotBlank() }?.let {
Text(
text = it,
fontSize = 13.sp,
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f),
maxLines = 2
)
}
gruppe.von?.takeIf { it.isNotBlank() }?.let {
Text(text = "von: $it", fontSize = 12.sp, color = MaterialTheme.colorScheme.primary)
}
}
if (showCopy) {
IconButton(onClick = onCopy) {
Icon(Icons.Default.ContentCopy, contentDescription = "Kopieren", tint = MaterialTheme.colorScheme.primary)
}
}
}
}
}

View File

@@ -0,0 +1,107 @@
package de.oaa.xxx.app.ui.screens.auth
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import de.oaa.xxx.app.ui.viewmodel.AuthState
import de.oaa.xxx.app.ui.viewmodel.AuthViewModel
@Composable
fun LoginScreen(
viewModel: AuthViewModel,
onLoginSuccess: () -> Unit,
onNavigateToRegister: () -> Unit
) {
val state by viewModel.state.collectAsState()
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
LaunchedEffect(state) {
if (state is AuthState.LoggedIn) onLoginSuccess()
}
Column(
modifier = Modifier
.fillMaxSize()
.padding(32.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "XXX The Game",
fontSize = 32.sp,
fontWeight = FontWeight.Bold,
color = MaterialTheme.colorScheme.primary
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Anmelden",
fontSize = 18.sp,
color = MaterialTheme.colorScheme.onBackground
)
Spacer(modifier = Modifier.height(32.dp))
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("E-Mail") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
modifier = Modifier.fillMaxWidth(),
singleLine = true
)
Spacer(modifier = Modifier.height(16.dp))
OutlinedTextField(
value = password,
onValueChange = { password = it },
label = { Text("Passwort") },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
modifier = Modifier.fillMaxWidth(),
singleLine = true
)
Spacer(modifier = Modifier.height(24.dp))
if (state is AuthState.Error) {
Text(
text = (state as AuthState.Error).message,
color = MaterialTheme.colorScheme.error,
modifier = Modifier.padding(bottom = 16.dp)
)
}
Button(
onClick = { viewModel.login(email, password) },
modifier = Modifier.fillMaxWidth().height(50.dp),
enabled = state !is AuthState.Loading && email.isNotBlank() && password.isNotBlank()
) {
if (state is AuthState.Loading) {
CircularProgressIndicator(
modifier = Modifier.size(24.dp),
color = MaterialTheme.colorScheme.onPrimary
)
} else {
Text("Anmelden", fontSize = 16.sp)
}
}
Spacer(modifier = Modifier.height(16.dp))
TextButton(onClick = onNavigateToRegister) {
Text("Noch kein Konto? Registrieren")
}
}
}

View File

@@ -0,0 +1,137 @@
package de.oaa.xxx.app.ui.screens.auth
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import de.oaa.xxx.app.ui.viewmodel.AuthState
import de.oaa.xxx.app.ui.viewmodel.AuthViewModel
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RegisterScreen(
viewModel: AuthViewModel,
onNavigateBack: () -> Unit
) {
val state by viewModel.state.collectAsState()
var name by remember { mutableStateOf("") }
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var passwordRepeat by remember { mutableStateOf("") }
var message by remember { mutableStateOf<String?>(null) }
LaunchedEffect(state) {
if (state is AuthState.Error) {
message = (state as AuthState.Error).message
viewModel.clearError()
}
}
Scaffold(
topBar = {
TopAppBar(
title = { Text("Registrieren") },
navigationIcon = {
IconButton(onClick = onNavigateBack) {
Icon(Icons.Default.ArrowBack, contentDescription = "Zurück")
}
}
)
}
) { padding ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(padding)
.padding(32.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Konto erstellen",
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
color = MaterialTheme.colorScheme.primary
)
Spacer(modifier = Modifier.height(24.dp))
OutlinedTextField(
value = name,
onValueChange = { name = it },
label = { Text("Benutzername") },
modifier = Modifier.fillMaxWidth(),
singleLine = true
)
Spacer(modifier = Modifier.height(12.dp))
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("E-Mail") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
modifier = Modifier.fillMaxWidth(),
singleLine = true
)
Spacer(modifier = Modifier.height(12.dp))
OutlinedTextField(
value = password,
onValueChange = { password = it },
label = { Text("Passwort") },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
modifier = Modifier.fillMaxWidth(),
singleLine = true
)
Spacer(modifier = Modifier.height(12.dp))
OutlinedTextField(
value = passwordRepeat,
onValueChange = { passwordRepeat = it },
label = { Text("Passwort wiederholen") },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
modifier = Modifier.fillMaxWidth(),
singleLine = true,
isError = password.isNotBlank() && passwordRepeat.isNotBlank() && password != passwordRepeat
)
Spacer(modifier = Modifier.height(24.dp))
message?.let {
Text(
text = it,
color = if (it.contains("erfolgreich")) MaterialTheme.colorScheme.primary
else MaterialTheme.colorScheme.error,
modifier = Modifier.padding(bottom = 16.dp)
)
}
Button(
onClick = {
if (password == passwordRepeat) {
viewModel.register(name, email, password)
} else {
message = "Passwörter stimmen nicht überein"
}
},
modifier = Modifier.fillMaxWidth().height(50.dp),
enabled = state !is AuthState.Loading
&& name.isNotBlank() && email.isNotBlank()
&& password.isNotBlank() && passwordRepeat.isNotBlank()
) {
if (state is AuthState.Loading) {
CircularProgressIndicator(modifier = Modifier.size(24.dp))
} else {
Text("Registrieren", fontSize = 16.sp)
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More