Compare commits
	
		
			12 Commits
		
	
	
		
			67f8e89598
			...
			noiseUI
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3a684dd681 | |||
| 807d2a87cd | |||
| aaaada1b23 | |||
| c602e3ce8c | |||
| 89b96f600b | |||
| 0d1f8d1b42 | |||
| 0acb59513d | |||
| a627e34876 | |||
| 0f03690ec7 | |||
| 68903158cb | |||
| f87743af3b | |||
| a1e57f3d4c | 
							
								
								
									
										46
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,46 @@ | |||||||
|  | # Miscellaneous | ||||||
|  | *.class | ||||||
|  | *.log | ||||||
|  | *.pyc | ||||||
|  | *.swp | ||||||
|  | .DS_Store | ||||||
|  | .atom/ | ||||||
|  | .buildlog/ | ||||||
|  | .history | ||||||
|  | .svn/ | ||||||
|  |  | ||||||
|  | # IntelliJ related | ||||||
|  | *.iml | ||||||
|  | *.ipr | ||||||
|  | *.iws | ||||||
|  | .idea/ | ||||||
|  |  | ||||||
|  | # The .vscode folder contains launch configuration and tasks you configure in | ||||||
|  | # VS Code which you may wish to be included in version control, so this line | ||||||
|  | # is commented out by default. | ||||||
|  | #.vscode/ | ||||||
|  |  | ||||||
|  | # Flutter/Dart/Pub related | ||||||
|  | **/doc/api/ | ||||||
|  | **/ios/Flutter/.last_build_id | ||||||
|  | .dart_tool/ | ||||||
|  | .flutter-plugins | ||||||
|  | .flutter-plugins-dependencies | ||||||
|  | .packages | ||||||
|  | .pub-cache/ | ||||||
|  | .pub/ | ||||||
|  | /build/ | ||||||
|  |  | ||||||
|  | # Web related | ||||||
|  | lib/generated_plugin_registrant.dart | ||||||
|  |  | ||||||
|  | # Symbolication related | ||||||
|  | app.*.symbols | ||||||
|  |  | ||||||
|  | # Obfuscation related | ||||||
|  | app.*.map.json | ||||||
|  |  | ||||||
|  | # Android Studio will place build artifacts here | ||||||
|  | /android/app/debug | ||||||
|  | /android/app/profile | ||||||
|  | /android/app/release | ||||||
							
								
								
									
										3
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,3 +0,0 @@ | |||||||
| # Default ignored files |  | ||||||
| /shelf/ |  | ||||||
| /workspace.xml |  | ||||||
							
								
								
									
										10
									
								
								.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,10 @@ | |||||||
|  | # This file tracks properties of this Flutter project. | ||||||
|  | # Used by Flutter tool to assess capabilities and perform upgrades etc. | ||||||
|  | # | ||||||
|  | # This file should be version controlled and should not be manually edited. | ||||||
|  |  | ||||||
|  | version: | ||||||
|  |   revision: f4abaa0735eba4dfd8f33f73363911d63931fe03 | ||||||
|  |   channel: stable | ||||||
|  |  | ||||||
|  | project_type: app | ||||||
| @@ -4,6 +4,10 @@ This app written in Kotlin and will be used for the PSeminar project Noise devel | |||||||
|  |  | ||||||
| This project is still under development! | This project is still under development! | ||||||
|  |  | ||||||
|  | ##  Branch: | ||||||
|  | This branch is the UI of the Noise application and written in Dart/Flutter | ||||||
|  | Note: This Branch is optimized for Android devices | ||||||
|  |  | ||||||
| ##  Contact: | ##  Contact: | ||||||
|  |  | ||||||
| Email: | Email: | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								android/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,13 @@ | |||||||
|  | gradle-wrapper.jar | ||||||
|  | /.gradle | ||||||
|  | /captures/ | ||||||
|  | /gradlew | ||||||
|  | /gradlew.bat | ||||||
|  | /local.properties | ||||||
|  | GeneratedPluginRegistrant.java | ||||||
|  |  | ||||||
|  | # Remember to never publicly share your keystore. | ||||||
|  | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app | ||||||
|  | key.properties | ||||||
|  | **/*.keystore | ||||||
|  | **/*.jks | ||||||
							
								
								
									
										68
									
								
								android/app/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,68 @@ | |||||||
|  | def localProperties = new Properties() | ||||||
|  | def localPropertiesFile = rootProject.file('local.properties') | ||||||
|  | if (localPropertiesFile.exists()) { | ||||||
|  |     localPropertiesFile.withReader('UTF-8') { reader -> | ||||||
|  |         localProperties.load(reader) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | def flutterRoot = localProperties.getProperty('flutter.sdk') | ||||||
|  | if (flutterRoot == null) { | ||||||
|  |     throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') | ||||||
|  | if (flutterVersionCode == null) { | ||||||
|  |     flutterVersionCode = '1' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | def flutterVersionName = localProperties.getProperty('flutter.versionName') | ||||||
|  | if (flutterVersionName == null) { | ||||||
|  |     flutterVersionName = '1.0' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | apply plugin: 'com.android.application' | ||||||
|  | apply plugin: 'kotlin-android' | ||||||
|  | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | ||||||
|  |  | ||||||
|  | android { | ||||||
|  |     compileSdkVersion 30 | ||||||
|  |  | ||||||
|  |     compileOptions { | ||||||
|  |         sourceCompatibility JavaVersion.VERSION_1_8 | ||||||
|  |         targetCompatibility JavaVersion.VERSION_1_8 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     kotlinOptions { | ||||||
|  |         jvmTarget = '1.8' | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     sourceSets { | ||||||
|  |         main.java.srcDirs += 'src/main/kotlin' | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     defaultConfig { | ||||||
|  |         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | ||||||
|  |         applicationId "com.example.noise" | ||||||
|  |         minSdkVersion 16 | ||||||
|  |         targetSdkVersion 30 | ||||||
|  |         versionCode flutterVersionCode.toInteger() | ||||||
|  |         versionName flutterVersionName | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     buildTypes { | ||||||
|  |         release { | ||||||
|  |             // TODO: Add your own signing config for the release build. | ||||||
|  |             // Signing with the debug keys for now, so `flutter run --release` works. | ||||||
|  |             signingConfig signingConfigs.debug | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | flutter { | ||||||
|  |     source '../..' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | dependencies { | ||||||
|  |     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								android/app/src/debug/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     package="com.example.noise"> | ||||||
|  |     <!-- Flutter needs it to communicate with the running application | ||||||
|  |          to allow setting breakpoints, to provide hot reload, etc. | ||||||
|  |     --> | ||||||
|  |     <uses-permission android:name="android.permission.INTERNET"/> | ||||||
|  | </manifest> | ||||||
							
								
								
									
										41
									
								
								android/app/src/main/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,41 @@ | |||||||
|  | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     package="com.example.noise"> | ||||||
|  |    <application | ||||||
|  |         android:label="noise" | ||||||
|  |         android:icon="@mipmap/ic_launcher"> | ||||||
|  |         <activity | ||||||
|  |             android:name=".MainActivity" | ||||||
|  |             android:launchMode="singleTop" | ||||||
|  |             android:theme="@style/LaunchTheme" | ||||||
|  |             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" | ||||||
|  |             android:hardwareAccelerated="true" | ||||||
|  |             android:windowSoftInputMode="adjustResize"> | ||||||
|  |             <!-- Specifies an Android theme to apply to this Activity as soon as | ||||||
|  |                  the Android process has started. This theme is visible to the user | ||||||
|  |                  while the Flutter UI initializes. After that, this theme continues | ||||||
|  |                  to determine the Window background behind the Flutter UI. --> | ||||||
|  |             <meta-data | ||||||
|  |               android:name="io.flutter.embedding.android.NormalTheme" | ||||||
|  |               android:resource="@style/NormalTheme" | ||||||
|  |               /> | ||||||
|  |             <!-- Displays an Android View that continues showing the launch screen | ||||||
|  |                  Drawable until Flutter paints its first frame, then this splash | ||||||
|  |                  screen fades out. A splash screen is useful to avoid any visual | ||||||
|  |                  gap between the end of Android's launch screen and the painting of | ||||||
|  |                  Flutter's first frame. --> | ||||||
|  |             <meta-data | ||||||
|  |               android:name="io.flutter.embedding.android.SplashScreenDrawable" | ||||||
|  |               android:resource="@drawable/launch_background" | ||||||
|  |               /> | ||||||
|  |             <intent-filter> | ||||||
|  |                 <action android:name="android.intent.action.MAIN"/> | ||||||
|  |                 <category android:name="android.intent.category.LAUNCHER"/> | ||||||
|  |             </intent-filter> | ||||||
|  |         </activity> | ||||||
|  |         <!-- Don't delete the meta-data below. | ||||||
|  |              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> | ||||||
|  |         <meta-data | ||||||
|  |             android:name="flutterEmbedding" | ||||||
|  |             android:value="2" /> | ||||||
|  |     </application> | ||||||
|  | </manifest> | ||||||
							
								
								
									
										12
									
								
								android/app/src/main/res/drawable-v21/launch_background.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <!-- Modify this file to customize your launch splash screen --> | ||||||
|  | <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <item android:drawable="?android:colorBackground" /> | ||||||
|  |  | ||||||
|  |     <!-- You can insert your own image assets here --> | ||||||
|  |     <!-- <item> | ||||||
|  |         <bitmap | ||||||
|  |             android:gravity="center" | ||||||
|  |             android:src="@mipmap/launch_image" /> | ||||||
|  |     </item> --> | ||||||
|  | </layer-list> | ||||||
							
								
								
									
										12
									
								
								android/app/src/main/res/drawable/launch_background.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <!-- Modify this file to customize your launch splash screen --> | ||||||
|  | <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <item android:drawable="@android:color/white" /> | ||||||
|  |  | ||||||
|  |     <!-- You can insert your own image assets here --> | ||||||
|  |     <!-- <item> | ||||||
|  |         <bitmap | ||||||
|  |             android:gravity="center" | ||||||
|  |             android:src="@mipmap/launch_image" /> | ||||||
|  |     </item> --> | ||||||
|  | </layer-list> | ||||||
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-hdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 544 B | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-mdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 442 B | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 721 B | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.4 KiB | 
							
								
								
									
										18
									
								
								android/app/src/main/res/values-night/styles.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  |     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> | ||||||
|  |     <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> | ||||||
|  |         <!-- Show a splash screen on the activity. Automatically removed when | ||||||
|  |              Flutter draws its first frame --> | ||||||
|  |         <item name="android:windowBackground">@drawable/launch_background</item> | ||||||
|  |     </style> | ||||||
|  |     <!-- Theme applied to the Android Window as soon as the process has started. | ||||||
|  |          This theme determines the color of the Android Window while your | ||||||
|  |          Flutter UI initializes, as well as behind your Flutter UI while its | ||||||
|  |          running. | ||||||
|  |           | ||||||
|  |          This Theme is only used starting with V2 of Flutter's Android embedding. --> | ||||||
|  |     <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> | ||||||
|  |         <item name="android:windowBackground">?android:colorBackground</item> | ||||||
|  |     </style> | ||||||
|  | </resources> | ||||||
							
								
								
									
										18
									
								
								android/app/src/main/res/values/styles.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  |     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> | ||||||
|  |     <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> | ||||||
|  |         <!-- Show a splash screen on the activity. Automatically removed when | ||||||
|  |              Flutter draws its first frame --> | ||||||
|  |         <item name="android:windowBackground">@drawable/launch_background</item> | ||||||
|  |     </style> | ||||||
|  |     <!-- Theme applied to the Android Window as soon as the process has started. | ||||||
|  |          This theme determines the color of the Android Window while your | ||||||
|  |          Flutter UI initializes, as well as behind your Flutter UI while its | ||||||
|  |          running. | ||||||
|  |           | ||||||
|  |          This Theme is only used starting with V2 of Flutter's Android embedding. --> | ||||||
|  |     <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> | ||||||
|  |         <item name="android:windowBackground">?android:colorBackground</item> | ||||||
|  |     </style> | ||||||
|  | </resources> | ||||||
							
								
								
									
										7
									
								
								android/app/src/profile/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     package="com.example.noise"> | ||||||
|  |     <!-- Flutter needs it to communicate with the running application | ||||||
|  |          to allow setting breakpoints, to provide hot reload, etc. | ||||||
|  |     --> | ||||||
|  |     <uses-permission android:name="android.permission.INTERNET"/> | ||||||
|  | </manifest> | ||||||
							
								
								
									
										29
									
								
								android/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | |||||||
|  | buildscript { | ||||||
|  |     ext.kotlin_version = '1.3.50' | ||||||
|  |     repositories { | ||||||
|  |         google() | ||||||
|  |         mavenCentral() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     dependencies { | ||||||
|  |         classpath 'com.android.tools.build:gradle:4.1.0' | ||||||
|  |         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | allprojects { | ||||||
|  |     repositories { | ||||||
|  |         google() | ||||||
|  |         mavenCentral() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | rootProject.buildDir = '../build' | ||||||
|  | subprojects { | ||||||
|  |     project.buildDir = "${rootProject.buildDir}/${project.name}" | ||||||
|  |     project.evaluationDependsOn(':app') | ||||||
|  | } | ||||||
|  |  | ||||||
|  | task clean(type: Delete) { | ||||||
|  |     delete rootProject.buildDir | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								android/gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | |||||||
|  | org.gradle.jvmargs=-Xmx1536M | ||||||
|  | android.useAndroidX=true | ||||||
|  | android.enableJetifier=true | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| #Mon Jun 28 15:19:24 CEST 2021 | #Fri Jun 23 08:50:38 CEST 2017 | ||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip |  | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| zipStorePath=wrapper/dists |  | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
|  | zipStorePath=wrapper/dists | ||||||
|  | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip | ||||||
							
								
								
									
										11
									
								
								android/settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | |||||||
|  | include ':app' | ||||||
|  |  | ||||||
|  | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") | ||||||
|  | def properties = new Properties() | ||||||
|  |  | ||||||
|  | assert localPropertiesFile.exists() | ||||||
|  | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } | ||||||
|  |  | ||||||
|  | def flutterSdkPath = properties.getProperty("flutter.sdk") | ||||||
|  | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | ||||||
|  | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" | ||||||
							
								
								
									
										1
									
								
								app/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1 +0,0 @@ | |||||||
| /build |  | ||||||
| @@ -1,88 +0,0 @@ | |||||||
| plugins { |  | ||||||
|     id 'com.android.application' |  | ||||||
|     id 'kotlin-android' |  | ||||||
|     id("com.apollographql.apollo3").version("3.0.0") |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| android { |  | ||||||
|     compileSdk 31 |  | ||||||
|  |  | ||||||
|     defaultConfig { |  | ||||||
|         applicationId "org.ddnss.sfs.git.wdg.test" |  | ||||||
|         minSdk 24 |  | ||||||
|         targetSdk 31 |  | ||||||
|         versionCode 1 |  | ||||||
|         versionName "1.0" |  | ||||||
|  |  | ||||||
|         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     buildTypes { |  | ||||||
|         release { |  | ||||||
|             minifyEnabled false |  | ||||||
|             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     compileOptions { |  | ||||||
|         sourceCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|         targetCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|     } |  | ||||||
|     kotlinOptions { |  | ||||||
|         jvmTarget = '1.8' |  | ||||||
|     } |  | ||||||
|     buildFeatures { |  | ||||||
|         viewBinding true |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| apollo { |  | ||||||
|     packageName.set("org.ddnss.sfs.git.wdg.noise") |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| dependencies { |  | ||||||
|  |  | ||||||
|     implementation 'androidx.core:core-ktx:1.7.0' |  | ||||||
|     implementation 'androidx.appcompat:appcompat:1.4.0' |  | ||||||
|     implementation 'com.google.android.material:material:1.4.0' |  | ||||||
|     implementation 'androidx.constraintlayout:constraintlayout:2.1.2' |  | ||||||
|     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0' |  | ||||||
|     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0' |  | ||||||
|     implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' |  | ||||||
|     implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' |  | ||||||
|     testImplementation 'junit:junit:4.+' |  | ||||||
|     androidTestImplementation 'androidx.test.ext:junit:1.1.3' |  | ||||||
|     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' |  | ||||||
| } |  | ||||||
|  |  | ||||||
| dependencies { |  | ||||||
|     def room_version = "2.4.1" |  | ||||||
|  |  | ||||||
|     implementation "androidx.room:room-runtime:$room_version" |  | ||||||
|     annotationProcessor "androidx.room:room-compiler:$room_version" |  | ||||||
|  |  | ||||||
|     // optional - RxJava2 support for Room |  | ||||||
|     implementation "androidx.room:room-rxjava2:$room_version" |  | ||||||
|  |  | ||||||
|     // optional - RxJava3 support for Room |  | ||||||
|     implementation "androidx.room:room-rxjava3:$room_version" |  | ||||||
|  |  | ||||||
|     // optional - Guava support for Room, including Optional and ListenableFuture |  | ||||||
|     implementation "androidx.room:room-guava:$room_version" |  | ||||||
|  |  | ||||||
|     // optional - Test helpers |  | ||||||
|     testImplementation "androidx.room:room-testing:$room_version" |  | ||||||
|  |  | ||||||
|     // optional - Paging 3 Integration |  | ||||||
|     implementation "androidx.room:room-paging:$room_version" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| dependencies { |  | ||||||
|     // ... |  | ||||||
|     implementation("com.apollographql.apollo3:apollo-runtime:3.0.0") |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								app/proguard-rules.pro
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,21 +0,0 @@ | |||||||
| # 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 |  | ||||||
| @@ -1,24 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise |  | ||||||
|  |  | ||||||
| import androidx.test.platform.app.InstrumentationRegistry |  | ||||||
| import androidx.test.ext.junit.runners.AndroidJUnit4 |  | ||||||
|  |  | ||||||
| import org.junit.Test |  | ||||||
| import org.junit.runner.RunWith |  | ||||||
|  |  | ||||||
| import org.junit.Assert.* |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Instrumented test, which will execute on an Android device. |  | ||||||
|  * |  | ||||||
|  * See [testing documentation](http://d.android.com/tools/testing). |  | ||||||
|  */ |  | ||||||
| @RunWith(AndroidJUnit4::class) |  | ||||||
| class ExampleInstrumentedTest { |  | ||||||
|     @Test |  | ||||||
|     fun useAppContext() { |  | ||||||
|         // Context of the app under test. |  | ||||||
|         val appContext = InstrumentationRegistry.getInstrumentation().targetContext |  | ||||||
|         assertEquals("org.dnss.sfs.git.wdg.noise", appContext.packageName) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="org.ddnss.sfs.git.wdg.noise"> |  | ||||||
|  |  | ||||||
|     <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/Theme.Noise"> |  | ||||||
|         <activity |  | ||||||
|             android:name="org.ddnss.sfs.git.wdg.noise.MainActivity" |  | ||||||
|             android:label="@string/app_name" |  | ||||||
|             android:theme="@style/Theme.Noise.NoActionBar" |  | ||||||
|             android:exported="true"> |  | ||||||
|             <intent-filter> |  | ||||||
|                 <action android:name="android.intent.action.MAIN" /> |  | ||||||
|  |  | ||||||
|                 <category android:name="android.intent.category.LAUNCHER" /> |  | ||||||
|             </intent-filter> |  | ||||||
|         </activity> |  | ||||||
|     </application> |  | ||||||
|  |  | ||||||
|     <uses-permission android:name="android.permission.INTERNET" /> |  | ||||||
|     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |  | ||||||
|  |  | ||||||
| </manifest> |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| query GetChats($id: ID!, $pw: String!){ |  | ||||||
|     chats(user: $id, passwordHash: $pw){ |  | ||||||
|         id |  | ||||||
|         users |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| query GetGroupChats($id: ID!, $pw: String!){ |  | ||||||
|     groupChats(user: $id, passwordHash: $pw){ |  | ||||||
|         id |  | ||||||
|         users |  | ||||||
|         title |  | ||||||
|         description |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| #query GetMessages{ |  | ||||||
|  |  | ||||||
| #} |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| query GetUsers { |  | ||||||
|     users { |  | ||||||
|         id |  | ||||||
|         userName |  | ||||||
|         displayName |  | ||||||
|         activated |  | ||||||
|         created |  | ||||||
|         lastOnline |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,166 +0,0 @@ | |||||||
| type Message { |  | ||||||
|   id: ID! |  | ||||||
|  |  | ||||||
|   timestamp: String! |  | ||||||
|  |  | ||||||
|   sender: ID! |  | ||||||
|  |  | ||||||
|   msgType: MsgType! |  | ||||||
|  |  | ||||||
|   content: String |  | ||||||
|  |  | ||||||
|   hideFor: [ID!] |  | ||||||
|  |  | ||||||
|   seenBy: [ID!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type ExternalServersPreferences { |  | ||||||
|   privacyPreferences: PrivacyPreferences! |  | ||||||
|  |  | ||||||
|   externalServers: RestrictionPolicy! |  | ||||||
|  |  | ||||||
|   externalServersLimit: [Url!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type Mutation { |  | ||||||
|   newUser(newUser: NewUser!): ID! |  | ||||||
|  |  | ||||||
|   newChat(user: ID!, passwordHash: String!, with: ID!): ID! |  | ||||||
|  |  | ||||||
|   newGroupChat(user: ID!, passwordHash: String!, title: String!, description: String, with: [ID!]!): ID! |  | ||||||
|  |  | ||||||
|   sendMessage(user: ID!, passwordHash: String!, chat: ID!, msg: MessageInput!): ID! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| enum RestrictionPolicy { |  | ||||||
|   EVERYONE |  | ||||||
|  |  | ||||||
|   EXCLUDING |  | ||||||
|  |  | ||||||
|   INCLUDING |  | ||||||
|  |  | ||||||
|   NONE |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type NotificationPreferences { |  | ||||||
|   lockDetails: Boolean! |  | ||||||
|  |  | ||||||
|   doNotDisturb: Boolean! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| """ |  | ||||||
| DateTime |  | ||||||
| """ |  | ||||||
| scalar DateTimeUtc |  | ||||||
|  |  | ||||||
| """ |  | ||||||
| Url |  | ||||||
| """ |  | ||||||
| scalar Url |  | ||||||
|  |  | ||||||
| type Query { |  | ||||||
|   getUserID(username: String!): ID! |  | ||||||
|  |  | ||||||
|   isUsernameUsed(username: String!): Boolean! |  | ||||||
|  |  | ||||||
|   users: [User!]! |  | ||||||
|  |  | ||||||
|   userPreferences(id: ID!, passwordHash: String!): UserPreferences! |  | ||||||
|  |  | ||||||
|   chats(user: ID!, passwordHash: String!): [Chat!]! |  | ||||||
|  |  | ||||||
|   groupChats(user: ID!, passwordHash: String!): [GroupChat!]! |  | ||||||
|  |  | ||||||
|   getMessages(user: ID!, passwordHash: String!, chat: ID!, lastMsg: ID, limit: Int): [Message!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type SecurityPreferences { |  | ||||||
|   accountTokens: [ID!]! |  | ||||||
|  |  | ||||||
|   passwordHash: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type PrivacyPreferences { |  | ||||||
|   discovery: RestrictionPolicy! |  | ||||||
|  |  | ||||||
|   discoveryUserLimit: [String!]! |  | ||||||
|  |  | ||||||
|   discoveryServerLimit: [Url!]! |  | ||||||
|  |  | ||||||
|   lastSeen: RestrictionPolicy! |  | ||||||
|  |  | ||||||
|   lastSeenUserLimit: [String!]! |  | ||||||
|  |  | ||||||
|   lastSeenServerLimit: [Url!]! |  | ||||||
|  |  | ||||||
|   lastSeenCourse: Boolean! |  | ||||||
|  |  | ||||||
|   info: RestrictionPolicy! |  | ||||||
|  |  | ||||||
|   infoUserLimit: [String!]! |  | ||||||
|  |  | ||||||
|   infoServerLimit: [Url!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type UserPreferences { |  | ||||||
|   privacyPreferences: PrivacyPreferences! |  | ||||||
|  |  | ||||||
|   notificationPreferences: NotificationPreferences! |  | ||||||
|  |  | ||||||
|   securityPreferences: SecurityPreferences! |  | ||||||
|  |  | ||||||
|   externalServersPreferences: ExternalServersPreferences! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input NewUser { |  | ||||||
|   userName: String! |  | ||||||
|  |  | ||||||
|   displayName: String |  | ||||||
|  |  | ||||||
|   passwordHash: String! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input MessageInput { |  | ||||||
|   msgType: MsgType! |  | ||||||
|  |  | ||||||
|   content: String |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type User { |  | ||||||
|   id: ID! |  | ||||||
|  |  | ||||||
|   userName: String! |  | ||||||
|  |  | ||||||
|   displayName: String |  | ||||||
|  |  | ||||||
|   activated: Boolean! |  | ||||||
|  |  | ||||||
|   created: DateTimeUtc! |  | ||||||
|  |  | ||||||
|   lastOnline: DateTimeUtc |  | ||||||
| } |  | ||||||
|  |  | ||||||
| enum MsgType { |  | ||||||
|   TEXT |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type Chat { |  | ||||||
|   id: ID! |  | ||||||
|  |  | ||||||
|   users: [ID!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type GroupChat { |  | ||||||
|   id: ID! |  | ||||||
|  |  | ||||||
|   title: String! |  | ||||||
|  |  | ||||||
|   description: String |  | ||||||
|  |  | ||||||
|   users: [ID!]! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| schema { |  | ||||||
|   query: Query |  | ||||||
|   mutation: Mutation |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 14 KiB | 
| @@ -1,6 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise |  | ||||||
| import com.apollographql.apollo3.ApolloClient |  | ||||||
|  |  | ||||||
|     val apolloClient = ApolloClient.Builder() |  | ||||||
|         .serverUrl("https://noise.sfs.ddnss.org/graphql") |  | ||||||
|         .build() |  | ||||||
| @@ -1,72 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise |  | ||||||
|  |  | ||||||
| import android.os.Bundle |  | ||||||
| import android.view.Menu |  | ||||||
| import android.widget.TextView |  | ||||||
| import com.google.android.material.snackbar.Snackbar |  | ||||||
| import com.google.android.material.navigation.NavigationView |  | ||||||
| import androidx.navigation.findNavController |  | ||||||
| import androidx.navigation.ui.AppBarConfiguration |  | ||||||
| import androidx.navigation.ui.navigateUp |  | ||||||
| import androidx.navigation.ui.setupActionBarWithNavController |  | ||||||
| import androidx.navigation.ui.setupWithNavController |  | ||||||
| import androidx.drawerlayout.widget.DrawerLayout |  | ||||||
| import androidx.appcompat.app.AppCompatActivity |  | ||||||
| import androidx.lifecycle.lifecycleScope |  | ||||||
| import org.ddnss.sfs.git.wdg.noise.databinding.ActivityMainBinding |  | ||||||
|  |  | ||||||
| class MainActivity : AppCompatActivity() { |  | ||||||
|  |  | ||||||
|     private lateinit var appBarConfiguration: AppBarConfiguration |  | ||||||
|     private lateinit var binding: ActivityMainBinding |  | ||||||
|  |  | ||||||
|     override fun onCreate(savedInstanceState: Bundle?) { |  | ||||||
|         super.onCreate(savedInstanceState) |  | ||||||
|  |  | ||||||
|         binding = ActivityMainBinding.inflate(layoutInflater) |  | ||||||
|         setContentView(binding.root) |  | ||||||
|  |  | ||||||
|         setSupportActionBar(binding.appBarMain.toolbar) |  | ||||||
|  |  | ||||||
|         binding.appBarMain.fab.setOnClickListener { view -> |  | ||||||
|             Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) |  | ||||||
|                 .setAction("Action", null).show() |  | ||||||
|         } |  | ||||||
|         val drawerLayout: DrawerLayout = binding.drawerLayout |  | ||||||
|         val navView: NavigationView = binding.navView |  | ||||||
|         val navController = findNavController(R.id.nav_host_fragment_content_main) |  | ||||||
|         // Passing each menu ID as a set of Ids because each |  | ||||||
|         // menu should be considered as top level destinations. |  | ||||||
|         appBarConfiguration = AppBarConfiguration( |  | ||||||
|             setOf( |  | ||||||
|                 R.id.nav_home, R.id.nav_gallery |  | ||||||
|             ), drawerLayout |  | ||||||
|         ) |  | ||||||
|         setupActionBarWithNavController(navController, appBarConfiguration) |  | ||||||
|         navView.setupWithNavController(navController) |  | ||||||
|         getData() |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fun getData(){ |  | ||||||
|         val text: TextView = findViewById<TextView>(R.id.testData) |  | ||||||
|  |  | ||||||
|         lifecycleScope.launchWhenResumed { |  | ||||||
|             val response = apolloClient.query(GetGroupChatsQuery("7bea8833b6d64a37ae0949619e06b692", "1234567890")).execute() |  | ||||||
|  |  | ||||||
|             //Log.d("LaunchList", "Success ${response.data}") |  | ||||||
|             text.text = response.data.toString() |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     override fun onCreateOptionsMenu(menu: Menu): Boolean { |  | ||||||
|         // Inflate the menu; this adds items to the action bar if it is present. |  | ||||||
|         menuInflater.inflate(R.menu.main, menu) |  | ||||||
|         return true |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     override fun onSupportNavigateUp(): Boolean { |  | ||||||
|         val navController = findNavController(R.id.nav_host_fragment_content_main) |  | ||||||
|         return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,50 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise.ui.gallery |  | ||||||
|  |  | ||||||
| import android.os.Bundle |  | ||||||
| import android.view.LayoutInflater |  | ||||||
| import android.view.View |  | ||||||
| import android.view.ViewGroup |  | ||||||
| import android.widget.TextView |  | ||||||
| import androidx.fragment.app.Fragment |  | ||||||
| import androidx.lifecycle.ViewModelProvider |  | ||||||
| import androidx.lifecycle.lifecycleScope |  | ||||||
| import org.ddnss.sfs.git.wdg.noise.GetUsersQuery |  | ||||||
| import org.ddnss.sfs.git.wdg.noise.apolloClient |  | ||||||
| import org.ddnss.sfs.git.wdg.noise.databinding.FragmentSettingsBinding |  | ||||||
|  |  | ||||||
| class GalleryFragment : Fragment() { |  | ||||||
|  |  | ||||||
|     private lateinit var galleryViewModel: GalleryViewModel |  | ||||||
|     private var _binding: FragmentSettingsBinding? = null |  | ||||||
|  |  | ||||||
|     // This property is only valid between onCreateView and |  | ||||||
|     // onDestroyView. |  | ||||||
|     private val binding get() = _binding!! |  | ||||||
|  |  | ||||||
|     //var text: TextView = findViewById(R.id.testData) as TextView |  | ||||||
|  |  | ||||||
|     override fun onCreateView( |  | ||||||
|         inflater: LayoutInflater, |  | ||||||
|         container: ViewGroup?, |  | ||||||
|         savedInstanceState: Bundle? |  | ||||||
|     ): View? { |  | ||||||
|         galleryViewModel = |  | ||||||
|             ViewModelProvider(this).get(GalleryViewModel::class.java) |  | ||||||
|  |  | ||||||
|         _binding = FragmentSettingsBinding.inflate(inflater, container, false) |  | ||||||
|         val root: View = binding.root |  | ||||||
|  |  | ||||||
|         return root |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     override fun onViewCreated(view: View, savedInstanceState: Bundle?) { |  | ||||||
|         super.onViewCreated(view, savedInstanceState) |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     override fun onDestroyView() { |  | ||||||
|         super.onDestroyView() |  | ||||||
|         _binding = null |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise.ui.gallery |  | ||||||
|  |  | ||||||
| import androidx.lifecycle.LiveData |  | ||||||
| import androidx.lifecycle.MutableLiveData |  | ||||||
| import androidx.lifecycle.ViewModel |  | ||||||
|  |  | ||||||
| class GalleryViewModel : ViewModel() { |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,38 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise.ui.home |  | ||||||
|  |  | ||||||
| import android.os.Bundle |  | ||||||
| import android.view.LayoutInflater |  | ||||||
| import android.view.View |  | ||||||
| import android.view.ViewGroup |  | ||||||
| import androidx.fragment.app.Fragment |  | ||||||
| import androidx.lifecycle.ViewModelProvider |  | ||||||
| import org.ddnss.sfs.git.wdg.noise.databinding.FragmentHomeBinding |  | ||||||
|  |  | ||||||
| class HomeFragment : Fragment() { |  | ||||||
|  |  | ||||||
|     private lateinit var homeViewModel: HomeViewModel |  | ||||||
|     private var _binding: FragmentHomeBinding? = null |  | ||||||
|  |  | ||||||
|     // This property is only valid between onCreateView and |  | ||||||
|     // onDestroyView. |  | ||||||
|     private val binding get() = _binding!! |  | ||||||
|  |  | ||||||
|     override fun onCreateView( |  | ||||||
|         inflater: LayoutInflater, |  | ||||||
|         container: ViewGroup?, |  | ||||||
|         savedInstanceState: Bundle? |  | ||||||
|     ): View? { |  | ||||||
|         homeViewModel = |  | ||||||
|             ViewModelProvider(this).get(HomeViewModel::class.java) |  | ||||||
|  |  | ||||||
|         _binding = FragmentHomeBinding.inflate(inflater, container, false) |  | ||||||
|         val root: View = binding.root |  | ||||||
|  |  | ||||||
|         return root |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     override fun onDestroyView() { |  | ||||||
|         super.onDestroyView() |  | ||||||
|         _binding = null |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise.ui.home |  | ||||||
|  |  | ||||||
| import androidx.lifecycle.LiveData |  | ||||||
| import androidx.lifecycle.MutableLiveData |  | ||||||
| import androidx.lifecycle.ViewModel |  | ||||||
|  |  | ||||||
| class HomeViewModel : ViewModel() { |  | ||||||
|  |  | ||||||
|     private val _text = MutableLiveData<String>().apply { |  | ||||||
|         value = "This is home Fragment" |  | ||||||
|     } |  | ||||||
|     val text: LiveData<String> = _text |  | ||||||
| } |  | ||||||
| @@ -1,30 +0,0 @@ | |||||||
| <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> |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     android:width="24dp" |  | ||||||
|     android:height="24dp" |  | ||||||
|     android:viewportWidth="24" |  | ||||||
|     android:viewportHeight="24" |  | ||||||
|     android:tint="?attr/colorControlNormal"> |  | ||||||
|   <path |  | ||||||
|       android:fillColor="@android:color/white" |  | ||||||
|       android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM6,9h12v2L6,11L6,9zM14,14L6,14v-2h8v2zM18,8L6,8L6,6h12v2z"/> |  | ||||||
| </vector> |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     android:width="24dp" |  | ||||||
|     android:height="24dp" |  | ||||||
|     android:viewportWidth="24" |  | ||||||
|     android:viewportHeight="24" |  | ||||||
|     android:tint="?attr/colorControlNormal"> |  | ||||||
|   <path |  | ||||||
|       android:fillColor="@android:color/white" |  | ||||||
|       android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/> |  | ||||||
| </vector> |  | ||||||
| @@ -1,74 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <vector |  | ||||||
|     android:height="108dp" |  | ||||||
|     android:width="108dp" |  | ||||||
|     android:viewportHeight="108" |  | ||||||
|     android:viewportWidth="108" |  | ||||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> |  | ||||||
|     <path android:fillColor="#3DDC84" |  | ||||||
|           android:pathData="M0,0h108v108h-108z"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M9,0L9,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,0L19,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M29,0L29,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M39,0L39,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M49,0L49,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M59,0L59,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M69,0L69,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M79,0L79,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M89,0L89,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M99,0L99,108" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,9L108,9" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,19L108,19" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,29L108,29" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,39L108,39" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,49L108,49" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,59L108,59" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,69L108,69" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,79L108,79" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,89L108,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M0,99L108,99" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,29L89,29" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,39L89,39" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,49L89,49" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,59L89,59" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,69L89,69" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M19,79L89,79" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M29,19L29,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M39,19L39,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M49,19L49,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M59,19L59,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M69,19L69,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
|     <path android:fillColor="#00000000" android:pathData="M79,19L79,89" |  | ||||||
|           android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> |  | ||||||
| </vector> |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| <shape xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     android:shape="rectangle"> |  | ||||||
|     <gradient |  | ||||||
|         android:angle="135" |  | ||||||
|         android:centerColor="#009688" |  | ||||||
|         android:endColor="#00695C" |  | ||||||
|         android:startColor="#4DB6AC" |  | ||||||
|         android:type="linear" /> |  | ||||||
| </shape> |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer_layout" |  | ||||||
|     android:layout_width="match_parent" |  | ||||||
|     android:layout_height="match_parent" |  | ||||||
|     android:fitsSystemWindows="true" |  | ||||||
|     tools:openDrawer="start"> |  | ||||||
|  |  | ||||||
|     <include |  | ||||||
|         android:id="@+id/app_bar_main" |  | ||||||
|         layout="@layout/app_bar_main" |  | ||||||
|         android:layout_width="match_parent" |  | ||||||
|         android:layout_height="match_parent" /> |  | ||||||
|  |  | ||||||
|     <com.google.android.material.navigation.NavigationView |  | ||||||
|         android:id="@+id/nav_view" |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="match_parent" |  | ||||||
|         android:layout_gravity="start" |  | ||||||
|         android:fitsSystemWindows="true" |  | ||||||
|         app:headerLayout="@layout/nav_header_main" |  | ||||||
|         app:menu="@menu/activity_main_drawer" /> |  | ||||||
| </androidx.drawerlayout.widget.DrawerLayout> |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <androidx.coordinatorlayout.widget.CoordinatorLayout 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"> |  | ||||||
|  |  | ||||||
|     <com.google.android.material.appbar.AppBarLayout |  | ||||||
|         android:layout_width="match_parent" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:theme="@style/Theme.Noise.AppBarOverlay"> |  | ||||||
|  |  | ||||||
|         <androidx.appcompat.widget.Toolbar |  | ||||||
|             android:id="@+id/toolbar" |  | ||||||
|             android:layout_width="match_parent" |  | ||||||
|             android:layout_height="?attr/actionBarSize" |  | ||||||
|             android:background="?attr/colorPrimary" |  | ||||||
|             app:popupTheme="@style/Theme.Noise.PopupOverlay" /> |  | ||||||
|  |  | ||||||
|     </com.google.android.material.appbar.AppBarLayout> |  | ||||||
|  |  | ||||||
|     <include layout="@layout/content_main" /> |  | ||||||
|  |  | ||||||
|     <com.google.android.material.floatingactionbutton.FloatingActionButton |  | ||||||
|         android:id="@+id/fab" |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:layout_gravity="bottom|end" |  | ||||||
|         android:layout_margin="@dimen/fab_margin" |  | ||||||
|         app:srcCompat="@android:drawable/ic_dialog_email" /> |  | ||||||
|  |  | ||||||
| </androidx.coordinatorlayout.widget.CoordinatorLayout> |  | ||||||
| @@ -1,20 +0,0 @@ | |||||||
| <?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" |  | ||||||
|     app:layout_behavior="@string/appbar_scrolling_view_behavior" |  | ||||||
|     tools:showIn="@layout/app_bar_main"> |  | ||||||
|  |  | ||||||
|     <fragment |  | ||||||
|         android:id="@+id/nav_host_fragment_content_main" |  | ||||||
|         android:name="androidx.navigation.fragment.NavHostFragment" |  | ||||||
|         android:layout_width="match_parent" |  | ||||||
|         android:layout_height="match_parent" |  | ||||||
|         app:defaultNavHost="true" |  | ||||||
|         app:layout_constraintLeft_toLeftOf="parent" |  | ||||||
|         app:layout_constraintRight_toRightOf="parent" |  | ||||||
|         app:layout_constraintTop_toTopOf="parent" |  | ||||||
|         app:navGraph="@navigation/mobile_navigation" /> |  | ||||||
| </androidx.constraintlayout.widget.ConstraintLayout> |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| <?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=".ui.home.HomeFragment"> |  | ||||||
|  |  | ||||||
|     <TextView |  | ||||||
|         android:id="@+id/testData" |  | ||||||
|         android:layout_width="406dp" |  | ||||||
|         android:layout_height="715dp" |  | ||||||
|         android:text="TestData" |  | ||||||
|         tools:layout_editor_absoluteX="2dp" |  | ||||||
|         tools:layout_editor_absoluteY="3dp" /> |  | ||||||
|  |  | ||||||
| </androidx.constraintlayout.widget.ConstraintLayout> |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| <?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=".ui.gallery.GalleryFragment"> |  | ||||||
|  |  | ||||||
| </androidx.constraintlayout.widget.ConstraintLayout> |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" |  | ||||||
|     android:layout_width="match_parent" |  | ||||||
|     android:layout_height="@dimen/nav_header_height" |  | ||||||
|     android:background="@drawable/side_nav_bar" |  | ||||||
|     android:gravity="bottom" |  | ||||||
|     android:orientation="vertical" |  | ||||||
|     android:paddingLeft="@dimen/activity_horizontal_margin" |  | ||||||
|     android:paddingTop="@dimen/activity_vertical_margin" |  | ||||||
|     android:paddingRight="@dimen/activity_horizontal_margin" |  | ||||||
|     android:paddingBottom="@dimen/activity_vertical_margin" |  | ||||||
|     android:theme="@style/ThemeOverlay.AppCompat.Dark"> |  | ||||||
|  |  | ||||||
|     <ImageView |  | ||||||
|         android:id="@+id/imageView" |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:contentDescription="@string/nav_header_desc" |  | ||||||
|         android:paddingTop="@dimen/nav_header_vertical_spacing" |  | ||||||
|         app:srcCompat="@mipmap/ic_launcher_round" /> |  | ||||||
|  |  | ||||||
|     <TextView |  | ||||||
|         android:layout_width="match_parent" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:paddingTop="@dimen/nav_header_vertical_spacing" |  | ||||||
|         android:text="@string/nav_header_title" |  | ||||||
|         android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> |  | ||||||
|  |  | ||||||
|     <TextView |  | ||||||
|         android:id="@+id/textView" |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:text="@string/nav_header_subtitle" /> |  | ||||||
| </LinearLayout> |  | ||||||
| @@ -1,16 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     xmlns:tools="http://schemas.android.com/tools" |  | ||||||
|     tools:showIn="navigation_view"> |  | ||||||
|  |  | ||||||
|     <group android:checkableBehavior="single"> |  | ||||||
|         <item |  | ||||||
|             android:id="@+id/nav_home" |  | ||||||
|             android:icon="@drawable/ic_baseline_chat_24" |  | ||||||
|             android:title="@string/menu_chat" /> |  | ||||||
|         <item |  | ||||||
|             android:id="@+id/nav_gallery" |  | ||||||
|             android:icon="@drawable/ic_baseline_settings_24" |  | ||||||
|             android:title="@string/menu_settings" /> |  | ||||||
|     </group> |  | ||||||
| </menu> |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     xmlns:app="http://schemas.android.com/apk/res-auto"> |  | ||||||
|     <item |  | ||||||
|         android:id="@+id/action_settings" |  | ||||||
|         android:orderInCategory="100" |  | ||||||
|         android:title="@string/action_settings" |  | ||||||
|         app:showAsAction="never" /> |  | ||||||
| </menu> |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |  | ||||||
|     <background android:drawable="@drawable/ic_launcher_background"/> |  | ||||||
|     <foreground android:drawable="@mipmap/ic_launcher_foreground"/> |  | ||||||
| </adaptive-icon> |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |  | ||||||
|     <background android:drawable="@drawable/ic_launcher_background"/> |  | ||||||
|     <foreground android:drawable="@mipmap/ic_launcher_foreground"/> |  | ||||||
| </adaptive-icon> |  | ||||||
| Before Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 2.6 KiB | 
| Before Width: | Height: | Size: 4.2 KiB | 
| Before Width: | Height: | Size: 6.2 KiB | 
| @@ -1,19 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <navigation 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:id="@+id/mobile_navigation" |  | ||||||
|     app:startDestination="@+id/nav_home"> |  | ||||||
|  |  | ||||||
|     <fragment |  | ||||||
|         android:id="@+id/nav_home" |  | ||||||
|         android:name="org.ddnss.sfs.git.wdg.noise.ui.home.HomeFragment" |  | ||||||
|         android:label="@string/menu_chat" |  | ||||||
|         tools:layout="@layout/fragment_home" /> |  | ||||||
|  |  | ||||||
|     <fragment |  | ||||||
|         android:id="@+id/nav_gallery" |  | ||||||
|         android:name="org.ddnss.sfs.git.wdg.noise.ui.gallery.GalleryFragment" |  | ||||||
|         android:label="@string/menu_settings" |  | ||||||
|         tools:layout="@layout/fragment_settings" /> |  | ||||||
| </navigation> |  | ||||||
| @@ -1,16 +0,0 @@ | |||||||
| <resources xmlns:tools="http://schemas.android.com/tools"> |  | ||||||
|     <!-- Base application theme. --> |  | ||||||
|     <style name="Theme.Noise" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> |  | ||||||
|         <!-- Primary brand color. --> |  | ||||||
|         <item name="colorPrimary">@color/green_dark</item> |  | ||||||
|         <item name="colorPrimaryVariant">@color/green</item> |  | ||||||
|         <item name="colorOnPrimary">@color/black</item> |  | ||||||
|         <!-- Secondary brand color. --> |  | ||||||
|         <item name="colorSecondary">@color/teal_200</item> |  | ||||||
|         <item name="colorSecondaryVariant">@color/teal_200</item> |  | ||||||
|         <item name="colorOnSecondary">@color/black</item> |  | ||||||
|         <!-- Status bar color. --> |  | ||||||
|         <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> |  | ||||||
|         <!-- Customize your theme here. --> |  | ||||||
|     </style> |  | ||||||
| </resources> |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <resources> |  | ||||||
|     <color name="green">#08c40e</color> |  | ||||||
|     <color name="green_dark">#00802b</color> |  | ||||||
|     <color name="green_light">#6cf971</color> |  | ||||||
|     <color name="teal_200">#FF03DAC5</color> |  | ||||||
|     <color name="teal_700">#FF018786</color> |  | ||||||
|     <color name="black">#FF000000</color> |  | ||||||
|     <color name="white">#FFFFFFFF</color> |  | ||||||
| </resources> |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| <resources> |  | ||||||
|     <!-- Default screen margins, per the Android Design guidelines. --> |  | ||||||
|     <dimen name="activity_horizontal_margin">16dp</dimen> |  | ||||||
|     <dimen name="activity_vertical_margin">16dp</dimen> |  | ||||||
|     <dimen name="nav_header_vertical_spacing">8dp</dimen> |  | ||||||
|     <dimen name="nav_header_height">176dp</dimen> |  | ||||||
|     <dimen name="fab_margin">16dp</dimen> |  | ||||||
| </resources> |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| <resources> |  | ||||||
|     <string name="app_name">Noise</string> |  | ||||||
|     <string name="navigation_drawer_open">Open navigation drawer</string> |  | ||||||
|     <string name="navigation_drawer_close">Close navigation drawer</string> |  | ||||||
|     <string name="nav_header_title">Noise</string> |  | ||||||
|     <string name="nav_header_subtitle">app@sfs.ddnss.org</string> |  | ||||||
|     <string name="nav_header_desc">Navigation header</string> |  | ||||||
|     <string name="action_settings">Settings</string> |  | ||||||
|  |  | ||||||
|     <string name="menu_settings">Settings</string> |  | ||||||
|     <string name="menu_chat">Chat</string> |  | ||||||
|     <string name="menu_test">test</string> |  | ||||||
| </resources> |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| <resources xmlns:tools="http://schemas.android.com/tools"> |  | ||||||
|     <!-- Base application theme. --> |  | ||||||
|     <style name="Theme.Noise" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> |  | ||||||
|         <!-- Primary brand color. --> |  | ||||||
|         <item name="colorPrimary">@color/green</item> |  | ||||||
|         <item name="colorPrimaryVariant">@color/green_light</item> |  | ||||||
|         <item name="colorOnPrimary">@color/white</item> |  | ||||||
|         <!-- Secondary brand color. --> |  | ||||||
|         <item name="colorSecondary">@color/teal_200</item> |  | ||||||
|         <item name="colorSecondaryVariant">@color/teal_700</item> |  | ||||||
|         <item name="colorOnSecondary">@color/black</item> |  | ||||||
|         <!-- Status bar color. --> |  | ||||||
|         <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> |  | ||||||
|         <!-- Customize your theme here. --> |  | ||||||
|     </style> |  | ||||||
|  |  | ||||||
|     <style name="Theme.Noise.NoActionBar"> |  | ||||||
|         <item name="windowActionBar">false</item> |  | ||||||
|         <item name="windowNoTitle">true</item> |  | ||||||
|     </style> |  | ||||||
|  |  | ||||||
|     <style name="Theme.Noise.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> |  | ||||||
|  |  | ||||||
|     <style name="Theme.Noise.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> |  | ||||||
| </resources> |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| package org.ddnss.sfs.git.wdg.noise |  | ||||||
|  |  | ||||||
| import org.junit.Test |  | ||||||
|  |  | ||||||
| import org.junit.Assert.* |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Example local unit test, which will execute on the development machine (host). |  | ||||||
|  * |  | ||||||
|  * See [testing documentation](http://d.android.com/tools/testing). |  | ||||||
|  */ |  | ||||||
| class ExampleUnitTest { |  | ||||||
|     @Test |  | ||||||
|     fun addition_isCorrect() { |  | ||||||
|         assertEquals(4, 2 + 2) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										30
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						| @@ -1,30 +0,0 @@ | |||||||
| // Top-level build file where you can add configuration options common to all sub-projects/modules. |  | ||||||
| buildscript { |  | ||||||
|     ext { |  | ||||||
|         apollo_version = '2.5.11' |  | ||||||
|     } |  | ||||||
|     ext.kotlin_version = "1.5.20" |  | ||||||
|     repositories { |  | ||||||
|         google() |  | ||||||
|         mavenCentral() |  | ||||||
|     } |  | ||||||
|     dependencies { |  | ||||||
|         classpath 'com.android.tools.build:gradle:7.0.4' |  | ||||||
|         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |  | ||||||
|  |  | ||||||
|         // NOTE: Do not place your application dependencies here; they belong |  | ||||||
|         // in the individual module build.gradle files |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| allprojects { |  | ||||||
|     repositories { |  | ||||||
|         google() |  | ||||||
|         mavenCentral() |  | ||||||
|         jcenter() // Warning: this repository is going to shut down soon |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| task clean(type: Delete) { |  | ||||||
|     delete rootProject.buildDir |  | ||||||
| } |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| # 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 -Dfile.encoding=UTF-8 |  | ||||||
| # 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 |  | ||||||
| # Kotlin code style for this project: "official" or "obsolete": |  | ||||||
| kotlin.code.style=official |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										172
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,172 +0,0 @@ | |||||||
| #!/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
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,84 +0,0 @@ | |||||||
| @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 |  | ||||||
							
								
								
									
										56
									
								
								lib/chat/chat_buttons.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,56 @@ | |||||||
|  | import 'dart:ui'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  |  | ||||||
|  | class ChatButton extends StatelessWidget { | ||||||
|  |   const ChatButton({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   // the chat the button leads to | ||||||
|  |   final _destination = null; | ||||||
|  |   final _name = ''; | ||||||
|  |  | ||||||
|  |   // delete maybe, depending on where the application gets the last message | ||||||
|  |   final _last_message = ''; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Container( | ||||||
|  |         child: Column(children: [ | ||||||
|  |           // Image of the contact | ||||||
|  |           Container( | ||||||
|  |             alignment: Alignment.center, | ||||||
|  |             color: Colors.transparent, | ||||||
|  |             margin: const EdgeInsets.all(5.0), | ||||||
|  |             // ToDo: check RoundedRectangleBorder(), | ||||||
|  |  | ||||||
|  |             child: GestureDetector( | ||||||
|  |               // ToDo: open profile picture view when clicked | ||||||
|  |               onTap: () => null, | ||||||
|  |               child: Image.asset('yourimagefolder/yourimage.png'), | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |  | ||||||
|  |           // Switches to chat "activity" when clicked | ||||||
|  |           GestureDetector( | ||||||
|  |             // ToDo: switch to chat | ||||||
|  |             onTap: () => null, | ||||||
|  |             child: Row( | ||||||
|  |               children: [ | ||||||
|  |                 Column( | ||||||
|  |                   children: [ | ||||||
|  |                     // Username | ||||||
|  |                     Text('_Username_'), | ||||||
|  |  | ||||||
|  |                     // Container for icons on the top right | ||||||
|  |                     Container(), | ||||||
|  |                   ] | ||||||
|  |                 ), | ||||||
|  |  | ||||||
|  |                 // Last message in chat | ||||||
|  |                 Text('_Message_') | ||||||
|  |               ], | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |       ]) | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										131
									
								
								lib/login/login.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,131 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:flutter/services.dart'; | ||||||
|  |  | ||||||
|  | void main() => runApp(const Noise()); | ||||||
|  |  | ||||||
|  | // ToDo: remove when done: currently only for testing purposes | ||||||
|  | class Noise extends StatelessWidget { | ||||||
|  |   const Noise({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return MaterialApp( | ||||||
|  |       home: LoginPage(), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class LoginPage extends StatefulWidget { | ||||||
|  |   const LoginPage({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   _LoginPageState createState() => _LoginPageState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _LoginPageState extends State<LoginPage> { | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       body: AnnotatedRegion<SystemUiOverlayStyle>( | ||||||
|  |         value: SystemUiOverlayStyle.light, | ||||||
|  |         child: GestureDetector( | ||||||
|  |             child: Stack( | ||||||
|  |           children: <Widget>[ | ||||||
|  |             Container( | ||||||
|  |               height: double.infinity, | ||||||
|  |               width: double.infinity, | ||||||
|  |               decoration: BoxDecoration( | ||||||
|  |                   gradient: LinearGradient( | ||||||
|  |                       begin: Alignment.topCenter, | ||||||
|  |                       end: Alignment.bottomCenter, | ||||||
|  |                       colors: [ | ||||||
|  |                     Color(0x665ac18e), | ||||||
|  |                     Color(0x995ac18e), | ||||||
|  |                     Color(0xcc5ac18e), | ||||||
|  |                     Color(0xff5ac18e), | ||||||
|  |                   ])), | ||||||
|  |               child: SingleChildScrollView( | ||||||
|  |                 padding: EdgeInsets.symmetric( | ||||||
|  |                   horizontal: 25, | ||||||
|  |                   vertical: 120 | ||||||
|  |                 ), | ||||||
|  |                 child: Column( | ||||||
|  |                   mainAxisAlignment: MainAxisAlignment.center, | ||||||
|  |                   children: <Widget>[ | ||||||
|  |                     Text( | ||||||
|  |                       'sign In', | ||||||
|  |                       style: TextStyle( | ||||||
|  |                         color: Colors.white, | ||||||
|  |                         fontSize: 40, | ||||||
|  |                         fontWeight: FontWeight.bold, | ||||||
|  |                       ), | ||||||
|  |                     ), | ||||||
|  |                     SizedBox(height: 50), | ||||||
|  |                     buildEmail() | ||||||
|  |                   ], | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |             ) | ||||||
|  |           ], | ||||||
|  |         )), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   Widget buildPassword() { | ||||||
|  |     return Column( | ||||||
|  |  | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   Widget buildEmail() { | ||||||
|  |     return Column( | ||||||
|  |       crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |       children: <Widget>[ | ||||||
|  |         Text( | ||||||
|  |           'Email', | ||||||
|  |           style: TextStyle( | ||||||
|  |             color: Colors.white, | ||||||
|  |             fontSize: 16, | ||||||
|  |             fontWeight: FontWeight.bold, | ||||||
|  |           ), | ||||||
|  |         ), | ||||||
|  |         SizedBox(height: 10), | ||||||
|  |         Container( | ||||||
|  |           alignment: Alignment.centerLeft, | ||||||
|  |           decoration: BoxDecoration( | ||||||
|  |               color: Colors.white, | ||||||
|  |               borderRadius: BorderRadius.circular(10), | ||||||
|  |               boxShadow: [ | ||||||
|  |                 BoxShadow( | ||||||
|  |                   color: Colors.black26, | ||||||
|  |                   blurRadius: 6, | ||||||
|  |                   offset: Offset(0, 2), | ||||||
|  |                 ) | ||||||
|  |               ] | ||||||
|  |           ), | ||||||
|  |           height: 60, | ||||||
|  |           child: TextField( | ||||||
|  |             keyboardType: TextInputType.emailAddress, | ||||||
|  |             style: TextStyle( | ||||||
|  |               color: Colors.black87, | ||||||
|  |             ), | ||||||
|  |             decoration: InputDecoration( | ||||||
|  |               border: InputBorder.none, | ||||||
|  |               contentPadding: EdgeInsets.only(top: 14), | ||||||
|  |               prefixIcon: Icon( | ||||||
|  |                 Icons.email, | ||||||
|  |                 color: Color(0xff5ac18e), | ||||||
|  |               ), | ||||||
|  |               hintText: 'Email', | ||||||
|  |               hintStyle: TextStyle( | ||||||
|  |                 color: Colors.black38, | ||||||
|  |               ) | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |         ) | ||||||
|  |       ], | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										96
									
								
								lib/login/loginscreen.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,96 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  |  | ||||||
|  | void main() => runApp(MyApp()); | ||||||
|  |  | ||||||
|  | // ToDo: remove when done: currently only for testing purposes | ||||||
|  |  | ||||||
|  | class MyApp extends StatelessWidget { | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return MaterialApp( | ||||||
|  |       debugShowCheckedModeBanner: false, | ||||||
|  |       title: 'Noise!', | ||||||
|  |       home: LoginPage(), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class LoginPage extends StatefulWidget { | ||||||
|  |   @override | ||||||
|  |   _LoginPageState createState() => _LoginPageState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _LoginPageState extends State<LoginPage> { | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar(title: const Text('Welcome')), | ||||||
|  |       // https://www.kindacode.com/article/flutter-show-hide-password-in-textfield-textformfield/ | ||||||
|  |       // https://www.kindacode.com/article/flutter-filteringtextinputformatter/ | ||||||
|  |       body: Center( | ||||||
|  |         child: new ListView( | ||||||
|  |           shrinkWrap: true, | ||||||
|  |           padding: const EdgeInsets.all(20.0), | ||||||
|  |           children: [ | ||||||
|  |             new UsernameField(), | ||||||
|  |             new PasswordField(), | ||||||
|  |           ], | ||||||
|  |         ), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class UsernameField extends StatelessWidget { | ||||||
|  |   const UsernameField({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Padding( | ||||||
|  |       padding: const EdgeInsets.all(10), | ||||||
|  |       child: Center( | ||||||
|  |         child: TextField( | ||||||
|  |             decoration: InputDecoration( | ||||||
|  |           hintText: 'Username', | ||||||
|  |           border: OutlineInputBorder(borderRadius: BorderRadius.circular(10)), | ||||||
|  |         )), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class PasswordField extends StatefulWidget { | ||||||
|  |   const PasswordField({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   _PasswordFieldState createState() => _PasswordFieldState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _PasswordFieldState extends State<PasswordField> { | ||||||
|  |   bool _isPasswordObscure = true; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Padding( | ||||||
|  |       padding: const EdgeInsets.all(10), | ||||||
|  |       child: Center( | ||||||
|  |         child: TextField( | ||||||
|  |             obscureText: _isPasswordObscure, | ||||||
|  |             decoration: InputDecoration( | ||||||
|  |                 hintText: 'Password', | ||||||
|  |                 border: | ||||||
|  |                     OutlineInputBorder(borderRadius: BorderRadius.circular(10)), | ||||||
|  |                 suffixIcon: IconButton( | ||||||
|  |                   icon: Icon(_isPasswordObscure | ||||||
|  |                       ? Icons.visibility | ||||||
|  |                       : Icons.visibility_off), | ||||||
|  |                   onPressed: () { | ||||||
|  |                     setState(() { | ||||||
|  |                       _isPasswordObscure = !_isPasswordObscure; | ||||||
|  |                     }); | ||||||
|  |                   }, | ||||||
|  |                 ))), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								lib/main.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import './login/login.dart'; | ||||||
|  |  | ||||||
|  | void main() => runApp(const Noise()); | ||||||
|  |  | ||||||
|  | class | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Noise extends StatelessWidget { | ||||||
|  |   const Noise({Key? key}) : super(key: key); | ||||||
|  |  | ||||||
|  |   bool _isOPasswordObscure = true; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return MaterialApp(); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								lib/settings/settings.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SettingsPage extends StatelessWidget { | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     // TODO: implement build | ||||||
|  |     return | ||||||
|  |     throw UnimplementedError(); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										0
									
								
								lib/theme/constants.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										8
									
								
								local.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | ## This file must *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. | ||||||
|  | #Mon Oct 04 13:51:25 CEST 2021 | ||||||
|  | sdk.dir=C\:\\Users\\sweet\\AppData\\Local\\Android\\Sdk | ||||||
							
								
								
									
										16
									
								
								needConectionMethods.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,16 @@ | |||||||
|  |  | ||||||
|  | !Needed methods:! | ||||||
|  |  | ||||||
|  | Dart -> Kotlin | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Kotlin -> Dart | ||||||
|  |  | ||||||
|  | // Dart reloads users picture from ./cache (??) when it changes on runtime | ||||||
|  | - did_profilepicture_change() -> bool | ||||||
|  |  | ||||||
|  | // new messages | ||||||
|  | // look for currently open chat (if none is open -> null). | ||||||
|  | -> update_text() | ||||||
|  | # ToDo!! Does Kotlin or Dart send notifications? | ||||||
|  |  | ||||||
							
								
								
									
										189
									
								
								pubspec.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,189 @@ | |||||||
|  | # Generated by pub | ||||||
|  | # See https://dart.dev/tools/pub/glossary#lockfile | ||||||
|  | packages: | ||||||
|  |   async: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: async | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.8.1" | ||||||
|  |   boolean_selector: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: boolean_selector | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.1.0" | ||||||
|  |   characters: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: characters | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.1.0" | ||||||
|  |   charcode: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: charcode | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.3.1" | ||||||
|  |   clock: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: clock | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.1.0" | ||||||
|  |   collection: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: collection | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.15.0" | ||||||
|  |   cupertino_icons: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: cupertino_icons | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.0.3" | ||||||
|  |   fake_async: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: fake_async | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.2.0" | ||||||
|  |   flutter: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: flutter | ||||||
|  |     source: sdk | ||||||
|  |     version: "0.0.0" | ||||||
|  |   flutter_svg: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: flutter_svg | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.23.0+1" | ||||||
|  |   flutter_test: | ||||||
|  |     dependency: "direct dev" | ||||||
|  |     description: flutter | ||||||
|  |     source: sdk | ||||||
|  |     version: "0.0.0" | ||||||
|  |   matcher: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: matcher | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.12.10" | ||||||
|  |   meta: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: meta | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.7.0" | ||||||
|  |   path: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: path | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.8.0" | ||||||
|  |   path_drawing: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: path_drawing | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.5.1+1" | ||||||
|  |   path_parsing: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: path_parsing | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.2.1" | ||||||
|  |   petitparser: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: petitparser | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "4.4.0" | ||||||
|  |   sky_engine: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: flutter | ||||||
|  |     source: sdk | ||||||
|  |     version: "0.0.99" | ||||||
|  |   source_span: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: source_span | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.8.1" | ||||||
|  |   stack_trace: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: stack_trace | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.10.0" | ||||||
|  |   stream_channel: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: stream_channel | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.1.0" | ||||||
|  |   string_scanner: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: string_scanner | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.1.0" | ||||||
|  |   term_glyph: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: term_glyph | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.2.0" | ||||||
|  |   test_api: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: test_api | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.4.2" | ||||||
|  |   typed_data: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: typed_data | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.3.0" | ||||||
|  |   vector_math: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: vector_math | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.1.0" | ||||||
|  |   xml: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: xml | ||||||
|  |       url: "https://pub.dartlang.org" | ||||||
|  |     source: hosted | ||||||
|  |     version: "5.3.1" | ||||||
|  | sdks: | ||||||
|  |   dart: ">=2.14.0 <3.0.0" | ||||||
|  |   flutter: ">=1.24.0-7.0" | ||||||
							
								
								
									
										77
									
								
								pubspec.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,77 @@ | |||||||
|  | name: flutter_noise | ||||||
|  | description: GUI for the Noise application | ||||||
|  |  | ||||||
|  | # The following line prevents the package from being accidentally published to | ||||||
|  | # pub.dev using `pub publish`. This is preferred for private packages. | ||||||
|  | publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ||||||
|  |  | ||||||
|  | # The following defines the version and build number for your application. | ||||||
|  | # A version number is three numbers separated by dots, like 1.2.43 | ||||||
|  | # followed by an optional build number separated by a +. | ||||||
|  | # Both the version and the builder number may be overridden in flutter | ||||||
|  | # build by specifying --build-name and --build-number, respectively. | ||||||
|  | # In Android, build-name is used as versionName while build-number used as versionCode. | ||||||
|  | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning | ||||||
|  | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. | ||||||
|  | # Read more about iOS versioning at | ||||||
|  | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||||
|  | version: 1.0.0+1 | ||||||
|  |  | ||||||
|  | environment: | ||||||
|  |   sdk: ">=2.12.0 <3.0.0" | ||||||
|  |  | ||||||
|  | dependencies: | ||||||
|  |   flutter: | ||||||
|  |     sdk: flutter | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   # The following adds the Cupertino Icons font to your application. | ||||||
|  |   # Use with the CupertinoIcons class for iOS style icons. | ||||||
|  |   cupertino_icons: ^1.0.2 | ||||||
|  |   flutter_svg: ^0.23.0+1 | ||||||
|  |  | ||||||
|  | dev_dependencies: | ||||||
|  |   flutter_test: | ||||||
|  |     sdk: flutter | ||||||
|  |  | ||||||
|  | # For information on the generic Dart part of this file, see the | ||||||
|  | # following page: https://dart.dev/tools/pub/pubspec | ||||||
|  |  | ||||||
|  | # The following section is specific to Flutter. | ||||||
|  | flutter: | ||||||
|  |  | ||||||
|  |   # The following line ensures that the Material Icons font is | ||||||
|  |   # included with your application, so that you can use the icons in | ||||||
|  |   # the material Icons class. | ||||||
|  |   uses-material-design: true | ||||||
|  |  | ||||||
|  |   # To add assets to your application, add an assets section, like this: | ||||||
|  |   # assets: | ||||||
|  |   #   - images/a_dot_burr.jpeg | ||||||
|  |   #   - images/a_dot_ham.jpeg | ||||||
|  |  | ||||||
|  |   # An image asset can refer to one or more resolution-specific "variants", see | ||||||
|  |   # https://flutter.dev/assets-and-images/#resolution-aware. | ||||||
|  |  | ||||||
|  |   # For details regarding adding assets from package dependencies, see | ||||||
|  |   # https://flutter.dev/assets-and-images/#from-packages | ||||||
|  |  | ||||||
|  |   # To add custom fonts to your application, add a fonts section here, | ||||||
|  |   # in this "flutter" section. Each entry in this list should have a | ||||||
|  |   # "family" key with the font family name, and a "fonts" key with a | ||||||
|  |   # list giving the asset and other descriptors for the font. For | ||||||
|  |   # example: | ||||||
|  |   # fonts: | ||||||
|  |   #   - family: Schyler | ||||||
|  |   #     fonts: | ||||||
|  |   #       - asset: fonts/Schyler-Regular.ttf | ||||||
|  |   #       - asset: fonts/Schyler-Italic.ttf | ||||||
|  |   #         style: italic | ||||||
|  |   #   - family: Trajan Pro | ||||||
|  |   #     fonts: | ||||||
|  |   #       - asset: fonts/TrajanPro.ttf | ||||||
|  |   #       - asset: fonts/TrajanPro_Bold.ttf | ||||||
|  |   #         weight: 700 | ||||||
|  |   # | ||||||
|  |   # For details regarding fonts from package dependencies, | ||||||
|  |   # see https://flutter.dev/custom-fonts/#from-packages | ||||||
| @@ -1,2 +0,0 @@ | |||||||
| rootProject.name = "Noise" |  | ||||||
| include ':app' |  | ||||||
							
								
								
									
										30
									
								
								test/widget_test.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | |||||||
|  | // This is a basic Flutter widget test. | ||||||
|  | // | ||||||
|  | // To perform an interaction with a widget in your test, use the WidgetTester | ||||||
|  | // utility that Flutter provides. For example, you can send tap and scroll | ||||||
|  | // gestures. You can also use WidgetTester to find child widgets in the widget | ||||||
|  | // tree, read text, and verify that the values of widget properties are correct. | ||||||
|  |  | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:flutter_test/flutter_test.dart'; | ||||||
|  |  | ||||||
|  | import 'package:flutter_noise/main.dart'; | ||||||
|  |  | ||||||
|  | void main() { | ||||||
|  |   testWidgets('Counter increments smoke test', (WidgetTester tester) async { | ||||||
|  |     // Build our app and trigger a frame. | ||||||
|  |     // await tester.pumpWidget(MyApp()); | ||||||
|  |  | ||||||
|  |     // Verify that our counter starts at 0. | ||||||
|  |     expect(find.text('0'), findsOneWidget); | ||||||
|  |     expect(find.text('1'), findsNothing); | ||||||
|  |  | ||||||
|  |     // Tap the '+' icon and trigger a frame. | ||||||
|  |     await tester.tap(find.byIcon(Icons.add)); | ||||||
|  |     await tester.pump(); | ||||||
|  |  | ||||||
|  |     // Verify that our counter has incremented. | ||||||
|  |     expect(find.text('0'), findsNothing); | ||||||
|  |     expect(find.text('1'), findsOneWidget); | ||||||
|  |   }); | ||||||
|  | } | ||||||