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(); } }
public bool isSnackbar(ISnackbarManagerCallback callback) { ISnackbarManagerCallback callbackResult; if (this.mCallback.TryGetTarget(out callbackResult)) { bool result = callback != null && callbackResult.Equals(callback); return result; } return false; }
public void Dismiss(ISnackbarManagerCallback callback, int ev) { lock (mLock) { if (IsCurrentSnackbar(callback)) { CancelSnackbarLocked(mCurrentSnackbar, ev); } else if (IsNextSnackbar(callback)) { CancelSnackbarLocked(mNextSnackbar, ev); } } }
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(); } } } }
private bool IsNextSnackbar(ISnackbarManagerCallback callback) { var result = mNextSnackbar != null && mNextSnackbar.isSnackbar(callback); return result; }
public void RestoreTimeout(ISnackbarManagerCallback callback) { lock (mLock) { if (IsCurrentSnackbar(callback)) { ScheduleTimeoutLocked(mCurrentSnackbar); } } }
public void CancelTimeout(ISnackbarManagerCallback callback) { lock (mLock) { if (IsCurrentSnackbar(callback)) { mHandler.RemoveCallbacksAndMessages(mCurrentSnackbar); } } }
public SnackbarRecord(int mDuration, ISnackbarManagerCallback callback) { this.mCallback = new WeakReference<ISnackbarManagerCallback>(callback); this.mDuration = mDuration; }