Set start screen depending on what the user last did (sort or review)

When the app is started it now shows the sorting screen or the review
screen depending on what the user last did.

Change-Id: I9b63af33feea3f2c941828c39378cae0abf63158
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/app/src/main/java/com/google/reviewit/MainActivity.java b/app/src/main/java/com/google/reviewit/MainActivity.java
index d912862..d509f67 100644
--- a/app/src/main/java/com/google/reviewit/MainActivity.java
+++ b/app/src/main/java/com/google/reviewit/MainActivity.java
@@ -141,7 +141,15 @@
     if (getApp().getPrefs().showIntro) {
       displayView(new IntroFragment1());
     } else if (savedInstanceState == null) {
-      displayView(0);
+      switch (getApp().getPrefs().startScreen) {
+        case REVIEW_SCREEN:
+          displayView(1);
+          break;
+        case SORT_SCREEN:
+        default:
+          displayView(0);
+          break;
+      }
     }
   }
 
diff --git a/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java b/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
index c6fd272..8966c64 100644
--- a/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
+++ b/app/src/main/java/com/google/reviewit/ReviewChangesFragment.java
@@ -31,6 +31,7 @@
 
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.reviewit.app.Change;
+import com.google.reviewit.app.Preferences;
 import com.google.reviewit.app.QueryHandler;
 import com.google.reviewit.util.TaskObserver;
 import com.google.reviewit.widget.ChangeEntry;
@@ -59,6 +60,11 @@
 
     setHasOptionsMenu(true);
 
+    getApp().getPrefManager().setPreferences(
+        new Preferences.Builder(getApp().getPrefManager().getPreferences())
+            .setStartScreen(Preferences.StartScreen.REVIEW_SCREEN)
+            .build());
+
     TaskObserver.enableProgressBar(getWindow());
     init();
 
diff --git a/app/src/main/java/com/google/reviewit/SortChangesFragment.java b/app/src/main/java/com/google/reviewit/SortChangesFragment.java
index 2969891..b5c0a49 100644
--- a/app/src/main/java/com/google/reviewit/SortChangesFragment.java
+++ b/app/src/main/java/com/google/reviewit/SortChangesFragment.java
@@ -37,6 +37,7 @@
 
 import com.google.gerrit.extensions.client.ChangeStatus;
 import com.google.gerrit.extensions.restapi.RestApiException;
+import com.google.reviewit.app.Preferences;
 import com.google.reviewit.app.SortActionHandler;
 import com.google.reviewit.app.Change;
 import com.google.reviewit.app.ConfigManager;
@@ -78,6 +79,11 @@
       getSortActionHandler().pushBack();
     }
 
+    getApp().getPrefManager().setPreferences(
+        new Preferences.Builder(getApp().getPrefManager().getPreferences())
+            .setStartScreen(Preferences.StartScreen.SORT_SCREEN)
+            .build());
+
     TaskObserver.enableProgressBar(getWindow());
     init();
     display();
diff --git a/app/src/main/java/com/google/reviewit/app/PreferenceManager.java b/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
index 229f4df..c6be90b 100644
--- a/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
+++ b/app/src/main/java/com/google/reviewit/app/PreferenceManager.java
@@ -19,6 +19,7 @@
 
 public class PreferenceManager {
   private static final String KEY_SHOW_INTRO = "SHOW_INTRO";
+  private static final String KEY_START_SCREEN = "START_SCREEN";
   private static final String KEY_COLOR_BACKGROUND = "COLOR_BACKGROUND";
   private final static String KEY_SHOW_PATCH_SETS = "SHOW_PATCH_SETS";
   private final static String KEY_SHOW_POSITIVE_CODE_REVIEW_VOTES =
@@ -46,6 +47,8 @@
     if (preferences == null) {
       preferences = new Preferences.Builder()
           .setShowIntro(prefs.getBoolean(KEY_SHOW_INTRO, true))
+          .setStartScreen(Preferences.StartScreen.fromString(
+              prefs.getString(KEY_START_SCREEN, null)))
           .setColorBackground(prefs.getBoolean(KEY_COLOR_BACKGROUND, true))
           .setShowPatchSets(prefs.getBoolean(KEY_SHOW_PATCH_SETS, true))
           .setShowPositiveCodeReviewVotes(
@@ -64,6 +67,10 @@
   public void setPreferences(Preferences preferences) {
     SharedPreferences.Editor editor = prefs.edit();
     editor.putBoolean(KEY_SHOW_INTRO, preferences.showIntro);
+    editor.putString(KEY_START_SCREEN,
+        preferences.startScreen != null
+            ? preferences.startScreen.name()
+            : null);
     editor.putBoolean(KEY_COLOR_BACKGROUND, preferences.colorBackground);
     editor.putBoolean(KEY_SHOW_PATCH_SETS, preferences.showPatchSets);
     editor.putBoolean(KEY_SHOW_POSITIVE_CODE_REVIEW_VOTES,
diff --git a/app/src/main/java/com/google/reviewit/app/Preferences.java b/app/src/main/java/com/google/reviewit/app/Preferences.java
index fe95b29..e9e3ea7 100644
--- a/app/src/main/java/com/google/reviewit/app/Preferences.java
+++ b/app/src/main/java/com/google/reviewit/app/Preferences.java
@@ -18,12 +18,32 @@
  * User preferences.
  */
 public class Preferences {
+  public static enum StartScreen {
+    SORT_SCREEN, REVIEW_SCREEN;
+
+    public static StartScreen fromString(String s) {
+      if (s == null) {
+        return SORT_SCREEN;
+      }
+      try {
+        return valueOf(s);
+      } catch (IllegalArgumentException e) {
+        return SORT_SCREEN;
+      }
+    }
+  }
+
   /**
    * Whether the app introduction should be shown on app startup.
    */
   public final boolean showIntro;
 
   /**
+   * Which screen should be shown on app startup.
+   */
+  public final StartScreen startScreen;
+
+  /**
    * Whether the background should be colored to indicate Verified votings
    * and change states.
    */
@@ -62,10 +82,12 @@
   public final int commitMessageFontSize;
 
   private Preferences(
-      boolean showIntro, boolean colorBackground, boolean showPatchSets,
-      boolean showPositiveCodeReviewVotes, boolean showNegativeCodeReviewVotes,
-      boolean showComments, boolean showReviewers, int commitMessageFontSize) {
+      boolean showIntro, StartScreen startScreen, boolean colorBackground,
+      boolean showPatchSets, boolean showPositiveCodeReviewVotes,
+      boolean showNegativeCodeReviewVotes, boolean showComments,
+      boolean showReviewers, int commitMessageFontSize) {
     this.showIntro = showIntro;
+    this.startScreen = startScreen;
     this.colorBackground = colorBackground;
     this.showPatchSets = showPatchSets;
     this.showPositiveCodeReviewVotes = showPositiveCodeReviewVotes;
@@ -81,6 +103,7 @@
 
   public static class Builder {
     private boolean showIntro;
+    private StartScreen startScreen;
     private boolean colorBackground;
     private boolean showPatchSets;
     private boolean showPositiveCodeReviewVotes;
@@ -94,6 +117,7 @@
 
     public Builder(Preferences prefs) {
       this.showIntro = prefs.showIntro;
+      this.startScreen = prefs.startScreen;
       this.colorBackground = prefs.colorBackground;
       this.showPatchSets = prefs.showPatchSets;
       this.showPositiveCodeReviewVotes = prefs.showPositiveCodeReviewVotes;
@@ -108,6 +132,11 @@
       return this;
     }
 
+    public Builder setStartScreen(StartScreen startScreen) {
+      this.startScreen = startScreen;
+      return this;
+    }
+
     public Builder setColorBackground(boolean colorBackground) {
       this.colorBackground = colorBackground;
       return this;
@@ -146,9 +175,10 @@
     }
 
     public Preferences build() {
-      return new Preferences(showIntro, colorBackground, showPatchSets,
-          showPositiveCodeReviewVotes, showNegativeCodeReviewVotes,
-          showComments, showReviewers, commitMessageFontSize);
+      return new Preferences(showIntro, startScreen, colorBackground,
+          showPatchSets, showPositiveCodeReviewVotes,
+          showNegativeCodeReviewVotes, showComments, showReviewers,
+          commitMessageFontSize);
     }
   }
 }