Bug 708414 - Add API to check if Fennec is running for the first time (r=blassey, a=akeybl)
--- 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 {