You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ja...@apache.org on 2018/09/24 21:50:14 UTC
[cordova-plugin-splashscreen] 01/01: add android support for splash
screen theme and background color.
This is an automated email from the ASF dual-hosted git repository.
janpio pushed a commit to branch indiesw-161
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-splashscreen.git
commit 480780768e308d703c7e6568240c7ba6c495889f
Author: Jan Piotrowski <pi...@gmail.com>
AuthorDate: Mon Sep 24 23:50:06 2018 +0200
add android support for splash screen theme and background color.
---
src/android/SplashScreen.java | 98 +++++++++++++++++++++++++++++++++++--------
1 file changed, 80 insertions(+), 18 deletions(-)
diff --git a/src/android/SplashScreen.java b/src/android/SplashScreen.java
index 14b6379..ab26302 100644
--- a/src/android/SplashScreen.java
+++ b/src/android/SplashScreen.java
@@ -19,18 +19,22 @@
package org.apache.cordova.splashscreen;
+import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Handler;
+import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
+import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AlphaAnimation;
@@ -90,6 +94,35 @@ public class SplashScreen extends CordovaPlugin {
getView().setVisibility(View.INVISIBLE);
}
});
+
+
+ // Save theme id if specified
+ int themeId = preferences.getInteger( "SplashScreenThemeId", 0 );
+
+ if ( themeId == 0 ) {
+ String theme = preferences.getString( "SplashScreenTheme", null );
+
+ if ( theme != null ) {
+ Activity activity = cordova.getActivity();
+ Resources resources = activity.getResources();
+
+ themeId = resources.getIdentifier(
+ theme, "style", activity.getPackageName() );
+
+ if (themeId == 0) {
+ themeId = resources.getIdentifier(
+ theme, "style", "android" );
+ }
+ }
+
+ if ( themeId == 0 ) {
+ themeId = android.R.style.Theme_Translucent_NoTitleBar;
+ }
+
+ preferences.set( "SplashScreenThemeId", themeId );
+ }
+
+
int drawableId = preferences.getInteger("SplashDrawableId", 0);
if (drawableId == 0) {
String splashResource = preferences.getString("SplashScreen", "screen");
@@ -122,6 +155,13 @@ public class SplashScreen extends CordovaPlugin {
return preferences.getBoolean("SplashMaintainAspectRatio", false);
}
+ private boolean isActivityFullScreen() {
+ int flags = cordova.getActivity().getWindow().getAttributes().flags;
+ int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
+
+ return (( flags & fullScreenFlag ) == fullScreenFlag );
+ }
+
private int getFadeDuration () {
int fadeSplashScreenDuration = preferences.getBoolean("FadeSplashScreen", true) ?
preferences.getInteger("FadeSplashScreenDuration", DEFAULT_FADE_DURATION) : 0;
@@ -263,13 +303,41 @@ public class SplashScreen extends CordovaPlugin {
@SuppressWarnings("deprecation")
private void showSplashScreen(final boolean hideAfterDelay) {
final int splashscreenTime = preferences.getInteger("SplashScreenDelay", DEFAULT_SPLASHSCREEN_DURATION);
+ final int themeId = preferences.getInteger( "SplashScreenThemeId", 0 );
final int drawableId = preferences.getInteger("SplashDrawableId", 0);
final int fadeSplashScreenDuration = getFadeDuration();
final int effectiveSplashDuration = Math.max(0, splashscreenTime - fadeSplashScreenDuration);
+ final int backgroundColor;
+
+ if ( preferences.contains( "SplashScreenBackgroundColor" ) ) {
+ backgroundColor = preferences.getInteger(
+ "SplashScreenBackgroundColor", 0 );
+ }
+ else {
+ // TODO: Use the background color of the webView's parent instead of using the preference.
+ backgroundColor = preferences.getInteger(
+ "backgroundColor", Color.BLACK );
+ }
+
+ final ImageView.ScaleType scaleType;
+
+ if (isMaintainAspectRatio()) {
+ // CENTER_CROP scale mode is equivalent to CSS "background-size:cover"
+ scaleType = ImageView.ScaleType.CENTER_CROP;
+ }
+ else {
+ // FIT_XY scales image non-uniformly to fit into image view.
+ scaleType = ImageView.ScaleType.FIT_XY;
+ }
+
lastHideAfterDelay = hideAfterDelay;
+ // Prevent to show the splash dialog if the activity is in the process of finishing
+ if (cordova.getActivity().isFinishing()) {
+ return;
+ }
// If the splash dialog is showing don't try to show it again
if (splashDialog != null && splashDialog.isShowing()) {
return;
@@ -287,32 +355,26 @@ public class SplashScreen extends CordovaPlugin {
// Use an ImageView to render the image because of its flexible scaling options.
splashImageView = new ImageView(context);
splashImageView.setImageResource(drawableId);
- LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
- splashImageView.setLayoutParams(layoutParams);
+ splashImageView.setLayoutParams(
+ new LinearLayout.LayoutParams(
+ LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT ) );
splashImageView.setMinimumHeight(display.getHeight());
splashImageView.setMinimumWidth(display.getWidth());
- // TODO: Use the background color of the webView's parent instead of using the preference.
- splashImageView.setBackgroundColor(preferences.getInteger("backgroundColor", Color.BLACK));
-
- if (isMaintainAspectRatio()) {
- // CENTER_CROP scale mode is equivalent to CSS "background-size:cover"
- splashImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- }
- else {
- // FIT_XY scales image non-uniformly to fit into image view.
- splashImageView.setScaleType(ImageView.ScaleType.FIT_XY);
- }
+ splashImageView.setBackgroundColor( backgroundColor );
+ splashImageView.setScaleType( scaleType );
// Create and show the dialog
- splashDialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar);
+ splashDialog = new Dialog( context, themeId );
+
// check to see if the splash screen should be full screen
- if ((cordova.getActivity().getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN)
- == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
- splashDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ if ( isActivityFullScreen() ) {
+ splashDialog.getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN );
}
+
splashDialog.setContentView(splashImageView);
splashDialog.setCancelable(false);
splashDialog.show();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org