Skip to content
This repository was archived by the owner on Dec 4, 2019. It is now read-only.

Commit c0189cb

Browse files
authored
Merge pull request #84 from drauggres/master
Fix memory leaks, update to Ti 7
2 parents 1b6960b + 9ac210a commit c0189cb

File tree

7 files changed

+137
-50
lines changed

7 files changed

+137
-50
lines changed
115 KB
Binary file not shown.

android/manifest

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
version: 2.0.0
2-
apiversion: 3
1+
version: 3.0.0
2+
apiversion: 4
3+
architectures: arm64-v8a armeabi-v7a x86
34
description: Native Android DrawerLayout for Titanium
45
author: metacortex, manumaticx
56
license: MIT license
67
copyright: Copyright (c) 2013 - 2014 by Tripvi Inc., 2015 - 2016 by Manuel Lehner
7-
architectures: armeabi-v7a x86
88

99
# these should not be edited
1010
name: drawerlayout
1111
moduleid: com.tripvi.drawerlayout
1212
guid: f0a61bb9-3c4d-457f-84c7-3980a13e3dd2
1313
platform: android
14-
minsdk: 6.0.0.GA
14+
minsdk: 7.0.0

android/platform/android/res/layout/drawer_main.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
android:layout_height="wrap_content"
2020
android:layout_width="match_parent"
2121
android:minHeight="?attr/actionBarSize"
22-
android:background="@color/primary"
22+
android:background="?attr/colorPrimary"
2323
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
2424
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
25-
android:elevation="4dp"/>
25+
android:fitsSystemWindows="true"/>
2626

2727
<com.tripvi.drawerlayout.ContentFrame
2828
android:id="@+id/content_frame"

android/platform/android/res/values/colors.xml

Lines changed: 0 additions & 5 deletions
This file was deleted.

android/src/com/tripvi/drawerlayout/ContentFrame.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.util.AttributeSet;
77

88
public class ContentFrame extends TiCompositeLayout {
9+
private static final String TAG = "TripviContentFrame";
910

1011
public ContentFrame(Context context) {
1112
super(context);
@@ -16,7 +17,7 @@ public ContentFrame(Context context, AttributeSet set) {
1617
setId(Drawer.id_content_frame);
1718

1819
}
19-
20+
2021

2122

2223
}

android/src/com/tripvi/drawerlayout/Drawer.java

Lines changed: 62 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
public 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

Comments
 (0)