Browse Source

Merge pull request #11591 from nextcloud/nmc/1885-splash

Launcher screen
Andy Scherzinger 2 years ago
parent
commit
5b1703dcb2

+ 3 - 0
app/build.gradle

@@ -380,6 +380,9 @@ dependencies {
     androidTestImplementation "androidx.room:room-testing:$roomVersion"
 
     implementation "io.coil-kt:coil:2.4.0"
+
+    //splash screen dependency ref: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate
+    implementation 'androidx.core:core-splashscreen:1.0.0'
 }
 
 configurations.all {

BIN
app/screenshots/gplay/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png


+ 53 - 0
app/src/androidTest/java/com/nmc/android/ui/LauncherActivityIT.kt

@@ -0,0 +1,53 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author TSI-mc
+ * Copyright (C) 2023 TSI-mc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nmc.android.ui
+
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.owncloud.android.AbstractIT
+import com.owncloud.android.R
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class LauncherActivityIT : AbstractIT() {
+
+    @get:Rule
+    val activityRule = ActivityScenarioRule(LauncherActivity::class.java)
+
+    @Test
+    fun verifyUIElements() {
+        waitForIdleSync()
+        onView(withId(R.id.ivSplash)).check(matches(isCompletelyDisplayed()))
+        onView(withId(R.id.splashScreenBold)).check(matches(isCompletelyDisplayed()))
+        onView(withId(R.id.splashScreenNormal)).check(matches(isCompletelyDisplayed()))
+
+        onView(withId(R.id.splashScreenBold)).check(matches(withText("Magenta")))
+        onView(withId(R.id.splashScreenNormal)).check(matches(withText("CLOUD")))
+    }
+}

+ 12 - 5
app/src/main/AndroidManifest.xml

@@ -102,11 +102,6 @@
             android:exported="true"
             android:launchMode="singleTop"
             android:theme="@style/Theme.ownCloud.Launcher">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.SEARCH" />
             </intent-filter>
@@ -492,6 +487,18 @@
             android:name="com.nextcloud.client.documentscan.DocumentScanActivity"
             android:exported="false"
             android:theme="@style/Theme.ownCloud.Toolbar" />
+
+        <activity
+            android:name="com.nmc.android.ui.LauncherActivity"
+            android:exported="true"
+            android:theme="@style/Theme.App.Starting">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
     </application>
 
     <queries>

+ 5 - 0
app/src/main/java/com/nextcloud/client/di/ComponentsModule.java

@@ -36,6 +36,7 @@ import com.nextcloud.client.widget.DashboardWidgetService;
 import com.nextcloud.ui.ChooseAccountDialogFragment;
 import com.nextcloud.ui.SetStatusDialogFragment;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
+import com.nmc.android.ui.LauncherActivity;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.DeepLinkLoginActivity;
@@ -466,4 +467,8 @@ abstract class ComponentsModule {
 
     @ContributesAndroidInjector
     abstract GroupfolderListFragment groupfolderListFragment();
+
+    @ContributesAndroidInjector
+    abstract LauncherActivity launcherActivity();
+
 }

+ 84 - 0
app/src/main/java/com/nmc/android/ui/LauncherActivity.kt

@@ -0,0 +1,84 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author TSI-mc
+ * Copyright (C) 2023 TSI-mc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nmc.android.ui
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.Handler
+import android.text.TextUtils
+import android.view.View
+import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
+import com.nextcloud.client.preferences.AppPreferences
+import com.owncloud.android.R
+import com.owncloud.android.authentication.AuthenticatorActivity
+import com.owncloud.android.databinding.ActivitySplashBinding
+import com.owncloud.android.ui.activity.BaseActivity
+import com.owncloud.android.ui.activity.FileDisplayActivity
+import javax.inject.Inject
+
+class LauncherActivity : BaseActivity() {
+
+    private lateinit var binding: ActivitySplashBinding
+
+    @Inject
+    lateinit var appPreferences: AppPreferences
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        // Mandatory to call this before super method to show system launch screen for api level 31+
+        installSplashScreen()
+
+        super.onCreate(savedInstanceState)
+
+        binding = ActivitySplashBinding.inflate(layoutInflater)
+
+        setContentView(binding.root)
+        updateTitleVisibility()
+        scheduleSplashScreen()
+    }
+
+    private fun updateTitleVisibility() {
+        if (TextUtils.isEmpty(resources.getString(R.string.splashScreenBold))) {
+            binding.splashScreenBold.visibility = View.GONE
+        }
+        if (TextUtils.isEmpty(resources.getString(R.string.splashScreenNormal))) {
+            binding.splashScreenNormal.visibility = View.GONE
+        }
+    }
+
+    private fun scheduleSplashScreen() {
+        Handler().postDelayed(
+            {
+                // if user is null then go to authenticator activity
+                if (!user.isPresent) {
+                    startActivity(Intent(this, AuthenticatorActivity::class.java))
+                } else {
+                    startActivity(Intent(this, FileDisplayActivity::class.java))
+                }
+                finish()
+            },
+            SPLASH_DURATION
+        )
+    }
+
+    companion object {
+        const val SPLASH_DURATION = 1500L
+    }
+}

+ 13 - 2
app/src/main/java/com/owncloud/android/MainApp.java

@@ -4,8 +4,10 @@
  * @author masensio
  * @author David A. Velasco
  * @author Chris Narkiewicz
+ * @author TSI-mc
  * Copyright (C) 2015 ownCloud Inc.
  * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2023 TSI-mc
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -60,6 +62,7 @@ import com.nextcloud.client.onboarding.OnboardingService;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferencesImpl;
 import com.nextcloud.client.preferences.DarkMode;
+import com.nmc.android.ui.LauncherActivity;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.PassCodeManager;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -365,7 +368,11 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
             @Override
             public void onActivityResumed(@NonNull Activity activity) {
                 Log_OC.d(activity.getClass().getSimpleName(), "onResume() starting");
-                passCodeManager.onActivityResumed(activity);
+                // we are checking activity is not launcher activity because there is timer in launcher
+                // which will reopen the passcode screen
+                if (!(activity instanceof LauncherActivity)) {
+                    passCodeManager.onActivityResumed(activity);
+                }
             }
 
             @Override
@@ -376,7 +383,11 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
             @Override
             public void onActivityStopped(@NonNull Activity activity) {
                 Log_OC.d(activity.getClass().getSimpleName(), "onStop() ending");
-                passCodeManager.onActivityStopped(activity);
+                // since we are not showing passcode on launch activity
+                // so we don't need to call the stopped method as well
+                if (!(activity instanceof LauncherActivity)) {
+                    passCodeManager.onActivityStopped(activity);
+                }
             }
 
             @Override

BIN
app/src/main/res/drawable-hdpi/logo.png


+ 0 - 31
app/src/main/res/drawable/launch_screen.xml

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Nextcloud Android client application
-
-  Copyright (C) 2018 Edvard Holst
-
-  This program is free software; you can redistribute it and/or
-  modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-  License as published by the Free Software Foundation; either
-  version 3 of the License, or any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU AFFERO GENERAL PUBLIC LICENSE for more details.
-
-  You should have received a copy of the GNU Affero General Public
-  License along with this program. If not, see <http://www.gnu.org/licenses/>.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item
-        android:drawable="@color/primary"/>
-
-    <item>
-        <bitmap
-            android:gravity="center"
-            android:src="@drawable/logo" />
-    </item>
-
-</layer-list>

+ 29 - 0
app/src/main/res/drawable/logo.xml

@@ -0,0 +1,29 @@
+<!--
+  ~
+  ~ Nextcloud Android client application
+  ~
+  ~ Copyright (C) 2023 Nextcloud GmbH
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU Affero General Public License as published by
+  ~ the Free Software Foundation, either version 3 of the License, or
+  ~ (at your option) any later version.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  ~ GNU Affero General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Affero General Public License
+  ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="200dp"
+    android:height="100dp"
+    android:viewportWidth="900"
+    android:viewportHeight="450">
+    <path
+        android:fillColor="#ffffff"
+        android:fillType="nonZero"
+        android:pathData="M450.68,21.01C357.33,21.02 278.95,84.95 254.99,170.95C234.09,124.95 188.08,92.35 134.62,92.34C61.84,92.35 2.01,152.2 2,224.99C1.99,297.8 61.83,357.66 134.62,357.67C188.08,357.66 234.07,325.04 254.97,279.03C278.91,365.05 357.32,428.99 450.68,429C543.52,429.01 621.52,365.76 645.96,280.48C667.2,325.63 712.51,357.66 765.36,357.66C838.16,357.68 898.01,297.81 898,224.99C897.99,152.18 838.14,92.33 765.36,92.34C712.51,92.35 667.18,124.36 645.93,169.52C621.5,84.24 543.52,20.99 450.68,21L450.68,21.01ZM450.68,98.88C520.79,98.88 576.79,154.87 576.8,224.99C576.8,295.13 520.8,351.15 450.68,351.14C380.58,351.13 324.59,295.12 324.59,224.99C324.6,154.88 380.58,98.88 450.68,98.88ZM134.6,170.21C165.31,170.21 189.37,194.27 189.37,224.99C189.37,255.72 165.32,279.8 134.6,279.8C103.88,279.8 79.83,255.72 79.84,224.99C79.84,194.27 103.89,170.21 134.6,170.21ZM765.36,170.21C796.07,170.2 820.15,194.27 820.15,224.99C820.16,255.72 796.08,279.8 765.36,279.8C734.64,279.8 710.58,255.72 710.59,224.99C710.59,194.27 734.64,170.21 765.36,170.21Z" />
+</vector>

File diff suppressed because it is too large
+ 31 - 0
app/src/main/res/drawable/nextcloud_splash_logo.xml


+ 69 - 0
app/src/main/res/layout/activity_splash.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2023 TSI-mc
+
+  This program is free software; you can redistribute it and/or
+  modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+  License as published by the Free Software Foundation; either
+  version 3 of the License, or any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+
+  You should have received a copy of the GNU Affero General Public
+  License along with this program. If not, see <http://www.gnu.org/licenses/>.
+  -->
+<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
+    android:background="@color/primary">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/ivSplash"
+        android:layout_width="@dimen/splash_image_size"
+        android:layout_height="@dimen/splash_image_size"
+        app:layout_constraintBottom_toTopOf="@+id/guideline"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:srcCompat="@drawable/nextcloud_splash_logo" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_horizontal"
+        android:orientation="horizontal"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/guideline">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/splashScreenBold"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/splashScreenBold"
+            android:textColor="@color/white"
+            android:textSize="@dimen/splash_text_size"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/splashScreenNormal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/splashScreenNormal"
+            android:textColor="@color/white"
+            android:textSize="@dimen/splash_text_size" />
+    </LinearLayout>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:id="@+id/guideline"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        app:layout_constraintGuide_percent="0.5" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
app/src/main/res/values/dims.xml

@@ -146,6 +146,8 @@
     <dimen name="default_login_width">400dp</dimen>
     <dimen name="dialogBorderRadius">24dp</dimen>
     <dimen name="dialog_padding">24dp</dimen>
+    <dimen name="splash_image_size">116dp</dimen>
+    <dimen name="splash_text_size">20sp</dimen>
     <integer name="small_margin">5</integer>
     <integer name="zero">0</integer>
     <dimen name="txt_size_16sp">16sp</dimen>

+ 2 - 0
app/src/main/res/values/setup.xml

@@ -6,6 +6,8 @@
 
     <!-- App name  and other strings-->
     <string name="app_name">Nextcloud</string>
+    <string name="splashScreenBold"></string>
+    <string name="splashScreenNormal"></string>
     <string name="account_type">nextcloud</string>     <!-- better if was a domain name; but changing it now would require migrate accounts when the app is updated -->
     <string name="authority">org.nextcloud</string>    <!-- better if was the app package with ".provider" appended ; it identifies the provider -->
     <string name="users_and_groups_search_authority">com.nextcloud.android.providers.UsersAndGroupsSearchProvider</string>

+ 13 - 1
app/src/main/res/values/styles.xml

@@ -284,7 +284,7 @@
     <style name="Theme.ownCloud.Launcher">
         <item name="android:statusBarColor">@color/primary</item>
         <item name="android:navigationBarColor">@color/primary</item>
-        <item name="android:windowBackground">@drawable/launch_screen</item>
+        <item name="android:windowBackground">@color/primary</item>
         <item name="android:textColorHint">@color/secondary_text_color</item>
     </style>
 
@@ -486,6 +486,18 @@
         <item name="android:textColor">@color/white</item>
     </style>
 
+    <!-- Splash screen style attributes: https://developer.android.com/develop/ui/views/launch/splash-screen#set-theme -->
+    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
+        <!-- Set the splash screen background color -->
+        <item name="windowSplashScreenBackground">@color/primary</item>
+
+        <!-- Set the splash screen animated icon  -->
+        <!-- Setting a transparent icon because of branding reason, showing icon is not accepted -->
+        <item name="windowSplashScreenAnimatedIcon">@android:color/transparent</item>
 
+        <!-- Set the theme of the Activity that directly follows your splash screen. -->
+        <!-- Required -->
+        <item name="postSplashScreenTheme">@style/Theme.ownCloud.Launcher</item>
+    </style>
 
 </resources>

+ 8 - 46
drawable_resources/logo.svg

@@ -1,47 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="100%"
-   height="100%"
-   viewBox="0 0 1064 1064"
-   version="1.1"
-   xml:space="preserve"
-   style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"
-   id="svg5"
-   sodipodi:docname="logo.svg"
-   inkscape:version="0.92.1 r15371"><metadata
-     id="metadata11"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
-     id="defs9" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1005"
-     id="namedview7"
-     showgrid="false"
-     inkscape:zoom="0.22180451"
-     inkscape:cx="532"
-     inkscape:cy="532"
-     inkscape:window-x="-9"
-     inkscape:window-y="-9"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg5" /><g
-     id="path6"
-     transform="translate(-140,-136.064)"><path
-       d="M 672.681,456.07 C 579.33,456.08 500.945,519.999 476.995,605.988 456.091,559.995 410.078,527.4 356.617,527.394 283.844,527.404 224.009,587.243 224,660.022 c -0.014,72.793 59.829,132.645 132.617,132.654 53.467,-0.01 99.45,-32.621 120.351,-78.621 23.941,86.004 102.353,149.936 195.716,149.945 92.84,0.01 170.84,-63.23 195.277,-148.499 21.243,45.148 66.549,77.166 119.395,77.172 72.804,0.013 132.654,-59.846 132.644,-132.654 -0.01,-72.794 -59.86,-132.64 -132.644,-132.628 -52.849,0.01 -98.18,32.018 -119.422,77.172 -24.437,-85.266 -102.41,-148.505 -195.25,-148.499 z m 0,77.856 c 70.106,0 126.109,55.987 126.115,126.099 0,70.12 -56,126.131 -126.115,126.125 -70.106,-0.01 -126.094,-56.014 -126.088,-126.125 0.01,-70.103 55.991,-126.09 126.088,-126.099 z M 356.602,605.25 c 30.712,0 54.764,24.059 54.767,54.772 0,30.719 -24.05,54.795 -54.767,54.798 -30.718,0 -54.772,-24.079 -54.766,-54.798 0,-30.713 24.056,-54.769 54.766,-54.772 z m 630.754,0 c 30.714,-0.01 54.794,24.052 54.794,54.772 0.01,30.728 -24.07,54.804 -54.794,54.798 -30.718,0 -54.772,-24.079 -54.769,-54.798 0,-30.713 24.057,-54.769 54.769,-54.772 z"
-       style="fill:#ffffff;fill-rule:nonzero"
-       id="path2"
-       inkscape:connector-curvature="0" /></g></svg>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 900 450" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <g transform="matrix(1,0,0,1.00016,-222,-435.136)">
+        <g id="path6">
+            <path id="path2" d="M672.681,456.07C579.33,456.08 500.945,519.999 476.995,605.988C456.091,559.995 410.078,527.4 356.617,527.394C283.844,527.404 224.009,587.243 224,660.022C223.986,732.815 283.829,792.667 356.617,792.676C410.084,792.666 456.067,760.055 476.968,714.055C500.909,800.059 579.321,863.991 672.684,864C765.524,864.01 843.524,800.77 867.961,715.501C889.204,760.649 934.51,792.667 987.356,792.673C1060.16,792.686 1120.01,732.827 1120,660.019C1119.99,587.225 1060.14,527.379 987.356,527.391C934.507,527.401 889.176,559.409 867.934,604.563C843.497,519.297 765.524,456.058 672.684,456.064L672.681,456.07ZM672.681,533.926C742.787,533.926 798.79,589.913 798.796,660.025C798.796,730.145 742.796,786.156 672.681,786.15C602.575,786.14 546.587,730.136 546.593,660.025C546.603,589.922 602.584,533.935 672.681,533.926ZM356.602,605.25C387.314,605.25 411.366,629.309 411.369,660.022C411.369,690.741 387.319,714.817 356.602,714.82C325.884,714.82 301.83,690.741 301.836,660.022C301.836,629.309 325.892,605.253 356.602,605.25ZM987.356,605.25C1018.07,605.24 1042.15,629.302 1042.15,660.022C1042.16,690.75 1018.08,714.826 987.356,714.82C956.638,714.82 932.584,690.741 932.587,660.022C932.587,629.309 956.644,605.253 987.356,605.25Z" style="fill:white;fill-rule:nonzero;"/>
+        </g>
+    </g>
+</svg>

+ 7 - 0
drawable_resources/nextcloud-logo.svg

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 116 116" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <g transform="matrix(0.934491,0,0,0.934491,-16.6897,-5.00788)">
+        <path id="logo" d="M80.093,39.773C67.5,39.773 56.827,48.31 53.519,59.876C50.644,53.741 44.414,49.443 37.238,49.443C27.37,49.443 19.257,57.556 19.257,67.424C19.257,77.293 27.37,85.409 37.238,85.409C44.414,85.409 50.644,81.108 53.519,74.972C56.827,86.539 67.5,95.079 80.093,95.079C92.592,95.079 103.21,86.668 106.603,75.231C109.531,81.228 115.684,85.409 122.758,85.409C132.627,85.409 140.742,77.293 140.742,67.424C140.742,57.556 132.627,49.443 122.758,49.443C115.684,49.443 109.531,53.622 106.603,59.617C103.21,48.181 92.592,39.773 80.093,39.773ZM80.093,50.329C89.598,50.329 97.192,57.919 97.192,67.424C97.192,76.93 89.598,84.524 80.093,84.524C70.587,84.524 62.997,76.93 62.997,67.424C62.997,57.919 70.587,50.329 80.093,50.329ZM37.238,59.999C41.403,59.999 44.668,63.26 44.668,67.424C44.668,71.589 41.403,74.854 37.238,74.854C33.074,74.854 29.813,71.589 29.813,67.424C29.813,63.26 33.074,59.999 37.238,59.999ZM122.758,59.999C126.923,59.999 130.187,63.26 130.187,67.424C130.187,71.589 126.923,74.854 122.758,74.854C118.593,74.854 115.332,71.589 115.332,67.424C115.332,63.26 118.593,59.999 122.758,59.999Z" style="fill:white;fill-rule:nonzero;"/>
+    </g>
+</svg>

File diff suppressed because it is too large
+ 7 - 0
drawable_resources/nextcloud-splash-logo.svg


+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 75 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 76 warnings</span>

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