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

Commit 673c07f3 authored by Adrian Roos's avatar Adrian Roos Committed by android-build-merger
Browse files

Merge "DozePlugin: Remove" into oc-dev am: b2484f22

am: 825b5748

Change-Id: I5994fbdd9cc15c1dc42fbecd63792eb2214ab017
parents 60e305ce 825b5748
Loading
Loading
Loading
Loading
+0 −102
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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.plugins.doze;

import android.app.PendingIntent;
import android.content.Context;

import com.android.systemui.plugins.Plugin;
import com.android.systemui.plugins.annotations.ProvidesInterface;

/**
 * Provides a {@link DozeUi}.
 */
@ProvidesInterface(action = DozeProvider.ACTION, version = DozeProvider.VERSION)
public interface DozeProvider extends Plugin {

    String ACTION = "com.android.systemui.action.PLUGIN_DOZE";
    int VERSION = 1;

    /**
     * Caution: Even if this is called, the DozeUi provided may still be in use until it transitions
     * to DozeState.FINISH
     */
    @Override
    default void onDestroy() {
    }

    /**
     * @return the plugin's implementation of DozeUi.
     */
    DozeUi provideDozeUi(Context context, DozeMachine machine, WakeLock wakeLock);

    /**
     * If true, the plugin allows the default pulse triggers to fire, otherwise they are disabled.
     */
    default boolean allowDefaultPulseTriggers() {
        return false;
    }

    /**
     * Ui for use in DozeMachine.
     */
    interface DozeUi {
        /** Called whenever the DozeMachine state transitions */
        void transitionTo(DozeState oldState, DozeState newState);
    }

    /** WakeLock wrapper for testability */
    interface WakeLock {
        /** @see android.os.PowerManager.WakeLock#acquire() */
        void acquire();
        /** @see android.os.PowerManager.WakeLock#release() */
        void release();
        /** @see android.os.PowerManager.WakeLock#wrap(Runnable) */
        Runnable wrap(Runnable r);
    }

    /** Plugin version of the DozeMachine's state */
    enum DozeState {
        /** Default state. Transition to INITIALIZED to get Doze going. */
        UNINITIALIZED,
        /** Doze components are set up. Followed by transition to DOZE or DOZE_AOD. */
        INITIALIZED,
        /** Regular doze. Device is asleep and listening for pulse triggers. */
        DOZE,
        /** Always-on doze. Device is asleep, showing UI and listening for pulse triggers. */
        DOZE_AOD,
        /** Pulse has been requested. Device is awake and preparing UI */
        DOZE_REQUEST_PULSE,
        /** Pulse is showing. Device is awake and showing UI. */
        DOZE_PULSING,
        /** Pulse is done showing. Followed by transition to DOZE or DOZE_AOD. */
        DOZE_PULSE_DONE,
        /** Doze is done. DozeService is finished. */
        FINISH,
        /** WakeUp. */
        WAKE_UP,
    }

    /** Plugin interface for the doze machine. */
    interface DozeMachine {
        /** Request that the DozeMachine transitions to {@code state} */
        void requestState(DozeState state);

        /** Request that the PendingIntent is sent. */
        void requestSendIntent(PendingIntent intent);
    }
}
+3 −83
Original line number Diff line number Diff line
@@ -18,24 +18,19 @@ package com.android.systemui.doze;

import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.hardware.SensorManager;
import android.os.Handler;

import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.plugins.doze.DozeProvider;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;

public class DozeFactory {

    private final DozeProvider mDozePlugin;

    public DozeFactory(DozeProvider plugin) {
        mDozePlugin = plugin;
    public DozeFactory() {
    }

    /** Creates a DozeMachine with its parts for {@code dozeService}. */
@@ -68,90 +63,15 @@ public class DozeFactory {
    private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
            DozeHost host, AmbientDisplayConfiguration config, DozeParameters params,
            Handler handler, WakeLock wakeLock, DozeMachine machine) {
        boolean allowPulseTriggers = mDozePlugin == null || mDozePlugin.allowDefaultPulseTriggers();
        boolean allowPulseTriggers = true;
        return new DozeTriggers(context, machine, host, config, params,
                sensorManager, handler, wakeLock, allowPulseTriggers);
    }

    private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
            DozeMachine machine, Handler handler, AlarmManager alarmManager) {
        if (mDozePlugin != null) {
            DozeProvider.DozeUi dozeUi = mDozePlugin.provideDozeUi(context,
                    pluginMachine(context, machine, host),
                    wakeLock);
            return (oldState, newState) -> {
                dozeUi.transitionTo(pluginState(oldState),
                        pluginState(newState));
            };
        } else {
        return new DozeUi(context, alarmManager, machine, wakeLock, host, handler);
    }
    }

    private DozeProvider.DozeMachine pluginMachine(Context context, DozeMachine machine,
            DozeHost host) {
        return new DozeProvider.DozeMachine() {
            @Override
            public void requestState(DozeProvider.DozeState state) {
                if (state == DozeProvider.DozeState.WAKE_UP) {
                    machine.wakeUp();
                    return;
                }
                machine.requestState(implState(state));
            }

            @Override
            public void requestSendIntent(PendingIntent intent) {
                host.startPendingIntentDismissingKeyguard(intent);
            }
        };
    }

    private DozeMachine.State implState(DozeProvider.DozeState s) {
        switch (s) {
            case UNINITIALIZED:
                return DozeMachine.State.UNINITIALIZED;
            case INITIALIZED:
                return DozeMachine.State.INITIALIZED;
            case DOZE:
                return DozeMachine.State.DOZE;
            case DOZE_AOD:
                return DozeMachine.State.DOZE_AOD;
            case DOZE_REQUEST_PULSE:
                return DozeMachine.State.DOZE_REQUEST_PULSE;
            case DOZE_PULSING:
                return DozeMachine.State.DOZE_PULSING;
            case DOZE_PULSE_DONE:
                return DozeMachine.State.DOZE_PULSE_DONE;
            case FINISH:
                return DozeMachine.State.FINISH;
            default:
                throw new IllegalArgumentException("Unknown state: " + s);
        }
    }

    private DozeProvider.DozeState pluginState(DozeMachine.State s) {
        switch (s) {
            case UNINITIALIZED:
                return DozeProvider.DozeState.UNINITIALIZED;
            case INITIALIZED:
                return DozeProvider.DozeState.INITIALIZED;
            case DOZE:
                return DozeProvider.DozeState.DOZE;
            case DOZE_AOD:
                return DozeProvider.DozeState.DOZE_AOD;
            case DOZE_REQUEST_PULSE:
                return DozeProvider.DozeState.DOZE_REQUEST_PULSE;
            case DOZE_PULSING:
                return DozeProvider.DozeState.DOZE_PULSING;
            case DOZE_PULSE_DONE:
                return DozeProvider.DozeState.DOZE_PULSE_DONE;
            case FINISH:
                return DozeProvider.DozeState.FINISH;
            default:
                throw new IllegalArgumentException("Unknown state: " + s);
        }
    }

    public static DozeHost getHost(DozeService service) {
        Application appCandidate = service.getApplication();
+1 −4
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.util.Log;
import com.android.systemui.Dependency;
import com.android.systemui.plugins.Plugin;
import com.android.systemui.plugins.PluginManager;
import com.android.systemui.plugins.doze.DozeProvider;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -50,9 +49,7 @@ public class DozeService extends DreamService implements DozeMachine.Service {
            return;
        }

        DozeProvider provider = Dependency.get(PluginManager.class)
                .getOneShotPlugin(DozeProvider.class);
        mDozeMachine = new DozeFactory(provider).assembleMachine(this);
        mDozeMachine = new DozeFactory().assembleMachine(this);
    }

    @Override
+10 −3
Original line number Diff line number Diff line
@@ -20,10 +20,17 @@ import android.content.Context;
import android.os.PowerManager;
import android.support.annotation.VisibleForTesting;

import com.android.systemui.plugins.doze.DozeProvider;

/** WakeLock wrapper for testability */
public interface WakeLock extends DozeProvider.WakeLock {
public interface WakeLock {

    /** @see android.os.PowerManager.WakeLock#acquire() */
    void acquire();

    /** @see android.os.PowerManager.WakeLock#release() */
    void release();

    /** @see android.os.PowerManager.WakeLock#wrap(Runnable) */
    Runnable wrap(Runnable r);

    static WakeLock createPartial(Context context, String tag) {
        return wrap(createPartialInner(context, tag));