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