mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Refactor restart code so app can support restarting
Add Landscape Mode setting to app
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -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/Singletons.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/control/FControl.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/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/control/package-info.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/deckchooser/DecksComboBox.java -text
|
forge-gui-desktop/src/main/java/forge/deckchooser/DecksComboBox.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/deckchooser/DecksComboBoxEvent.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/LineReader.java -text
|
||||||
forge-gui/src/main/java/forge/util/MultiplexOutputStream.java svneol=native#text/plain
|
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/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/WaitCallback.java -text
|
||||||
forge-gui/src/main/java/forge/util/WaitRunnable.java -text
|
forge-gui/src/main/java/forge/util/WaitRunnable.java -text
|
||||||
forge-gui/src/main/java/forge/util/XmlUtil.java -text
|
forge-gui/src/main/java/forge/util/XmlUtil.java -text
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public class Main extends AndroidApplication {
|
|||||||
private AndroidAdapter(Context context) {
|
private AndroidAdapter(Context context) {
|
||||||
isTablet = (context.getResources().getConfiguration().screenLayout
|
isTablet = (context.getResources().getConfiguration().screenLayout
|
||||||
& Configuration.SCREENLAYOUT_SIZE_MASK)
|
& Configuration.SCREENLAYOUT_SIZE_MASK)
|
||||||
>= Configuration.SCREENLAYOUT_SIZE_XLARGE;
|
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -139,6 +139,15 @@ public class Main extends AndroidApplication {
|
|||||||
return false;
|
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
|
@Override
|
||||||
public void exit() {
|
public void exit() {
|
||||||
// Replace the current task with one that is excluded from the recent
|
// Replace the current task with one that is excluded from the recent
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ import forge.quest.io.QuestDataIO;
|
|||||||
import forge.screens.deckeditor.CDeckEditorUI;
|
import forge.screens.deckeditor.CDeckEditorUI;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
|
import forge.util.RestartUtil;
|
||||||
import forge.util.gui.SOptionPane;
|
import forge.util.gui.SOptionPane;
|
||||||
import forge.view.FFrame;
|
import forge.view.FFrame;
|
||||||
import forge.view.FView;
|
import forge.view.FView;
|
||||||
@@ -191,6 +192,18 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean restartForge() {
|
||||||
|
if (!canExitForge(true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RestartUtil.prepareForRestart()) {
|
||||||
|
System.exit(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean exitForge() {
|
public boolean exitForge() {
|
||||||
if (!canExitForge(false)) {
|
if (!canExitForge(false)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import javax.swing.event.PopupMenuEvent;
|
|||||||
import javax.swing.event.PopupMenuListener;
|
import javax.swing.event.PopupMenuListener;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.RestartUtil;
|
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.screens.home.online.OnlineMenu;
|
import forge.screens.home.online.OnlineMenu;
|
||||||
import forge.util.ReflectionUtil;
|
import forge.util.ReflectionUtil;
|
||||||
@@ -134,7 +133,7 @@ public final class ForgeMenu {
|
|||||||
return new ActionListener() {
|
return new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
RestartUtil.restartApplication(null);
|
Singletons.getControl().restartForge();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import forge.Singletons;
|
|||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.ai.AiProfileUtil;
|
import forge.ai.AiProfileUtil;
|
||||||
import forge.control.FControl.CloseAction;
|
import forge.control.FControl.CloseAction;
|
||||||
import forge.control.RestartUtil;
|
|
||||||
import forge.game.GameLogEntryType;
|
import forge.game.GameLogEntryType;
|
||||||
import forge.gui.framework.FScreen;
|
import forge.gui.framework.FScreen;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
@@ -213,7 +212,7 @@ public enum CSubmenuPreferences implements ICDoc {
|
|||||||
prefs.reset();
|
prefs.reset();
|
||||||
prefs.save();
|
prefs.save();
|
||||||
update();
|
update();
|
||||||
RestartUtil.restartApplication(null);
|
Singletons.getControl().restartForge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import com.google.common.collect.Lists;
|
|||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.control.RestartUtil;
|
|
||||||
import forge.gui.ImportDialog;
|
import forge.gui.ImportDialog;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
@@ -228,9 +227,9 @@ public enum FView {
|
|||||||
btnOk.addActionListener(new ActionListener() {
|
btnOk.addActionListener(new ActionListener() {
|
||||||
@Override public void actionPerformed(final ActionEvent e) {
|
@Override public void actionPerformed(final ActionEvent e) {
|
||||||
if (remainingFiles.isEmpty()) {
|
if (remainingFiles.isEmpty()) {
|
||||||
RestartUtil.restartApplication(null);
|
Singletons.getControl().restartForge();
|
||||||
} else {
|
} else {
|
||||||
System.exit(0);
|
Singletons.getControl().exitForge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package forge.app;
|
|||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
|
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
|
||||||
import com.badlogic.gdx.backends.lwjgl.LwjglClipboard;
|
import com.badlogic.gdx.backends.lwjgl.LwjglClipboard;
|
||||||
@@ -12,6 +11,7 @@ import forge.Forge;
|
|||||||
import forge.assets.AssetsDownloader;
|
import forge.assets.AssetsDownloader;
|
||||||
import forge.interfaces.IDeviceAdapter;
|
import forge.interfaces.IDeviceAdapter;
|
||||||
import forge.util.FileUtil;
|
import forge.util.FileUtil;
|
||||||
|
import forge.util.RestartUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
@@ -54,6 +54,13 @@ public class Main {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void restart() {
|
||||||
|
if (RestartUtil.prepareForRestart()) {
|
||||||
|
Gdx.app.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exit() {
|
public void exit() {
|
||||||
Gdx.app.exit(); //can just use Gdx.app.exit for desktop
|
Gdx.app.exit(); //can just use Gdx.app.exit for desktop
|
||||||
|
|||||||
@@ -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) {
|
public static void exit(boolean silent) {
|
||||||
if (exited) { return; } //don't allow exiting multiple times
|
if (exited) { return; } //don't allow exiting multiple times
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package forge.screens.settings;
|
package forge.screens.settings;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.Graphics;
|
import forge.Graphics;
|
||||||
import forge.ai.AiProfileUtil;
|
import forge.ai.AiProfileUtil;
|
||||||
@@ -21,6 +22,8 @@ import forge.sound.SoundSystem;
|
|||||||
import forge.toolbox.FCheckBox;
|
import forge.toolbox.FCheckBox;
|
||||||
import forge.toolbox.FGroupList;
|
import forge.toolbox.FGroupList;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
|
import forge.toolbox.FOptionPane;
|
||||||
|
import forge.util.Callback;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -52,6 +55,26 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
FSkin.changeSkin(newValue);
|
FSkin.changeSkin(newValue);
|
||||||
}
|
}
|
||||||
}, 0);
|
}, 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
|
//Gameplay Options
|
||||||
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_AI_PROFILE,
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_AI_PROFILE,
|
||||||
@@ -142,7 +165,7 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
4);
|
4);
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_COMPACT_TABS,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_COMPACT_TABS,
|
||||||
"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
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
super.select();
|
super.select();
|
||||||
|
|||||||
@@ -7,5 +7,6 @@ public interface IDeviceAdapter {
|
|||||||
String getDownloadsDir();
|
String getDownloadsDir();
|
||||||
boolean openFile(String filename);
|
boolean openFile(String filename);
|
||||||
void setLandscapeMode(boolean landscapeMode);
|
void setLandscapeMode(boolean landscapeMode);
|
||||||
|
void restart();
|
||||||
void exit();
|
void exit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
CONSTRUCTED_P6_DECK_STATE(""),
|
CONSTRUCTED_P6_DECK_STATE(""),
|
||||||
CONSTRUCTED_P7_DECK_STATE(""),
|
CONSTRUCTED_P7_DECK_STATE(""),
|
||||||
CONSTRUCTED_P8_DECK_STATE(""),
|
CONSTRUCTED_P8_DECK_STATE(""),
|
||||||
|
UI_LANDSCAPE_MODE ("false"),
|
||||||
UI_COMPACT_MAIN_MENU ("false"),
|
UI_COMPACT_MAIN_MENU ("false"),
|
||||||
UI_USE_OLD ("false"),
|
UI_USE_OLD ("false"),
|
||||||
UI_RANDOM_FOIL ("false"),
|
UI_RANDOM_FOIL ("false"),
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
package forge.control;
|
package forge.util;
|
||||||
|
|
||||||
import forge.Singletons;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -22,10 +20,7 @@ public class RestartUtil {
|
|||||||
* Restart the current Java application.
|
* Restart the current Java application.
|
||||||
* @param runBeforeRestart some custom code to be run before restarting
|
* @param runBeforeRestart some custom code to be run before restarting
|
||||||
*/
|
*/
|
||||||
public static void restartApplication(final Runnable runBeforeRestart) {
|
public static boolean prepareForRestart() {
|
||||||
if (!Singletons.getControl().canExitForge(true)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
// java binary
|
// java binary
|
||||||
final String java = System.getProperty("java.home")
|
final String java = System.getProperty("java.home")
|
||||||
@@ -72,14 +67,11 @@ public class RestartUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// execute some custom code before restarting
|
return true;
|
||||||
if (runBeforeRestart != null) {
|
|
||||||
runBeforeRestart.run();
|
|
||||||
}
|
}
|
||||||
// exit
|
catch (final Exception ex) {
|
||||||
System.exit(0);
|
|
||||||
} catch (final Exception ex) {
|
|
||||||
//ErrorViewer.showError(ex, "Restart \"%s\" exception", "");
|
//ErrorViewer.showError(ex, "Restart \"%s\" exception", "");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user