Refactor restart code so app can support restarting

Add Landscape Mode setting to app
This commit is contained in:
drdev
2015-09-26 17:43:49 +00:00
parent 6fe6df1c50
commit 28316c0fe9
12 changed files with 88 additions and 25 deletions

2
.gitattributes vendored
View File

@@ -792,7 +792,6 @@ forge-gui-desktop/src/main/java/forge/ImageLoader.java -text
forge-gui-desktop/src/main/java/forge/Singletons.java -text
forge-gui-desktop/src/main/java/forge/control/FControl.java -text
forge-gui-desktop/src/main/java/forge/control/KeyboardShortcuts.java -text
forge-gui-desktop/src/main/java/forge/control/RestartUtil.java -text
forge-gui-desktop/src/main/java/forge/control/package-info.java -text
forge-gui-desktop/src/main/java/forge/deckchooser/DecksComboBox.java -text
forge-gui-desktop/src/main/java/forge/deckchooser/DecksComboBoxEvent.java -text
@@ -18312,6 +18311,7 @@ forge-gui/src/main/java/forge/util/IgnoringXStream.java -text
forge-gui/src/main/java/forge/util/LineReader.java -text
forge-gui/src/main/java/forge/util/MultiplexOutputStream.java svneol=native#text/plain
forge-gui/src/main/java/forge/util/OperatingSystem.java -text
forge-gui/src/main/java/forge/util/RestartUtil.java -text
forge-gui/src/main/java/forge/util/WaitCallback.java -text
forge-gui/src/main/java/forge/util/WaitRunnable.java -text
forge-gui/src/main/java/forge/util/XmlUtil.java -text

View File

@@ -91,7 +91,7 @@ public class Main extends AndroidApplication {
private AndroidAdapter(Context context) {
isTablet = (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_XLARGE;
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
@Override
@@ -139,6 +139,15 @@ public class Main extends AndroidApplication {
return false;
}
@Override
public void restart() {
// Replace the current task with a new one for this
final Intent restart = new Intent(Main.this, Main.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK // CLEAR_TASK requires this
| Intent.FLAG_ACTIVITY_CLEAR_TASK); // finish everything else in the task
startActivity(restart);
}
@Override
public void exit() {
// Replace the current task with one that is excluded from the recent

View File

@@ -61,6 +61,7 @@ import forge.quest.io.QuestDataIO;
import forge.screens.deckeditor.CDeckEditorUI;
import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin;
import forge.util.RestartUtil;
import forge.util.gui.SOptionPane;
import forge.view.FFrame;
import forge.view.FView;
@@ -191,6 +192,18 @@ public enum FControl implements KeyEventDispatcher {
return true;
}
public boolean restartForge() {
if (!canExitForge(true)) {
return false;
}
if (RestartUtil.prepareForRestart()) {
System.exit(0);
return true;
}
return false;
}
public boolean exitForge() {
if (!canExitForge(false)) {
return false;

View File

@@ -14,7 +14,6 @@ import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import forge.Singletons;
import forge.control.RestartUtil;
import forge.gui.GuiUtils;
import forge.screens.home.online.OnlineMenu;
import forge.util.ReflectionUtil;
@@ -134,7 +133,7 @@ public final class ForgeMenu {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RestartUtil.restartApplication(null);
Singletons.getControl().restartForge();
}
};
}

View File

@@ -4,7 +4,6 @@ import forge.Singletons;
import forge.UiCommand;
import forge.ai.AiProfileUtil;
import forge.control.FControl.CloseAction;
import forge.control.RestartUtil;
import forge.game.GameLogEntryType;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc;
@@ -213,7 +212,7 @@ public enum CSubmenuPreferences implements ICDoc {
prefs.reset();
prefs.save();
update();
RestartUtil.restartApplication(null);
Singletons.getControl().restartForge();
}
}

View File

@@ -32,7 +32,6 @@ import com.google.common.collect.Lists;
import forge.Singletons;
import forge.assets.FSkinProp;
import forge.control.RestartUtil;
import forge.gui.ImportDialog;
import forge.gui.SOverlayUtils;
import forge.gui.framework.DragCell;
@@ -228,9 +227,9 @@ public enum FView {
btnOk.addActionListener(new ActionListener() {
@Override public void actionPerformed(final ActionEvent e) {
if (remainingFiles.isEmpty()) {
RestartUtil.restartApplication(null);
Singletons.getControl().restartForge();
} else {
System.exit(0);
Singletons.getControl().exitForge();
}
}
});

View File

@@ -3,7 +3,6 @@ package forge.app;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglClipboard;
@@ -12,6 +11,7 @@ import forge.Forge;
import forge.assets.AssetsDownloader;
import forge.interfaces.IDeviceAdapter;
import forge.util.FileUtil;
import forge.util.RestartUtil;
import forge.util.Utils;
public class Main {
@@ -54,6 +54,13 @@ public class Main {
return false;
}
@Override
public void restart() {
if (RestartUtil.prepareForRestart()) {
Gdx.app.exit();
}
}
@Override
public void exit() {
Gdx.app.exit(); //can just use Gdx.app.exit for desktop

View File

@@ -183,6 +183,26 @@ public class Forge implements ApplicationListener {
}
}
public static void restart(boolean silent) {
if (exited) { return; } //don't allow exiting multiple times
Callback<Boolean> callback = new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
exited = true;
deviceAdapter.restart();
}
}
};
if (silent) {
callback.run(true);
}
else {
FOptionPane.showConfirmDialog("Are you sure you wish to restart Forge?", "Restart Forge", "Restart", "Cancel", callback);
}
}
public static void exit(boolean silent) {
if (exited) { return; } //don't allow exiting multiple times

View File

@@ -1,6 +1,7 @@
package forge.screens.settings;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.Forge;
import forge.Graphics;
import forge.ai.AiProfileUtil;
@@ -21,6 +22,8 @@ import forge.sound.SoundSystem;
import forge.toolbox.FCheckBox;
import forge.toolbox.FGroupList;
import forge.toolbox.FList;
import forge.toolbox.FOptionPane;
import forge.util.Callback;
import forge.util.Utils;
import java.util.ArrayList;
@@ -52,6 +55,26 @@ public class SettingsPage extends TabPage<SettingsScreen> {
FSkin.changeSkin(newValue);
}
}, 0);
if (Forge.getDeviceAdapter().isTablet()) { //only offer landscape option on tablets
lstSettings.addItem(new BooleanSetting(FPref.UI_LANDSCAPE_MODE,
"Landscape Mode",
"Use landscape (horizontal) orientation for app instead of portrait (vertical).") {
@Override
public void select() {
super.select();
if (Forge.isLandscapeMode() != FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE)) {
FOptionPane.showConfirmDialog("You must restart Forge for this change to take effect.", "Restart Forge", "Restart", "Later", new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
Forge.restart(true);
}
}
});
}
}
}, 0);
}
//Gameplay Options
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_AI_PROFILE,
@@ -142,7 +165,7 @@ public class SettingsPage extends TabPage<SettingsScreen> {
4);
lstSettings.addItem(new BooleanSetting(FPref.UI_COMPACT_TABS,
"Compact Tabs",
"Show smaller tabs on the top of tab page screens (such as this screen)") {
"Show smaller tabs on the top of tab page screens (such as this screen).") {
@Override
public void select() {
super.select();

View File

@@ -7,5 +7,6 @@ public interface IDeviceAdapter {
String getDownloadsDir();
boolean openFile(String filename);
void setLandscapeMode(boolean landscapeMode);
void restart();
void exit();
}

View File

@@ -34,6 +34,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
CONSTRUCTED_P6_DECK_STATE(""),
CONSTRUCTED_P7_DECK_STATE(""),
CONSTRUCTED_P8_DECK_STATE(""),
UI_LANDSCAPE_MODE ("false"),
UI_COMPACT_MAIN_MENU ("false"),
UI_USE_OLD ("false"),
UI_RANDOM_FOIL ("false"),

View File

@@ -1,6 +1,4 @@
package forge.control;
import forge.Singletons;
package forge.util;
import java.io.File;
import java.io.IOException;
@@ -22,10 +20,7 @@ public class RestartUtil {
* Restart the current Java application.
* @param runBeforeRestart some custom code to be run before restarting
*/
public static void restartApplication(final Runnable runBeforeRestart) {
if (!Singletons.getControl().canExitForge(true)) {
return;
}
public static boolean prepareForRestart() {
try {
// java binary
final String java = System.getProperty("java.home")
@@ -72,14 +67,11 @@ public class RestartUtil {
}
}
});
// execute some custom code before restarting
if (runBeforeRestart != null) {
runBeforeRestart.run();
}
// exit
System.exit(0);
} catch (final Exception ex) {
return true;
}
catch (final Exception ex) {
//ErrorViewer.showError(ex, "Restart \"%s\" exception", "");
return false;
}
}
}