|
40 | 40 | import com.sun.codemodel.JBlock; |
41 | 41 | import com.sun.codemodel.JClass; |
42 | 42 | import com.sun.codemodel.JCodeModel; |
| 43 | +import com.sun.codemodel.JExpr; |
43 | 44 | import com.sun.codemodel.JExpression; |
44 | 45 | import com.sun.codemodel.JFieldVar; |
45 | 46 | import com.sun.codemodel.JInvocation; |
46 | 47 | import com.sun.codemodel.JMethod; |
47 | 48 | import com.sun.codemodel.JMod; |
| 49 | +import com.sun.codemodel.JTryBlock; |
48 | 50 | import com.sun.codemodel.JType; |
49 | 51 | import com.sun.codemodel.JVar; |
50 | 52 |
|
@@ -94,20 +96,11 @@ public void process(Element element, JCodeModel codeModel, ActivitiesHolder acti |
94 | 96 | onResumeMethod(codeModel, holder, scope, eventManager); |
95 | 97 | onPauseMethod(codeModel, holder, scope, eventManager); |
96 | 98 | onNewIntentMethod(codeModel, holder, scope, eventManager); |
97 | | - |
98 | | - /* |
99 | | - * TODO Missing methods: |
100 | | - * |
101 | | - * onStop |
102 | | - * |
103 | | - * onDestroy |
104 | | - * |
105 | | - * onConfigurationChanged |
106 | | - * |
107 | | - * onContentChanged |
108 | | - * |
109 | | - * onActivityResult |
110 | | - */ |
| 99 | + onStopMethod(codeModel, holder, scope, eventManager); |
| 100 | + onDestroyMethod(codeModel, holder, scope, eventManager); |
| 101 | + onConfigurationChangedMethod(codeModel, holder, scope, eventManager); |
| 102 | + onContentChangedMethod(codeModel, holder, scope, eventManager); |
| 103 | + onActivityResultMethod(codeModel, holder, scope, eventManager); |
111 | 104 |
|
112 | 105 | JMethod getInjectorMethod = getInjectorMethod(holder); |
113 | 106 |
|
@@ -178,6 +171,77 @@ private void fireEvent(ActivityHolder holder, JFieldVar eventManager, JBlock bod |
178 | 171 | } |
179 | 172 | body.invoke(eventManager, "fire").arg(newEvent); |
180 | 173 | } |
| 174 | + |
| 175 | + private void onStopMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
| 176 | + JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onStop"); |
| 177 | + method.annotate(Override.class); |
| 178 | + JBlock body = method.body(); |
| 179 | + body.invoke(scope, "enter").arg(_this()); |
| 180 | + |
| 181 | + JTryBlock tryBlock = body._try(); |
| 182 | + fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnStopEvent"); |
| 183 | + JBlock finallyBody = tryBlock._finally(); |
| 184 | + |
| 185 | + finallyBody.invoke(scope, "exit").arg(_this()); |
| 186 | + finallyBody.invoke(_super(), method); |
| 187 | + } |
| 188 | + |
| 189 | + private void onDestroyMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
| 190 | + JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onDestroy"); |
| 191 | + method.annotate(Override.class); |
| 192 | + JBlock body = method.body(); |
| 193 | + body.invoke(scope, "enter").arg(_this()); |
| 194 | + |
| 195 | + JTryBlock tryBlock = body._try(); |
| 196 | + fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnDestroyEvent"); |
| 197 | + JBlock finallyBody = tryBlock._finally(); |
| 198 | + |
| 199 | + finallyBody.invoke(eventManager, "clear").arg(_this()); |
| 200 | + finallyBody.invoke(scope, "exit").arg(_this()); |
| 201 | + finallyBody.invoke(scope, "dispose").arg(_this()); |
| 202 | + finallyBody.invoke(_super(), method); |
| 203 | + } |
| 204 | + |
| 205 | + private void onConfigurationChangedMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
| 206 | + JMethod method = holder.activity.method(JMod.PUBLIC, codeModel.VOID, "onConfigurationChanged"); |
| 207 | + method.annotate(Override.class); |
| 208 | + JClass configurationClass = holder.refClass("android.content.res.Configuration"); |
| 209 | + JVar newConfig = method.param(configurationClass, "newConfig"); |
| 210 | + |
| 211 | + JBlock body = method.body(); |
| 212 | + JVar currentConfig = body.decl(configurationClass, "currentConfig", JExpr.invoke("getResources").invoke("getConfiguration")); |
| 213 | + |
| 214 | + body.invoke(_super(), method).arg(newConfig); |
| 215 | + fireEvent(holder, eventManager, body, "roboguice.activity.event.OnConfigurationChangedEvent", currentConfig, newConfig); |
| 216 | + } |
| 217 | + |
| 218 | + private void onContentChangedMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
| 219 | + JMethod method = holder.activity.method(JMod.PUBLIC, codeModel.VOID, "onContentChanged"); |
| 220 | + method.annotate(Override.class); |
| 221 | + JBlock body = method.body(); |
| 222 | + body.invoke(_super(), method); |
| 223 | + fireEvent(holder, eventManager, body, "roboguice.activity.event.OnContentChangedEvent"); |
| 224 | + } |
| 225 | + |
| 226 | + private void onActivityResultMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
| 227 | + JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onActivityResult"); |
| 228 | + method.annotate(Override.class); |
| 229 | + JVar requestCode = method.param(codeModel.INT, "requestCode"); |
| 230 | + JVar resultCode = method.param(codeModel.INT, "resultCode"); |
| 231 | + JVar data = method.param(holder.refClass("android.content.Intent"), "data"); |
| 232 | + |
| 233 | + JBlock body = method.body(); |
| 234 | + |
| 235 | + body.invoke(_super(), method).arg(requestCode).arg(resultCode).arg(data); |
| 236 | + |
| 237 | + body.invoke(scope, "enter").arg(_this()); |
| 238 | + |
| 239 | + JTryBlock tryBlock = body._try(); |
| 240 | + fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnActivityResultEvent", requestCode, resultCode, data); |
| 241 | + |
| 242 | + JBlock finallyBody = tryBlock._finally(); |
| 243 | + finallyBody.invoke(scope, "exit").arg(_this()); |
| 244 | + } |
181 | 245 |
|
182 | 246 | private void setContentViewMethods(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { |
183 | 247 |
|
|
0 commit comments