diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index 9d2bc122e72..b05c48428e2 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -92,6 +92,7 @@ FENNEC_JAVA_FILES = \ sqlite/ByteBufferInputStream.java \ sqlite/SQLiteBridge.java \ sqlite/SQLiteBridgeException.java \ + SetupScreen.java \ SurfaceLockInfo.java \ Tab.java \ Tabs.java \ @@ -228,6 +229,7 @@ RES_LAYOUT = \ res/layout/notification_progress.xml \ res/layout/notification_progress_text.xml \ res/layout/site_setting_title.xml \ + res/layout/setup_screen.xml \ res/layout/tabs_row.xml \ res/layout/tabs_tray.xml \ res/layout/list_item_header.xml \ diff --git a/mobile/android/base/SetupScreen.java b/mobile/android/base/SetupScreen.java new file mode 100644 index 00000000000..2443e72a5b4 --- /dev/null +++ b/mobile/android/base/SetupScreen.java @@ -0,0 +1,148 @@ +/* -*- Mode: Java; tab-width: 20; indent-tabs-mode: nil; -*- + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Android code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Gian-Carlo Pascutto + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +package org.mozilla.gecko; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.widget.ImageView; +import java.util.Timer; +import java.util.TimerTask; + +import org.mozilla.gecko.R; + +public class SetupScreen extends Dialog +{ + private static final String LOGTAG = "SetupScreen"; + // Default delay before showing dialog, in milliseconds + private static final int DEFAULT_DELAY = 100; + private AnimationDrawable mProgressSpinner; + private Context mContext; + private Timer mTimer; + private TimerTask mShowTask; + + public class ShowTask extends TimerTask { + private Handler mHandler; + + public ShowTask(Handler aHandler) { + mHandler = aHandler; + } + + @Override + public void run() { + mHandler.post(new Runnable() { + public void run() { + SetupScreen.this.show(); + } + }); + + } + + @Override + public boolean cancel() { + boolean stillInQueue = super.cancel(); + if (!stillInQueue) { + mHandler.post(new Runnable() { + public void run() { + // SetupScreen.dismiss calls us, + // we need to call the real Dialog.dismiss. + SetupScreen.super.dismiss(); + } + }); + } + return stillInQueue; + } + } + + public SetupScreen(Context aContext) { + super(aContext, android.R.style.Theme_NoTitleBar_Fullscreen); + mContext = aContext; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.setup_screen); + setCancelable(false); + + setTitle(R.string.splash_firstrun); + + ImageView spinnerImage = (ImageView)findViewById(R.id.spinner_image); + mProgressSpinner = (AnimationDrawable)spinnerImage.getBackground(); + spinnerImage.setImageDrawable(mProgressSpinner); + } + + @Override + public void onWindowFocusChanged (boolean hasFocus) { + mProgressSpinner.start(); + } + + public void showDelayed(Handler aHandler) { + showDelayed(aHandler, DEFAULT_DELAY); + } + + // Delay showing the dialog until at least aDelay ms have + // passed. We need to know the handler to (eventually) post the UI + // actions on. + public void showDelayed(Handler aHandler, int aDelay) { + mTimer = new Timer("SetupScreen"); + mShowTask = new ShowTask(aHandler); + mTimer.schedule(mShowTask, aDelay); + } + + @Override + public void dismiss() { + // Cancel the timers/tasks if we were using showDelayed, + // and post to the correct handler. + if (mShowTask != null) { + mShowTask.cancel(); + mShowTask = null; + } else { + // If not using showDelayed, just dismiss here. + super.dismiss(); + } + if (mTimer != null) { + mTimer.cancel(); + mTimer = null; + } + } +} diff --git a/mobile/android/base/resources/layout/setup_screen.xml b/mobile/android/base/resources/layout/setup_screen.xml new file mode 100644 index 00000000000..269be1d04aa --- /dev/null +++ b/mobile/android/base/resources/layout/setup_screen.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/mobile/android/branding/aurora/android-resources.mn b/mobile/android/branding/aurora/android-resources.mn index 6a19940fa86..5e97a816046 100644 --- a/mobile/android/branding/aurora/android-resources.mn +++ b/mobile/android/branding/aurora/android-resources.mn @@ -3,4 +3,5 @@ mobile/android/app/android/drawable/alertdownloads.png mobile/android/branding/aurora/content/splash.png mobile/android/branding/aurora/content/splash_v9.9.png mobile/android/branding/aurora/content/splash_v8.9.png +mobile/android/branding/aurora/content/logo.png mobile/android/branding/aurora/content/favicon32.png diff --git a/mobile/android/branding/beta/android-resources.mn b/mobile/android/branding/beta/android-resources.mn index 58951349996..830e55b28af 100644 --- a/mobile/android/branding/beta/android-resources.mn +++ b/mobile/android/branding/beta/android-resources.mn @@ -3,4 +3,5 @@ mobile/android/app/android/drawable/alertdownloads.png mobile/android/branding/beta/content/splash.png mobile/android/branding/beta/content/splash_v9.9.png mobile/android/branding/beta/content/splash_v8.9.png +mobile/android/branding/beta/content/logo.png mobile/android/branding/beta/content/favicon32.png diff --git a/mobile/android/branding/nightly/android-resources.mn b/mobile/android/branding/nightly/android-resources.mn index 869bf89f9fc..f4ea79974bb 100644 --- a/mobile/android/branding/nightly/android-resources.mn +++ b/mobile/android/branding/nightly/android-resources.mn @@ -3,4 +3,5 @@ mobile/android/app/android/drawable/alertdownloads.png mobile/android/branding/nightly/content/splash.png mobile/android/branding/nightly/content/splash_v9.9.png mobile/android/branding/nightly/content/splash_v8.9.png +mobile/android/branding/nightly/content/logo.png mobile/android/branding/nightly/content/favicon32.png diff --git a/mobile/android/branding/official/android-resources.mn b/mobile/android/branding/official/android-resources.mn index 9fd41a2b2c5..4380f214ab0 100644 --- a/mobile/android/branding/official/android-resources.mn +++ b/mobile/android/branding/official/android-resources.mn @@ -3,4 +3,5 @@ mobile/android/app/android/drawable/alertdownloads.png mobile/android/branding/official/content/splash.png mobile/android/branding/official/content/splash_v9.9.png mobile/android/branding/official/content/splash_v8.9.png +mobile/android/branding/official/content/logo.png mobile/android/branding/official/content/favicon32.png diff --git a/mobile/android/branding/unofficial/android-resources.mn b/mobile/android/branding/unofficial/android-resources.mn index 5013dc4032c..7d952049edf 100644 --- a/mobile/android/branding/unofficial/android-resources.mn +++ b/mobile/android/branding/unofficial/android-resources.mn @@ -4,3 +4,4 @@ mobile/android/branding/unofficial/content/splash.png mobile/android/branding/unofficial/content/splash_v9.9.png mobile/android/branding/unofficial/content/splash_v8.9.png mobile/android/branding/unofficial/content/favicon32.png +mobile/android/branding/unofficial/content/logo.png