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

Commit 7185dd63 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Changing the overviewState to show appsearch and floating header

Change-Id: I2cfd61cfc9978e4c8e4520f0f7217e49e7344c79
parent 9d69c8da
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -85,8 +85,8 @@ public class AllAppsState extends LauncherState {
    }

    @Override
    public float getHoseatAlpha(Launcher launcher) {
        return 0;
    public int getVisibleElements(Launcher launcher) {
        return ALL_APPS_HEADER | ALL_APPS_CONTENT;
    }

    @Override
+0 −92
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.launcher3.uioverrides;

import com.android.launcher3.Alarm;
import com.android.launcher3.OnAlarmListener;

/**
 * Utility class to detect a pause during a drag.
 */
public class DragPauseDetector implements OnAlarmListener {

    private static final float MAX_VELOCITY_TO_PAUSE = 0.2f;
    private static final long PAUSE_DURATION = 100;

    private final Alarm mAlarm;
    private final Runnable mOnPauseCallback;

    private boolean mTriggered = false;
    private int mDisabledFlags = 0;

    public DragPauseDetector(Runnable onPauseCallback) {
        mOnPauseCallback = onPauseCallback;

        mAlarm = new Alarm();
        mAlarm.setOnAlarmListener(this);
        mAlarm.setAlarm(PAUSE_DURATION);
    }

    public void onDrag(float velocity) {
        if (mTriggered || !isEnabled()) {
            return;
        }

        if (Math.abs(velocity) > MAX_VELOCITY_TO_PAUSE) {
            // Cancel any previous alarm and set a new alarm
            mAlarm.setAlarm(PAUSE_DURATION);
        }
    }

    @Override
    public void onAlarm(Alarm alarm) {
        if (!mTriggered && isEnabled()) {
            mTriggered = true;
            mOnPauseCallback.run();
        }
    }

    public boolean isTriggered () {
        return mTriggered;
    }

    public boolean isEnabled() {
        return mDisabledFlags == 0;
    }

    public void addDisabledFlags(int flags) {
        boolean wasEnabled = isEnabled();
        mDisabledFlags |= flags;
        resetAlarm(wasEnabled);
    }

    public void clearDisabledFlags(int flags) {
        boolean wasEnabled = isEnabled();
        mDisabledFlags  &= ~flags;
        resetAlarm(wasEnabled);
    }

    private void resetAlarm(boolean wasEnabled) {
        boolean isEnabled = isEnabled();
        if (wasEnabled == isEnabled) {
          // Nothing has changed
        } if (isEnabled && !mTriggered) {
            mAlarm.setAlarm(PAUSE_DURATION);
        } else if (!isEnabled) {
            mAlarm.cancelAlarm();
        }
    }
}
+0 −165
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.launcher3.uioverrides;

import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.touch.SwipeDetector.DIRECTION_NEGATIVE;
import static com.android.launcher3.touch.SwipeDetector.DIRECTION_POSITIVE;
import static com.android.launcher3.touch.SwipeDetector.HORIZONTAL;
import static com.android.launcher3.touch.SwipeDetector.VERTICAL;
import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR;

import android.graphics.Rect;
import android.metrics.LogMaker;
import android.view.MotionEvent;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.util.VerticalSwipeController;
import com.android.quickstep.views.RecentsView;

class EventLogTags {
    private EventLogTags() {
    }  // don't instantiate

    /** 524292 sysui_multi_action (content|4) */
    public static final int SYSUI_MULTI_ACTION = 524292;

    public static void writeSysuiMultiAction(Object[] content) {
        android.util.EventLog.writeEvent(SYSUI_MULTI_ACTION, content);
    }
}

class MetricsLogger {
    private static MetricsLogger sMetricsLogger;

    private static MetricsLogger getLogger() {
        if (sMetricsLogger == null) {
            sMetricsLogger = new MetricsLogger();
        }
        return sMetricsLogger;
    }

    protected void saveLog(Object[] rep) {
        EventLogTags.writeSysuiMultiAction(rep);
    }

    public void write(LogMaker content) {
        if (content.getType() == 0/*MetricsEvent.TYPE_UNKNOWN*/) {
            content.setType(4/*MetricsEvent.TYPE_ACTION*/);
        }
        saveLog(content.serialize());
    }
}

/**
 * Extension of {@link VerticalSwipeController} to go from NORMAL to OVERVIEW.
 */
public class EdgeSwipeController extends VerticalSwipeController implements
        OnDeviceProfileChangeListener {

    private static final Rect sTempRect = new Rect();

    private final MetricsLogger mMetricsLogger = new MetricsLogger();

    public EdgeSwipeController(Launcher l) {
        super(l, NORMAL, OVERVIEW, l.getDeviceProfile().isVerticalBarLayout()
                ? HORIZONTAL : VERTICAL);
        l.addOnDeviceProfileChangeListener(this);
    }

    @Override
    public void onDeviceProfileChanged(DeviceProfile dp) {
        mDetector.updateDirection(dp.isVerticalBarLayout() ? HORIZONTAL : VERTICAL);
    }

    @Override
    protected boolean shouldInterceptTouch(MotionEvent ev) {
        return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0;
    }

    @Override
    protected int getSwipeDirection(MotionEvent ev) {
        return isTransitionFlipped() ? DIRECTION_NEGATIVE : DIRECTION_POSITIVE;
    }

    public EdgeSwipeController(Launcher l, LauncherState baseState) {
        super(l, baseState);
    }

    @Override
    protected boolean isTransitionFlipped() {
        return mLauncher.getDeviceProfile().isSeascape();
    }

    @Override
    protected void onTransitionComplete(boolean wasFling, boolean stateChanged) {
        if (stateChanged && mToState instanceof OverviewState) {
            // Mimic ActivityMetricsLogger.logAppTransitionMultiEvents() logging for
            // "Recents" activity for app transition tests.
            final LogMaker builder = new LogMaker(761/*APP_TRANSITION*/);
            builder.setPackageName("com.android.systemui");
            builder.addTaggedData(871/*FIELD_CLASS_NAME*/,
                    "com.android.systemui.recents.RecentsActivity");
            builder.addTaggedData(319/*APP_TRANSITION_DELAY_MS*/,
                    0/* zero time */);
            mMetricsLogger.write(builder);

            // Add user event logging for launcher pipeline
            int direction = Direction.UP;
            if (mLauncher.getDeviceProfile().isVerticalBarLayout()) {
                direction = Direction.LEFT;
                if (mLauncher.getDeviceProfile().isSeascape()) {
                    direction = Direction.RIGHT;
                }
            }
            mLauncher.getUserEventDispatcher().logStateChangeAction(
                    wasFling ? Touch.FLING : Touch.SWIPE, direction,
                    ContainerType.NAVBAR, ContainerType.WORKSPACE, // src target
                    ContainerType.TASKSWITCHER,                    // dst target
                    mLauncher.getWorkspace().getCurrentPage());
        }
    }

    @Override
    protected float getShiftRange() {
        return getShiftRange(mLauncher);
    }

    public static float getShiftRange(Launcher launcher) {
        RecentsView.getPageRect(launcher.getDeviceProfile(), launcher, sTempRect);
        DragLayer dl = launcher.getDragLayer();
        Rect insets = dl.getInsets();
        DeviceProfile dp = launcher.getDeviceProfile();

        if (dp.isVerticalBarLayout()) {
            if (dp.isSeascape()) {
                return insets.left + sTempRect.left;
            } else {
                return dl.getWidth() - sTempRect.right + insets.right;
            }
        } else {
            return dl.getHeight() - sTempRect.bottom + insets.bottom;
        }
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -41,10 +41,10 @@ public class FastOverviewState extends OverviewState {
    }

    @Override
    public float getHoseatAlpha(Launcher launcher) {
    public int getVisibleElements(Launcher launcher) {
        if (DEBUG_DIFFERENT_UI) {
            return 0;
            return NONE;
        }
        return super.getHoseatAlpha(launcher);
        return super.getVisibleElements(launcher);
    }
}
+71 −0
Original line number Diff line number Diff line
package com.android.launcher3.uioverrides;

import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR;

import android.view.MotionEvent;

import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.touch.AbstractStateChangeTouchController;
import com.android.launcher3.touch.SwipeDetector;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.quickstep.util.SysuiEventLogger;

/**
 * Touch controller for handling edge swipes in landscape/seascape UI
 */
public class LandscapeEdgeSwipeController extends AbstractStateChangeTouchController {

    public LandscapeEdgeSwipeController(Launcher l) {
        super(l, SwipeDetector.HORIZONTAL);
    }

    @Override
    protected boolean canInterceptTouch(MotionEvent ev) {
        if (mCurrentAnimation != null) {
            // If we are already animating from a previous state, we can intercept.
            return true;
        }
        if (AbstractFloatingView.getTopOpenView(mLauncher) != null) {
            return false;
        }
        return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0;
    }

    @Override
    protected int getSwipeDirection(MotionEvent ev) {
        mFromState = NORMAL;
        mToState = OVERVIEW;
        return SwipeDetector.DIRECTION_BOTH;
    }

    @Override
    protected float getShiftRange() {
        return mLauncher.getDragLayer().getWidth();
    }

    @Override
    protected float initCurrentAnimation() {
        float range = getShiftRange();
        long maxAccuracy = (long) (2 * range);
        mCurrentAnimation = mLauncher.getStateManager()
                .createAnimationToNewWorkspace(mToState, maxAccuracy);
        return (mLauncher.getDeviceProfile().isSeascape() ? 2 : -2) / range;
    }

    @Override
    protected int getDirectionForLog() {
        return mLauncher.getDeviceProfile().isSeascape() ? Direction.RIGHT : Direction.LEFT;
    }

    @Override
    protected void onSwipeInteractionCompleted(LauncherState targetState, int logAction) {
        super.onSwipeInteractionCompleted(targetState, logAction);
        if (mFromState == NORMAL && targetState == OVERVIEW) {
            SysuiEventLogger.writeDummyRecentsTransition(0);
        }
    }
}
Loading