2525
2626public class Drawer extends TiUIView {
2727
28- private DrawerLayout layout ;
2928 private ActionBarDrawerToggle mDrawerToggle ;
3029
3130 private FrameLayout menu ; /* left drawer */
@@ -34,6 +33,7 @@ public class Drawer extends TiUIView {
3433 private int filterWidth ;
3534 private boolean hasMenu = false ;
3635 private boolean hasFilter = false ;
36+ private boolean setToolbar = false ;
3737 private boolean hasToggle = true ;
3838 private boolean hideToolbar = false ;
3939
@@ -81,14 +81,15 @@ public Drawer(final DrawerProxy proxy) {
8181
8282 // DrawerLayout
8383 LayoutInflater inflater = LayoutInflater .from (activity );
84- layout = (DrawerLayout ) inflater .inflate (layout_drawer_main , null ,
84+ DrawerLayout layout = (DrawerLayout ) inflater .inflate (layout_drawer_main , null ,
8585 false );
8686
8787 layout .setDrawerListener (new DrawerListener ());
8888
8989 toolbar = (Toolbar )layout .findViewById (id_toolbar );
9090 // If no actionbar exists,
9191 if (activity .getSupportActionBar () == null && activity .getActionBar () == null ) {
92+ setToolbar = true ;
9293 activity .setSupportActionBar (toolbar );
9394 if (!hideToolbar ) {
9495 setToolbarVisible (true );
@@ -167,51 +168,51 @@ public void onDrawerStateChanged(int newState) {
167168 * Open/Close/Toggle drawers
168169 */
169170 public void toggleLeftDrawer () {
170- if (layout .isDrawerOpen (Gravity .START )) {
171+ if ((( DrawerLayout ) getNativeView ()) .isDrawerOpen (Gravity .START )) {
171172 closeLeftDrawer ();
172173 } else {
173174 openLeftDrawer ();
174175 }
175176 }
176177
177178 public void openLeftDrawer () {
178- layout .openDrawer (Gravity .START );
179+ (( DrawerLayout ) getNativeView ()) .openDrawer (Gravity .START );
179180 }
180181
181182 public void closeLeftDrawer () {
182- layout .closeDrawer (Gravity .START );
183+ (( DrawerLayout ) getNativeView ()) .closeDrawer (Gravity .START );
183184 }
184185
185186 public void toggleRightDrawer () {
186- if (layout .isDrawerOpen (Gravity .END )) {
187+ if ((( DrawerLayout ) getNativeView ()) .isDrawerOpen (Gravity .END )) {
187188 closeRightDrawer ();
188189 } else {
189190 openRightDrawer ();
190191 }
191192 }
192193
193194 public void openRightDrawer () {
194- layout .openDrawer (Gravity .END );
195+ (( DrawerLayout ) getNativeView ()) .openDrawer (Gravity .END );
195196 }
196197
197198 public void closeRightDrawer () {
198- layout .closeDrawer (Gravity .END );
199+ (( DrawerLayout ) getNativeView ()) .closeDrawer (Gravity .END );
199200 }
200201
201202 public boolean isLeftDrawerOpen () {
202- return layout .isDrawerOpen (Gravity .START );
203+ return (( DrawerLayout ) getNativeView ()) .isDrawerOpen (Gravity .START );
203204 }
204205
205206 public boolean isRightDrawerOpen () {
206- return layout .isDrawerOpen (Gravity .END );
207+ return (( DrawerLayout ) getNativeView ()) .isDrawerOpen (Gravity .END );
207208 }
208209
209210 public boolean isLeftDrawerVisible () {
210- return layout .isDrawerVisible (Gravity .START );
211+ return (( DrawerLayout ) getNativeView ()) .isDrawerVisible (Gravity .START );
211212 }
212213
213214 public boolean isRightDrawerVisible () {
214- return layout .isDrawerVisible (Gravity .END );
215+ return (( DrawerLayout ) getNativeView ()) .isDrawerVisible (Gravity .END );
215216 }
216217
217218 private void initDrawerToggle () {
@@ -229,7 +230,7 @@ private void initDrawerToggle() {
229230
230231 // ActionBarDrawerToggle ties together the the proper interactions
231232 // between the sliding drawer and the action bar app icon
232- mDrawerToggle = new ActionBarDrawerToggle (activity , layout ,
233+ mDrawerToggle = new ActionBarDrawerToggle (activity , (( DrawerLayout ) getNativeView ()) ,
233234 string_drawer_open , string_drawer_close ) {
234235 @ Override
235236 public void onDrawerClosed (View drawerView ) {
@@ -300,10 +301,10 @@ public void onDrawerStateChanged(int newState) {
300301 }
301302 };
302303 // Set the drawer toggle as the DrawerListener
303- layout .setDrawerListener (mDrawerToggle );
304+ (( DrawerLayout ) getNativeView ()) .setDrawerListener (mDrawerToggle );
304305
305306 // onPostCreate
306- layout .post (new Runnable () {
307+ (( DrawerLayout ) getNativeView ()) .post (new Runnable () {
307308 @ Override
308309 public void run () {
309310 mDrawerToggle .syncState ();
@@ -328,7 +329,7 @@ private void initLeftDrawer() {
328329 menuLayout .gravity = Gravity .START ;
329330 menu .setLayoutParams (menuLayout );
330331
331- layout .addView (menu );
332+ (( DrawerLayout ) getNativeView ()) .addView (menu );
332333
333334 hasMenu = true ;
334335
@@ -351,7 +352,7 @@ private void initRightDrawer() {
351352 filterLayout .gravity = Gravity .END ;
352353 filter .setLayoutParams (filterLayout );
353354
354- layout .addView (filter );
355+ (( DrawerLayout ) getNativeView ()) .addView (filter );
355356
356357 hasFilter = true ;
357358 }
@@ -372,7 +373,7 @@ public void replaceCenterView(TiViewProxy viewProxy) {
372373 TiUIView contentView = viewProxy .getOrCreateView ();
373374
374375 View view = contentView .getOuterView ();
375- TiCompositeLayout fL = (TiCompositeLayout )layout .findViewById (id_content_frame );
376+ TiCompositeLayout fL = (TiCompositeLayout )getNativeView () .findViewById (id_content_frame );
376377 ViewParent viewParent = view .getParent ();
377378 if (viewParent == null ) {
378379 fL .addView (view , contentView .getLayoutParams ());
@@ -383,6 +384,7 @@ public void replaceCenterView(TiViewProxy viewProxy) {
383384 }
384385 if (this .centerView != null ) {
385386 fL .removeView (this .centerView .getOrCreateView ().getNativeView ());
387+ this .centerView .releaseViews ();
386388 }
387389 this .centerView = viewProxy ;
388390 }
@@ -393,9 +395,9 @@ public void setArrowState (Float state){
393395
394396 private void setSwipeArea (Integer width ){
395397 try {
396- Field mDragger = layout .getClass ().getDeclaredField ("mLeftDragger" );
398+ Field mDragger = getNativeView () .getClass ().getDeclaredField ("mLeftDragger" );
397399 mDragger .setAccessible (true );
398- ViewDragHelper draggerObj = (ViewDragHelper ) mDragger .get (layout );
400+ ViewDragHelper draggerObj = (ViewDragHelper ) mDragger .get (getNativeView () );
399401 Field mEdgeSize = draggerObj .getClass ().getDeclaredField ("mEdgeSize" );
400402 mEdgeSize .setAccessible (true );
401403 mEdgeSize .setInt (draggerObj , width );
@@ -486,7 +488,7 @@ public void processProperties(KrollDict d) {
486488 }
487489 }
488490 if (d .containsKey (PROPERTY_DRAWER_LOCK_MODE )) {
489- layout .setDrawerLockMode (TiConvert .toInt (d
491+ (( DrawerLayout ) getNativeView ()) .setDrawerLockMode (TiConvert .toInt (d
490492 .get (PROPERTY_DRAWER_LOCK_MODE )));
491493 }
492494 if (d .containsKey (PROPERTY_HIDE_TOOLBAR )) {
@@ -607,7 +609,7 @@ public void propertyChanged(String key, Object oldValue, Object newValue,
607609 this .filter .setLayoutParams (filterLayout );
608610
609611 } else if (key .equals (PROPERTY_DRAWER_LOCK_MODE )) {
610- layout .setDrawerLockMode (TiConvert .toInt (newValue ));
612+ (( DrawerLayout ) getNativeView ()) .setDrawerLockMode (TiConvert .toInt (newValue ));
611613 } else if (key .equals (PROPERTY_DRAWER_INDICATOR_ENABLED )) {
612614 boolean b = (Boolean ) newValue ;
613615 if (mDrawerToggle != null ){
@@ -627,12 +629,49 @@ public void propertyChanged(String key, Object oldValue, Object newValue,
627629 }
628630 }
629631
632+ @ Override
633+ public void release () {
634+ Log .d (TAG , "release" );
635+ DrawerLayout layout = (DrawerLayout ) getNativeView ();
636+ if (layout != null ) {
637+ layout .removeAllViews ();
638+ layout .setDrawerListener (null );
639+ }
640+ if (menu != null ) {
641+ menu .removeAllViews ();
642+ menu = null ;
643+ }
644+ if (filter != null ) {
645+ filter .removeAllViews ();
646+ filter = null ;
647+ }
648+ if (leftView != null ) {
649+ leftView .releaseViews ();
650+ leftView = null ;
651+ }
652+ if (rightView != null ) {
653+ rightView .releaseViews ();
654+ rightView = null ;
655+ }
656+ if (centerView != null ) {
657+ centerView .releaseViews ();
658+ centerView = null ;
659+ }
660+ if (setToolbar ) {
661+ AppCompatActivity activity = (AppCompatActivity ) proxy .getActivity ();
662+ toolbar .removeAllViews ();
663+ toolbar = null ;
664+ }
665+ super .release ();
666+ proxy = null ;
667+ }
668+
630669 /**
631670 * Helpers
632671 */
633672 public int getDevicePixels (Object value ) {
634673 TiDimension nativeSize = TiConvert .toTiDimension (TiConvert .toString (value ), TiDimension .TYPE_WIDTH );
635- return nativeSize .getAsPixels (layout );
674+ return nativeSize .getAsPixels (getNativeView () );
636675 }
637676
638677 private View getNativeView (TiViewProxy viewProxy ) {
0 commit comments