예제 #1
0
 public void Show(int duration, ISnackbarManagerCallback callback)
 {
     lock (mLock)
     {
         if (IsCurrentSnackbar(callback))
         {
             // Means that the callback is already in the queue. We'll just update the duration
             mCurrentSnackbar.mDuration = duration;
             // If this is the TSnackbar currently being shown, call re-schedule it's
             // timeout
             mHandler.RemoveCallbacksAndMessages(mCurrentSnackbar);
             ScheduleTimeoutLocked(mCurrentSnackbar);
             return;
         }
         if (IsNextSnackbar(callback))
         {
             // We'll just update the duration
             mNextSnackbar.mDuration = duration;
         }
         else
         {
             // Else, we need to create a new record and queue it
             mNextSnackbar = new SnackbarRecord(duration, callback);
         }
         if (mCurrentSnackbar != null && CancelSnackbarLocked(mCurrentSnackbar,
             Callback.DISMISS_EVENT_CONSECUTIVE))
         {
             // If we currently have a TSnackbar, try and cancel it and wait in line
         }
         // Clear out the current snackbar
         mCurrentSnackbar = null;
         // Otherwise, just show it now
         ShowNextSnackbarLocked();
     }
 }
예제 #2
0
 public bool isSnackbar(ISnackbarManagerCallback callback)
 {
     ISnackbarManagerCallback callbackResult;
     if (this.mCallback.TryGetTarget(out callbackResult))
     {
         bool result = callback != null && callbackResult.Equals(callback);
         return result;
     }
     return false;
 }
예제 #3
0
 public void Dismiss(ISnackbarManagerCallback callback, int ev)
 {
     lock (mLock)
     {
         if (IsCurrentSnackbar(callback))
         {
             CancelSnackbarLocked(mCurrentSnackbar, ev);
         }
         else if (IsNextSnackbar(callback))
         {
             CancelSnackbarLocked(mNextSnackbar, ev);
         }
     }
 }
예제 #4
0
 public void OnDismissed(ISnackbarManagerCallback callback)
 {
     lock (mLock)
     {
         if (IsCurrentSnackbar(callback))
         {
             // If the callback is from a TSnackbar currently show, remove it and show a new one
             mCurrentSnackbar = null;
             if (mNextSnackbar != null)
             {
                 ShowNextSnackbarLocked();
             }
         }
     }
 }
예제 #5
0
 private bool IsNextSnackbar(ISnackbarManagerCallback callback)
 {
     var result = mNextSnackbar != null && mNextSnackbar.isSnackbar(callback);
     return result;
 }
예제 #6
0
 public void RestoreTimeout(ISnackbarManagerCallback callback)
 {
     lock (mLock)
     {
         if (IsCurrentSnackbar(callback))
         {
             ScheduleTimeoutLocked(mCurrentSnackbar);
         }
     }
 }
예제 #7
0
 public void CancelTimeout(ISnackbarManagerCallback callback)
 {
     lock (mLock)
     {
         if (IsCurrentSnackbar(callback))
         {
             mHandler.RemoveCallbacksAndMessages(mCurrentSnackbar);
         }
     }
 }
예제 #8
0
 public SnackbarRecord(int mDuration, ISnackbarManagerCallback callback)
 {
     this.mCallback = new WeakReference<ISnackbarManagerCallback>(callback);
     this.mDuration = mDuration;
 }