blob: 51eefd6bed370249a20a4f0e0cd6295f58d54a3c [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* 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 com.android.systemui.dreams.dagger;
import android.annotation.Nullable;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import com.android.internal.util.Preconditions;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayContainerView;
import com.android.systemui.dreams.DreamOverlayStatusBarView;
import com.android.systemui.dreams.touch.DreamTouchHandler;
import com.android.systemui.touch.TouchInsetManager;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.ElementsIntoSet;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Named;
/** Dagger module for {@link DreamOverlayComponent}. */
@Module
public abstract class DreamOverlayModule {
public static final String DREAM_TOUCH_HANDLERS = "dream_touch_handlers";
public static final String DREAM_OVERLAY_CONTENT_VIEW = "dream_overlay_content_view";
public static final String MAX_BURN_IN_OFFSET = "max_burn_in_offset";
public static final String BURN_IN_PROTECTION_UPDATE_INTERVAL =
"burn_in_protection_update_interval";
public static final String MILLIS_UNTIL_FULL_JITTER = "millis_until_full_jitter";
public static final String DREAM_BLUR_RADIUS = "DREAM_BLUR_RADIUS";
public static final String DREAM_IN_BLUR_ANIMATION_DURATION = "dream_in_blur_anim_duration";
public static final String DREAM_IN_COMPLICATIONS_ANIMATION_DURATION =
"dream_in_complications_anim_duration";
public static final String DREAM_IN_TRANSLATION_Y_DISTANCE =
"dream_in_complications_translation_y";
public static final String DREAM_IN_TRANSLATION_Y_DURATION =
"dream_in_complications_translation_y_duration";
/** */
@Provides
@DreamOverlayComponent.DreamOverlayScope
public static DreamOverlayContainerView providesDreamOverlayContainerView(
LayoutInflater layoutInflater) {
return Preconditions.checkNotNull((DreamOverlayContainerView)
layoutInflater.inflate(R.layout.dream_overlay_container, null),
"R.layout.dream_layout_container could not be properly inflated");
}
/** */
@Provides
@DreamOverlayComponent.DreamOverlayScope
@Named(DREAM_OVERLAY_CONTENT_VIEW)
public static ViewGroup providesDreamOverlayContentView(DreamOverlayContainerView view) {
return Preconditions.checkNotNull(view.findViewById(R.id.dream_overlay_content),
"R.id.dream_overlay_content must not be null");
}
/** */
@Provides
public static TouchInsetManager.TouchInsetSession providesTouchInsetSession(
TouchInsetManager manager) {
return manager.createSession();
}
/** */
@Provides
@DreamOverlayComponent.DreamOverlayScope
public static DreamOverlayStatusBarView providesDreamOverlayStatusBarView(
DreamOverlayContainerView view) {
return Preconditions.checkNotNull(view.findViewById(R.id.dream_overlay_status_bar),
"R.id.status_bar must not be null");
}
/** */
@Provides
@DreamOverlayComponent.DreamOverlayScope
@Named(MAX_BURN_IN_OFFSET)
static int providesMaxBurnInOffset(@Main Resources resources) {
return resources.getDimensionPixelSize(R.dimen.default_burn_in_prevention_offset);
}
/** */
@Provides
@Named(BURN_IN_PROTECTION_UPDATE_INTERVAL)
static long providesBurnInProtectionUpdateInterval(@Main Resources resources) {
return resources.getInteger(
R.integer.config_dreamOverlayBurnInProtectionUpdateIntervalMillis);
}
/** */
@Provides
@Named(MILLIS_UNTIL_FULL_JITTER)
static long providesMillisUntilFullJitter(@Main Resources resources) {
return resources.getInteger(R.integer.config_dreamOverlayMillisUntilFullJitter);
}
/**
* The blur radius applied to the dream overlay at dream entry and exit.
*/
@Provides
@Named(DREAM_BLUR_RADIUS)
static int providesDreamBlurRadius(@Main Resources resources) {
return resources.getDimensionPixelSize(R.dimen.dream_overlay_anim_blur_radius);
}
/**
* Duration in milliseconds of the dream in un-blur animation.
*/
@Provides
@Named(DREAM_IN_BLUR_ANIMATION_DURATION)
static long providesDreamInBlurAnimationDuration(@Main Resources resources) {
return (long) resources.getInteger(R.integer.config_dreamOverlayInBlurDurationMs);
}
/**
* Duration in milliseconds of the dream in complications fade-in animation.
*/
@Provides
@Named(DREAM_IN_COMPLICATIONS_ANIMATION_DURATION)
static long providesDreamInComplicationsAnimationDuration(@Main Resources resources) {
return (long) resources.getInteger(R.integer.config_dreamOverlayInComplicationsDurationMs);
}
/**
* Provides the number of pixels to translate complications when entering a dream.
*/
@Provides
@Named(DREAM_IN_TRANSLATION_Y_DISTANCE)
@DreamOverlayComponent.DreamOverlayScope
static int providesDreamInComplicationsTranslationY(@Main Resources resources) {
return resources.getDimensionPixelSize(R.dimen.dream_overlay_entry_y_offset);
}
/**
* Provides the duration in ms of the y-translation when dream enters.
*/
@Provides
@Named(DREAM_IN_TRANSLATION_Y_DURATION)
@DreamOverlayComponent.DreamOverlayScope
static long providesDreamInComplicationsTranslationYDuration(@Main Resources resources) {
return (long) resources.getInteger(R.integer.config_dreamOverlayInTranslationYDurationMs);
}
@Provides
@DreamOverlayComponent.DreamOverlayScope
static Lifecycle providesLifecycle(LifecycleOwner lifecycleOwner) {
return lifecycleOwner.getLifecycle();
}
@Provides
@ElementsIntoSet
static Set<DreamTouchHandler> providesDreamTouchHandlers(
@Named(DREAM_TOUCH_HANDLERS) @Nullable Set<DreamTouchHandler> touchHandlers) {
return touchHandlers != null ? touchHandlers : new HashSet<>();
}
}