From 82c64d58e6593502547104e457807fa92f6d36e2 Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Sat, 24 Apr 2021 01:27:23 +0200 Subject: [PATCH] New app version based on native Kotlin implementation --- .gitignore | 25 +- app/.gitignore | 1 + app/build.gradle | 47 ++ app/proguard-rules.pro | 21 + app/src/main/AndroidManifest.xml | 26 + .../src/main/assets/web}/css/style.css | 14 +- .../src/main/assets/web}/icon/icon.png | Bin .../src/main/assets/web}/icon/plus.svg | 0 app/src/main/assets/web/index.html | 94 ++++ .../src/main/assets/web}/js/vue.min.js | 0 app/src/main/ic_launcher-playstore.png | Bin 0 -> 22700 bytes .../java/tech/platypush/app/MainActivity.kt | 28 + .../main/java/tech/platypush/app/Services.kt | 125 +++++ .../tech/platypush/app/WebAppInterface.kt | 32 ++ .../main/java/tech/platypush/app/WebView.kt | 27 + .../res/drawable/ic_launcher_foreground.xml | 26 + app/src/main/res/layout/activity_main.xml | 20 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2293 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4361 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1611 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2746 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3147 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6133 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4837 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 9425 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6730 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13593 bytes app/src/main/res/navigation/nav_graph.xml | 4 + app/src/main/res/values-night/themes.xml | 16 + app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/dimens.xml | 3 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 6 + app/src/main/res/values/themes.xml | 25 + assets/icon/courses-icon-10.png | Bin 28193 -> 0 bytes assets/icon/ic_launcher.png | Bin 9490 -> 0 bytes assets/js/androidjs.js | 306 ----------- build.gradle | 26 + gradle.properties | 21 + gradlew | 172 ++++++ gradlew.bat | 84 +++ main.js | 21 - package-lock.json | 501 ------------------ package.json | 30 -- settings.gradle | 2 + views/index.html | 96 ---- 48 files changed, 852 insertions(+), 971 deletions(-) create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml rename {assets => app/src/main/assets/web}/css/style.css (90%) rename {assets => app/src/main/assets/web}/icon/icon.png (100%) rename {assets => app/src/main/assets/web}/icon/plus.svg (100%) create mode 100644 app/src/main/assets/web/index.html rename {assets => app/src/main/assets/web}/js/vue.min.js (100%) create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/tech/platypush/app/MainActivity.kt create mode 100644 app/src/main/java/tech/platypush/app/Services.kt create mode 100644 app/src/main/java/tech/platypush/app/WebAppInterface.kt create mode 100644 app/src/main/java/tech/platypush/app/WebView.kt create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/navigation/nav_graph.xml create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml delete mode 100644 assets/icon/courses-icon-10.png delete mode 100644 assets/icon/ic_launcher.png delete mode 100644 assets/js/androidjs.js create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100755 gradlew create mode 100644 gradlew.bat delete mode 100644 main.js delete mode 100644 package-lock.json delete mode 100644 package.json create mode 100644 settings.gradle delete mode 100644 views/index.html diff --git a/.gitignore b/.gitignore index dda9ca6..f7119c1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,5 @@ -.DS_Store -node_modules /dist -/npm - - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* +*.log # Editor directories and files .idea @@ -22,3 +9,13 @@ pnpm-debug.log* *.njsproj *.sln *.sw? + +*.iml +.gradle +/local.properties +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties 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..5c7d067 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,47 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' + id 'kotlin-android-extensions' +} + +android { + compileSdkVersion 29 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "tech.platypush.app" + minSdkVersion 23 + targetSdkVersion 29 + 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' + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + 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.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' +} \ 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..0ce317c --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/css/style.css b/app/src/main/assets/web/css/style.css similarity index 90% rename from assets/css/style.css rename to app/src/main/assets/web/css/style.css index 0ea67c6..7c22ab2 100644 --- a/assets/css/style.css +++ b/app/src/main/assets/web/css/style.css @@ -75,6 +75,7 @@ html, body { position: fixed; display: flex; justify-content: center; + align-items: center; z-index: 2; } @@ -87,13 +88,13 @@ html, body { } .add-modal { - width: 90%; + width: 80%; height: max-content; max-width: 22.5em; background: #f0f0f0; display: flex; flex-direction: column; - margin-top: 3em; + font-size: 1.2em; padding: 1em; border-radius: 1em; z-index: 3; @@ -111,11 +112,18 @@ html, body { width: 100%; } +.add-modal form input { + border-radius: .25em; + padding: .25em; +} + .add-modal form input[type=text], .add-modal form input[type=number] { width: 95%; + font-size: 1.05em; + margin-bottom: .5em; } .add-modal form input[type=submit] { - margin-top: .5em; + font-size: 1.05em; } diff --git a/assets/icon/icon.png b/app/src/main/assets/web/icon/icon.png similarity index 100% rename from assets/icon/icon.png rename to app/src/main/assets/web/icon/icon.png diff --git a/assets/icon/plus.svg b/app/src/main/assets/web/icon/plus.svg similarity index 100% rename from assets/icon/plus.svg rename to app/src/main/assets/web/icon/plus.svg diff --git a/app/src/main/assets/web/index.html b/app/src/main/assets/web/index.html new file mode 100644 index 0000000..8ba1231 --- /dev/null +++ b/app/src/main/assets/web/index.html @@ -0,0 +1,94 @@ + + + + Platypush + + + + + + +
+
+
+
Loading...
+
No Platypush web services found on the network
+
+ +
+ + on + : +
+
+ +
+
+
+
+ Connect to a Platypush web service +
+ +
+
+ + + + + +
+
+
+
+ +
+
+ + + + diff --git a/assets/js/vue.min.js b/app/src/main/assets/web/js/vue.min.js similarity index 100% rename from assets/js/vue.min.js rename to app/src/main/assets/web/js/vue.min.js diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..c255832bbaa50ab08f9578344319ed5027b04404 GIT binary patch literal 22700 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 LhS~)u9UuM=FAB}} literal 0 HcmV?d00001 diff --git a/app/src/main/java/tech/platypush/app/MainActivity.kt b/app/src/main/java/tech/platypush/app/MainActivity.kt new file mode 100644 index 0000000..0f4c084 --- /dev/null +++ b/app/src/main/java/tech/platypush/app/MainActivity.kt @@ -0,0 +1,28 @@ +package tech.platypush.app + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import kotlinx.android.synthetic.main.activity_main.* + + +class MainActivity : AppCompatActivity() { + @SuppressLint("SetJavaScriptEnabled") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + webview.webViewClient = WebView() + webview.settings.javaScriptEnabled = true + webview.settings.javaScriptCanOpenWindowsAutomatically = true + webview.clearCache(true) + webview.addJavascriptInterface(WebAppInterface(this), "app") + webview.loadUrl("file:///android_asset/web/index.html") + } + + override fun onBackPressed() { + if (webview != null && webview.canGoBack()) + webview.goBack() + else + super.onBackPressed() + } +} diff --git a/app/src/main/java/tech/platypush/app/Services.kt b/app/src/main/java/tech/platypush/app/Services.kt new file mode 100644 index 0000000..8232201 --- /dev/null +++ b/app/src/main/java/tech/platypush/app/Services.kt @@ -0,0 +1,125 @@ +package tech.platypush.app + +import android.content.ContentValues.TAG +import android.content.Context +import android.net.nsd.NsdManager +import android.net.nsd.NsdServiceInfo +import android.util.Log +import java.util.* +import java.util.concurrent.locks.ReentrantLock + + +/** + * Service data class + */ +data class Service(val host: String, val port: Int, val name: String?) { + fun toMap(): Map { + return mapOf( + "host" to host, + "port" to port, + "name" to name + ) + } +} + + +/** + * ZeroConf/Bonjour/mDNS event listener + */ +class Listener(private val scanner: Scanner): NsdManager.DiscoveryListener { + val serviceType = "_platypush-http._tcp." + + override fun onDiscoveryStarted(regType: String) { + Log.d(TAG, "Service discovery started") + } + + override fun onServiceFound(service: NsdServiceInfo) { + Log.d(TAG, "Service discovery succeeded: $service") + if (service.serviceType != serviceType) { + Log.d(TAG, "Unknown service type: ${service.serviceType}") + return + } + + scanner.resolveService(service) + } + + override fun onServiceLost(service: NsdServiceInfo) { + Log.w(TAG, "Service lost: $service") + } + + override fun onDiscoveryStopped(serviceType: String) { + Log.i(TAG, "Discovery stopped: $serviceType") + } + + override fun onStartDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.e(TAG, "Discovery start failed: Error code: $errorCode") + scanner.stopScan() + } + + override fun onStopDiscoveryFailed(serviceType: String, errorCode: Int) { + Log.e(TAG, "Discovery stop failed: Error code: $errorCode") + scanner.stopScan() + } +} + + +/** + * ZeroConf/Bonjour/mDNS service scanner and resolver + */ +class Scanner(context: Context) { + private val nsdManager = context.getSystemService(Context.NSD_SERVICE) as NsdManager + private val listener = Listener(this) + private val services = HashMap, Service>() + private val resolverLock = ReentrantLock() + + fun startScan() { + nsdManager.discoverServices(listener.serviceType, NsdManager.PROTOCOL_DNS_SD, listener) + } + + fun stopScan() { + nsdManager.stopServiceDiscovery(listener) + } + + fun getServices(): Collection { + return services.values + } + + fun resolveService(service: NsdServiceInfo) { + // Service resolution is a critical section + resolverLock.lock() + val scanner = this + + nsdManager.resolveService(service, object : NsdManager.ResolveListener { + override fun onResolveFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + resolverLock.unlock() + val msg = "Resolve of service ${serviceInfo.serviceName} failed" + + // Retry logic + when (errorCode) { + NsdManager.FAILURE_ALREADY_ACTIVE -> { + Thread.sleep(100) + scanner.resolveService(serviceInfo) + Log.w(TAG, "$msg: Resolver already active") + } + + NsdManager.FAILURE_MAX_LIMIT -> { + Thread.sleep(5000) + scanner.resolveService(serviceInfo) + Log.e(TAG, "$msg: Maximum number of resolve requests reached") + } + + NsdManager.FAILURE_INTERNAL_ERROR -> { + Log.e(TAG, "$msg: Internal error") + } + } + } + + override fun onServiceResolved(serviceInfo: NsdServiceInfo) { + services[Pair(serviceInfo.host.hostAddress, serviceInfo.port)] = Service( + serviceInfo.host.hostAddress, serviceInfo.port, serviceInfo.serviceName) + resolverLock.unlock() + Log.i(TAG, "Resolve succeeded: $serviceInfo") + } + }) + } +} diff --git a/app/src/main/java/tech/platypush/app/WebAppInterface.kt b/app/src/main/java/tech/platypush/app/WebAppInterface.kt new file mode 100644 index 0000000..0ad6937 --- /dev/null +++ b/app/src/main/java/tech/platypush/app/WebAppInterface.kt @@ -0,0 +1,32 @@ +package tech.platypush.app + +import android.content.Context +import android.webkit.JavascriptInterface +import org.json.JSONArray +import java.util.* + + +class WebAppInterface(context: Context) { + private val serviceScanner = Scanner(context) + + @Suppress("unused") + @JavascriptInterface + fun startServicesPoll() { + serviceScanner.startScan() + } + + @Suppress("unused") + @JavascriptInterface + fun stopServicesPoll() { + serviceScanner.stopScan() + } + + @Suppress("unused") + @JavascriptInterface + fun pollServices(): String { + val services = LinkedList>() + for (srv in serviceScanner.getServices()) + services.add(srv.toMap()) + return JSONArray(services).toString() + } +} diff --git a/app/src/main/java/tech/platypush/app/WebView.kt b/app/src/main/java/tech/platypush/app/WebView.kt new file mode 100644 index 0000000..975ee03 --- /dev/null +++ b/app/src/main/java/tech/platypush/app/WebView.kt @@ -0,0 +1,27 @@ +package tech.platypush.app + +import android.webkit.WebResourceRequest +import android.webkit.WebView +import android.webkit.WebViewClient + +class WebView : WebViewClient() { + private fun shouldOverrideUrlLoadingInner(view: WebView, url: String): Boolean { + view.loadUrl(url) + return true + } + + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + if (view == null || request == null) + return super.shouldOverrideUrlLoading(view, request) + + return this.shouldOverrideUrlLoadingInner(view, request.url.toString()) + } + + override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { + @Suppress("DEPRECATION") + if (view == null || url == null) + return super.shouldOverrideUrlLoading(view, url) + + return this.shouldOverrideUrlLoadingInner(view, url) + } +} diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..230b730 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,26 @@ + + + + + + + + + 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..edad1d1 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,20 @@ + + + + + + + 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..7353dbd --- /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..7353dbd --- /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 0000000000000000000000000000000000000000..260a0e231902b0698200a3da06371652c702c9d6 GIT binary patch literal 2293 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 P00000NkvXXu0mjfO)_iv literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..abf3082b13ea3d50be9d84a15942dfb6dd111f48 GIT binary patch literal 4361 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 D20Sil literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aba28281af9ff0b0868544db51f9eb36a987c95a GIT binary patch literal 1611 zcmV-R2DJH!P) zO>EQFXdkBaUD5iA)qu7lFZ;J?+G_33{%B6`xv*n^d3Ah!(35li4D&^AJy-I&?;hMM{1&7h1&9a=sN=SB<@VVe@X z{#UD~Y3N|5aj4@rX3+kaPeTl*!GoQM>DeSkE;9Y?M@>WRU>X#T8M<4K5on@G2{?kq za@VS12HJneLB;|5Kg>}3zs5m3FGlAk81P{l?j86;f4nk)jg`|d;_(=Np*EZuu>C~| zkU!!3$x{r3K>GdGr@Et?qS;s{BoOy`MFcb0{zQlbq7Rqorbj@aD-iYe+Qlv-z&x}< zbZ03fe!JtD_ht;*g+UyY|1KXkoGFC7+cji0Y_2Dut;zt2LJo>xHAsCtrX+wSo8<`-FL!XC=L@OV_Hqa` zT*;;chOGdKE|zdUKbG{a+!9k5kecYIRwHF6@saMR87+FHiIf9#Ccs2s)6{ERa8>B z1hQc3xxC>xATG4#N;xcXr3*#9w+@t1{vei1M}6Ga6H>1?j0?W8t0bGP1i!)ru-vM1 z64+0y=3*|CU04k(e%uM>eisLE&<+a;Tq2R8QDAb77hRRH69?BW9ivEM8u-llY8HWP zsJdMO%X*t;Mn=*9<4;wC{~G-$FtG??k8k2mN@R1kWs&n9RI9MIJV++;yQHs`CbGTP z^Pse+l4NGv%qOzQcZxYrSCt$>B@*Mn_@E6I60oRBj_V$QvmpIW(?}^{qZv5sVIx1a zkp65f(R9@~nM9Ct3*x~iK|7(025w>K3S#Y)czQd3#hiAVnF7LGFi}1jYf{y4%;3HH zbG0zb6b9Zg^QlttLI8Ds(Oau&IiamGPhCn7H(J=53!0o5@GnZDD}=!;R>&aY&?;d1 zd9Ft1m8Fdqb1a`{7k2Ww-rz<8ot|T<7nT=3`e3pm;js9_4g3&5f5*BgyrY2DNC*%C z>ppl5)XSqO0dI^6a&$oYvBcVx@?hyOQ zX6kNOda#Q<@3=tW5pYzm(VZnuRl*q2Wa*r4MHNdf0bgU7KnaYP1{G<7JTcoGLEj++ z83Sw!C`lOy9(_ONEBGH|Atzq)jMpa_CIluU^X}&bwFBo%j1Z;+y#>o zU~MsZBwyNng8C;JNVl5s$cK&0jbHTQzux{O!KRqb9+|`|IY^gqYTGwyxA#9u?`iov zy}S7-JRcVvF0LktC@&p zh~?Q&e=Lb2ot*TP#C&)*CB^c8Hr_E<^zT>7__WCb_GJ@B`w!o#o2R%bl^g&7002ov JPDHLkV1mc&2vq<8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4ade1e1968c5f072bdc38e6f082a375c8c9929b8 GIT binary patch literal 2746 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 A`~Uy| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d784fa4df16905644171e82c788a57a8f9401d6a GIT binary patch literal 3147 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 Hu0mjf)byYd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..65d177bc1632ab47aa5f22709294fc6b71f36bea GIT binary patch literal 4837 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 LNkvXXu0mjfFHsjN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..41ad949ce6594af7178e7b357db8c68051a929e5 GIT binary patch literal 9425 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 X&la4GNzl!B00000NkvXXu0mjf?0Upw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4e0c669ef8ec12d912283c46442296fed422cf7b GIT binary patch literal 6730 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml new file mode 100644 index 0000000..7775c01 --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..1b1f0ea --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ 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..489382d --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + Platypush + Settings + Next + Previous + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..32ab82f --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,25 @@ + + + + + + +