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

Commit a0cc0903 authored by Andy Wickham's avatar Andy Wickham
Browse files

Adds additional pages to Taskbar Edu.

Currently there are pages for the following:
 - Splitscreen
 - Customize (add apps/predicted apps)
 - Docking (long press to hide)

At the moment they all use the same placeholder
image from before.

Button states:
 Page 1: Close and Next
 Page 2: Back and Next
 Page 3: Back and Done

You can also swipe left and right between the pages.

Demo: https://drive.google.com/file/d/1_D3i-jZxCRRVHV92p6hG5cm3VGcJ_bhK/view?usp=sharing&resourcekey=0-KHLHTTx67JlmVv-UZoAUAw

Bug: 180605356
Test: Manual
Change-Id: Ibbb81610a611f6ca412e53ed90dc1c67764f417e
parent a7142681
Loading
Loading
Loading
Loading
+99 −23
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
<com.android.launcher3.taskbar.TaskbarEduView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:launcher="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
@@ -33,46 +34,121 @@
        android:paddingHorizontal="36dp"
        android:paddingTop="64dp">

        <com.android.launcher3.taskbar.TaskbarEduPagedView
            android:id="@+id/content"
            android:clipToPadding="false"
            android:layout_width="match_parent"
            android:layout_height="378dp"
            app:layout_constraintTop_toTopOf="parent"
            launcher:pageIndicator="@+id/content_page_indicator">

            <LinearLayout
                android:id="@+id/page_splitscreen"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_horizontal">

                <TextView
            android:id="@+id/edu_header"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginHorizontal="16dp"
            app:layout_constraintTop_toTopOf="parent"
                    android:gravity="center_horizontal"
                    style="@style/TextHeadline"
            android:text="@string/taskbar_edu_header_1"
                    android:text="@string/taskbar_edu_splitscreen"
                    android:fontFamily="google-sans"
                    android:textColor="?android:attr/textColorPrimary"
                    android:textSize="24sp"
                    android:maxLines="2"/>

                <ImageView
            android:id="@+id/edu_illustration"
                    android:layout_width="322dp"
                    android:layout_height="282dp"
                    android:layout_marginTop="16dp"
                    android:src="@drawable/taskbar_edu_splitscreen"/>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/page_customize"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_horizontal">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginHorizontal="16dp"
                    android:gravity="center_horizontal"
                    style="@style/TextHeadline"
                    android:text="@string/taskbar_edu_customize"
                    android:fontFamily="google-sans"
                    android:textColor="?android:attr/textColorPrimary"
                    android:textSize="24sp"
                    android:maxLines="2"/>

                <ImageView
                    android:layout_width="322dp"
                    android:layout_height="282dp"
                    android:layout_marginTop="16dp"
            app:layout_constraintTop_toBottomOf="@id/edu_header"
                    android:src="@drawable/taskbar_edu_splitscreen"/>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/page_dock"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_horizontal">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginHorizontal="16dp"
                    android:gravity="center_horizontal"
                    style="@style/TextHeadline"
                    android:text="@string/taskbar_edu_dock"
                    android:fontFamily="google-sans"
                    android:textColor="?android:attr/textColorPrimary"
                    android:textSize="24sp"
                    android:maxLines="2"/>

                <ImageView
                    android:layout_width="322dp"
                    android:layout_height="282dp"
                    android:layout_marginTop="16dp"
                    android:src="@drawable/taskbar_edu_splitscreen"/>
            </LinearLayout>
        </com.android.launcher3.taskbar.TaskbarEduPagedView>

        <Button
            android:id="@+id/edu_close_button"
            android:id="@+id/edu_start_button"
            android:layout_width="wrap_content"
            android:layout_height="36dp"
            android:layout_marginBottom="92dp"
            app:layout_constraintTop_toBottomOf="@id/edu_illustration"
            app:layout_constraintTop_toBottomOf="@id/content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:text="@string/taskbar_edu_close"
            style="@style/TaskbarEdu.Button.Close"
            android:textColor="?android:attr/textColorPrimary"/>

        <com.android.launcher3.pageindicators.PageIndicatorDots
            android:id="@+id/content_page_indicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="@id/edu_start_button"
            app:layout_constraintBottom_toBottomOf="@id/edu_start_button"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:elevation="1dp" />

        <Button
            android:id="@+id/edu_next_button"
            android:id="@+id/edu_end_button"
            android:layout_width="wrap_content"
            android:layout_height="36dp"
            android:layout_marginBottom="92dp"
            app:layout_constraintTop_toBottomOf="@id/edu_illustration"
            app:layout_constraintTop_toBottomOf="@id/content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:text="@string/taskbar_edu_next"
+19 −5
Original line number Diff line number Diff line
@@ -205,11 +205,25 @@
    <string name="gesture_tutorial_action_button_label_skip">Skip</string>

    <!-- ******* Taskbar Edu ******* -->
    <!-- Text in dialog that lets a user know how they can use the taskbar on their device.
         [CHAR_LIMIT=NONE] -->
    <string name="taskbar_edu_header_1">Use 2 apps at once and switch apps with the taskbar</string>
    <!-- Text on button to go to the next screen of a tutorial [CHAR_LIMIT=30] -->
    <!-- Accessibility text spoken when the taskbar education panel appears [CHAR_LIMIT=NONE] -->
    <string name="taskbar_edu_opened">Taskbar education appeared</string>
    <!-- Accessibility text spoken when the taskbar education panel disappears [CHAR_LIMIT=NONE] -->
    <string name="taskbar_edu_closed">Taskbar education closed</string>
    <!-- Text in dialog that lets a user know how they can use the taskbar to use multiple apps on their device.
         [CHAR_LIMIT=60] -->
    <string name="taskbar_edu_splitscreen" translatable="false">Use 2 apps at once and switch apps with the taskbar</string>
    <!-- Text in dialog that lets a user know how they can customize the taskbar on their device.
         [CHAR_LIMIT=60] -->
    <string name="taskbar_edu_customize" translatable="false">Add your favorite apps and get automatic suggestions</string>
    <!-- Text in dialog that lets a user know how they can hide the taskbar on their device.
         [CHAR_LIMIT=60] -->
    <string name="taskbar_edu_dock">Touch &amp; hold to hide the taskbar anytime</string>
    <!-- Text on button to go to the next screen of a tutorial [CHAR_LIMIT=16] -->
    <string name="taskbar_edu_next">Next</string>
    <!-- Text on button to exit a tutorial [CHAR_LIMIT=30] -->
    <!-- Text on button to go to the previous screen of a tutorial [CHAR_LIMIT=16] -->
    <string name="taskbar_edu_previous">Back</string>
    <!-- Text on button to exit a tutorial [CHAR_LIMIT=16] -->
    <string name="taskbar_edu_close">Close</string>
    <!-- Text on button to finish a tutorial [CHAR_LIMIT=16] -->
    <string name="taskbar_edu_done">Done</string>
</resources>
+2 −0
Original line number Diff line number Diff line
@@ -144,11 +144,13 @@
        <item name="android:background">@drawable/button_taskbar_edu_bordered</item>
        <item name="android:stateListAnimator">@null</item>
        <item name="android:textSize">16sp</item>
        <item name="android:padding">4dp</item>
    </style>

    <style name="TaskbarEdu.Button.Next" parent="@android:style/Widget.Material.Button">
        <item name="android:background">@drawable/button_taskbar_edu_colored</item>
        <item name="android:stateListAnimator">@null</item>
        <item name="android:textSize">16sp</item>
        <item name="android:padding">4dp</item>
    </style>
</resources>
 No newline at end of file
+25 −3
Original line number Diff line number Diff line
@@ -32,9 +32,8 @@ public class TaskbarEduController {
        mActivity.getDragLayer().post(() -> {
            mTaskbarEduView = (TaskbarEduView) mActivity.getLayoutInflater().inflate(
                    R.layout.taskbar_edu, mActivity.getDragLayer(), false);
            mTaskbarEduView.addOnCloseListener(() -> {
                mTaskbarEduView = null;
            });
            mTaskbarEduView.init(new TaskbarEduCallbacks());
            mTaskbarEduView.addOnCloseListener(() -> mTaskbarEduView = null);
            mTaskbarEduView.show();
        });
    }
@@ -44,4 +43,27 @@ public class TaskbarEduController {
            mTaskbarEduView.close(true /* animate */);
        }
    }


    /**
     * Callbacks for {@link TaskbarEduView} to interact with its controller.
     */
    class TaskbarEduCallbacks {
        void onPageChanged(int currentPage, int pageCount) {
            if (currentPage == 0) {
                mTaskbarEduView.updateStartButton(R.string.taskbar_edu_close,
                        v -> mTaskbarEduView.close(true /* animate */));
            } else {
                mTaskbarEduView.updateStartButton(R.string.taskbar_edu_previous,
                        v -> mTaskbarEduView.snapToPage(currentPage - 1));
            }
            if (currentPage == pageCount - 1) {
                mTaskbarEduView.updateEndButton(R.string.taskbar_edu_done,
                        v -> mTaskbarEduView.close(true /* animate */));
            } else {
                mTaskbarEduView.updateEndButton(R.string.taskbar_edu_next,
                        v -> mTaskbarEduView.snapToPage(currentPage + 1));
            }
        }
    }
}
+79 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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.taskbar;

import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
import static com.android.launcher3.AbstractFloatingView.TYPE_TASKBAR_EDUCATION_DIALOG;

import android.content.Context;
import android.util.AttributeSet;

import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.PagedView;
import com.android.launcher3.R;
import com.android.launcher3.pageindicators.PageIndicatorDots;
import com.android.launcher3.taskbar.TaskbarEduController.TaskbarEduCallbacks;
import com.android.launcher3.views.ActivityContext;

/** Horizontal carousel of tutorial screens for Taskbar Edu. */
public class TaskbarEduPagedView extends PagedView<PageIndicatorDots> {

    private TaskbarEduView mTaskbarEduView;
    private TaskbarEduCallbacks mControllerCallbacks;

    public TaskbarEduPagedView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
    }

    void setTaskbarEduView(TaskbarEduView taskbarEduView) {
        mTaskbarEduView = taskbarEduView;
        mPageIndicator = taskbarEduView.findViewById(R.id.content_page_indicator);
        initParentViews(taskbarEduView);
    }

    void setControllerCallbacks(TaskbarEduCallbacks controllerCallbacks) {
        mControllerCallbacks = controllerCallbacks;
        mControllerCallbacks.onPageChanged(getCurrentPage(), getPageCount());
    }

    @Override
    protected int getChildGap() {
        return mTaskbarEduView.getPaddingLeft() + mTaskbarEduView.getPaddingRight();
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mMaxScroll > 0) {
            mPageIndicator.setScroll(l, mMaxScroll);
        }
    }

    @Override
    protected void notifyPageSwitchListener(int prevPage) {
        super.notifyPageSwitchListener(prevPage);
        mControllerCallbacks.onPageChanged(getCurrentPage(), getPageCount());
    }

    @Override
    protected boolean canScroll(float absVScroll, float absHScroll) {
        return AbstractFloatingView.getTopOpenViewWithType(
                ActivityContext.lookupContext(getContext()),
                TYPE_ALL & ~TYPE_TASKBAR_EDUCATION_DIALOG) == null;
    }
}
Loading