@@ -38,6 +38,11 @@ public class AndroidEmulatorManager extends JFrame {
3838 private JScrollPane logScrollPane ;
3939 private boolean logExpanded = false ;
4040
41+ // SDK accordion UI
42+ private JPanel sdkPanel ;
43+ private JPanel sdkContentPanel ;
44+ private boolean sdkExpanded = false ;
45+
4146 // Device cards UI
4247 private JPanel devicesGridPanel ;
4348 private List <EmulatorService .AvdInfo > allAvds = new ArrayList <>();
@@ -104,8 +109,38 @@ public void windowClosing(java.awt.event.WindowEvent e) {
104109 }
105110
106111 private JPanel createSdkPanel () {
107- JPanel panel = new JPanel (new BorderLayout (5 , 5 ));
108- panel .setBorder (BorderFactory .createTitledBorder ("SDK Configuration" ));
112+ sdkPanel = new JPanel (new BorderLayout ());
113+ sdkPanel .setBorder (BorderFactory .createLineBorder (UIManager .getColor ("Panel.background" ).darker (), 1 ));
114+
115+ // Header panel with toggle button
116+ JPanel headerPanel = new JPanel (new BorderLayout ());
117+ Color panelBg = UIManager .getColor ("Panel.background" );
118+ Color headerBg = panelBg != null ?
119+ (isDarkTheme () ? panelBg .brighter () : panelBg .darker ()) :
120+ new Color (240 , 240 , 240 );
121+ headerPanel .setBackground (headerBg );
122+ headerPanel .setBorder (BorderFactory .createEmptyBorder (5 , 10 , 5 , 10 ));
123+
124+ // Check if SDK is configured to determine initial state
125+ boolean sdkConfigured = configService .isSdkConfigured ();
126+ sdkExpanded = !sdkConfigured ; // Collapsed if SDK is configured, expanded if not
127+
128+ JLabel sdkLabel = new JLabel (sdkExpanded ? "▼ SDK Configuration" : "▶ SDK Configuration" );
129+ sdkLabel .setFont (sdkLabel .getFont ().deriveFont (Font .BOLD , 13f ));
130+ sdkLabel .setCursor (new Cursor (Cursor .HAND_CURSOR ));
131+ sdkLabel .setForeground (UIManager .getColor ("Label.foreground" ));
132+
133+ // Status indicator
134+ JLabel statusLabel = new JLabel (sdkConfigured ? "✓ Configured" : "⚠ Not Configured" );
135+ statusLabel .setFont (statusLabel .getFont ().deriveFont (Font .PLAIN , 11f ));
136+ statusLabel .setForeground (sdkConfigured ? new Color (76 , 175 , 80 ) : new Color (255 , 152 , 0 ));
137+
138+ headerPanel .add (sdkLabel , BorderLayout .WEST );
139+ headerPanel .add (statusLabel , BorderLayout .EAST );
140+
141+ // SDK content panel
142+ sdkContentPanel = new JPanel (new BorderLayout (5 , 5 ));
143+ sdkContentPanel .setBorder (BorderFactory .createEmptyBorder (10 , 10 , 10 , 10 ));
109144
110145 JPanel topPanel = new JPanel (new FlowLayout (FlowLayout .LEFT ));
111146 topPanel .add (new JLabel ("SDK Path:" ));
@@ -129,10 +164,46 @@ private JPanel createSdkPanel() {
129164 verifyButton .addActionListener (e -> verifySdk ());
130165 buttonPanel .add (verifyButton );
131166
132- panel .add (topPanel , BorderLayout .NORTH );
133- panel .add (buttonPanel , BorderLayout .SOUTH );
167+ sdkContentPanel .add (topPanel , BorderLayout .NORTH );
168+ sdkContentPanel .add (buttonPanel , BorderLayout .SOUTH );
134169
135- return panel ;
170+ // Set initial visibility
171+ sdkContentPanel .setVisible (sdkExpanded );
172+
173+ // Toggle functionality
174+ headerPanel .addMouseListener (new java .awt .event .MouseAdapter () {
175+ @ Override
176+ public void mouseClicked (java .awt .event .MouseEvent e ) {
177+ toggleSdk (sdkLabel , statusLabel );
178+ }
179+ });
180+
181+ sdkLabel .addMouseListener (new java .awt .event .MouseAdapter () {
182+ @ Override
183+ public void mouseClicked (java .awt .event .MouseEvent e ) {
184+ toggleSdk (sdkLabel , statusLabel );
185+ }
186+ });
187+
188+ sdkPanel .add (headerPanel , BorderLayout .NORTH );
189+ sdkPanel .add (sdkContentPanel , BorderLayout .CENTER );
190+
191+ return sdkPanel ;
192+ }
193+
194+ private void toggleSdk (JLabel label , JLabel statusLabel ) {
195+ sdkExpanded = !sdkExpanded ;
196+
197+ if (sdkExpanded ) {
198+ label .setText ("▼ SDK Configuration" );
199+ sdkContentPanel .setVisible (true );
200+ } else {
201+ label .setText ("▶ SDK Configuration" );
202+ sdkContentPanel .setVisible (false );
203+ }
204+
205+ sdkPanel .revalidate ();
206+ sdkPanel .repaint ();
136207 }
137208
138209 private JPanel createAvdPanel () {
0 commit comments