/*
 * Copyright (C) 2020 The Dagger Authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package dagger.hilt.android;

import android.app.Activity;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;

/**
 * A <code>ActivityRetainedLifecycle</code> class is associated with the lifecycle of the {@link
 * dagger.hilt.android.components.ActivityRetainedComponent}.
 */
public interface ActivityRetainedLifecycle {

  /**
   * Adds a new {@link OnClearedListener} for receiving a callback when the activity retained
   * instances will no longer be needed and destroyed.
   *
   * @param listener The listener that should be added.
   */
  @MainThread
  void addOnClearedListener(@NonNull OnClearedListener listener);

  /**
   * Removes a {@link OnClearedListener} previously added via {@link
   * #addOnClearedListener(OnClearedListener)}.
   *
   * @param listener The listener that should be removed.
   */
  @MainThread
  void removeOnClearedListener(@NonNull OnClearedListener listener);

  /**
   * Listener for receiving a callback for when the {@link
   * dagger.hilt.android.components.ActivityRetainedComponent} will no longer be used and destroyed.
   */
  interface OnClearedListener {

    /**
     * Called when the activity retained instances will no longer be used and destroyed.
     *
     * <p>Specifically this will be invoked during {@link Activity#onDestroy()} when {@link
     * Activity#isChangingConfigurations} is false.
     */
    void onCleared();
  }
}
