diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2018-01-22 14:37:09 -0800 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2018-01-23 14:31:26 -0800 |
commit | cfb630f8de1df7465c83487fa1437f70930414f6 (patch) | |
tree | 056a6151a1851334addf8670ea0fe86b6d4042f2 | |
parent | aa6b1117b278a8da629cb13ab27e0fe4e539c4f7 (diff) | |
download | android_packages_apps_Trebuchet-cfb630f8de1df7465c83487fa1437f70930414f6.tar.gz android_packages_apps_Trebuchet-cfb630f8de1df7465c83487fa1437f70930414f6.tar.bz2 android_packages_apps_Trebuchet-cfb630f8de1df7465c83487fa1437f70930414f6.zip |
Using a single launcher layout for all configurations
Bug: 71709920
Change-Id: Ib23112bc1636007cb41e1919a855bbf5298884b6
-rw-r--r-- | res/layout-land/launcher.xml | 80 | ||||
-rw-r--r-- | res/layout-sw720dp/launcher.xml | 77 | ||||
-rw-r--r-- | res/layout/launcher.xml (renamed from res/layout-port/launcher.xml) | 39 | ||||
-rw-r--r-- | res/layout/page_indicator.xml | 21 | ||||
-rw-r--r-- | src/com/android/launcher3/pageindicators/PageIndicatorLandscape.java | 86 | ||||
-rw-r--r-- | src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java (renamed from src/com/android/launcher3/pageindicators/PageIndicatorLine.java) | 105 |
6 files changed, 100 insertions, 308 deletions
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml deleted file mode 100644 index bcaba816e..000000000 --- a/res/layout-land/launcher.xml +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 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. ---> - -<!-- Full screen view projects under the status bar and contains the background --> -<com.android.launcher3.LauncherRootView - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:id="@+id/launcher" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/workspaceStatusBarScrim" - android:fitsSystemWindows="true"> - - <com.android.launcher3.dragndrop.DragLayer - android:id="@+id/drag_layer" - android:clipChildren="false" - android:clipToPadding="false" - android:importantForAccessibility="no" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <!-- The workspace contains 5 screens of cells --> - <!-- DO NOT CHANGE THE ID --> - <com.android.launcher3.Workspace - android:theme="@style/HomeScreenElementTheme" - android:id="@+id/workspace" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - launcher:pageIndicator="@id/page_indicator" /> - - <com.android.launcher3.pageindicators.PageIndicatorLandscape - android:id="@+id/page_indicator" - android:theme="@style/HomeScreenElementTheme" - android:layout_width="@dimen/dynamic_grid_min_page_indicator_size" - android:layout_height="@dimen/dynamic_grid_min_page_indicator_size" - android:layout_gravity="bottom|left" - android:background="@drawable/all_apps_handle_landscape" /> - - <include layout="@layout/overview_panel" - android:id="@+id/overview_panel" - android:visibility="gone" /> - - <com.android.launcher3.views.AllAppsScrim - android:layout_width="match_parent" - android:layout_height="match_parent" - android:id="@+id/all_apps_scrim" /> - - <!-- DO NOT CHANGE THE ID --> - <include layout="@layout/hotseat" - android:id="@+id/hotseat" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - - <include - android:id="@+id/drop_target_bar" - layout="@layout/drop_target_bar" /> - - <include layout="@layout/all_apps" - android:id="@+id/apps_view" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="invisible" /> - - </com.android.launcher3.dragndrop.DragLayer> - -</com.android.launcher3.LauncherRootView> diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml deleted file mode 100644 index fa1a100f7..000000000 --- a/res/layout-sw720dp/launcher.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 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. ---> - -<!-- Full screen view projects under the status bar and contains the background --> -<com.android.launcher3.LauncherRootView - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:id="@+id/launcher" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/workspaceStatusBarScrim" - android:fitsSystemWindows="true"> - - <com.android.launcher3.dragndrop.DragLayer - android:id="@+id/drag_layer" - android:clipChildren="false" - android:clipToPadding="false" - android:importantForAccessibility="no" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <!-- The workspace contains 5 screens of cells --> - <!-- DO NOT CHANGE THE ID --> - <com.android.launcher3.Workspace - android:theme="@style/HomeScreenElementTheme" - android:layout_gravity="center" - android:id="@+id/workspace" - android:layout_width="match_parent" - android:layout_height="match_parent" - launcher:pageIndicator="@id/page_indicator"> - </com.android.launcher3.Workspace> - - <include layout="@layout/overview_panel" - android:id="@+id/overview_panel" - android:visibility="gone" /> - - <com.android.launcher3.views.AllAppsScrim - android:layout_width="match_parent" - android:layout_height="match_parent" - android:id="@+id/all_apps_scrim" /> - - <!-- DO NOT CHANGE THE ID --> - <include layout="@layout/hotseat" - android:id="@+id/hotseat" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - - <include - android:id="@+id/drop_target_bar" - layout="@layout/drop_target_bar" /> - - <!-- Keep these behind the workspace so that they are not visible when - we go into AllApps --> - <include layout="@layout/page_indicator" - android:id="@+id/page_indicator" /> - - <include layout="@layout/all_apps" - android:id="@+id/apps_view" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="invisible" /> - </com.android.launcher3.dragndrop.DragLayer> - -</com.android.launcher3.LauncherRootView> diff --git a/res/layout-port/launcher.xml b/res/layout/launcher.xml index eb9c34c52..314359b8b 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout/launcher.xml @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project +<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2007 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. @@ -13,12 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<!-- Full screen view projects under the status bar and contains the background --> <com.android.launcher3.LauncherRootView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:id="@+id/launcher" android:layout_width="match_parent" android:layout_height="match_parent" @@ -27,49 +23,54 @@ <com.android.launcher3.dragndrop.DragLayer android:id="@+id/drag_layer" + android:layout_width="match_parent" + android:layout_height="match_parent" android:clipChildren="false" - android:importantForAccessibility="no" android:clipToPadding="false" - android:layout_width="match_parent" - android:layout_height="match_parent"> + android:importantForAccessibility="no"> <!-- The workspace contains 5 screens of cells --> <!-- DO NOT CHANGE THE ID --> <com.android.launcher3.Workspace - android:theme="@style/HomeScreenElementTheme" android:id="@+id/workspace" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" - launcher:pageIndicator="@+id/page_indicator"> - </com.android.launcher3.Workspace> + android:theme="@style/HomeScreenElementTheme" + launcher:pageIndicator="@+id/page_indicator" /> - <include layout="@layout/overview_panel" + <include android:id="@+id/overview_panel" + layout="@layout/overview_panel" android:visibility="gone" /> <com.android.launcher3.views.AllAppsScrim + android:id="@+id/all_apps_scrim" android:layout_width="match_parent" - android:layout_height="match_parent" - android:id="@+id/all_apps_scrim" /> + android:layout_height="match_parent" /> <!-- DO NOT CHANGE THE ID --> - <include layout="@layout/hotseat" + <include android:id="@+id/hotseat" + layout="@layout/hotseat" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- Keep these behind the workspace so that they are not visible when - we go into AllApps --> - <include layout="@layout/page_indicator" - android:id="@+id/page_indicator" /> + we go into AllApps --> + <com.android.launcher3.pageindicators.WorkspacePageIndicator + android:id="@+id/page_indicator" + android:layout_width="match_parent" + android:layout_height="@dimen/dynamic_grid_min_page_indicator_size" + android:theme="@style/HomeScreenElementTheme" /> <include android:id="@+id/drop_target_bar" layout="@layout/drop_target_bar" /> - <include layout="@layout/all_apps" + <include android:id="@+id/apps_view" + layout="@layout/all_apps" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" /> diff --git a/res/layout/page_indicator.xml b/res/layout/page_indicator.xml deleted file mode 100644 index 7de0cded5..000000000 --- a/res/layout/page_indicator.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- 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. ---> - -<com.android.launcher3.pageindicators.PageIndicatorLine - xmlns:android="http://schemas.android.com/apk/res/android" - android:theme="@style/HomeScreenElementTheme" - android:layout_width="match_parent" - android:layout_height="@dimen/dynamic_grid_min_page_indicator_size" /> diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorLandscape.java b/src/com/android/launcher3/pageindicators/PageIndicatorLandscape.java deleted file mode 100644 index d76998a43..000000000 --- a/src/com/android/launcher3/pageindicators/PageIndicatorLandscape.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.launcher3.pageindicators; - -import static com.android.launcher3.LauncherState.ALL_APPS; - -import android.content.Context; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup.MarginLayoutParams; -import android.widget.FrameLayout; - -import com.android.launcher3.DeviceProfile; -import com.android.launcher3.Insettable; -import com.android.launcher3.Launcher; -import com.android.launcher3.userevent.nano.LauncherLogProto.Action; -import com.android.launcher3.userevent.nano.LauncherLogProto.ControlType; - -/** - * Simply draws the caret drawable bottom-right aligned in the view. This ensures that we can have - * a view with as large an area as we want (for touching) while maintaining a caret of size - * all_apps_caret_size. Used only for the landscape layout. - */ -public class PageIndicatorLandscape extends PageIndicator implements OnClickListener, Insettable { - // all apps pull up handle drawable. - - private final Launcher mLauncher; - - public PageIndicatorLandscape(Context context) { - this(context, null); - } - - public PageIndicatorLandscape(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public PageIndicatorLandscape(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - setOnClickListener(this); - mLauncher = Launcher.getLauncher(context); - setOnFocusChangeListener(mLauncher.mFocusHandler); - } - - @Override - public void onClick(View view) { - Launcher l = Launcher.getLauncher(getContext()); - if (!l.isInState(ALL_APPS)) { - l.getUserEventDispatcher().logActionOnControl( - Action.Touch.TAP, ControlType.ALL_APPS_BUTTON); - l.getStateManager().goToState(ALL_APPS); - } - } - - @Override - public void setInsets(Rect insets) { - FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); - DeviceProfile grid = mLauncher.getDeviceProfile(); - if (insets.left > insets.right) { - lp.leftMargin = grid.hotseatBarSidePaddingPx; - lp.rightMargin = insets.right; - lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; - } else { - lp.leftMargin = insets.left; - lp.rightMargin = grid.hotseatBarSidePaddingPx; - lp.gravity = Gravity.LEFT | Gravity.BOTTOM; - } - lp.bottomMargin = grid.workspacePadding.bottom; - setLayoutParams(lp); - } -} diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorLine.java b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java index 8c9642ccd..f3b0d6126 100644 --- a/src/com/android/launcher3/pageindicators/PageIndicatorLine.java +++ b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java @@ -1,5 +1,9 @@ package com.android.launcher3.pageindicators; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + +import static com.android.launcher3.LauncherState.ALL_APPS; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -15,6 +19,8 @@ import android.os.Looper; import android.util.AttributeSet; import android.util.Property; import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewConfiguration; import android.widget.FrameLayout; @@ -24,13 +30,17 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.userevent.nano.LauncherLogProto.Action; +import com.android.launcher3.userevent.nano.LauncherLogProto.ControlType; /** - * A PageIndicator that briefly shows a fraction of a line when moving between pages. + * A PageIndicator that briefly shows a fraction of a line when moving between pages in + * portrait mode. In Landscape simply draws the caret drawable bottom-corner aligned in + * the drag-layer. * * The fraction is 1 / number of pages and the position is based on the progress of the page scroll. */ -public class PageIndicatorLine extends PageIndicator implements Insettable { +public class WorkspacePageIndicator extends PageIndicator implements Insettable, OnClickListener { private static final int LINE_ANIMATE_DURATION = ViewConfiguration.getScrollBarFadeDuration(); private static final int LINE_FADE_DELAY = ViewConfiguration.getScrollDefaultDelay(); @@ -59,59 +69,61 @@ public class PageIndicatorLine extends PageIndicator implements Insettable { private Paint mLinePaint; private final int mLineHeight; - private static final Property<PageIndicatorLine, Integer> PAINT_ALPHA - = new Property<PageIndicatorLine, Integer>(Integer.class, "paint_alpha") { + private boolean mIsLandscapeUi; + + private static final Property<WorkspacePageIndicator, Integer> PAINT_ALPHA + = new Property<WorkspacePageIndicator, Integer>(Integer.class, "paint_alpha") { @Override - public Integer get(PageIndicatorLine obj) { + public Integer get(WorkspacePageIndicator obj) { return obj.mLinePaint.getAlpha(); } @Override - public void set(PageIndicatorLine obj, Integer alpha) { + public void set(WorkspacePageIndicator obj, Integer alpha) { obj.mLinePaint.setAlpha(alpha); - obj.invalidate(); + obj.invalidateIfPortrait(); } }; - private static final Property<PageIndicatorLine, Float> NUM_PAGES - = new Property<PageIndicatorLine, Float>(Float.class, "num_pages") { + private static final Property<WorkspacePageIndicator, Float> NUM_PAGES + = new Property<WorkspacePageIndicator, Float>(Float.class, "num_pages") { @Override - public Float get(PageIndicatorLine obj) { + public Float get(WorkspacePageIndicator obj) { return obj.mNumPagesFloat; } @Override - public void set(PageIndicatorLine obj, Float numPages) { + public void set(WorkspacePageIndicator obj, Float numPages) { obj.mNumPagesFloat = numPages; - obj.invalidate(); + obj.invalidateIfPortrait(); } }; - private static final Property<PageIndicatorLine, Integer> TOTAL_SCROLL - = new Property<PageIndicatorLine, Integer>(Integer.class, "total_scroll") { + private static final Property<WorkspacePageIndicator, Integer> TOTAL_SCROLL + = new Property<WorkspacePageIndicator, Integer>(Integer.class, "total_scroll") { @Override - public Integer get(PageIndicatorLine obj) { + public Integer get(WorkspacePageIndicator obj) { return obj.mTotalScroll; } @Override - public void set(PageIndicatorLine obj, Integer totalScroll) { + public void set(WorkspacePageIndicator obj, Integer totalScroll) { obj.mTotalScroll = totalScroll; - obj.invalidate(); + obj.invalidateIfPortrait(); } }; private Runnable mHideLineRunnable = () -> animateLineToAlpha(0); - public PageIndicatorLine(Context context) { + public WorkspacePageIndicator(Context context) { this(context, null); } - public PageIndicatorLine(Context context, AttributeSet attrs) { + public WorkspacePageIndicator(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public PageIndicatorLine(Context context, AttributeSet attrs, int defStyle) { + public WorkspacePageIndicator(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); Resources res = context.getResources(); @@ -128,7 +140,7 @@ public class PageIndicatorLine extends PageIndicator implements Insettable { @Override protected void onDraw(Canvas canvas) { - if (mTotalScroll == 0 || mNumPagesFloat == 0) { + if (mTotalScroll == 0 || mNumPagesFloat == 0 || mIsLandscapeUi) { return; } @@ -155,7 +167,7 @@ public class PageIndicatorLine extends PageIndicator implements Insettable { } else if (mTotalScroll != totalScroll) { animateToTotalScroll(totalScroll); } else { - invalidate(); + invalidateIfPortrait(); } if (mShouldAutoHide) { @@ -233,10 +245,53 @@ public class PageIndicatorLine extends PageIndicator implements Insettable { @Override public void setInsets(Rect insets) { DeviceProfile grid = mLauncher.getDeviceProfile(); + mIsLandscapeUi = grid.isVerticalBarLayout(); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); - lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - lp.height = grid.pageIndicatorSizePx; - lp.bottomMargin = grid.hotseatBarSizePx + insets.bottom; + + if (mIsLandscapeUi) { + if (insets.left > insets.right) { + lp.leftMargin = grid.hotseatBarSidePaddingPx; + lp.rightMargin = insets.right; + lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; + } else { + lp.leftMargin = insets.left; + lp.rightMargin = grid.hotseatBarSidePaddingPx; + lp.gravity = Gravity.LEFT | Gravity.BOTTOM; + } + lp.bottomMargin = grid.workspacePadding.bottom; + lp.width = lp.height = getResources() + .getDimensionPixelSize(R.dimen.dynamic_grid_min_page_indicator_size); + + setBackgroundResource(R.drawable.all_apps_handle_landscape); + setOnFocusChangeListener(mLauncher.mFocusHandler); + setOnClickListener(this); + + } else { + lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + lp.height = grid.pageIndicatorSizePx; + lp.bottomMargin = grid.hotseatBarSizePx + insets.bottom; + lp.width = MATCH_PARENT; + + setBackgroundResource(0); + setOnFocusChangeListener(null); + setOnClickListener(null); + } + setLayoutParams(lp); } + + private void invalidateIfPortrait() { + if (!mIsLandscapeUi) { + invalidate(); + } + } + + @Override + public void onClick(View view) { + if (!mLauncher.isInState(ALL_APPS)) { + mLauncher.getUserEventDispatcher().logActionOnControl( + Action.Touch.TAP, ControlType.ALL_APPS_BUTTON); + mLauncher.getStateManager().goToState(ALL_APPS); + } + } } |