|
7 | 7 | import com.hextremelabs.ussd.handler.UssdHandler;
|
8 | 8 | import com.hextremelabs.ussd.internal.Internal;
|
9 | 9 | import com.hextremelabs.ussd.internal.Internal.Log;
|
| 10 | +import com.hextremelabs.ussd.internal.Internal.Pair; |
10 | 11 | import com.hextremelabs.ussd.internal.VisibleForTesting;
|
11 | 12 | import com.hextremelabs.ussd.session.Session;
|
12 | 13 | import com.hextremelabs.ussd.session.SessionManager;
|
@@ -91,16 +92,33 @@ String handleRequest(UssdRequest request) {
|
91 | 92 | List<String> commands = parse(request.getMessage());
|
92 | 93 | if (session == null) {
|
93 | 94 | session = new Session(request);
|
94 |
| - session.pushScreen(uiManager.getHomeScreen(), uiManager.render(uiManager.getHomeScreen(), null)); |
| 95 | + session.pushScreen(uiManager.getHomeScreen(), uiManager.render(uiManager.getHomeScreen())); |
95 | 96 | if (commands.size() == 1) {
|
96 | 97 | if (uiManager.getHomeScreen().getType() != DISPLAY) {
|
97 | 98 | sessionManager.putSession(session);
|
98 | 99 | }
|
99 | 100 |
|
100 |
| - return uiManager.render(uiManager.getHomeScreen()); |
| 101 | + return session.peekLastScreen().getValue(); |
101 | 102 | }
|
102 | 103 | }
|
103 | 104 |
|
| 105 | + if (commands.size() == 1 && "#".equals(commands.get(0))) { |
| 106 | + System.out.println("###: " + session.getNavigation()); |
| 107 | + session.pollLastScreen(); |
| 108 | + final Pair<Screen, String> lastScreen = session.peekLastScreen(); |
| 109 | + if (lastScreen != null) { |
| 110 | + return lastScreen.getValue(); |
| 111 | + } |
| 112 | + |
| 113 | + session.pushScreen(uiManager.getHomeScreen(), uiManager.render(uiManager.getHomeScreen())); |
| 114 | + sessionManager.putSession(session); |
| 115 | + return session.peekLastScreen().getValue(); |
| 116 | + } |
| 117 | + |
| 118 | + if (commands.size() > 1) { |
| 119 | + commands.remove(0); |
| 120 | + } |
| 121 | + |
104 | 122 | String result = null;
|
105 | 123 | if (commands.isEmpty()) {
|
106 | 124 | return session.peekLastScreen().getValue();
|
@@ -172,11 +190,14 @@ private String execute(Session session, String command)
|
172 | 190 | }
|
173 | 191 |
|
174 | 192 | screen = session.peekLastScreen().getKey();
|
| 193 | + session.peekLastScreen().setValue(uiManager.render(screen, executionResult)); |
175 | 194 | if (screen.getType() == DISPLAY) {
|
176 | 195 | sessionManager.invalidate(session);
|
| 196 | + } else { |
| 197 | + sessionManager.putSession(session); |
177 | 198 | }
|
178 | 199 |
|
179 |
| - return uiManager.render(screen, executionResult); |
| 200 | + return session.peekLastScreen().getValue(); |
180 | 201 | }
|
181 | 202 |
|
182 | 203 | @VisibleForTesting
|
|
0 commit comments