Эх сурвалжийг харах

Added splash screen.

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
A117870935 2 жил өмнө
parent
commit
1565e68be0

+ 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.SplashActivity"
+            android:theme="@style/Theme.ownCloud.Launcher"
+            android:exported="true">
+            <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.SplashActivity;
 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 SplashActivity splashActivity();
+
 }

+ 60 - 0
app/src/main/java/com/nmc/android/ui/SplashActivity.kt

@@ -0,0 +1,60 @@
+package com.nmc.android.ui
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.Handler
+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 com.owncloud.android.utils.StringUtils
+import javax.inject.Inject
+
+class SplashActivity : BaseActivity() {
+
+    companion object {
+        const val SPLASH_DURATION = 1500L
+    }
+
+    private lateinit var binding : ActivitySplashBinding
+
+    @Inject
+    lateinit var appPreferences: AppPreferences
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        //flag to avoid redirection to AuthenticatorActivity
+        //as we need this activity to be shown
+        //Note: Should be kept before super() method
+        enableAccountHandling = false
+        super.onCreate(savedInstanceState)
+
+        binding = ActivitySplashBinding.inflate(layoutInflater)
+
+        setContentView(binding.root)
+        setSplashTitle()
+        scheduleSplashScreen()
+    }
+
+    private fun setSplashTitle() {
+        val appName = resources.getString(R.string.app_name)
+        val textToBold = resources.getString(R.string.project_name)
+        binding.tvSplash.text = StringUtils.makeTextBold(appName, textToBold)
+    }
+
+    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
+        )
+    }
+}

+ 20 - 0
app/src/main/java/com/owncloud/android/utils/StringUtils.java

@@ -21,6 +21,11 @@
 package com.owncloud.android.utils;
 
 
+import android.graphics.Typeface;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.StyleSpan;
+
 import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -77,4 +82,19 @@ public final class StringUtils {
         }
         return s;
     }
+
+    /**
+     * make the passed text bold
+     *
+     * @param fullText   actual text
+     * @param textToBold to be bold
+     * @return
+     */
+    public static Spannable makeTextBold(String fullText, String textToBold) {
+        Spannable spannable = new SpannableString(fullText);
+        int indexStart = fullText.indexOf(textToBold);
+        int indexEnd = indexStart + textToBold.length();
+        spannable.setSpan(new StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return spannable;
+    }
 }

+ 16 - 0
app/src/main/res/drawable/ic_magentacloud_splash_logo.xml

@@ -0,0 +1,16 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="200dp"
+    android:height="200dp"
+    android:viewportWidth="300"
+    android:viewportHeight="300">
+    <group>
+        <path
+            android:fillColor="#fff"
+            android:pathData="M132.225,229.086a74.15,74.15 0,0 1,-51.084 -20.293,40.579 40.579,0 0,1 -8.912,0.987 39.97,39.97 0,0 1,-15.658 -3.161,40.09 40.09,0 0,1 -12.787,-8.621 40.115,40.115 0,0 1,-8.621 -12.785,39.961 39.961,0 0,1 -3.162,-15.658 40.1,40.1 0,0 1,2.387 -13.68,40.106 40.106,0 0,1 6.6,-11.664 40.32,40.32 0,0 1,9.977 -8.812,39.926 39.926,0 0,1 12.516,-5.121 39.934,39.934 0,0 1,39.859 -37.62,39.943 39.943,0 0,1 11.367,1.643 67.41,67.41 0,0 1,10.424 -10.856,67.1 67.1,0 0,1 12.627,-8.292 66.608,66.608 0,0 1,14.4 -5.293,67.237 67.237,0 0,1 15.738,-1.861 66.685,66.685 0,0 1,23.594 4.277,66.635 66.635,0 0,1 19.91,11.789 66.96,66.96 0,0 1,14.668 17.739,66.3 66.3,0 0,1 7.859,22.125 42.649,42.649 0,0 1,13.533 5.4,43.075 43.075,0 0,1 10.8,9.421 42.77,42.77 0,0 1,7.15 12.529,42.849 42.849,0 0,1 2.588,14.725 42.727,42.727 0,0 1,-3.381 16.736,42.812 42.812,0 0,1 -9.215,13.667 42.849,42.849 0,0 1,-13.668 9.215,42.725 42.725,0 0,1 -16.736,3.379 43.219,43.219 0,0 1,-4.557 -0.237,39.822 39.822,0 0,1 -13.168,9.656 39.628,39.628 0,0 1,-16.52 3.567,39.58 39.58,0 0,1 -17.539,-4.044v-50.322h33.172l-50.49,-51.667 -50.787,51.667h33.465v61.2C136.477,228.994 134.34,229.086 132.225,229.086Z" />
+        <path
+            android:strokeAlpha="0.2"
+            android:fillColor="#E20074"
+            android:fillAlpha="0.2"
+            android:pathData="M206.388,179.173L173.216,179.173L173.216,167.62L195.098,167.62l11.288,11.551ZM138.577,179.173L104.816,179.173L116.237,167.62h22.34L138.577,179.172Z" />
+    </group>
+</vector>

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

@@ -0,0 +1,37 @@
+<?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"
+    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/ic_magentacloud_splash_logo" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tvSplash"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="-10dp"
+        android:text="@string/app_name"
+        android:textColor="@color/white"
+        android:textSize="@dimen/txt_size_20sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/guideline" />
+
+
+    <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.45" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 34 - 0
app/src/main/res/values/dimens.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="splash_image_size">116dp</dimen>
+    <dimen name="grid_recyclerview_padding">4dp</dimen>
+    <dimen name="list_item_icons_size">16dp</dimen>
+    <dimen name="grid_item_icons_size">24dp</dimen>
+    <dimen name="media_grid_item_rv_spacing">6dp</dimen>
+    <dimen name="txt_size_14sp">14sp</dimen>
+    <dimen name="txt_size_16sp">16sp</dimen>
+    <dimen name="txt_size_18sp">18sp</dimen>
+    <dimen name="txt_size_15sp">15sp</dimen>
+    <dimen name="crop_corner_size">15dp</dimen>
+    <dimen name="edit_scan_bottom_bar_height">56dp</dimen>
+    <dimen name="standard_folders_grid_item_size">86dp</dimen>
+    <dimen name="standard_files_grid_item_size">80dp</dimen>
+    <dimen name="txt_size_11sp">11sp</dimen>
+    <dimen name="share_row_icon_size">30dp</dimen>
+    <dimen name="create_link_button_height">55dp</dimen>
+    <dimen name="note_et_height">258dp</dimen>
+    <dimen name="txt_size_17sp">17sp</dimen>
+    <dimen name="share_exp_date_divider_margin">20dp</dimen>
+    <dimen name="privacy_btn_width">160dp</dimen>
+    <dimen name="privacy_icon_size">50dp</dimen>
+    <dimen name="login_btn_width">150dp</dimen>
+    <dimen name="login_btn_height">55dp</dimen>
+    <dimen name="login_btn_bottom_margin">48dp</dimen>
+    <dimen name="login_btn_bottom_margin_land">48dp</dimen>
+    <dimen name="login_btn_bottom_margin_small_screen">24dp</dimen>
+    <dimen name="shared_with_me_icon_size">26dp</dimen>
+    <dimen name="txt_size_20sp">20sp</dimen>
+    <dimen name="notification_row_item_height">145dp</dimen>
+    <dimen name="button_stroke_width">1dp</dimen>
+    <dimen name="txt_size_13sp">13sp</dimen>
+</resources>

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

@@ -6,6 +6,8 @@
 
     <!-- App name  and other strings-->
     <string name="app_name">Nextcloud</string>
+    <!-- required for NMC and will change to Magenta once branding changes applied -->
+    <string name="project_name">Next</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>

+ 1 - 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>