1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.systemui; 16 17 import android.app.PendingIntent; 18 import android.content.Intent; 19 import android.view.View; 20 21 import androidx.annotation.Nullable; 22 23 import com.android.systemui.animation.ActivityLaunchAnimator; 24 import com.android.systemui.dagger.SysUISingleton; 25 import com.android.systemui.plugins.ActivityStarter; 26 import com.android.systemui.statusbar.phone.StatusBar; 27 28 import java.util.Optional; 29 30 import javax.inject.Inject; 31 32 import dagger.Lazy; 33 34 /** 35 * Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but 36 * delegates to an actual implementation (StatusBar). 37 */ 38 @SuppressWarnings("OptionalUsedAsFieldOrParameterType") 39 @SysUISingleton 40 public class ActivityStarterDelegate implements ActivityStarter { 41 42 private Lazy<Optional<StatusBar>> mActualStarterOptionalLazy; 43 44 @Inject ActivityStarterDelegate(Lazy<Optional<StatusBar>> statusBarOptionalLazy)45 public ActivityStarterDelegate(Lazy<Optional<StatusBar>> statusBarOptionalLazy) { 46 mActualStarterOptionalLazy = statusBarOptionalLazy; 47 } 48 49 @Override startPendingIntentDismissingKeyguard(PendingIntent intent)50 public void startPendingIntentDismissingKeyguard(PendingIntent intent) { 51 mActualStarterOptionalLazy.get().ifPresent( 52 starter -> starter.startPendingIntentDismissingKeyguard(intent)); 53 } 54 55 @Override startPendingIntentDismissingKeyguard(PendingIntent intent, Runnable intentSentUiThreadCallback)56 public void startPendingIntentDismissingKeyguard(PendingIntent intent, 57 Runnable intentSentUiThreadCallback) { 58 mActualStarterOptionalLazy.get().ifPresent( 59 starter -> starter.startPendingIntentDismissingKeyguard( 60 intent, intentSentUiThreadCallback)); 61 } 62 63 @Override startPendingIntentDismissingKeyguard(PendingIntent intent, Runnable intentSentUiThreadCallback, View associatedView)64 public void startPendingIntentDismissingKeyguard(PendingIntent intent, 65 Runnable intentSentUiThreadCallback, View associatedView) { 66 mActualStarterOptionalLazy.get().ifPresent( 67 starter -> starter.startPendingIntentDismissingKeyguard( 68 intent, intentSentUiThreadCallback, associatedView)); 69 } 70 71 @Override startPendingIntentDismissingKeyguard(PendingIntent intent, Runnable intentSentUiThreadCallback, ActivityLaunchAnimator.Controller animationController)72 public void startPendingIntentDismissingKeyguard(PendingIntent intent, 73 Runnable intentSentUiThreadCallback, 74 ActivityLaunchAnimator.Controller animationController) { 75 mActualStarterOptionalLazy.get().ifPresent( 76 starter -> starter.startPendingIntentDismissingKeyguard( 77 intent, intentSentUiThreadCallback, animationController)); 78 } 79 80 @Override startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade, int flags)81 public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade, 82 int flags) { 83 mActualStarterOptionalLazy.get().ifPresent( 84 starter -> starter.startActivity(intent, onlyProvisioned, dismissShade, flags)); 85 } 86 87 @Override startActivity(Intent intent, boolean dismissShade)88 public void startActivity(Intent intent, boolean dismissShade) { 89 mActualStarterOptionalLazy.get().ifPresent( 90 starter -> starter.startActivity(intent, dismissShade)); 91 } 92 93 @Override startActivity(Intent intent, boolean dismissShade, @Nullable ActivityLaunchAnimator.Controller animationController, boolean showOverLockscreenWhenLocked)94 public void startActivity(Intent intent, boolean dismissShade, 95 @Nullable ActivityLaunchAnimator.Controller animationController, 96 boolean showOverLockscreenWhenLocked) { 97 mActualStarterOptionalLazy.get().ifPresent( 98 starter -> starter.startActivity(intent, dismissShade, animationController, 99 showOverLockscreenWhenLocked)); 100 } 101 102 @Override startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade)103 public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade) { 104 mActualStarterOptionalLazy.get().ifPresent( 105 starter -> starter.startActivity(intent, onlyProvisioned, dismissShade)); 106 } 107 108 @Override startActivity(Intent intent, boolean dismissShade, Callback callback)109 public void startActivity(Intent intent, boolean dismissShade, Callback callback) { 110 mActualStarterOptionalLazy.get().ifPresent( 111 starter -> starter.startActivity(intent, dismissShade, callback)); 112 } 113 114 @Override postStartActivityDismissingKeyguard(Intent intent, int delay)115 public void postStartActivityDismissingKeyguard(Intent intent, int delay) { 116 mActualStarterOptionalLazy.get().ifPresent( 117 starter -> starter.postStartActivityDismissingKeyguard(intent, delay)); 118 } 119 120 @Override postStartActivityDismissingKeyguard(Intent intent, int delay, @Nullable ActivityLaunchAnimator.Controller animationController)121 public void postStartActivityDismissingKeyguard(Intent intent, int delay, 122 @Nullable ActivityLaunchAnimator.Controller animationController) { 123 mActualStarterOptionalLazy.get().ifPresent( 124 starter -> starter.postStartActivityDismissingKeyguard( 125 intent, delay, animationController)); 126 } 127 128 @Override postStartActivityDismissingKeyguard(PendingIntent intent)129 public void postStartActivityDismissingKeyguard(PendingIntent intent) { 130 mActualStarterOptionalLazy.get().ifPresent( 131 starter -> starter.postStartActivityDismissingKeyguard(intent)); 132 } 133 134 @Override postStartActivityDismissingKeyguard(PendingIntent intent, ActivityLaunchAnimator.Controller animationController)135 public void postStartActivityDismissingKeyguard(PendingIntent intent, 136 ActivityLaunchAnimator.Controller animationController) { 137 mActualStarterOptionalLazy.get().ifPresent( 138 starter -> starter.postStartActivityDismissingKeyguard( 139 intent, animationController)); 140 } 141 142 @Override postQSRunnableDismissingKeyguard(Runnable runnable)143 public void postQSRunnableDismissingKeyguard(Runnable runnable) { 144 mActualStarterOptionalLazy.get().ifPresent( 145 starter -> starter.postQSRunnableDismissingKeyguard(runnable)); 146 } 147 148 @Override dismissKeyguardThenExecute(OnDismissAction action, Runnable cancel, boolean afterKeyguardGone)149 public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancel, 150 boolean afterKeyguardGone) { 151 mActualStarterOptionalLazy.get().ifPresent( 152 starter -> starter.dismissKeyguardThenExecute(action, cancel, afterKeyguardGone)); 153 } 154 } 155