diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java index 8f1811a662d102454ee7e4f7452dac7f49556bfb..b861bb00d559cb8f466d2ed14c732f167550718e 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsAdapter.java @@ -17,6 +17,7 @@ import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; +import com.google.gson.JsonObject; import jadx.gui.JadxGUI; import jadx.gui.utils.PathTypeAdapter; @@ -92,6 +93,10 @@ public class JadxSettingsAdapter { return GSON.toJson(settings); } + public static JsonObject makeJsonObject(JadxSettings settings) { + return GSON.toJsonTree(settings).getAsJsonObject(); + } + public static void fill(JadxSettings settings, String jsonStr) { populate(GSON_BUILDER, jsonStr, JadxSettings.class, settings); } diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java index c28b0555d4364f38aa3172d77c88ffe82d5e41ca..66a366d9b1e5e31a11f91441c1aae372092b1adf 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -1,6 +1,8 @@ package jadx.gui.settings; import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.MouseAdapter; @@ -13,6 +15,9 @@ import javax.swing.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; + import say.swing.JFontChooser; import jadx.api.JadxArgs; @@ -113,10 +118,31 @@ public class JadxSettingsWindow extends JDialog { } }); + JButton copyBtn = new JButton(NLS.str("preferences.copy")); + copyBtn.addActionListener(event -> { + + JsonObject settingsJson = JadxSettingsAdapter.makeJsonObject(this.settings); + // remove irrelevant preferences + settingsJson.remove("windowPos"); + settingsJson.remove("mainWindowExtendedState"); + settingsJson.remove("lastSaveProjectPath"); + settingsJson.remove("lastOpenFilePath"); + settingsJson.remove("lastSaveFilePath"); + settingsJson.remove("recentProjects"); + String settingsText = new GsonBuilder().setPrettyPrinting().create().toJson(settingsJson); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + StringSelection selection = new StringSelection(settingsText); + clipboard.setContents(selection, selection); + JOptionPane.showMessageDialog( + JadxSettingsWindow.this, + NLS.str("preferences.copy_message")); + }); + JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); buttonPane.add(resetBtn); + buttonPane.add(copyBtn); buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(saveBtn); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index 7aa16f5e12ef6ba9de2e6ccd83d7927d5091cca4..dad659340d66bf253c75384dbf56657d0c869cd2 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -124,6 +124,8 @@ preferences.cancel=Cancel preferences.reset=Reset preferences.reset_message=Reset settings to default values? preferences.reset_title=Reset settings +preferences.copy=Copy to clipboard +preferences.copy_message=All settings values has been copied to clipboard preferences.rename=Rename preferences.rename_case=System case sensitivity preferences.rename_valid=To be valid identifier