Remove widget education tip dialog
This change removes the widget education tip dialog, and the arrow tip view. These are no longer needed now that taps are handled by showing an add button. Bug: 335318980 Test: `pm clear com.google.android.apps.nexuslauncher` and open widget picker Flag: ACONFIG com.android.launcher3.enable_widget_tap_to_add NEXTFOOD Change-Id: I9b24a41604880f5f94939c02b94f1a9f6a6c83d5
This commit is contained in:
@@ -70,7 +70,6 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch
|
||||
TYPE_ICON_SURFACE,
|
||||
TYPE_OPTIONS_POPUP_DIALOG,
|
||||
TYPE_PIN_WIDGET_FROM_EXTERNAL_POPUP,
|
||||
TYPE_WIDGETS_EDUCATION_DIALOG,
|
||||
TYPE_TASKBAR_EDUCATION_DIALOG,
|
||||
TYPE_TASKBAR_ALL_APPS,
|
||||
TYPE_ADD_TO_HOME_CONFIRMATION,
|
||||
@@ -98,7 +97,6 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch
|
||||
public static final int TYPE_OPTIONS_POPUP_DIALOG = 1 << 14;
|
||||
|
||||
public static final int TYPE_PIN_WIDGET_FROM_EXTERNAL_POPUP = 1 << 15;
|
||||
public static final int TYPE_WIDGETS_EDUCATION_DIALOG = 1 << 16;
|
||||
public static final int TYPE_TASKBAR_EDUCATION_DIALOG = 1 << 17;
|
||||
public static final int TYPE_TASKBAR_ALL_APPS = 1 << 18;
|
||||
public static final int TYPE_ADD_TO_HOME_CONFIRMATION = 1 << 19;
|
||||
@@ -111,16 +109,16 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch
|
||||
| TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE | TYPE_TASK_MENU
|
||||
| TYPE_OPTIONS_POPUP | TYPE_SNACKBAR | TYPE_LISTENER | TYPE_ALL_APPS_EDU
|
||||
| TYPE_ICON_SURFACE | TYPE_DRAG_DROP_POPUP | TYPE_PIN_WIDGET_FROM_EXTERNAL_POPUP
|
||||
| TYPE_WIDGETS_EDUCATION_DIALOG | TYPE_TASKBAR_EDUCATION_DIALOG | TYPE_TASKBAR_ALL_APPS
|
||||
| TYPE_OPTIONS_POPUP_DIALOG | TYPE_ADD_TO_HOME_CONFIRMATION
|
||||
| TYPE_TASKBAR_OVERLAY_PROXY | TYPE_TASKBAR_PINNING_POPUP | TYPE_PIN_IME_POPUP;
|
||||
| TYPE_TASKBAR_EDUCATION_DIALOG | TYPE_TASKBAR_ALL_APPS | TYPE_OPTIONS_POPUP_DIALOG
|
||||
| TYPE_ADD_TO_HOME_CONFIRMATION | TYPE_TASKBAR_OVERLAY_PROXY
|
||||
| TYPE_TASKBAR_PINNING_POPUP | TYPE_PIN_IME_POPUP;
|
||||
|
||||
// Type of popups which should be kept open during launcher rebind
|
||||
public static final int TYPE_REBIND_SAFE = TYPE_WIDGETS_FULL_SHEET
|
||||
| TYPE_WIDGETS_BOTTOM_SHEET | TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE
|
||||
| TYPE_ALL_APPS_EDU | TYPE_ICON_SURFACE | TYPE_WIDGETS_EDUCATION_DIALOG
|
||||
| TYPE_TASKBAR_EDUCATION_DIALOG | TYPE_TASKBAR_ALL_APPS | TYPE_OPTIONS_POPUP_DIALOG
|
||||
| TYPE_TASKBAR_OVERLAY_PROXY | TYPE_PIN_IME_POPUP;
|
||||
| TYPE_ALL_APPS_EDU | TYPE_ICON_SURFACE | TYPE_TASKBAR_EDUCATION_DIALOG
|
||||
| TYPE_TASKBAR_ALL_APPS | TYPE_OPTIONS_POPUP_DIALOG | TYPE_TASKBAR_OVERLAY_PROXY
|
||||
| TYPE_PIN_IME_POPUP;
|
||||
|
||||
/** Type of popups that should get exclusive accessibility focus. */
|
||||
public static final int TYPE_ACCESSIBLE = TYPE_ALL & ~TYPE_DISCOVERY_BOUNCE & ~TYPE_LISTENER
|
||||
|
||||
@@ -320,11 +320,6 @@ class LauncherPrefs(private val encryptedContext: Context) : SafeCloseable {
|
||||
@JvmField
|
||||
val RECONFIGURABLE_WIDGET_EDUCATION_TIP_SEEN =
|
||||
backedUpItem("launcher.reconfigurable_widget_education_tip_seen", false)
|
||||
@JvmField
|
||||
val WIDGETS_EDUCATION_DIALOG_SEEN =
|
||||
backedUpItem("launcher.widgets_education_dialog_seen", false)
|
||||
@JvmField
|
||||
val WIDGETS_EDUCATION_TIP_SEEN = backedUpItem("launcher.widgets_education_tip_seen", false)
|
||||
|
||||
@JvmStatic
|
||||
fun <T> backedUpItem(
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
/*
|
||||
* 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.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import com.android.launcher3.BaseActivity;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Insettable;
|
||||
import com.android.launcher3.R;
|
||||
|
||||
/**
|
||||
* Education view about widgets.
|
||||
*/
|
||||
public class WidgetsEduView extends AbstractSlideInView<BaseActivity> implements Insettable {
|
||||
|
||||
private static final int DEFAULT_CLOSE_DURATION = 200;
|
||||
|
||||
private Rect mInsets = new Rect();
|
||||
|
||||
public WidgetsEduView(Context context, AttributeSet attr) {
|
||||
this(context, attr, 0);
|
||||
}
|
||||
|
||||
public WidgetsEduView(Context context, AttributeSet attrs,
|
||||
int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleClose(boolean animate) {
|
||||
handleClose(true, DEFAULT_CLOSE_DURATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isOfType(int type) {
|
||||
return (type & TYPE_WIDGETS_EDUCATION_DIALOG) != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mContent = findViewById(R.id.edu_view);
|
||||
findViewById(R.id.edu_close_button)
|
||||
.setOnClickListener(v -> close(/* animate= */ true));
|
||||
setContentBackgroundWithParent(mContent.getBackground(), mContent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsets(Rect insets) {
|
||||
mInsets.set(insets);
|
||||
mContent.setPadding(mContent.getPaddingStart(),
|
||||
mContent.getPaddingTop(), mContent.getPaddingEnd(), insets.bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUserSwipeToDismissProgressChanged() {
|
||||
super.onUserSwipeToDismissProgressChanged();
|
||||
setTranslationY(getMeasuredHeight() * (mSwipeToDismissProgress.value / 2));
|
||||
}
|
||||
|
||||
private void show() {
|
||||
attachToContainer();
|
||||
animateOpen();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getScrimColor(Context context) {
|
||||
return context.getResources().getColor(R.color.widgets_picker_scrim);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
int width = r - l;
|
||||
int height = b - t;
|
||||
|
||||
// Lay out the content as center bottom aligned.
|
||||
int contentWidth = mContent.getMeasuredWidth();
|
||||
int contentLeft = (width - contentWidth - mInsets.left - mInsets.right) / 2 + mInsets.left;
|
||||
mContent.layout(contentLeft, height - mContent.getMeasuredHeight(),
|
||||
contentLeft + contentWidth, height);
|
||||
|
||||
setTranslationShift(mTranslationShift);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
DeviceProfile deviceProfile = mActivityContext.getDeviceProfile();
|
||||
int widthUsed;
|
||||
if (mInsets.bottom > 0) {
|
||||
// Extra space between this view and mContent horizontally when the sheet is shown in
|
||||
// portrait mode.
|
||||
widthUsed = mInsets.left + mInsets.right;
|
||||
} else {
|
||||
// Extra space between this view and mContent horizontally when the sheet is shown in
|
||||
// landscape mode.
|
||||
Rect padding = deviceProfile.workspacePadding;
|
||||
widthUsed = Math.max(padding.left + padding.right,
|
||||
2 * (mInsets.left + mInsets.right));
|
||||
}
|
||||
|
||||
int heightUsed = mInsets.top + deviceProfile.edgeMarginPx;
|
||||
measureChildWithMargins(mContent, widthMeasureSpec,
|
||||
widthUsed, heightMeasureSpec, heightUsed);
|
||||
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
|
||||
MeasureSpec.getSize(heightMeasureSpec));
|
||||
}
|
||||
|
||||
private void animateOpen() {
|
||||
if (mIsOpen || mOpenCloseAnimation.getAnimationPlayer().isRunning()) {
|
||||
return;
|
||||
}
|
||||
mIsOpen = true;
|
||||
setUpDefaultOpenAnimation().start();
|
||||
}
|
||||
|
||||
/** Shows widget education dialog. */
|
||||
public static WidgetsEduView showEducationDialog(BaseActivity activity) {
|
||||
LayoutInflater layoutInflater = LayoutInflater.from(activity);
|
||||
WidgetsEduView v = (WidgetsEduView) layoutInflater.inflate(
|
||||
R.layout.widgets_edu, activity.getDragLayer(), false);
|
||||
v.show();
|
||||
return v;
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ package com.android.launcher3.widget;
|
||||
|
||||
import static com.android.app.animation.Interpolators.EMPHASIZED;
|
||||
import static com.android.launcher3.Flags.enableWidgetTapToAdd;
|
||||
import static com.android.launcher3.LauncherPrefs.WIDGETS_EDUCATION_TIP_SEEN;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_ADD_BUTTON_TAP;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -35,17 +34,14 @@ import android.view.animation.Interpolator;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.Px;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import com.android.launcher3.BaseActivity;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.Insettable;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherPrefs;
|
||||
import com.android.launcher3.PendingAddItemInfo;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.popup.PopupDataProvider;
|
||||
import com.android.launcher3.testing.TestLogging;
|
||||
import com.android.launcher3.testing.shared.TestProtocol;
|
||||
@@ -53,7 +49,6 @@ import com.android.launcher3.util.SystemUiController;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.util.window.WindowManagerProxy;
|
||||
import com.android.launcher3.views.AbstractSlideInView;
|
||||
import com.android.launcher3.views.ArrowTipView;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@@ -366,31 +361,6 @@ public abstract class BaseWidgetSheet extends AbstractSlideInView<BaseActivity>
|
||||
return mActivityContext.getSystemUiController();
|
||||
}
|
||||
|
||||
/** Shows education tip on top center of {@code view} if view is laid out. */
|
||||
@Nullable
|
||||
protected ArrowTipView showEducationTipOnViewIfPossible(@Nullable View view) {
|
||||
if (view == null || !ViewCompat.isLaidOut(view)) {
|
||||
return null;
|
||||
}
|
||||
int[] coords = new int[2];
|
||||
view.getLocationOnScreen(coords);
|
||||
ArrowTipView arrowTipView =
|
||||
new ArrowTipView(mActivityContext, /* isPointingUp= */ false).showAtLocation(
|
||||
getContext().getString(R.string.long_press_widget_to_add),
|
||||
/* arrowXCoord= */coords[0] + view.getWidth() / 2,
|
||||
/* yCoord= */coords[1]);
|
||||
if (arrowTipView != null) {
|
||||
LauncherPrefs.get(getContext()).put(WIDGETS_EDUCATION_TIP_SEEN, true);
|
||||
}
|
||||
return arrowTipView;
|
||||
}
|
||||
|
||||
/** Returns {@code true} if tip has previously been shown on any of {@link BaseWidgetSheet}. */
|
||||
protected boolean hasSeenEducationTip() {
|
||||
return LauncherPrefs.get(getContext()).get(WIDGETS_EDUCATION_TIP_SEEN)
|
||||
|| Utilities.isRunningInTestHarness();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setTranslationShift(float translationShift) {
|
||||
super.setTranslationShift(translationShift);
|
||||
|
||||
@@ -50,40 +50,10 @@ import java.util.List;
|
||||
*/
|
||||
public class WidgetsBottomSheet extends BaseWidgetSheet {
|
||||
private static final int DEFAULT_CLOSE_DURATION = 200;
|
||||
private static final long EDUCATION_TIP_DELAY_MS = 300;
|
||||
|
||||
private ItemInfo mOriginalItemInfo;
|
||||
@Px private int mMaxHorizontalSpan;
|
||||
|
||||
private final OnLayoutChangeListener mLayoutChangeListenerToShowTips =
|
||||
new OnLayoutChangeListener() {
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
||||
int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
if (hasSeenEducationTip()) {
|
||||
removeOnLayoutChangeListener(this);
|
||||
return;
|
||||
}
|
||||
// Widgets are loaded asynchronously, We are adding a delay because we only want
|
||||
// to show the tip when the widget preview has finished loading and rendering in
|
||||
// this view.
|
||||
removeCallbacks(mShowEducationTipTask);
|
||||
postDelayed(mShowEducationTipTask, EDUCATION_TIP_DELAY_MS);
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable mShowEducationTipTask = () -> {
|
||||
if (hasSeenEducationTip()) {
|
||||
removeOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
return;
|
||||
}
|
||||
View viewForTip = ((ViewGroup) ((TableLayout) findViewById(R.id.widgets_table))
|
||||
.getChildAt(0)).getChildAt(0);
|
||||
if (showEducationTipOnViewIfPossible(viewForTip) != null) {
|
||||
removeOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
}
|
||||
};
|
||||
|
||||
public WidgetsBottomSheet(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
@@ -91,9 +61,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet {
|
||||
public WidgetsBottomSheet(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
setWillNotDraw(false);
|
||||
if (!hasSeenEducationTip()) {
|
||||
addOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.android.launcher3.widget.picker;
|
||||
|
||||
import static com.android.launcher3.Flags.enableCategorizedWidgetSuggestions;
|
||||
import static com.android.launcher3.Flags.enableUnfoldedTwoPanePicker;
|
||||
import static com.android.launcher3.LauncherPrefs.WIDGETS_EDUCATION_DIALOG_SEEN;
|
||||
import static com.android.launcher3.allapps.ActivityAllAppsContainerView.AdapterHolder.SEARCH;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGETSTRAY_SEARCHED;
|
||||
import static com.android.launcher3.testing.shared.TestProtocol.NORMAL_STATE_ORDINAL;
|
||||
@@ -57,19 +56,15 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.android.launcher3.BaseActivity;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherPrefs;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||
import com.android.launcher3.model.UserManagerState;
|
||||
import com.android.launcher3.model.WidgetItem;
|
||||
import com.android.launcher3.pm.UserCache;
|
||||
import com.android.launcher3.views.ArrowTipView;
|
||||
import com.android.launcher3.views.RecyclerViewFastScroller;
|
||||
import com.android.launcher3.views.SpringRelativeLayout;
|
||||
import com.android.launcher3.views.StickyHeaderLayout;
|
||||
import com.android.launcher3.views.WidgetsEduView;
|
||||
import com.android.launcher3.widget.BaseWidgetSheet;
|
||||
import com.android.launcher3.widget.WidgetCell;
|
||||
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
|
||||
@@ -93,8 +88,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener {
|
||||
|
||||
private static final long FADE_IN_DURATION = 150;
|
||||
private static final long EDUCATION_TIP_DELAY_MS = 200;
|
||||
private static final long EDUCATION_DIALOG_DELAY_MS = 500;
|
||||
|
||||
// The widget recommendation table can easily take over the entire screen on devices with small
|
||||
// resolution or landscape on phone. This ratio defines the max percentage of content area that
|
||||
@@ -117,36 +110,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
new HashMap<>();
|
||||
protected int mRecommendationsCurrentPage = 0;
|
||||
protected final SparseArray<AdapterHolder> mAdapters = new SparseArray();
|
||||
@Nullable
|
||||
private ArrowTipView mLatestEducationalTip;
|
||||
private final OnLayoutChangeListener mLayoutChangeListenerToShowTips =
|
||||
new OnLayoutChangeListener() {
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
||||
int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
if (hasSeenEducationTip()) {
|
||||
removeOnLayoutChangeListener(this);
|
||||
return;
|
||||
}
|
||||
|
||||
// Widgets are loaded asynchronously, We are adding a delay because we only want
|
||||
// to show the tip when the widget preview has finished loading and rendering in
|
||||
// this view.
|
||||
removeCallbacks(mShowEducationTipTask);
|
||||
postDelayed(mShowEducationTipTask, EDUCATION_TIP_DELAY_MS);
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable mShowEducationTipTask = () -> {
|
||||
if (hasSeenEducationTip()) {
|
||||
removeOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
return;
|
||||
}
|
||||
mLatestEducationalTip = showEducationTipOnViewIfPossible(getViewToShowEducationTip());
|
||||
if (mLatestEducationalTip != null) {
|
||||
removeOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
}
|
||||
};
|
||||
|
||||
private final OnAttachStateChangeListener mBindScrollbarInSearchMode =
|
||||
new OnAttachStateChangeListener() {
|
||||
@@ -251,7 +214,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
mHeaderTitle = mSearchScrollView.findViewById(R.id.title);
|
||||
|
||||
onWidgetsBound();
|
||||
setUpEducationViewsIfNeeded();
|
||||
}
|
||||
|
||||
protected void setupViews() {
|
||||
@@ -816,10 +778,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
@Override
|
||||
protected void onCloseComplete() {
|
||||
super.onCloseComplete();
|
||||
removeCallbacks(mShowEducationTipTask);
|
||||
if (mLatestEducationalTip != null) {
|
||||
mLatestEducationalTip.close(true);
|
||||
}
|
||||
AccessibilityManagerCompat.sendStateEventToTest(getContext(), NORMAL_STATE_ORDINAL);
|
||||
}
|
||||
|
||||
@@ -959,36 +917,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Shows education dialog for widgets. */
|
||||
private WidgetsEduView showEducationDialog() {
|
||||
LauncherPrefs.get(getContext()).put(WIDGETS_EDUCATION_DIALOG_SEEN, true);
|
||||
return WidgetsEduView.showEducationDialog(mActivityContext);
|
||||
}
|
||||
|
||||
/** Returns {@code true} if education dialog has previously been shown. */
|
||||
protected boolean hasSeenEducationDialog() {
|
||||
return LauncherPrefs.get(getContext()).get(WIDGETS_EDUCATION_DIALOG_SEEN)
|
||||
|| Utilities.isRunningInTestHarness();
|
||||
}
|
||||
|
||||
protected void setUpEducationViewsIfNeeded() {
|
||||
if (!hasSeenEducationDialog()) {
|
||||
postDelayed(() -> {
|
||||
WidgetsEduView eduDialog = showEducationDialog();
|
||||
eduDialog.addOnCloseListener(() -> {
|
||||
if (!hasSeenEducationTip()) {
|
||||
addOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
// Call #requestLayout() to trigger layout change listener in order to show
|
||||
// arrow tip immediately if there is a widget to show it on.
|
||||
requestLayout();
|
||||
}
|
||||
});
|
||||
}, EDUCATION_DIALOG_DELAY_MS);
|
||||
} else if (!hasSeenEducationTip()) {
|
||||
addOnLayoutChangeListener(mLayoutChangeListenerToShowTips);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isTwoPane() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -129,7 +129,6 @@ public class WidgetsTwoPaneSheet extends WidgetsFullSheet {
|
||||
mPrimaryWidgetListView.setClipToOutline(true);
|
||||
|
||||
onWidgetsBound();
|
||||
setUpEducationViewsIfNeeded();
|
||||
|
||||
// Set the fast scroller as not visible for two pane layout.
|
||||
mFastScroller.setVisibility(GONE);
|
||||
|
||||
Reference in New Issue
Block a user