Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 297c04ee authored by Jason Monk's avatar Jason Monk Committed by Evan Laird
Browse files

Make StatusBar not be a NotificationPresenter

Break the NotificationPresenter out of the StatusBar and most of
the logic with it.

 - Break RemoteInput Callbacks out of NotificationPresenter
 - Break Environment Callbacks out of NotificationPresenter
 - Add ShadeController interface for StatusBar (abstraction
   layer from StatusBar)
 - Add InitController to allow for post-init tasks (dependency
 resolution should not go here)
 - Make some dependencies (ShadeController, NotificationEntryManager,
 NotificationLockscreenUserManager usually) lazily-resolved to break
 some dependency cycles

 - Lots of other cleanup

Test: Existing tests do not pass
Change-Id: Ic043c6b15a4ffe551fc27f99b25d5c3caa1be582
parent c2896a27
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@

package com.android.systemui.plugins;

import android.annotation.Nullable;
import android.app.PendingIntent;
import android.content.Intent;

@@ -36,7 +37,17 @@ public interface ActivityStarter {
    void postStartActivityDismissingKeyguard(PendingIntent intent);
    void postQSRunnableDismissingKeyguard(Runnable runnable);

    void dismissKeyguardThenExecute(OnDismissAction action, @Nullable Runnable cancel,
            boolean afterKeyguardGone);

    interface Callback {
        void onActivityStarted(int resultCode);
    }

    interface OnDismissAction {
        /**
         * @return {@code true} if the dismiss should be deferred
         */
        boolean onDismiss();
    }
}
+1 −8
Original line number Diff line number Diff line
@@ -29,13 +29,13 @@ import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
import android.widget.FrameLayout;

import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardSecurityContainer.SecurityCallback;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.settingslib.Utils;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;

import java.io.File;

@@ -50,13 +50,6 @@ import java.io.File;
 */
public class KeyguardHostView extends FrameLayout implements SecurityCallback {

    public interface OnDismissAction {
        /**
         * @return true if the dismiss should be deferred
         */
        boolean onDismiss();
    }

    private AudioManager mAudioManager;
    private TelephonyManager mTelephonyManager = null;
    protected ViewMediatorCallback mViewMediatorCallback;
+30 −7
Original line number Diff line number Diff line
@@ -29,46 +29,69 @@ public class ActivityStarterDelegate implements ActivityStarter {

    @Override
    public void startPendingIntentDismissingKeyguard(PendingIntent intent) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.startPendingIntentDismissingKeyguard(intent);
    }

    @Override
    public void startActivity(Intent intent, boolean dismissShade) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.startActivity(intent, dismissShade);
    }

    @Override
    public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.startActivity(intent, onlyProvisioned, dismissShade);
    }

    @Override
    public void startActivity(Intent intent, boolean dismissShade, Callback callback) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.startActivity(intent, dismissShade, callback);
    }

    @Override
    public void postStartActivityDismissingKeyguard(Intent intent, int delay) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.postStartActivityDismissingKeyguard(intent, delay);
    }

    @Override
    public void postStartActivityDismissingKeyguard(PendingIntent intent) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.postStartActivityDismissingKeyguard(intent);
    }

    @Override
    public void postQSRunnableDismissingKeyguard(Runnable runnable) {
        if (mActualStarter == null) return;
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.postQSRunnableDismissingKeyguard(runnable);
    }

    @Override
    public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancel,
            boolean afterKeyguardGone) {
        if (mActualStarter == null) {
            return;
        }
        mActualStarter.dismissKeyguardThenExecute(action, cancel, afterKeyguardGone);
    }

    public void setActivityStarterImpl(ActivityStarter starter) {
        mActualStarter = starter;
    }
+14 −0
Original line number Diff line number Diff line
@@ -48,16 +48,22 @@ import com.android.systemui.power.EnhancedEstimates;
import com.android.systemui.power.EnhancedEstimatesImpl;
import com.android.systemui.power.PowerNotificationWarnings;
import com.android.systemui.power.PowerUI;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.notification.AppOpsListener;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.notification.NotificationData.KeyguardEnvironment;
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.ManagedProfileController;
import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl;
import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
@@ -343,6 +349,14 @@ public class Dependency extends SystemUI {

        mProviders.put(LockscreenGestureLogger.class, () -> new LockscreenGestureLogger());

        mProviders.put(KeyguardEnvironment.class, () -> new KeyguardEnvironmentImpl());
        mProviders.put(ShadeController.class, () ->
                SysUiServiceProvider.getComponent(mContext, StatusBar.class));
        mProviders.put(NotificationRemoteInputManager.Callback.class,
                () -> new StatusBarRemoteInputCallback(mContext));

        mProviders.put(InitController.class, InitController::new);

        // Put all dependencies above here so the factory can override them if it wants.
        SystemUIFactory.getInstance().injectDependencies(mProviders, mContext);

+43 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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;

import java.util.ArrayList;

/**
 * Created by {@link Dependency} on SystemUI startup. Add tasks which need to be executed only
 * after all other dependencies have been created.
 */
public class InitController {

    private final ArrayList<Runnable> mTasks = new ArrayList<>();

    /**
     * Add a task to be executed after {@link Dependency#start()}
     * @param runnable the task to be executed
     */
    public void addPostInitTask(Runnable runnable) {
        mTasks.add(runnable);
    }

    /**
     * Run post-init tasks and remove them from the tasks list
     */
    public void executePostInitTasks() {
        while (!mTasks.isEmpty()) {
            mTasks.remove(0).run();
        }
    }
}
Loading