|  | @@ -6,9 +6,7 @@ import com.reactnativenavigation.modal.RnnModal;
 | 
	
		
			
			| 6 | 6 |  import com.reactnativenavigation.utils.RefUtils;
 | 
	
		
			
			| 7 | 7 |  
 | 
	
		
			
			| 8 | 8 |  import java.lang.ref.WeakReference;
 | 
	
		
			
			| 9 |  | -import java.util.HashMap;
 | 
	
		
			
			| 10 |  | -import java.util.Iterator;
 | 
	
		
			
			| 11 |  | -import java.util.Map;
 | 
	
		
			
			|  | 9 | +import java.util.Stack;
 | 
	
		
			
			| 12 | 10 |  
 | 
	
		
			
			| 13 | 11 |  /**
 | 
	
		
			
			| 14 | 12 |   * Created by guyc on 06/05/16.
 | 
	
	
		
			
			|  | @@ -16,10 +14,10 @@ import java.util.Map;
 | 
	
		
			
			| 16 | 14 |  public class ModalController {
 | 
	
		
			
			| 17 | 15 |      private static ModalController sInstance;
 | 
	
		
			
			| 18 | 16 |  
 | 
	
		
			
			| 19 |  | -    private final Map<String, WeakReference<RnnModal>> mModals;
 | 
	
		
			
			|  | 17 | +    private final Stack<WeakReference<RnnModal>> mModals;
 | 
	
		
			
			| 20 | 18 |  
 | 
	
		
			
			| 21 | 19 |      private ModalController() {
 | 
	
		
			
			| 22 |  | -        mModals = new HashMap<>();
 | 
	
		
			
			|  | 20 | +        mModals = new Stack<>();
 | 
	
		
			
			| 23 | 21 |      }
 | 
	
		
			
			| 24 | 22 |  
 | 
	
		
			
			| 25 | 23 |      public static synchronized ModalController getInstance() {
 | 
	
	
		
			
			|  | @@ -30,41 +28,36 @@ public class ModalController {
 | 
	
		
			
			| 30 | 28 |          return sInstance;
 | 
	
		
			
			| 31 | 29 |      }
 | 
	
		
			
			| 32 | 30 |  
 | 
	
		
			
			| 33 |  | -    public void add(RnnModal modal, String navigatorId) {
 | 
	
		
			
			| 34 |  | -        mModals.put(navigatorId, new WeakReference<>(modal));
 | 
	
		
			
			|  | 31 | +    public void add(RnnModal modal) {
 | 
	
		
			
			|  | 32 | +        mModals.add(new WeakReference<>(modal));
 | 
	
		
			
			| 35 | 33 |      }
 | 
	
		
			
			| 36 | 34 |  
 | 
	
		
			
			| 37 | 35 |      public boolean isModalDisplayed() {
 | 
	
		
			
			| 38 | 36 |          return mModals.size() != 0;
 | 
	
		
			
			| 39 | 37 |      }
 | 
	
		
			
			| 40 | 38 |  
 | 
	
		
			
			| 41 |  | -    public boolean isModalDisplayed(String navigatorId) {
 | 
	
		
			
			| 42 |  | -        return mModals.size() != 0 && mModals.containsKey(navigatorId);
 | 
	
		
			
			|  | 39 | +    @Nullable
 | 
	
		
			
			|  | 40 | +    public RnnModal get() {
 | 
	
		
			
			|  | 41 | +        return isModalDisplayed() ? RefUtils.get(mModals.peek()) : null;
 | 
	
		
			
			| 43 | 42 |      }
 | 
	
		
			
			| 44 | 43 |  
 | 
	
		
			
			| 45 |  | -    @Nullable
 | 
	
		
			
			| 46 |  | -    public RnnModal get(String navigatorId) {
 | 
	
		
			
			| 47 |  | -        if (mModals.containsKey(navigatorId)) {
 | 
	
		
			
			| 48 |  | -            return RefUtils.get(mModals.get(navigatorId));
 | 
	
		
			
			|  | 44 | +    public void remove() {
 | 
	
		
			
			|  | 45 | +        if (isModalDisplayed()) {
 | 
	
		
			
			|  | 46 | +            mModals.pop();
 | 
	
		
			
			| 49 | 47 |          }
 | 
	
		
			
			| 50 |  | -
 | 
	
		
			
			| 51 |  | -        return null;
 | 
	
		
			
			| 52 | 48 |      }
 | 
	
		
			
			| 53 | 49 |  
 | 
	
		
			
			| 54 |  | -    public void remove(String navigatorId) {
 | 
	
		
			
			| 55 |  | -        if (mModals.containsKey(navigatorId)) {
 | 
	
		
			
			| 56 |  | -            mModals.remove(navigatorId);
 | 
	
		
			
			|  | 50 | +    public void dismissAllModals() {
 | 
	
		
			
			|  | 51 | +        while (isModalDisplayed()) {
 | 
	
		
			
			|  | 52 | +            dismissModal();
 | 
	
		
			
			| 57 | 53 |          }
 | 
	
		
			
			| 58 | 54 |      }
 | 
	
		
			
			| 59 | 55 |  
 | 
	
		
			
			| 60 |  | -    public void dismissAllModals() {
 | 
	
		
			
			| 61 |  | -        Iterator<String> iterator = mModals.keySet().iterator();
 | 
	
		
			
			| 62 |  | -        while (iterator.hasNext()) {
 | 
	
		
			
			| 63 |  | -            WeakReference<RnnModal> ref = mModals.get(iterator.next());
 | 
	
		
			
			| 64 |  | -            RnnModal modal = RefUtils.get(ref);
 | 
	
		
			
			| 65 |  | -            if (modal != null) {
 | 
	
		
			
			| 66 |  | -                modal.dismiss();
 | 
	
		
			
			| 67 |  | -            }
 | 
	
		
			
			|  | 56 | +    public void dismissModal() {
 | 
	
		
			
			|  | 57 | +        WeakReference<RnnModal> ref = mModals.pop();
 | 
	
		
			
			|  | 58 | +        RnnModal modal = RefUtils.get(ref);
 | 
	
		
			
			|  | 59 | +        if (modal != null) {
 | 
	
		
			
			|  | 60 | +            modal.dismiss();
 | 
	
		
			
			| 68 | 61 |          }
 | 
	
		
			
			| 69 | 62 |      }
 | 
	
		
			
			| 70 | 63 |  }
 |