This commit is contained in:
Neerholt 2020-08-04 13:21:39 +02:00
commit 210aa00fc6
85 changed files with 1502 additions and 87 deletions

View File

@ -0,0 +1,116 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<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>
</code_scheme>
</component>

View File

@ -0,0 +1,2 @@
#Mon Aug 03 21:42:23 CEST 2020
gradle.version=6.1.1

Binary file not shown.

1
mobileapp/android/app/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,33 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.1"
defaultConfig {
applicationId "sde.odense.skolehjem"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

Binary file not shown.

View File

@ -0,0 +1,20 @@
{
"version": 1,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "sde.odense.skolehjem",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"properties": [],
"versionCode": 1,
"versionName": "1.0",
"enabled": true,
"outputFile": "app-release.apk"
}
]
}

View File

@ -0,0 +1,26 @@
package sde.odense.skolehjem;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("sde.odense.skolehjem", appContext.getPackageName());
}
}

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="sde.odense.skolehjem">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,105 @@
package sde.odense.skolehjem;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private static final String TEL_PREFIX = "tel:";
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
webView.setWebViewClient(new CustomWebViewClient());
webView.setWebChromeClient(new CustomWebChromeClient(this));
//Settings
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(false);
webSettings.setSupportZoom(true);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.loadUrl("https://ekapp.sde.dk");
}
@Override
public void onBackPressed() {
if(webView.canGoBack())
webView.goBack();
else
super.onBackPressed();
}
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {
if(url.startsWith(TEL_PREFIX)) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
}
static final class CustomWebChromeClient extends WebChromeClient {
Context myApp;
CustomWebChromeClient(Context mContext){
myApp = mContext;
}
@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
new AlertDialog.Builder(myApp)
.setTitle("Confirm")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.confirm();
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.cancel();
}
})
.create()
.show();
return true;
}
}
}

View File

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

View File

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@ -0,0 +1,116 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="0.118125"
android:scaleY="0.118125"
android:translateX="16.2"
android:translateY="16.2">
<path
android:pathData="M266.72,445.44C262.95,442.69 261.18,437.98 257.28,435.46C254.97,426.61 246.02,417.02 245.42,409.16C238.03,403.12 237.6,396.21 236.3,390.4C234.93,388.75 232.04,387.01 234.55,385.69C239.07,389.3 239.73,396.05 247.18,398.37C249.71,395.66 245.98,392.38 246.64,389.52C236.55,366.07 228.3,342.61 223.92,319.64C226.47,318.23 228.86,318.8 231.31,318.17C233.3,319.15 230.29,319.7 231.97,320.66C233.68,319.44 235.06,321.27 236.71,320.66C239.99,315.52 231.47,310.71 236.28,305.41C233.16,298.34 231.29,290.79 230.74,283.07C230.13,276.32 232.27,178.61 204.96,149.94C190.92,135.16 178.65,135.78 169.98,138.08C162.58,140.13 157.91,145.48 156.97,149.38C176.01,170.93 174.03,194.6 175.65,216.47C177.14,237.62 177.33,258.83 180.17,278.61C186.63,323.04 200.78,365.99 221.99,405.55C223.77,405.55 222.91,402.83 221.08,401.53C216.09,387.26 204.34,372.44 205.88,358.89C210.02,362.15 211.27,366.79 212.99,370.78C218.2,382.72 224.25,395.49 230.82,407.96C232.95,408.43 231.44,404.4 229.82,404.53C229.56,403.27 230.61,402.17 230.13,400.91C220.82,383.68 210.7,365.03 207.71,347.61C207.47,347.39 205.54,345.69 205.31,345.47C201.74,331.72 198.14,318.14 195.54,304.65C195.07,303.63 194.2,302.85 193.13,302.52C194.73,294.86 190.99,286.72 191.27,278.92C193.61,283.24 195.23,287.9 196.09,292.73C197.59,299.13 198.23,305.29 200.03,311.64C201.85,317.99 204.11,324.3 205.73,330.7C206.75,334.97 206.39,339.23 207.62,343.34C211.53,356.39 219.29,368.69 223.19,381.84C223.72,382.59 223.62,383.61 222.98,384.26C227.11,388.97 250.37,432.86 249.54,434.69C247.4,436.4 248.43,432.09 246.17,433.78C258.97,453.63 292.15,499.87 333.75,534.17C344.86,543.85 367.37,557.37 386.28,566.15C378.31,561.5 367.22,553.59 357.05,546.3C345.88,538.08 335.21,529.2 325.07,519.72C302.19,498.8 281.88,475.23 264.59,449.51C264.83,448.11 266.25,446.81 266.72,445.44Z"
android:fillColor="#00788a"/>
<path
android:fillColor="#FF000000"
android:pathData="M266.72,445.44C262.95,442.69 261.18,437.98 257.28,435.46C254.97,426.61 246.02,417.02 245.42,409.16C238.03,403.12 237.6,396.21 236.3,390.4C234.93,388.75 232.04,387.01 234.55,385.69C239.07,389.3 239.73,396.05 247.18,398.37C249.71,395.66 245.98,392.38 246.64,389.52C236.55,366.07 228.3,342.61 223.92,319.64C226.47,318.23 228.86,318.8 231.31,318.17C233.3,319.15 230.29,319.7 231.97,320.66C233.68,319.44 235.06,321.27 236.71,320.66C239.99,315.52 231.47,310.71 236.28,305.41C233.16,298.34 231.29,290.79 230.74,283.07C230.13,276.32 232.27,178.61 204.96,149.94C190.92,135.16 178.65,135.78 169.98,138.08C162.58,140.13 157.91,145.48 156.97,149.38C176.01,170.93 174.03,194.6 175.65,216.47C177.14,237.62 177.33,258.83 180.17,278.61C186.63,323.04 200.78,365.99 221.99,405.55C223.77,405.55 222.91,402.83 221.08,401.53C216.09,387.26 204.34,372.44 205.88,358.89C210.02,362.15 211.27,366.79 212.99,370.78C218.2,382.72 224.25,395.49 230.82,407.96C232.95,408.43 231.44,404.4 229.82,404.53C229.56,403.27 230.61,402.17 230.13,400.91C220.82,383.68 210.7,365.03 207.71,347.61C207.47,347.39 205.54,345.69 205.31,345.47C201.74,331.72 198.14,318.14 195.54,304.65C195.07,303.63 194.2,302.85 193.13,302.52C194.73,294.86 190.99,286.72 191.27,278.92C193.61,283.24 195.23,287.9 196.09,292.73C197.59,299.13 198.23,305.29 200.03,311.64C201.85,317.99 204.11,324.3 205.73,330.7C206.75,334.97 206.39,339.23 207.62,343.34C211.53,356.39 219.29,368.69 223.19,381.84C223.72,382.59 223.62,383.61 222.98,384.26C227.11,388.97 250.37,432.86 249.54,434.69C247.4,436.4 248.43,432.09 246.17,433.78C258.97,453.63 292.15,499.87 333.75,534.17C344.86,543.85 367.37,557.37 386.28,566.15C378.31,561.5 367.22,553.59 357.05,546.3C345.88,538.08 335.21,529.2 325.07,519.72C302.19,498.8 281.88,475.23 264.59,449.51C264.83,448.11 266.25,446.81 266.72,445.44Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M266.72,445.44C262.95,442.69 261.18,437.98 257.28,435.46C254.97,426.61 246.02,417.02 245.42,409.16C238.03,403.12 237.6,396.21 236.3,390.4C234.93,388.75 232.04,387.01 234.55,385.69C239.07,389.3 239.73,396.05 247.18,398.37C249.71,395.66 245.98,392.38 246.64,389.52C236.55,366.07 228.3,342.61 223.92,319.64C226.47,318.23 228.86,318.8 231.31,318.17C233.3,319.15 230.29,319.7 231.97,320.66C233.68,319.44 235.06,321.27 236.71,320.66C239.99,315.52 231.47,310.71 236.28,305.41C233.16,298.34 231.29,290.79 230.74,283.07C230.13,276.32 232.27,178.61 204.96,149.94C190.92,135.16 178.65,135.78 169.98,138.08C162.58,140.13 157.91,145.48 156.97,149.38C176.01,170.93 174.03,194.6 175.65,216.47C177.14,237.62 177.33,258.83 180.17,278.61C186.63,323.04 200.78,365.99 221.99,405.55C223.77,405.55 222.91,402.83 221.08,401.53C216.09,387.26 204.34,372.44 205.88,358.89C210.02,362.15 211.27,366.79 212.99,370.78C218.2,382.72 224.25,395.49 230.82,407.96C232.95,408.43 231.44,404.4 229.82,404.53C229.56,403.27 230.61,402.17 230.13,400.91C220.82,383.68 210.7,365.03 207.71,347.61C207.47,347.39 205.54,345.69 205.31,345.47C201.74,331.72 198.14,318.14 195.54,304.65C195.07,303.63 194.2,302.85 193.13,302.52C194.73,294.86 190.99,286.72 191.27,278.92C193.61,283.24 195.23,287.9 196.09,292.73C197.59,299.13 198.23,305.29 200.03,311.64C201.85,317.99 204.11,324.3 205.73,330.7C206.75,334.97 206.39,339.23 207.62,343.34C211.53,356.39 219.29,368.69 223.19,381.84C223.72,382.59 223.62,383.61 222.98,384.26C227.11,388.97 250.37,432.86 249.54,434.69C247.4,436.4 248.43,432.09 246.17,433.78C258.97,453.63 292.15,499.87 333.75,534.17C344.86,543.85 367.37,557.37 386.28,566.15C378.31,561.5 367.22,553.59 357.05,546.3C345.88,538.08 335.21,529.2 325.07,519.72C302.19,498.8 281.88,475.23 264.59,449.51C264.83,448.11 266.25,446.81 266.72,445.44Z"
android:fillColor="#000000"
android:fillAlpha="0"/>
<path
android:fillColor="#FF000000"
android:pathData="M266.72,445.44C262.95,442.69 261.18,437.98 257.28,435.46C254.97,426.61 246.02,417.02 245.42,409.16C238.03,403.12 237.6,396.21 236.3,390.4C234.93,388.75 232.04,387.01 234.55,385.69C239.07,389.3 239.73,396.05 247.18,398.37C249.71,395.66 245.98,392.38 246.64,389.52C236.55,366.07 228.3,342.61 223.92,319.64C226.47,318.23 228.86,318.8 231.31,318.17C233.3,319.15 230.29,319.7 231.97,320.66C233.68,319.44 235.06,321.27 236.71,320.66C239.99,315.52 231.47,310.71 236.28,305.41C233.16,298.34 231.29,290.79 230.74,283.07C230.13,276.32 232.27,178.61 204.96,149.94C190.92,135.16 178.65,135.78 169.98,138.08C162.58,140.13 157.91,145.48 156.97,149.38C176.01,170.93 174.03,194.6 175.65,216.47C177.14,237.62 177.33,258.83 180.17,278.61C186.63,323.04 200.78,365.99 221.99,405.55C223.77,405.55 222.91,402.83 221.08,401.53C216.09,387.26 204.34,372.44 205.88,358.89C210.02,362.15 211.27,366.79 212.99,370.78C218.2,382.72 224.25,395.49 230.82,407.96C232.95,408.43 231.44,404.4 229.82,404.53C229.56,403.27 230.61,402.17 230.13,400.91C220.82,383.68 210.7,365.03 207.71,347.61C207.47,347.39 205.54,345.69 205.31,345.47C201.74,331.72 198.14,318.14 195.54,304.65C195.07,303.63 194.2,302.85 193.13,302.52C194.73,294.86 190.99,286.72 191.27,278.92C193.61,283.24 195.23,287.9 196.09,292.73C197.59,299.13 198.23,305.29 200.03,311.64C201.85,317.99 204.11,324.3 205.73,330.7C206.75,334.97 206.39,339.23 207.62,343.34C211.53,356.39 219.29,368.69 223.19,381.84C223.72,382.59 223.62,383.61 222.98,384.26C227.11,388.97 250.37,432.86 249.54,434.69C247.4,436.4 248.43,432.09 246.17,433.78C258.97,453.63 292.15,499.87 333.75,534.17C344.86,543.85 367.37,557.37 386.28,566.15C378.31,561.5 367.22,553.59 357.05,546.3C345.88,538.08 335.21,529.2 325.07,519.72C302.19,498.8 281.88,475.23 264.59,449.51C264.83,448.11 266.25,446.81 266.72,445.44Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M293.69,244.31C301.84,229.72 367.04,112.95 375.19,98.37C379.43,90.7 376.69,81.04 369.05,76.74C368.88,76.66 367.49,75.98 367.31,75.89C359.66,71.6 349.97,74.29 345.64,81.93C337.49,96.52 272.29,213.27 264.14,227.85C259.88,235.54 262.63,245.21 270.28,249.52C270.28,249.52 271.92,250.4 272.09,250.49C279.77,254.71 289.41,251.95 293.69,244.31Z"
android:fillColor="#00788a"/>
<path
android:fillColor="#FF000000"
android:pathData="M293.69,244.31C301.84,229.72 367.04,112.95 375.19,98.37C379.43,90.7 376.69,81.04 369.05,76.74C368.88,76.66 367.49,75.98 367.31,75.89C359.66,71.6 349.97,74.29 345.64,81.93C337.49,96.52 272.29,213.27 264.14,227.85C259.88,235.54 262.63,245.21 270.28,249.52C270.28,249.52 271.92,250.4 272.09,250.49C279.77,254.71 289.41,251.95 293.69,244.31Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M293.69,244.31C301.84,229.72 367.04,112.95 375.19,98.37C379.43,90.7 376.69,81.04 369.05,76.74C368.88,76.66 367.49,75.98 367.31,75.89C359.66,71.6 349.97,74.29 345.64,81.93C337.49,96.52 272.29,213.27 264.14,227.85C259.88,235.54 262.63,245.21 270.28,249.52C270.28,249.52 271.92,250.4 272.09,250.49C279.77,254.71 289.41,251.95 293.69,244.31Z"
android:fillColor="#000000"
android:fillAlpha="0"/>
<path
android:fillColor="#FF000000"
android:pathData="M293.69,244.31C301.84,229.72 367.04,112.95 375.19,98.37C379.43,90.7 376.69,81.04 369.05,76.74C368.88,76.66 367.49,75.98 367.31,75.89C359.66,71.6 349.97,74.29 345.64,81.93C337.49,96.52 272.29,213.27 264.14,227.85C259.88,235.54 262.63,245.21 270.28,249.52C270.28,249.52 271.92,250.4 272.09,250.49C279.77,254.71 289.41,251.95 293.69,244.31Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M345.77,274.17C345.77,274.17 345.77,274.17 345.77,274.16C353.92,259.57 419.13,142.81 427.28,128.21C431.53,120.53 428.79,110.86 421.14,106.55C420.96,106.47 419.57,105.82 419.39,105.74C411.71,101.46 402.01,104.2 397.73,111.88C389.58,126.47 324.37,243.14 316.22,257.73C311.96,265.41 314.71,275.09 322.36,279.38C322.72,279.58 323.94,280.27 324.12,280.37C331.81,284.64 341.49,281.87 345.77,274.17Z"
android:fillColor="#00788a"/>
<path
android:fillColor="#FF000000"
android:pathData="M345.77,274.17C345.77,274.17 345.77,274.17 345.77,274.16C353.92,259.57 419.13,142.81 427.28,128.21C431.53,120.53 428.79,110.86 421.14,106.55C420.96,106.47 419.57,105.82 419.39,105.74C411.71,101.46 402.01,104.2 397.73,111.88C389.58,126.47 324.37,243.14 316.22,257.73C311.96,265.41 314.71,275.09 322.36,279.38C322.72,279.58 323.94,280.27 324.12,280.37C331.81,284.64 341.49,281.87 345.77,274.17Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M345.77,274.17C345.77,274.17 345.77,274.17 345.77,274.16C353.92,259.57 419.13,142.81 427.28,128.21C431.53,120.53 428.79,110.86 421.14,106.55C420.96,106.47 419.57,105.82 419.39,105.74C411.71,101.46 402.01,104.2 397.73,111.88C389.58,126.47 324.37,243.14 316.22,257.73C311.96,265.41 314.71,275.09 322.36,279.38C322.72,279.58 323.94,280.27 324.12,280.37C331.81,284.64 341.49,281.87 345.77,274.17Z"
android:fillColor="#000000"
android:fillAlpha="0"/>
<path
android:fillColor="#FF000000"
android:pathData="M345.77,274.17C345.77,274.17 345.77,274.17 345.77,274.16C353.92,259.57 419.13,142.81 427.28,128.21C431.53,120.53 428.79,110.86 421.14,106.55C420.96,106.47 419.57,105.82 419.39,105.74C411.71,101.46 402.01,104.2 397.73,111.88C389.58,126.47 324.37,243.14 316.22,257.73C311.96,265.41 314.71,275.09 322.36,279.38C322.72,279.58 323.94,280.27 324.12,280.37C331.81,284.64 341.49,281.87 345.77,274.17Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M397.87,302.94C397.87,302.94 397.87,302.94 397.87,302.94C446.75,215.33 473.91,166.64 479.34,156.91C483.6,149.23 480.86,139.55 473.2,135.25C473.02,135.15 471.62,134.38 471.45,134.28C463.78,130.01 454.08,132.76 449.79,140.43C441.65,155.03 376.46,271.84 368.3,286.44C364.02,294.12 366.76,303.82 374.43,308.13C374.78,308.32 376,309 376.18,309.1C383.87,313.39 393.58,310.63 397.87,302.94Z"
android:fillColor="#00788a"/>
<path
android:fillColor="#FF000000"
android:pathData="M397.87,302.94C397.87,302.94 397.87,302.94 397.87,302.94C446.75,215.33 473.91,166.64 479.34,156.91C483.6,149.23 480.86,139.55 473.2,135.25C473.02,135.15 471.62,134.38 471.45,134.28C463.78,130.01 454.08,132.76 449.79,140.43C441.65,155.03 376.46,271.84 368.3,286.44C364.02,294.12 366.76,303.82 374.43,308.13C374.78,308.32 376,309 376.18,309.1C383.87,313.39 393.58,310.63 397.87,302.94Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M397.87,302.94C397.87,302.94 397.87,302.94 397.87,302.94C446.75,215.33 473.91,166.64 479.34,156.91C483.6,149.23 480.86,139.55 473.2,135.25C473.02,135.15 471.62,134.38 471.45,134.28C463.78,130.01 454.08,132.76 449.79,140.43C441.65,155.03 376.46,271.84 368.3,286.44C364.02,294.12 366.76,303.82 374.43,308.13C374.78,308.32 376,309 376.18,309.1C383.87,313.39 393.58,310.63 397.87,302.94Z"
android:fillColor="#000000"
android:fillAlpha="0"/>
<path
android:fillColor="#FF000000"
android:pathData="M397.87,302.94C397.87,302.94 397.87,302.94 397.87,302.94C446.75,215.33 473.91,166.64 479.34,156.91C483.6,149.23 480.86,139.55 473.2,135.25C473.02,135.15 471.62,134.38 471.45,134.28C463.78,130.01 454.08,132.76 449.79,140.43C441.65,155.03 376.46,271.84 368.3,286.44C364.02,294.12 366.76,303.82 374.43,308.13C374.78,308.32 376,309 376.18,309.1C383.87,313.39 393.58,310.63 397.87,302.94Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M451.47,257.42C446.63,266.12 422.36,309.53 378.69,387.71C356.44,375.26 344.07,368.35 341.59,366.97C333.91,362.71 324.24,365.45 319.94,373.1C319.84,373.28 319.07,374.68 318.97,374.85C314.71,382.53 317.46,392.21 325.11,396.51C328.63,398.48 346.24,408.31 377.91,426C377.91,426 377.91,426 377.91,426C385.57,430.27 395.25,427.52 399.54,419.86C407.69,405.26 472.87,288.5 481.02,273.9C485.28,266.23 482.54,256.55 474.88,252.25C474.88,252.25 473.31,251.38 473.14,251.28C465.45,247.03 455.78,249.77 451.47,257.42Z"
android:fillColor="#00788a"/>
<path
android:fillColor="#FF000000"
android:pathData="M451.47,257.42C446.63,266.12 422.36,309.53 378.69,387.71C356.44,375.26 344.07,368.35 341.59,366.97C333.91,362.71 324.24,365.45 319.94,373.1C319.84,373.28 319.07,374.68 318.97,374.85C314.71,382.53 317.46,392.21 325.11,396.51C328.63,398.48 346.24,408.31 377.91,426C377.91,426 377.91,426 377.91,426C385.57,430.27 395.25,427.52 399.54,419.86C407.69,405.26 472.87,288.5 481.02,273.9C485.28,266.23 482.54,256.55 474.88,252.25C474.88,252.25 473.31,251.38 473.14,251.28C465.45,247.03 455.78,249.77 451.47,257.42Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
<path
android:pathData="M451.47,257.42C446.63,266.12 422.36,309.53 378.69,387.71C356.44,375.26 344.07,368.35 341.59,366.97C333.91,362.71 324.24,365.45 319.94,373.1C319.84,373.28 319.07,374.68 318.97,374.85C314.71,382.53 317.46,392.21 325.11,396.51C328.63,398.48 346.24,408.31 377.91,426C377.91,426 377.91,426 377.91,426C385.57,430.27 395.25,427.52 399.54,419.86C407.69,405.26 472.87,288.5 481.02,273.9C485.28,266.23 482.54,256.55 474.88,252.25C474.88,252.25 473.31,251.38 473.14,251.28C465.45,247.03 455.78,249.77 451.47,257.42Z"
android:fillColor="#000000"
android:fillAlpha="0"/>
<path
android:fillColor="#FF000000"
android:pathData="M451.47,257.42C446.63,266.12 422.36,309.53 378.69,387.71C356.44,375.26 344.07,368.35 341.59,366.97C333.91,362.71 324.24,365.45 319.94,373.1C319.84,373.28 319.07,374.68 318.97,374.85C314.71,382.53 317.46,392.21 325.11,396.51C328.63,398.48 346.24,408.31 377.91,426C377.91,426 377.91,426 377.91,426C385.57,430.27 395.25,427.52 399.54,419.86C407.69,405.26 472.87,288.5 481.02,273.9C485.28,266.23 482.54,256.55 474.88,252.25C474.88,252.25 473.31,251.38 473.14,251.28C465.45,247.03 455.78,249.77 451.47,257.42Z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillAlpha="0"
android:strokeColor="#000000"/>
</group>
</vector>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>

View File

@ -0,0 +1,3 @@
<resources>
<string name="app_name">SDE Skolehjem</string>
</resources>

View File

@ -0,0 +1,5 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
</resources>

View File

@ -0,0 +1,17 @@
package sde.odense.skolehjem;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}

View File

@ -0,0 +1,24 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.1"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View File

@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<androidx.appcompat>
<appcompat versions="1.0.0-alpha1,1.0.0-alpha3,1.0.0-beta01,1.0.0-rc01,1.0.0-rc02,1.0.0,1.0.1,1.0.2,1.1.0-alpha01,1.1.0-alpha02,1.1.0-alpha03,1.1.0-alpha04,1.1.0-alpha05,1.1.0-beta01,1.1.0-rc01,1.1.0,1.2.0-alpha01,1.2.0-alpha02,1.2.0-alpha03,1.2.0-beta01,1.2.0-rc01,1.2.0-rc02,1.3.0-alpha01"/>
<appcompat-resources versions="1.1.0-alpha03,1.1.0-alpha04,1.1.0-alpha05,1.1.0-beta01,1.1.0-rc01,1.1.0,1.2.0-alpha01,1.2.0-alpha02,1.2.0-alpha03,1.2.0-beta01,1.2.0-rc01,1.2.0-rc02,1.3.0-alpha01"/>
</androidx.appcompat>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<androidx.constraintlayout>
<constraintlayout-solver versions="1.1.0,1.1.1,1.1.2,1.1.3,2.0.0-alpha1,2.0.0-alpha2,2.0.0-alpha3,2.0.0-alpha4,2.0.0-alpha5,2.0.0-beta1,2.0.0-beta2,2.0.0-beta3,2.0.0-beta4,2.0.0-beta5,2.0.0-beta6,2.0.0-beta7,2.0.0-beta8,2.0.0-rc1"/>
<constraintlayout versions="1.1.0,1.1.1,1.1.2,1.1.3,2.0.0-alpha1,2.0.0-alpha2,2.0.0-alpha3,2.0.0-alpha4,2.0.0-alpha5,2.0.0-beta1,2.0.0-beta2,2.0.0-beta3,2.0.0-beta4,2.0.0-beta5,2.0.0-beta6,2.0.0-beta7,2.0.0-beta8,2.0.0-rc1"/>
<constraintlayout-core versions="1.0.0-alpha1"/>
</androidx.constraintlayout>

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<androidx.test.espresso>
<espresso-accessibility versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-contrib versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-core versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-idling-resource versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-intents versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-remote versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
<espresso-web versions="3.1.0-alpha1,3.1.0-alpha2,3.1.0-alpha3,3.1.0-alpha4,3.1.0-beta01,3.1.0-beta02,3.1.0,3.1.1-alpha01,3.1.1-beta01,3.1.1,3.1.2-alpha01,3.2.0-alpha02,3.2.0-alpha03,3.2.0-alpha04,3.2.0-alpha05,3.2.0-beta01,3.2.0,3.3.0-alpha01,3.3.0-alpha02,3.3.0-alpha03,3.3.0-alpha04,3.3.0-alpha05,3.3.0-beta01,3.3.0-beta02,3.3.0-rc01,3.3.0-rc02"/>
</androidx.test.espresso>

View File

@ -0,0 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<androidx.test.ext>
<junit versions="1.0.0-beta01,1.0.0-beta02,1.0.0,1.1.0-alpha01,1.1.0-beta01,1.1.0,1.1.1-alpha01,1.1.1-alpha02,1.1.1-alpha03,1.1.1-alpha04,1.1.1-alpha05,1.1.1-beta01,1.1.1,1.1.2-alpha01,1.1.2-alpha02,1.1.2-alpha03,1.1.2-alpha04,1.1.2-alpha05,1.1.2-beta01,1.1.2-beta02,1.1.2-rc01,1.1.2-rc02"/>
<junit-ktx versions="1.1.0-alpha01,1.1.0-beta01,1.1.0,1.1.1-alpha01,1.1.1-alpha02,1.1.1-alpha03,1.1.1-alpha04,1.1.1-alpha05,1.1.1-beta01,1.1.1,1.1.2-alpha01,1.1.2-alpha02,1.1.2-alpha03,1.1.2-alpha04,1.1.2-alpha05,1.1.2-beta01,1.1.2-beta02,1.1.2-rc01,1.1.2-rc02"/>
<truth versions="1.0.0-alpha2,1.0.0-alpha3,1.0.0-alpha4,1.0.0-beta01,1.0.0-beta02,1.0.0,1.1.0-alpha01,1.1.0-beta01,1.1.0,1.1.1-alpha01,1.2.0-alpha02,1.2.0-alpha03,1.2.0-alpha04,1.2.0-alpha05,1.2.0-beta01,1.2.0,1.3.0-alpha01,1.3.0-alpha02,1.3.0-alpha03,1.3.0-alpha04,1.3.0-alpha05,1.3.0-beta01,1.3.0-beta02,1.3.0-rc01,1.3.0-rc02"/>
</androidx.test.ext>

View File

@ -0,0 +1,158 @@
<?xml version='1.0' encoding='UTF-8'?>
<metadata>
<android.arch.core/>
<android.arch.lifecycle/>
<android.arch.navigation/>
<android.arch.paging/>
<android.arch.persistence/>
<android.arch.persistence.room/>
<android.arch.work/>
<androidx.activity/>
<androidx.ads/>
<androidx.annotation/>
<androidx.appcompat/>
<androidx.arch.core/>
<androidx.asynclayoutinflater/>
<androidx.autofill/>
<androidx.benchmark/>
<androidx.biometric/>
<androidx.browser/>
<androidx.camera/>
<androidx.car/>
<androidx.cardview/>
<androidx.collection/>
<androidx.compose/>
<androidx.compose.animation/>
<androidx.compose.foundation/>
<androidx.compose.material/>
<androidx.compose.runtime/>
<androidx.compose.ui/>
<androidx.concurrent/>
<androidx.constraintlayout/>
<androidx.contentpager/>
<androidx.coordinatorlayout/>
<androidx.core/>
<androidx.cursoradapter/>
<androidx.customview/>
<androidx.databinding/>
<androidx.documentfile/>
<androidx.drawerlayout/>
<androidx.dynamicanimation/>
<androidx.emoji/>
<androidx.enterprise/>
<androidx.exifinterface/>
<androidx.fragment/>
<androidx.gaming/>
<androidx.gridlayout/>
<androidx.heifwriter/>
<androidx.hilt/>
<androidx.interpolator/>
<androidx.leanback/>
<androidx.legacy/>
<androidx.lifecycle/>
<androidx.loader/>
<androidx.localbroadcastmanager/>
<androidx.media/>
<androidx.media2/>
<androidx.mediarouter/>
<androidx.multidex/>
<androidx.navigation/>
<androidx.paging/>
<androidx.palette/>
<androidx.percentlayout/>
<androidx.preference/>
<androidx.print/>
<androidx.recommendation/>
<androidx.recyclerview/>
<androidx.remotecallback/>
<androidx.room/>
<androidx.savedstate/>
<androidx.security/>
<androidx.sharetarget/>
<androidx.slice/>
<androidx.slidingpanelayout/>
<androidx.sqlite/>
<androidx.startup/>
<androidx.swiperefreshlayout/>
<androidx.test/>
<androidx.test.espresso/>
<androidx.test.espresso.idling/>
<androidx.test.ext/>
<androidx.test.janktesthelper/>
<androidx.test.services/>
<androidx.test.uiautomator/>
<androidx.textclassifier/>
<androidx.tracing/>
<androidx.transition/>
<androidx.tvprovider/>
<androidx.ui/>
<androidx.vectordrawable/>
<androidx.versionedparcelable/>
<androidx.viewpager/>
<androidx.viewpager2/>
<androidx.wear/>
<androidx.webkit/>
<androidx.window/>
<androidx.work/>
<com.android/>
<com.android.billingclient/>
<com.android.databinding/>
<com.android.installreferrer/>
<com.android.java.tools.build/>
<com.android.ndk.thirdparty/>
<com.android.support/>
<com.android.support.constraint/>
<com.android.support.test/>
<com.android.support.test.espresso/>
<com.android.support.test.espresso.idling/>
<com.android.support.test.janktesthelper/>
<com.android.support.test.services/>
<com.android.support.test.uiautomator/>
<com.android.tools/>
<com.android.tools.analytics-library/>
<com.android.tools.apkparser/>
<com.android.tools.build/>
<com.android.tools.build.jetifier/>
<com.android.tools.chunkio/>
<com.android.tools.ddms/>
<com.android.tools.external.com-intellij/>
<com.android.tools.external.org-jetbrains/>
<com.android.tools.fakeadbserver/>
<com.android.tools.internal.build.test/>
<com.android.tools.layoutlib/>
<com.android.tools.lint/>
<com.android.tools.pixelprobe/>
<com.crashlytics.sdk.android/>
<com.google.ads.afsn/>
<com.google.ads.interactivemedia.v3/>
<com.google.android.ads/>
<com.google.android.ads.consent/>
<com.google.android.datatransport/>
<com.google.android.gms/>
<com.google.android.instantapps/>
<com.google.android.instantapps.thirdpartycompat/>
<com.google.android.libraries.maps/>
<com.google.android.libraries.places/>
<com.google.android.material/>
<com.google.android.play/>
<com.google.android.support/>
<com.google.android.things/>
<com.google.android.ump/>
<com.google.android.wearable/>
<com.google.androidbrowserhelper/>
<com.google.ar/>
<com.google.ar.sceneform/>
<com.google.ar.sceneform.ux/>
<com.google.firebase/>
<com.google.gms/>
<com.google.mlkit/>
<com.google.oboe/>
<com.google.prefab/>
<com.google.test.platform/>
<com.google.testing.platform/>
<io.fabric.sdk.android/>
<org.chromium.net/>
<org.jetbrains.kotlin/>
<tools.base.build-system.debug/>
<zipflinger/>
</metadata>

View File

@ -0,0 +1,145 @@
<?xml version="1.0" ?>
<sdk_metadata>
<library groupId="com.urbanairship.android" artifactId="urbanairship-sdk" recommended-version="9.3.1" >
<versions from="9.1.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-sdk:9.1.0" />
<versions from="9.0.0" to="9.0.4" status="deprecated" description="Version is known issues with in-app automation. Please update to version &lt;current&gt; as soon as possible." />
<versions from="8.9.1" to="8.9.2" status="deprecated" description="Version is known to have stability issues. Please update to version &lt;current&gt; as soon as possible. See &lt;url&gt; for more details." url="https://github.com/urbanairship/android-library/blob/master/CHANGELOG.md#version-893---october-17-2017" />
<versions from="6.1.4" to="8.7.0" status="deprecated" description="Version is known to have Android O compatibility issues. Please update to version &lt;current&gt; as soon as possible." />
<versions from="9.3.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-sdk:9.3.0" />
<versions from="9.3.1" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-sdk:9.3.1" />
</library>
<library groupId="com.urbanairship.android" artifactId="urbanairship-core" recommended-version="9.3.1" >
<versions from="9.1.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-core:9.1.0" />
<versions from="9.3.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-core:9.3.0" />
<versions from="9.3.1" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-core:9.3.1" />
</library>
<library groupId="com.urbanairship.android" artifactId="urbanairship-fcm" recommended-version="9.3.1" >
<versions from="9.1.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-fcm:9.1.0" />
<versions from="9.3.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-fcm:9.3.0" />
<versions from="9.3.1" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-fcm:9.3.1" />
</library>
<library groupId="com.urbanairship.android" artifactId="urbanairship-gcm" recommended-version="9.3.1" >
<versions from="9.1.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-gcm:9.1.0" />
<versions from="9.3.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-gcm:9.3.0" />
<versions from="9.3.1" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-gcm:9.3.1" />
</library>
<library groupId="com.urbanairship.android" artifactId="urbanairship-adm" recommended-version="9.3.1" >
<versions from="9.1.0" status="deprecated" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-adm:9.1.0" />
<versions from="9.3.0" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-adm:9.3.0" />
<versions from="9.3.1" status="recommended" version-literal="!SDK-VERSION-STRING!:com.urbanairship.android:urbanairship-adm:9.3.1" />
</library>
<library groupId="com.tune" artifactId="tune-marketing-console-sdk" recommended-version="5.3.0" >
<versions from="5.3.0" version-literal="com.tune.BuildConfig.5.3.0" description="Bug affecting SDK data quality" />
<versions from="5.2.1" version-literal="com.tune.BuildConfig.5.2.1" />
<versions from="5.2.0" version-literal="com.tune.BuildConfig.5.2.0" />
<versions from="5.1.1" status="deprecated" version-literal="com.tune.BuildConfig.5.1.1" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="5.0.0" to="5.0.2" status="deprecated" version-literal="com.tune.BuildConfig.5.0.0" description="Bug affecting SDK data quality" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.15.2" to="4.16.0" status="deprecated" version-literal="com.tune.BuildConfig.4.15.2" description="Bug affecting SDK data quality" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.15.1" version-literal="com.tune.BuildConfig.4.15.1" description="Bug affecting SDK performance" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.15.0" version-literal="com.tune.BuildConfig.4.15.0" description="Bug affecting SDK performance" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.14.0" version-literal="com.tune.BuildConfig.4.14.0" description="Bug affecting SDK performance" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.13.0" status="deprecated" version-literal="com.tune.BuildConfig.4.13.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.12.1" status="deprecated" version-literal="com.tune.BuildConfig.4.12.1" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.12.0" status="deprecated" version-literal="com.tune.BuildConfig.4.12.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.11.1" status="deprecated" version-literal="com.tune.BuildConfig.4.11.1" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.11.0" status="deprecated" version-literal="com.tune.BuildConfig.4.11.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.10.2" version-literal="com.tune.BuildConfig.4.10.2" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.10.1" version-literal="com.tune.BuildConfig.4.10.1" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.10.0" version-literal="com.tune.BuildConfig.4.10.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.9.0" version-literal="com.tune.BuildConfig.4.9.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.8.0" to="4.8.1" version-literal="com.tune.BuildConfig.4.8.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="4.0.0" to="4.7.1" status="deprecated" version-literal="com.tune.BuildConfig.4.0.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="3.0.0" to="3.11.4" status="deprecated" version-literal="com.tune.BuildConfig.3.0.0" description="Bug affecting app stability" url="https://developers.tune.com/sdk/migrating-to-android-4-8-0-and-above/" />
<versions from="0.0.0" to="3.0.0" status="deprecated" description="Bug affecting app stability" />
</library>
<library groupId="com.android.volley" artifactId="volley" recommended-version="1.1.0" >
<versions from="1.1.0" />
<versions from="1.1.0-rc2" status="deprecated" description="Bug affecting app stability" url="https://github.com/google/volley/releases" />
<versions from="1.1.0-rc1" status="deprecated" description="Bug affecting app stability" url="https://github.com/google/volley/releases" />
<versions from="1.0.0" status="deprecated" description="Bug affecting app stability" url="https://github.com/google/volley/releases" />
</library>
<library groupId="com.google.guava" artifactId="guava" recommended-version="24.1-jre" >
<versions from="24.1-jre" />
</library>
<library groupId="com.google.guava" artifactId="guava" recommended-version="25.0-android" >
<versions from="25.0-android" />
<versions from="24.1.1-android" status="insecure" description="Moderate security vulnerability" url="https://github.com/google/guava/wiki/CVE-2018-10237" />
<versions from="24.1-android" status="deprecated" description="Bug affecting app performance" url="https://github.com/google/guava/releases" />
<versions from="24.0-android" status="deprecated" description="Bug affecting app performance" url="https://github.com/google/guava/releases" />
</library>
<library groupId="com.google.firebase" artifactId="firebase-analytics" recommended-version="15.0.0" >
<versions from="15.0.0" />
<versions from="12.0.1" />
<versions from="12.0.0" />
<versions from="11.8.0" />
<versions from="11.6.2" />
<versions from="11.6.0" />
<versions from="11.4.2" />
<versions from="11.4.0" />
<versions from="11.2.2" />
<versions from="11.2.0" />
<versions from="11.0.4" />
<versions from="11.0.2" />
<versions from="11.0.1" />
<versions from="11.0.0" />
<versions from="10.2.6" />
<versions from="10.2.4" />
<versions from="10.2.1" />
<versions from="10.2.0" />
<versions from="10.0.1" />
<versions from="10.0.0" />
<versions from="9.8.0" />
<versions from="9.6.1" />
<versions from="9.6.0" />
<versions from="9.4.0" />
<versions from="9.2.1" />
<versions from="9.2.0" />
<versions from="9.0.2" />
<versions from="9.0.1" />
<versions from="9.0.0" />
</library>
<library groupId="com.google.firebase" artifactId="firebase-messaging" recommended-version="20.1.2" >
<versions from="20.1.1" status="deprecated" description="Bug affecting app stability" url="https://firebase.google.com/support/release-notes/android#messaging_v20-1-1" />
</library>
<library groupId="com.google.dagger" artifactId="dagger-android" recommended-version="2.15" >
<versions from="2.15" />
<versions from="2.14.1" status="deprecated" description="Bug affecting SDK performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.14" status="deprecated" description="Bug affecting SDK performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.13" status="deprecated" description="Bug affecting app performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.12" status="deprecated" description="Bug affecting app performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.11" status="deprecated" description="Bug affecting SDK performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.11-rc2" status="deprecated" description="Bug affecting SDK performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.11-rc1" status="deprecated" description="Bug affecting SDK performance" url="https://github.com/google/dagger/releases/tag/2.15" />
<versions from="2.10" status="deprecated" url="https://github.com/google/dagger/releases/tag/2.15" />
</library>
<library groupId="AppsFlyer" artifactId="af-android-sdk" recommended-version="4.8.10" >
<versions from="4.8.9" version-literal="!SDK-VERSION-STRING!:com.appsflyer:af-android-sdk:4.8.9" />
<versions from="4.8.10" version-literal="!SDK-VERSION-STRING!:com.appsflyer:af-android-sdk:4.8.10" />
</library>
<library groupId="com.kochava" artifactId="tracker" recommended-version="3.4.0" >
<versions from="3.4.0" />
<versions from="3.3.1" version-literal="&quot;AndroidTracker 3.3.1&quot;, &quot;control.kochava.com&quot;" />
<versions from="3.3.0" version-literal="&quot;AndroidTracker 3.3.0&quot;, &quot;control.kochava.com&quot;" />
<versions from="3.2.0" version-literal="&quot;AndroidTracker 3.2.0&quot;, &quot;control.kochava.com&quot;" />
<versions from="3.1.1" version-literal="&quot;AndroidTracker 3.1.1&quot;, &quot;control.kochava.com&quot;" />
<versions from="3.1.0" status="deprecated" version-literal="&quot;AndroidTracker 3.1.0&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="3.0.0" status="deprecated" version-literal="&quot;AndroidTracker 3.0.0&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20170303" status="deprecated" version-literal="&quot;Android20170303&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20170216" status="deprecated" version-literal="&quot;Android20170216&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20170127" status="deprecated" version-literal="&quot;Android20170127&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20170106" status="deprecated" version-literal="&quot;Android20170106&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20161122" status="deprecated" version-literal="&quot;Android20161122&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160914" status="deprecated" version-literal="&quot;Android20160914&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160902" status="deprecated" version-literal="&quot;Android20160902&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160811" status="deprecated" version-literal="&quot;Android20160811&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160615" status="deprecated" version-literal="&quot;Android20160615&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160427" status="deprecated" version-literal="&quot;Android20160427&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20160222" status="deprecated" version-literal="&quot;Android20160222&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20151109" status="deprecated" version-literal="&quot;Android20151109&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20150511" status="deprecated" version-literal="&quot;Android20150511&quot;, &quot;control.kochava.com&quot;" description="Bug affecting SDK performance" />
<versions from="20150312" status="insecure" version-literal="&quot;Android20150312&quot;, &quot;control.kochava.com&quot;" description="Moderate security vulnerability" />
<versions from="20150128" status="insecure" version-literal="&quot;Android20150128&quot;, &quot;control.kochava.com&quot;" description="Moderate security vulnerability" />
<versions from="20141023" status="insecure" version-literal="&quot;Android20141023&quot;, &quot;control.kochava.com&quot;" description="Moderate security vulnerability" />
<versions from="20140825" status="insecure" version-literal="&quot;Android20140825&quot;, &quot;control.kochava.com&quot;" description="Moderate security vulnerability" />
</library>
</sdk_metadata>

View File

@ -0,0 +1,19 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true

Binary file not shown.

View File

@ -0,0 +1,6 @@
#Mon Aug 03 19:13:21 CEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

172
mobileapp/android/gradlew vendored Executable file
View File

@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

84
mobileapp/android/gradlew.bat vendored Normal file
View File

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

BIN
mobileapp/android/key.jks Normal file

Binary file not shown.

View File

@ -0,0 +1,10 @@
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/home/frederikpyt/Android/Sdk

View File

@ -0,0 +1,2 @@
include ':app'
rootProject.name = "Skolehjem"

2
settings.gradle Normal file
View File

@ -0,0 +1,2 @@
include ':app'
project(':app').projectDir = new File(rootDir, 'mobileapp/android/app/')

View File

@ -58,7 +58,7 @@ class EventController extends Controller
public function store(Request $request)
{
$requestBody = $request->validate([
"name" => "required|unique:events|max:255",
"name" => "required|max:255",
"description" => "required|max:255",
"date" => "required"
]);
@ -66,11 +66,12 @@ class EventController extends Controller
//creates a new Event model with the given parameter
$event = new Event($requestBody);
$saved = $event->save();
$allEvents = Event::query()->where('name', '=', $request->name)->get();
if(!$saved){
return Response::detect("events.store");
}else{
if(count($allEvents) > 0)
return redirect()->route("events.index", ['events' => $event])->with('EventNameExists', '<p><b>Der findes allerede et event med det navn!</b></p>');
else {
$event->save();
$event = Event::query()->paginate($request->input("limit", 20));
return redirect()->route("events.index", ['events' => $event]);
}
@ -129,14 +130,17 @@ class EventController extends Controller
$data = $request->all();
$event = Event::find($id);
$event->update($data);
$saved = $event->save();
if(!$saved){
return Response::detect("events.update", [ "event" => $event]);
$allEvents = Event::query()->where('name', '=', $request->name)->where('id', '!=', $id)->get();
if(count($allEvents) > 0){
return redirect()->route("events.index", ['events' => $event])->with('EventNameExists', '<p><b>Der findes allerede et event med det navn!</b></p>');
}else{
$event->update($data);
$event->save();
$event = Event::query()->paginate($request->input("limit", 20));
return Response::detect("events.index", ['events' => $event]);
return redirect()->route("events.index", ['events' => $event]);
}
}

View File

@ -64,13 +64,15 @@ class MenuPlanController extends Controller
]);
$menuPlans = new MenuPlan($requestMenuPlanCreate);
$saved = $menuPlans->save();
if(!$saved){
return Response::detect("menuplans.store");
}else{
$allMenuPlans = MenuPlan::query()->where('week', '=', $request->week)->get();
if(count($allMenuPlans) > 0)
return redirect()->route("menu-plans.index")->with('WeekExists', '<p><b>Der findes allerede en menuplan for den uge!</b></p>');
else {
$menuPlans->save();
$menuPlans = MenuPlan::query()->paginate($request->input("limit", 20));
return Response::detect("menuplans.index", ['menuPlans' => $menuPlans]);
return redirect()->route("menu-plans.index", ['menuPlans' => $menuPlans]);
}
}
@ -110,14 +112,17 @@ class MenuPlanController extends Controller
//FORCED UPDATE
$menuplan = MenuPlan::find($id);
$menuplan->update($data);
$saved = $menuplan->save();
if(!$saved){
return Response::detect("menuplans.update", [ "menuplan" => $menuplan ]);
$allMenuPlans = MenuPlan::query()->where('week', '=', $request->week)->where('id', '!=', $id)->get();
if(count($allMenuPlans) > 0){
return redirect()->route("menu-plans.index")->with('WeekExists', '<p><b>Der findes allerede en menuplan for den uge!</b></p>');
}else{
$menuplan->update($data);
$menuplan->save();
$menuPlans = MenuPlan::query()->paginate($request->input("limit", 20));
return Response::detect("menuplans.index", ['menuPlans' => $menuPlans]);
return redirect()->route("menu-plans.index", ['menuPlans' => $menuPlans]);
}
}

View File

@ -57,13 +57,16 @@ class rolesController extends Controller
]);
$role = new Role($requestRole);
$saved = $role->save();
if(!$saved){
return Response::detect("roles.store");
}else{
$allRoles = Role::query()->where('name', '=', $request->name)->get();
// If there already is a role with that name, then don't create
if(count($allRoles) > 0)
return redirect()->route("roles.store")->with('RoleNameExists', '<p><b>Der findes allerede en rolle med det navn!</b></p>');
else { // Else - Create it
$role->save();
$roles = Role::query()->paginate($request->input("limit", 20));
return Response::detect("roles.index", ['roles' => $roles]);
return redirect()->route("roles.index", ['roles' => $roles]);
}
@ -103,14 +106,16 @@ class rolesController extends Controller
{
$data = $request->all();
$role = Role::find($id);
$role->update($data);
$saved = $role->save();
if(!$saved){
return Response::detect("roles.update", [ "role" => $role ]);
$allRoles = Role::query()->where('name', '=', $request->name)->where('id', '!=', $id)->get();
if(count($allRoles) > 0){
return redirect()->route("roles.index", [ "role" => $role ])->with('RoleNameExists', '<p><b>Der findes allerede en rolle med det navn!</b></p>');
}else{
$role->update($data);
$role->save();
$roles = Role::query()->paginate($request->input("limit", 20));
return Response::detect("roles.index", ['roles' => $roles]);
return redirect()->route("roles.index", ['roles' => $roles]);
}
}

View File

@ -67,14 +67,20 @@ class UserController extends Controller
$data = $request->validate([
"name_first" => "required|max:255",
"name_last" => "required|max:255",
"email" => "required|email|unique:users",
"email" => "required",
"password" => "required|max:60",
"phone" => "required|unique:users",
"phone" => "required",
]);
if ($request->password != $request->password2) {
return redirect()->route('users.create')->with('error#notsamepass', '<p>Der stod ikke det samme i `Password` & `Confirm Password`!</p>');
}
$allUsersEmail = User::query()->where('email', '=', $request->email)->get();
$allUsersPhone = User::query()->where('phone', '=', $request->phone)->get();
if ($request->password != $request->password2)
return redirect()->route('users.create')->with('error#notsamepass', '<p><b>Der stod ikke det samme i `Password` & `Confirm Password`!</b></p>');
elseif (count($allUsersEmail) > 0)
return redirect()->route('users.create')->with('EmailExists', '<p><b>Der findes allerede en bruger med den Email!</b></p>');
elseif (count($allUsersPhone) > 0)
return redirect()->route('users.create')->with('PhoneExists', '<p><b>Der findes allerede en bruger med det Telefon Nr.!</b></p>');
$roles = $request->input("roles", [ "User" ]);
@ -130,15 +136,22 @@ class UserController extends Controller
{
$user = User::find($id);
$allUsersEmail = User::query()->where('email', '=', $request->email)->where('id', '!=', $id)->get();
$allUsersPhone = User::query()->where('phone', '=', $request->phone)->where('id', '!=', $id)->get();
if($id === Auth::id() || auth()->user()->hasPermissionTo("user.edit")) {
if ($request->roles != null && auth()->user()->hasPermissionTo("user.edit")) { //You can only edit roles on the admin site, so if there is an input roles, then update user info and edit roles
if ($request->password != "") { // If you have edited the password, then run this
if(count($allUsersEmail) > 0)
return redirect()->route('users.edit', ['user' => $id])->with('EmailExists', '<p><b>Der findes allerede en bruger med den Email!</b></p>');
elseif(count($allUsersPhone) > 0)
return redirect()->route('users.edit', ['user' => $id])->with('PhoneExists', '<p><b>Der findes allerede en bruger med det Telefon Nr.!</b></p>');
elseif ($request->password != "") { // If you have edited the password, then run this
if ($request->password == $request->password2) { // If the password is the same as confirm password, then update everything from user
$data = $request->all();
/** @var User $user */
$user->update($data);
} else // Else go back with an error message
return redirect()->route("users.edit", ['user' => $id])->with('error#notsamepass', '<p>Der stod ikke det samme i `Password` & `Confirm Password`!</p>');
return redirect()->route("users.edit", ['user' => $id])->with('error#notsamepass', '<p><b>Der stod ikke det samme i `Password` & `Confirm Password`!</b></p>');
}
else { // If you haven't touched the password, then update everything else but password
$data = $request->only(['name_first', 'name_last', 'email', 'phone', 'roles']);
@ -257,21 +270,21 @@ class UserController extends Controller
if ($request->input('password') != null) { // If you're editing the password
$data = $request->only(['name_first', 'name_last', 'email', 'phone', 'password']);
if ($request->input('password') != $request->input('confirmpassword')) { // If new password and new password confirm is not the same, go back with fail message.
return redirect()->route("users.accounteditpass")->with('error#notsamepass', '<p class="text-center">Der stod ikke det samme i `Nyt Password` & `Confirm Password`!</p>');
return redirect()->route("users.accounteditpass")->with('error#notsamepass', '<p class="text-center"><b>Der stod ikke det samme i `Nyt Password` & `Confirm Password`!</b></p>');
} elseif (!Hash::check($request->input('oldpassword'), $user->password)) { // If the written current password and current password in DB is not the same, go back with fail message.
return redirect()->route("users.accounteditpass")->with('error#oldpass', '<p class="text-center">Det indtastede password i `Nuværende Password` er ikke dit nuværende password!</p>');
return redirect()->route("users.accounteditpass")->with('error#oldpass', '<p class="text-center"><b>Det indtastede password i `Nuværende Password` er ikke dit nuværende password!</b></p>');
} else { // If new password and current password is the same AND current written and current DB password is the same. Then update and logout.
/** @var User $user */
$user->update($data);
Auth::logout();
return redirect()->route("users.login")->with('success#passwordchange', '<p class="text-center text-white">Dit password er hermed ændret!</p>');
return redirect()->route("users.login")->with('success#passwordchange', '<p class="text-center text-white"><b>Dit password er hermed ændret!</b></p>');
}
} else { // Else if you're not editing the password but anything else (Email, Phone Number). Then update user.
$data = $request->only(['email', 'phone']);
$user->update($data);
return redirect()->route("users.account")->with('success#credentialschanged', '<p class="text-center">Dine oplysninger er hermed ændret!</p>');
return redirect()->route("users.account")->with('success#credentialschanged', '<p class="text-center"><b>Dine oplysninger er hermed ændret!</b></p>');
}
$users = User::query()->paginate(20);

View File

@ -44,14 +44,14 @@ class UserEventController extends Controller
// If the row has both, then go back and show an error - Cause you're not allowed to be on the same event twice.
if (count($getTableInfo) > 0)
return redirect()->route("events.index")->with('error#' . $request->event_id, '<p class="text-center">Du har allerede tilmeldt dig denne Aktivitet!</p>');
return redirect()->route("events.index")->with('error#' . $request->event_id, '<p class="text-center"><b>Du har allerede tilmeldt dig denne Aktivitet!</b></p>');
// If not, then it keeps going and saves and shows a success message
$UserEvent = new UserEvent($data);
$UserEvent->user_id = auth()->user()->id;
$UserEvent->save();
return redirect()->route("events.index")->with('signup#' . $request->event_id, '<p class="text-center">Du er hermed tilmeldt denne aktivitet!</p>');
return redirect()->route("events.index")->with('signup#' . $request->event_id, '<p class="text-center"><b>Du er hermed tilmeldt denne aktivitet!</b></p>');
}
/**
@ -71,7 +71,7 @@ class UserEventController extends Controller
$JoinedEvents = UserEvent::query()->join('events', 'events.id', '=', 'user_events.event_id')->where('user_id', "=", auth()->user()->id)->get();
return redirect()->route("userevents.index", [ "userevents" => $JoinedEvents ])->with('eventunsubscribed', '<p class="text-center">Du er hermed afmeldt aktiviteten!</p>');
return redirect()->route("userevents.index", [ "userevents" => $JoinedEvents ])->with('eventunsubscribed', '<p class="text-center"><b>Du er hermed afmeldt aktiviteten!</b></p>');
}
public function show()

View File

@ -59,13 +59,16 @@ class WashingMachineController extends Controller
]);
$machine = new WashingMachine($data);
$saved = $machine->save();
if(!$saved){
return Response::detect("washing-machines.store");
}else{
$allMachines = WashingMachine::query()->where('name', '=', $request->name)->get();
// If there already is a washing machine with that name, then don't add it
if (count($allMachines) > 0)
return redirect()->route("washing-machines.store")->with('WashingNameExists', '<p><b>Der findes allerede en vaskemaskine med det navn!</b></p>');
else { // Else - Add it
$machine->save();
$machines = WashingMachine::query()->paginate($request->input("limit", 20));
return Response::detect("washing-machines.index", ['machines' => $machines]);
return redirect()->route("washing-machines.index", ['machines' => $machines]);
}
}
@ -114,19 +117,17 @@ class WashingMachineController extends Controller
$machine = WashingMachine::find($id);
$machine->update($data);
$saved = $machine->save();
$allMachines = WashingMachine::query()->where('name', '=', $request->name)->where('id', '!=', $id)->get();
if(!$saved){
return Response::detect("washing-machines.update", [
"machine" => $machine
]);
} else {
// If there already is a washing machine with that name, then don't change it
if (count($allMachines) > 0)
return redirect()->route("washing-machines.store")->with('WashingNameExists', '<p><b>Der findes allerede en vaskemaskine med det navn!</b></p>');
else { // Else - Change the name
$machine->update($data);
$machine->save();
$machines = WashingMachine::query()->paginate($request->input("limit", 20));
return Response::detect("washing-machines.index", [
"machines" => $machines
]);
return redirect()->route("washing-machines.index", ["machines" => $machines]);
}
}

View File

@ -20,7 +20,7 @@ class WashingReservationController extends Controller
{
$this->middleware([ "auth" ]);
$this->middleware([ "check.auth:washing.machine.reservation.list" ])->only("index");
$this->middleware([ "check.auth:washing.machine.reservation.list" ])->only(["index", "appindex"]);
$this->middleware([ "check.auth:washing.machine.reservation.show" ])->only("show");
$this->middleware([ "check.auth:washing.machine.reservation.create" ])->only("create", "store");
$this->middleware([ "check.auth:washing.machine.reservation.edit" ])->only("edit", "update");
@ -78,7 +78,7 @@ class WashingReservationController extends Controller
} else {
$reservations = WashingReservation::query()->paginate($request->input("limit", 20));
return redirect()->route('washing-reservations.index', ["reservations" => $reservations]);
return redirect()->route('washing-reservations.appindex', ["reservations" => $reservations]);
}
}
@ -180,15 +180,12 @@ class WashingReservationController extends Controller
}
}
function search(Request $request){
if($request->ajax()){
$output = "<tr>".
"<th>Vaskemaskine</th>".
"<th>Tidspunkt</th>".
"<th>Bruger</th>".
"<th style=\"width: 1em;\"><img class=\"w-100\" src=\"http://127.0.0.1:8000/images/icons/pencil.svg\" alt=\"Update\"></th>".
"<th style=\"width: 1em;\"><img class=\"w-100\" src=\"http://127.0.0.1:8000/images/icons/trashcan.svg\" alt=\"Delete\"></th>".
"</tr>";
@ -219,7 +216,6 @@ class WashingReservationController extends Controller
'<td>' . WashingMachine::query()->find($user->machine_id)->name . '</td>'.
'<td>' . $user->time . '</td>'.
'<td>' . ucfirst(User::query()->find($user->user_id)->name_first) . ' ' . ucfirst(User::query()->find($user->user_id)->name_last) . '</td>'.
'<td><a href="'. route("washing-reservations.edit", [ "washing_reservation" => $user->id ]) . '"><img class="w-100" src="'. asset('/images/icons/pencil-dark.svg') . '" alt="Update"></a></td>'.
'<td><form method="post" action="' .route("washing-reservations.destroy", [ "washing_reservation" => $user->id ]). '" class="w-100 nostyle">'.
csrf_field().
method_field("delete").
@ -242,9 +238,11 @@ class WashingReservationController extends Controller
}
}
public function appindex(Request $request)
{
$reservations = WashingReservation::query()->where("user_id", "=", auth()->user()->id)->orderBY('time' , 'asc')->paginate($request->query("limit", 20));
return Response::detect("washing-reservations.index", [ "reservations" => $reservations]);
}
}

View File

@ -18,7 +18,7 @@
<label for="description">Beskrivelse:</label>
<input type="text" name="description" id="description" max="500" required>
<label for="date">Aktivitet dato:</label>
<input type="date" name="date" id="date" required>
<input type="datetime-local" name="date" id="date" required>
<input type="submit" class="btn btn-dark text-white" value="Opret">
</form>

View File

@ -19,7 +19,7 @@
<label for="description">Beskrivelse</label>
<input value="{{$event->description}}" type="text" name="description" id="description" required>
<label for="date">Beskrivelse</label>
<input value="{{$event->date}}" type="date" name="date" id="date" required>
<input value="{{$event->date}}" type="datetime-local" name="date" id="date" required>
<input type="submit" class="btn btn-dark text-white" value="Rediger">
</form>

View File

@ -17,8 +17,9 @@
@csrf
<input type="text" class="form-controller" id="search" name="search" placeholder="Søg på Evt Navn, Evt Dato"></input>
</form>
</div>
{!! session()->get('EventNameExists') !!}
<table class="tbl mt-2">
<tr>
<th>Event Navn</th>
@ -32,7 +33,7 @@
<tr>
<td>{{ $event->name }}</td>
<td>{{ $event->description }}</td>
<td>{{ $event->date }}</td>
<td>{{ \Illuminate\Support\Facades\Date::createFromTimeStamp(strtotime($event->date))->format('d/m/Y \k\l\. H:i') }}</td>
<td><a href="{{ route("events.signups", [ "event" => $event ]) }}"><img class="w-100" src="{{ asset('/images/icons/eye-dark.svg') }}" alt="Update"></a></td>
<td><a href="{{ route("events.edit", [ "event" => $event ]) }}"><img class="w-100" src="{{ asset('/images/icons/pencil-dark.svg') }}" alt="Update"></a></td>
<td><form method="post" action="{{ route("events.destroy", [ "event" => $event ]) }}" class="w-100 nostyle">

View File

@ -47,7 +47,6 @@
url: '{{route('feedbacks.search')}}',
data: {'option':$value},
success:function (data) {
console.log($value);
$('tbody').html(data);
},
error:function (data) {

View File

@ -18,8 +18,9 @@
@csrf
<input type="number" class="form-controller" id="search" name="search" pattern="[0-9]{2}" placeholder="Søg efter ugenummer"></input>
</form>
</div>
{!! session()->get('WeekExists') !!}
<table class="tbl mt-2">
<tr>
<th>Uge</th>

View File

@ -17,9 +17,9 @@
@csrf
<input type="text" class="form-controller" id="search" name="search" placeholder="Søg efter navn"></input>
</form>
</div>
{!! session()->get('RoleNameExists') !!}
<table class="tbl mt-2">
<tr>
<th>Navn</th>

View File

@ -12,6 +12,8 @@
@section("content")
<h1>Opret Bruger:</h1>
{!! session()->get('error#notsamepass') !!}
{!! session()->get('EmailExists') !!}
{!! session()->get('PhoneExists') !!}
<form method="post" action="{{ route("users.store") }}">
@csrf
<label for="name_first">Fornavn:</label>

View File

@ -12,6 +12,8 @@
@section("content")
<h1>Rediger Bruger:</h1>
{!! session()->get('error#notsamepass') !!}
{!! session()->get('EmailExists') !!}
{!! session()->get('PhoneExists') !!}
<form method="post" action="{{ route("users.update", ['user' => $user]) }}">
@csrf
@method("put")

View File

@ -13,6 +13,7 @@
<div class="row align-items-center">
<a class="btn btn-inline btn-sde-blue mb-0" href="{{ route('washing-machines.create') }}"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Vaskemaskine</a>
</div>
{!! session()->get('WashingNameExists') !!}
<table class="tbl mt-2">
<tr>
<th>Navn</th>

View File

@ -33,15 +33,13 @@
<th>Vaskemaskine</th>
<th>Tidspunkt</th>
<th>Bruger</th>
<th style="width: 1em;"><img class="w-100" src="{{ asset('/images/icons/pencil.svg') }}" alt="Update"></th>
<th style="width: 1em;"><img class="w-100" src="{{ asset('/images/icons/trashcan.svg') }}" alt="Delete"></th>
</tr>
@foreach($reservations as $reservation)
<tr>
<td>{{ \App\WashingMachine::query()->find($reservation->machine_id)->name }}</td>
<td>{{ $reservation->time }}</td>
<td>{{ \Illuminate\Support\Facades\Date::createFromTimeStamp(strtotime($reservation->time))->format('d/m/Y \k\l\. H:i') }}</td>
<td>{{ ucfirst(\App\User::query()->find($reservation->user_id)->name_first) }} {{ ucfirst(\App\User::query()->find($reservation->user_id)->name_last) }}</td>
<td><a href="{{ route('washing-reservations.edit', ['washing_reservation' => $reservation]) }}"><img class="w-100" src="{{ asset('/images/icons/pencil-dark.svg') }}" alt="Update"></a></td>
<td><form method="post" action="{{ route('washing-reservations.destroy', ['washing_reservation' => $reservation]) }}" class="w-100 nostyle">
@csrf
@method("delete")
@ -65,7 +63,6 @@
url: '{{route('washing-reservations.search')}}',
data: {'search':$value, 'isCheck': $checkboxValue},
success:function (data) {
console.log($checkboxValue);
$('tbody').html(data);
},
error:function (data) {

View File

@ -10,7 +10,7 @@
@foreach($events as $event)
<form method="get" action="{{ route("userevents.create") }}">
<h3 class="sde-blue bold text-center mb-0">{{$event->name}}</h3>
<p class="text-center mt-0">{{$event->date}}</p>
<p class="text-center mt-0">{{ \Illuminate\Support\Facades\Date::createFromTimeStamp(strtotime($event->date))->format('d/m/Y \k\l\. H:i') }}</p>
<p class="text-center">{{$event->description}}</p>
<input type="hidden" name="event_id" value="{{ $event->id }}">
{!! session()->get('error#' . $event->id) !!}

View File

@ -5,7 +5,7 @@
@section("content")
<main>
<h1 class="text-center sde-blue mb-0">Aktiviteter</h1>
<h1 class="text-center sde-blue mb-0">Tilmeldte Aktiviteter</h1>
{!! session()->get('eventunsubscribed') !!}
@if(!$userevents->isEmpty())
@foreach($userevents as $userevent)
@ -13,7 +13,7 @@
@csrf
@method("delete")
<h3 class="sde-blue bold text-center mb-0">{{$userevent->name}}</h3>
<p class="text-center mt-0">{{$userevent->date}}</p>
<p class="text-center mt-0">{{ \Illuminate\Support\Facades\Date::createFromTimeStamp(strtotime($userevent->date))->format('d/m/Y \k\l\. H:i') }}</p>
<p class="text-center">{{$userevent->description}}</p>
<button type="submit" class="btn text-center btn-sde-blue" onclick="return confirm('Are you sure you want to remove this event?');">Afmeld</button>
</form>

View File

@ -5,11 +5,11 @@
<div class="d-flex col block-container mt-2">
<a href="{{ route('menu-plans.index') }}" class="block text-center mb-1">Menuplan</a>
<a href="{{ route('events.index') }}" class="block text-center mb-1">Aktiviteter</a>
<a href="{{ route('washing-reservations.index') }}" class="block text-center mb-1">Reservationer</a>
<a href="{{ route('washing-reservations.appindex') }}" class="block text-center mb-1">Reservationer</a>
<a href="{{ route('contacts.index') }}" class="block text-center mb-1">Kontoret</a>
<a href="{{ route('phones.index') }}" class="block text-center mb-1">Vagttelefon</a>
</div>
<div class="links row">
<div class="row" style="position: absolute; bottom: 8px; align-self: center;">
<a href="https://www.facebook.com" target="_blank" class="link">
<img src="{{ URL::asset('/images/icons/facebook-icon.png') }}" class="h-100" alt="Facebook">
</a>

View File

@ -9,7 +9,7 @@
<h1 class="text-center sde-blue mt-0">Vagttelefon</h1>
<p class="mt-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sodales pulvinar congue aenean suspendisse.</p>
<label class="toggle">
<input class="toggle__input" type="checkbox" name="accept" id="input">
<input class="toggle__input" type="checkbox" name="accept" id="input" onclick="check()">
<span class="toggle__label sde-blue">
<span class="toggle__text sde-blue semi-bold">Accepterer</span>
</span>
@ -20,5 +20,17 @@
@endsection
@section("scripts")
<script>
function check() {
var checkBox = document.getElementById("input");
var btn = document.getElementById("call");
if (checkBox.checked == true){
btn.href = "";
btn.classList.remove("btn-disabled");
} else {
btn.href = "tel:+4556304566";
btn.classList.add("btn-disabled");
}
}
</script>
@endsection