diff --git a/.gitignore b/.gitignore index 94ca90d..3b559c9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,17 +39,7 @@ captures/ # IntelliJ *.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml +.idea # Keystore files # Uncomment the following lines if you do not want to check your keystore files in. @@ -84,4 +74,3 @@ lint/generated/ lint/outputs/ lint/tmp/ # lint/reports/ - diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..0548875 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,48 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'com.google.gms.google-services' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.3" + + defaultConfig { + applicationId "com.cyb3rko.techniklogger" + minSdkVersion 23 + targetSdkVersion 29 + versionCode 1 + versionName "1.0.0" + } + + buildTypes { + release { + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'com.afollestad.material-dialogs:input:3.3.0' +// implementation 'com.github.cyb3rko:about-icons:1.1.1' + implementation "com.google.android.material:material:1.2.0" + implementation 'com.google.firebase:firebase-database:19.3.1' + implementation "com.mikepenz:aboutlibraries:8.3.0" + implementation "com.mikepenz:aboutlibraries-core:8.3.0" + implementation 'me.ibrahimyilmaz:kiel:1.1.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..9a25261 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,40 @@ +{ + "project_info": { + "project_number": "802818954254", + "firebase_url": "https://technik-logger.firebaseio.com", + "project_id": "technik-logger", + "storage_bucket": "technik-logger.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:802818954254:android:8543fd300d3deeea31985f", + "android_client_info": { + "package_name": "com.cyb3rko.techniklogger" + } + }, + "oauth_client": [ + { + "client_id": "802818954254-6ft2h8tbh3cp15tkhjo68514eh62gofp.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDOg41l01FO_ZHs4vIWrVXFXkRZQ1W6YbM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "802818954254-6ft2h8tbh3cp15tkhjo68514eh62gofp.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..304c0a6 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/cyb3rko/techniklogger/MainActivity.kt b/app/src/main/java/com/cyb3rko/techniklogger/MainActivity.kt new file mode 100644 index 0000000..f093608 --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/MainActivity.kt @@ -0,0 +1,152 @@ +package com.cyb3rko.techniklogger + +import android.content.SharedPreferences +import android.os.Bundle +import android.view.Menu +import android.view.MenuItem +import android.view.View +import android.widget.Toast + +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.LinearLayoutManager + +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.input.getInputField +import com.afollestad.materialdialogs.input.input +import com.cyb3rko.techniklogger.recycler.ProjectEntryViewHolder +import com.cyb3rko.techniklogger.recycler.ProjectViewState +import com.google.firebase.database.* + +import java.lang.IndexOutOfBoundsException + +import kotlinx.android.synthetic.main.activity_main.* + +import me.ibrahimyilmaz.kiel.adapter.RecyclerViewAdapter.Companion.adapterOf + +class MainActivity : AppCompatActivity() { + + private val data: MutableList = mutableListOf() + private lateinit var databaseReference: DatabaseReference + private lateinit var sharedPref: SharedPreferences + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + sharedPref = getSharedPreferences("Safe", 0) + databaseReference = FirebaseDatabase.getInstance().reference + + if (sharedPref.getString("name", "") == "") { + showNameDialog() + } + + val adapter = adapterOf { + register( + layoutResource = R.layout.item_recycler_projects, + viewHolder = ::ProjectEntryViewHolder, + onBindBindViewHolder = { vh, _, text -> + vh.textView.text = text.text + vh.locationView.text = text.location + vh.dateView.text = text.date + vh.itemView.setOnClickListener { + ProjectActivityBuilder(applicationContext) + .setKey(text.childKey) + .start() + } + } + ) + } + + val listener = object: ChildEventListener { + override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) { + data.add(data.size, ProjectViewState.ProjectEntry( + snapshot.key!!, + snapshot.child("name").value.toString(), + snapshot.child("location").value.toString(), + snapshot.child("date").value.toString()) + ) + hideProgess() + recycler_view.scheduleLayoutAnimation() + adapter.notifyDataSetChanged() + } + + override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) { + } + + override fun onChildRemoved(snapshot: DataSnapshot) { + data.remove(ProjectViewState.ProjectEntry( + snapshot.key!!, + snapshot.child("name").value.toString(), + snapshot.child("location").value.toString(), + snapshot.child("date").value.toString()) + ) + recycler_view.scheduleLayoutAnimation() + adapter.notifyDataSetChanged() + } + + override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) { + } + + override fun onCancelled(error: DatabaseError) { + Toast.makeText(applicationContext, "Abruf fehlgeschlagen", Toast.LENGTH_SHORT).show() + } + } + + adapter.submitList(data as List?) + val linearLayoutManager = LinearLayoutManager(applicationContext) + linearLayoutManager.reverseLayout = true + linearLayoutManager.stackFromEnd = true + recycler_view.layoutManager = linearLayoutManager + recycler_view.adapter = adapter + + databaseReference.addChildEventListener(listener) + } + + private fun showNameDialog() { + val currentName = getSharedPreferences("Safe", 0).getString("name", "") + + MaterialDialog(this) + .cancelable(false) + .title(0, "Bitte gebe deinen Namen ein") + .show { + input(hint = "Dein Name", prefill = currentName, waitForPositiveButton = false) { dialog, inputName -> + try { + if (!inputName[0].isUpperCase()) { + dialog.getInputField().error = "Der Anfangsbuchstabe sollte groß sein" + } + } catch (ignored: IndexOutOfBoundsException) { + } + + positiveButton { + sharedPref.edit().putString("name", inputName.toString()).apply() + } + } + positiveButton(0, "Speichern") + } + } + + private fun hideProgess() { + progress_bar.visibility = View.GONE + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + // Inflate the menu; this adds items to the action bar if it is present. + menuInflater.inflate(R.menu.menu_main, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + when (item.itemId) { + R.id.action_rename -> showNameDialog() +// R.id.action_icons -> setContentView(AboutIcons(applicationContext, R.drawable::class.java).setTitle("Benutzte Icons").get()) +// R.id.action_libraries -> LibsBuilder().start(this) +// R.id.action_privacy_policy -> +// R.id.action_terms_of_use -> + } + + return super.onOptionsItemSelected(item) + } +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivity.kt b/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivity.kt new file mode 100644 index 0000000..db785ed --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivity.kt @@ -0,0 +1,172 @@ +package com.cyb3rko.techniklogger + +import android.os.Bundle +import android.view.Menu +import android.view.MenuItem +import android.view.View +import android.widget.TextView +import android.widget.Toast + +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.LinearLayoutManager + +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.input.getInputField +import com.afollestad.materialdialogs.input.input +import com.cyb3rko.techniklogger.recycler.ProjectTechnikerViewHolder +import com.cyb3rko.techniklogger.recycler.ProjectTechnikerViewState +import com.google.firebase.database.* + +import java.lang.IndexOutOfBoundsException + +import me.ibrahimyilmaz.kiel.adapter.RecyclerViewAdapter.Companion.adapterOf + +import kotlinx.android.synthetic.main.activity_project.* +import kotlinx.android.synthetic.main.activity_project.recycler_view + +class ProjectActivity : AppCompatActivity() { + + private var childKey = "" + private val techniker: MutableList = mutableListOf() + private lateinit var databaseReference: DatabaseReference + + override fun onCreate(savedInstanceState: Bundle?) { + childKey = intent.extras?.getString("childKey").toString() + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_project) + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + + databaseReference = FirebaseDatabase.getInstance().getReference(childKey) + + val adapter = adapterOf { + register( + layoutResource = R.layout.item_recycler_techniker, + viewHolder = ::ProjectTechnikerViewHolder, + onBindBindViewHolder = { vh, _, text -> + vh.textView.text = text.name + vh.itemView.setOnClickListener { + } + } + ) + } + + val listener = object: ChildEventListener { + override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) { + techniker.add(techniker.size, ProjectTechnikerViewState.ProjectTechniker(snapshot.value.toString())) + techniker.sortBy { it.name } + recycler_view.scheduleLayoutAnimation() + adapter.notifyDataSetChanged() + showDivider() + } + + override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) { + } + + override fun onChildRemoved(snapshot: DataSnapshot) { + techniker.remove(ProjectTechnikerViewState.ProjectTechniker(snapshot.value.toString())) + recycler_view.scheduleLayoutAnimation() + adapter.notifyDataSetChanged() + emptyCheck() + } + + override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) { + } + + override fun onCancelled(error: DatabaseError) { + Toast.makeText(applicationContext, "Abruf fehlgeschlagen", Toast.LENGTH_SHORT).show() + } + } + + adapter.submitList(techniker as List?) + recycler_view.layoutManager = LinearLayoutManager(applicationContext) + recycler_view.adapter = adapter + + databaseReference.child("techniker").addChildEventListener(listener) + + setValueEventListener("name", title_view) + setValueEventListener("location", location_view) + setValueEventListener("date", date_view) + + add_button.setOnClickListener { + MaterialDialog(this) + .show { + message(0, "Möchtest du dich als involvierter Techniker eintragen?") + positiveButton(0, "Ja") { + val name = getSharedPreferences("Safe", 0).getString("name", "invalid") + databaseReference.child("techniker").push().setValue(name) + } + negativeButton(0, "Abbrechen") + } + } + + emptyCheck() + } + + private fun setValueEventListener(childName: String, textView: TextView) { + val valueEventListener = object: ValueEventListener { + override fun onDataChange(snapshot: DataSnapshot) { + textView.text = snapshot.value.toString() + } + + override fun onCancelled(error: DatabaseError) { + } + } + databaseReference.child(childName).addListenerForSingleValueEvent(valueEventListener) + } + + private fun showDivider() { + divider.visibility = View.VISIBLE + } + + private fun emptyCheck() { + if (techniker.isEmpty()) { + divider.visibility = View.GONE + } + } + + private fun showNameDialog() { + val currentName = getSharedPreferences("Safe", 0).getString("name", "") + + MaterialDialog(this) + .cancelable(false) + .title(0, "Bitte gebe deinen Namen ein") + .show { + input(hint = "Dein Name", prefill = currentName, waitForPositiveButton = false) { dialog, inputName -> + try { + if (!inputName[0].isUpperCase()) { + dialog.getInputField().error = "Der Anfangsbuchstabe sollte groß sein" + } + } catch (ignored: IndexOutOfBoundsException) { + } + + positiveButton { + getSharedPreferences("Safe", 0).edit().putString("name", inputName.toString()).apply() + } + } + positiveButton(0, "Speichern") + } + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + // Inflate the menu; this adds items to the action bar if it is present. + menuInflater.inflate(R.menu.menu_main, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + when (item.itemId) { + android.R.id.home -> finish() + R.id.action_rename -> showNameDialog() +// R.id.action_icons -> setContentView(AboutIcons(applicationContext, R.drawable::class.java).setTitle("Benutzte Icons").get()) +// R.id.action_libraries -> LibsBuilder().start(this) +// R.id.action_privacy_policy -> +// R.id.action_terms_of_use -> + } + + return super.onOptionsItemSelected(item) + } +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivityBuilder.kt b/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivityBuilder.kt new file mode 100644 index 0000000..fb38d9f --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/ProjectActivityBuilder.kt @@ -0,0 +1,21 @@ +package com.cyb3rko.techniklogger + +import android.content.Context +import android.content.Intent + +class ProjectActivityBuilder(private val context: Context) { + + private var childKey = "" + + fun setKey(childKey: String): ProjectActivityBuilder { + this.childKey = childKey + return this + } + + fun start() { + val intent = Intent(context, ProjectActivity::class.java) + intent.putExtra("childKey", childKey) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + context.startActivity(intent) + } +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewHolder.kt b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewHolder.kt new file mode 100644 index 0000000..e94062a --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewHolder.kt @@ -0,0 +1,14 @@ +package com.cyb3rko.techniklogger.recycler + +import android.view.View +import android.widget.TextView + +import com.cyb3rko.techniklogger.R + +import me.ibrahimyilmaz.kiel.core.RecyclerViewHolder + +class ProjectEntryViewHolder(view: View) : RecyclerViewHolder(view) { + val locationView: TextView = view.findViewById(R.id.item_location) + val dateView: TextView = view.findViewById(R.id.item_date) + val textView: TextView = view.findViewById(R.id.item_text) +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewState.kt b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewState.kt new file mode 100644 index 0000000..14be22b --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectEntryViewState.kt @@ -0,0 +1,11 @@ +package com.cyb3rko.techniklogger.recycler + +sealed class ProjectViewState { + + data class ProjectEntry( + val childKey: String, + val text: String, + val location: String, + val date: String + ) : ProjectViewState() +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewHolder.kt b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewHolder.kt new file mode 100644 index 0000000..b8bae68 --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewHolder.kt @@ -0,0 +1,12 @@ +package com.cyb3rko.techniklogger.recycler + +import android.view.View +import android.widget.TextView + +import com.cyb3rko.techniklogger.R + +import me.ibrahimyilmaz.kiel.core.RecyclerViewHolder + +class ProjectTechnikerViewHolder(view: View) : RecyclerViewHolder(view) { + val textView: TextView = view.findViewById(R.id.title) +} diff --git a/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewState.kt b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewState.kt new file mode 100644 index 0000000..f92991f --- /dev/null +++ b/app/src/main/java/com/cyb3rko/techniklogger/recycler/ProjectTechnikerViewState.kt @@ -0,0 +1,8 @@ +package com.cyb3rko.techniklogger.recycler + +sealed class ProjectTechnikerViewState { + + data class ProjectTechniker( + val name: String + ) : ProjectTechnikerViewState() +} diff --git a/app/src/main/res/anim/animation_fall_down.xml b/app/src/main/res/anim/animation_fall_down.xml new file mode 100644 index 0000000..245ff34 --- /dev/null +++ b/app/src/main/res/anim/animation_fall_down.xml @@ -0,0 +1,24 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/recycler_animation.xml b/app/src/main/res/anim/recycler_animation.xml new file mode 100644 index 0000000..298d064 --- /dev/null +++ b/app/src/main/res/anim/recycler_animation.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/_icon_add.webp b/app/src/main/res/drawable-v24/_icon_add.webp new file mode 100644 index 0000000..c00045d Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_add.webp differ diff --git a/app/src/main/res/drawable-v24/_icon_date.webp b/app/src/main/res/drawable-v24/_icon_date.webp new file mode 100644 index 0000000..54d0078 Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_date.webp differ diff --git a/app/src/main/res/drawable-v24/_icon_launcher.webp b/app/src/main/res/drawable-v24/_icon_launcher.webp new file mode 100644 index 0000000..a88106b Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_launcher.webp differ diff --git a/app/src/main/res/drawable-v24/_icon_location.webp b/app/src/main/res/drawable-v24/_icon_location.webp new file mode 100644 index 0000000..21438d8 Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_location.webp differ diff --git a/app/src/main/res/drawable-v24/_icon_techniker.webp b/app/src/main/res/drawable-v24/_icon_techniker.webp new file mode 100644 index 0000000..a127370 Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_techniker.webp differ diff --git a/app/src/main/res/drawable-v24/_icon_techniker2.webp b/app/src/main/res/drawable-v24/_icon_techniker2.webp new file mode 100644 index 0000000..88f7e14 Binary files /dev/null and b/app/src/main/res/drawable-v24/_icon_techniker2.webp differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..167854e --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_project.xml b/app/src/main/res/layout/activity_project.xml new file mode 100644 index 0000000..0fa61ee --- /dev/null +++ b/app/src/main/res/layout/activity_project.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_recycler_projects.xml b/app/src/main/res/layout/item_recycler_projects.xml new file mode 100644 index 0000000..7825431 --- /dev/null +++ b/app/src/main/res/layout/item_recycler_projects.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_recycler_techniker.xml b/app/src/main/res/layout/item_recycler_techniker.xml new file mode 100644 index 0000000..0ebf0fe --- /dev/null +++ b/app/src/main/res/layout/item_recycler_techniker.xml @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml new file mode 100644 index 0000000..def6190 --- /dev/null +++ b/app/src/main/res/menu/menu_main.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..001725b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..facc0e0 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..3f45473 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..1d5d5cb Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..c2ec75c Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..04faf90 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..f91d5aa Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..d48f4be Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..8d6d8fb Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..44e241f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..b105d35 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..7fbb7d0 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..567a85d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..5a3f39d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..6739c86 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..4faecfa --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #6200EE + #3700B3 + #03DAC5 + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..125df87 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ + + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..d984c7a --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,14 @@ + + Technik-Logger + Settings + + First Fragment + Second Fragment + Next + Previous + + Hello first fragment + Hello second fragment. Arg: %1$s + + Hello world! + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..21d9ced --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,19 @@ + + + + + + +