Bug 708414 - Add API to check if Fennec is running for the first time (r=blassey, a=akeybl)
authorLucas Rocha <lucasr@mozilla.com>
Tue, 24 Jan 2012 14:03:28 +0000 (2012-01-24)
changeset 84237 68105795f01ded87cf57069d86dec9196edb5447
parent 84236 4708e808a27dd7fa706d89cd5d321b0e5d91cdfe
child 84238 7d59e1b01229135702d54d1ad4f22c394bce16a5
push id781
push userblassey@mozilla.com
push dateThu, 26 Jan 2012 23:23:12 +0000 (2012-01-26)
treeherdermozilla-aurora@38d3435b65f0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersblassey, akeybl
bugs708414
milestone11.0a2
Bug 708414 - Add API to check if Fennec is running for the first time (r=blassey, a=akeybl)
mobile/android/base/GeckoApp.java
--- a/mobile/android/base/GeckoApp.java
+++ b/mobile/android/base/GeckoApp.java
@@ -88,28 +88,35 @@ import android.content.pm.*;
 import android.content.pm.PackageManager.*;
 import dalvik.system.*;
 
 abstract public class GeckoApp
     extends Activity implements GeckoEventListener, SensorEventListener, LocationListener
 {
     private static final String LOGTAG = "GeckoApp";
 
+    public static enum StartupMode {
+        NORMAL,
+        NEW_VERSION,
+        NEW_PROFILE
+    }
+
     public static final String ACTION_ALERT_CLICK   = "org.mozilla.gecko.ACTION_ALERT_CLICK";
     public static final String ACTION_ALERT_CLEAR   = "org.mozilla.gecko.ACTION_ALERT_CLEAR";
     public static final String ACTION_WEBAPP        = "org.mozilla.gecko.WEBAPP";
     public static final String ACTION_DEBUG         = "org.mozilla.gecko.DEBUG";
     public static final String ACTION_BOOKMARK      = "org.mozilla.gecko.BOOKMARK";
     public static final String ACTION_LOAD          = "org.mozilla.gecko.LOAD";
     public static final String SAVED_STATE_URI      = "uri";
     public static final String SAVED_STATE_TITLE    = "title";
     public static final String SAVED_STATE_VIEWPORT = "viewport";
     public static final String SAVED_STATE_SCREEN   = "screen";
     public static final String SAVED_STATE_SESSION  = "session";
 
+    StartupMode mStartupMode = null;
     private LinearLayout mMainLayout;
     private RelativeLayout mGeckoLayout;
     public static SurfaceView cameraView;
     public static GeckoApp mAppContext;
     public static boolean mFullScreen = false;
     public static File sGREDir = null;
     public static Menu sMenu;
     private static GeckoThread sGeckoThread = null;
@@ -764,16 +771,61 @@ abstract public class GeckoApp
                     mBrowserToolbar.setFavicon(tab.getFavicon());
                     mBrowserToolbar.setSecurityMode(tab.getSecurityMode());
                     mBrowserToolbar.setProgressVisibility(tab.isLoading());
                 }
             }
         });
     }
 
+    public StartupMode getStartupMode() {
+        // This function might touch the disk and should not
+        // be called from UI's main thread.
+
+        synchronized(this) {
+            if (mStartupMode != null)
+                return mStartupMode;
+
+            String packageName = getPackageName();
+            SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
+
+            // This key should be profile-dependent. For now, we're simply hardcoding
+            // the "default" profile here.
+            String keyName = packageName + ".default.startup_version";
+            String appVersion = null;
+
+            try {
+                PackageInfo pkgInfo = getPackageManager().getPackageInfo(packageName, 0);
+                appVersion = pkgInfo.versionName;
+            } catch(NameNotFoundException nnfe) {
+                // If, for some reason, we can't fetch the app version
+                // we fallback to NORMAL startup mode.
+                mStartupMode = StartupMode.NORMAL;
+                return mStartupMode;
+            }
+
+            String startupVersion = settings.getString(keyName, null);
+            if (startupVersion == null) {
+                mStartupMode = StartupMode.NEW_PROFILE;
+            } else {
+                if (startupVersion.equals(appVersion))
+                    mStartupMode = StartupMode.NORMAL;
+                else
+                    mStartupMode = StartupMode.NEW_VERSION;
+            }
+
+            if (mStartupMode != StartupMode.NORMAL)
+                settings.edit().putString(keyName, appVersion).commit();
+
+            Log.i(LOGTAG, "Startup mode: " + mStartupMode);
+
+            return mStartupMode;
+        }
+    }
+
     public File getProfileDir() {
         return getProfileDir("default");
     }
 
     public File getProfileDir(final String profileName) {
         if (mProfileDir != null)
             return mProfileDir;
         try {