// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.chrome.browser.widget; import android.app.Activity; import android.app.Dialog; import org.chromium.base.ActivityState; import org.chromium.base.ApplicationStatus; /** * Dialog subclass that ensures that dismiss() is called, even if the dialog is implicitly dismissed * due to its activity being destroyed. This is important if the dialog's dismiss() method releases * references to memory or performs other crucial cleanup. See http://crbug.com/507748. * DialogFragments ensure that dismiss() is called as well. */ public class AlwaysDismissedDialog extends Dialog implements ApplicationStatus.ActivityStateListener { public AlwaysDismissedDialog(Activity ownerActivity, int theme) { super(ownerActivity, theme); ApplicationStatus.registerStateListenerForActivity(this, ownerActivity); } @Override public void dismiss() { super.dismiss(); ApplicationStatus.unregisterActivityStateListener(this); } @Override public void onActivityStateChange(Activity activity, int newState) { if (newState == ActivityState.DESTROYED) dismiss(); } }