Merge "[QS] Add header tooltip for long press"
This commit is contained in:
33
packages/SystemUI/res/layout/quick_settings_header.xml
Normal file
33
packages/SystemUI/res/layout/quick_settings_header.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ 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
|
||||
-->
|
||||
<com.android.systemui.qs.QSTooltipView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/qs_header_tooltip_height"
|
||||
android:alpha="0"
|
||||
android:gravity="center_horizontal|bottom"
|
||||
android:visibility="invisible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/quick_settings_header_onboarding_text"
|
||||
android:textAppearance="@style/TextAppearance.QS.TileLabel"
|
||||
android:textColor="?android:attr/colorAccent" />
|
||||
|
||||
</com.android.systemui.qs.QSTooltipView>
|
||||
@@ -40,7 +40,7 @@
|
||||
<dimen name="battery_detail_graph_space_top">27dp</dimen>
|
||||
<dimen name="battery_detail_graph_space_bottom">27dp</dimen>
|
||||
|
||||
<dimen name="qs_tile_margin_top">16dp</dimen>
|
||||
<dimen name="qs_tile_margin_top">32dp</dimen>
|
||||
<dimen name="qs_brightness_padding_top">6dp</dimen>
|
||||
<dimen name="qs_detail_margin_top">28dp</dimen>
|
||||
</resources>
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
|
||||
<dimen name="qs_tile_height">106dp</dimen>
|
||||
<dimen name="qs_tile_margin">19dp</dimen>
|
||||
<dimen name="qs_tile_margin_top">16dp</dimen>
|
||||
<dimen name="qs_tile_margin_top">32dp</dimen>
|
||||
<dimen name="qs_quick_tile_size">48dp</dimen>
|
||||
<dimen name="qs_quick_tile_padding">12dp</dimen>
|
||||
<dimen name="qs_header_gear_translation">16dp</dimen>
|
||||
@@ -309,6 +309,7 @@
|
||||
<dimen name="qs_tile_padding_bottom">16dp</dimen>
|
||||
<dimen name="qs_tile_spacing">4dp</dimen>
|
||||
<dimen name="qs_panel_padding_bottom">0dp</dimen>
|
||||
<dimen name="qs_panel_padding_top">32dp</dimen>
|
||||
<dimen name="qs_detail_header_height">56dp</dimen>
|
||||
<dimen name="qs_detail_header_padding">0dp</dimen>
|
||||
<dimen name="qs_detail_image_width">56dp</dimen>
|
||||
@@ -333,6 +334,9 @@
|
||||
<dimen name="qs_detail_item_icon_width">32dp</dimen>
|
||||
<dimen name="qs_detail_item_icon_marginStart">0dp</dimen>
|
||||
<dimen name="qs_detail_item_icon_marginEnd">20dp</dimen>
|
||||
<dimen name="qs_header_padding_start">16dp</dimen>
|
||||
<dimen name="qs_header_padding_end">24dp</dimen>
|
||||
<dimen name="qs_header_tooltip_height">32dp</dimen>
|
||||
<dimen name="qs_footer_padding_start">16dp</dimen>
|
||||
<dimen name="qs_footer_padding_end">24dp</dimen>
|
||||
<dimen name="qs_footer_icon_size">16dp</dimen>
|
||||
|
||||
@@ -666,6 +666,8 @@
|
||||
<!-- Textual description of Ethernet connections -->
|
||||
<string name="ethernet_label">Ethernet</string>
|
||||
|
||||
<!-- QuickSettings: Onboarding text that introduces users to long press on an option in order to view the option's menu in Settings [CHAR LIMIT=NONE] -->
|
||||
<string name="quick_settings_header_onboarding_text">Press & hold on the icons for more options</string>
|
||||
<!-- QuickSettings: Do not disturb [CHAR LIMIT=NONE] -->
|
||||
<string name="quick_settings_dnd_label">Do not disturb</string>
|
||||
<!-- QuickSettings: Do not disturb - Priority only [CHAR LIMIT=NONE] -->
|
||||
|
||||
@@ -47,6 +47,7 @@ public final class Prefs {
|
||||
Key.QS_INVERT_COLORS_ADDED,
|
||||
Key.QS_WORK_ADDED,
|
||||
Key.QS_NIGHTDISPLAY_ADDED,
|
||||
Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT,
|
||||
Key.SEEN_MULTI_USER,
|
||||
Key.NUM_APPS_LAUNCHED,
|
||||
Key.HAS_SEEN_RECENTS_ONBOARDING,
|
||||
@@ -76,6 +77,11 @@ public final class Prefs {
|
||||
String QS_WORK_ADDED = "QsWorkAdded";
|
||||
@Deprecated
|
||||
String QS_NIGHTDISPLAY_ADDED = "QsNightDisplayAdded";
|
||||
/**
|
||||
* Used for tracking how many times the user has seen the long press tooltip in the Quick
|
||||
* Settings panel.
|
||||
*/
|
||||
String QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT = "QsLongPressTooltipShownCount";
|
||||
String SEEN_MULTI_USER = "HasSeenMultiUser";
|
||||
String NUM_APPS_LAUNCHED = "NumAppsLaunched";
|
||||
String HAS_SEEN_RECENTS_ONBOARDING = "HasSeenRecentsOnboarding";
|
||||
|
||||
@@ -44,6 +44,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
|
||||
public static final float EXPANDED_TILE_DELAY = .86f;
|
||||
|
||||
|
||||
private final ArrayList<View> mAllViews = new ArrayList<>();
|
||||
/**
|
||||
* List of {@link View}s representing Quick Settings that are being animated from the quick QS
|
||||
@@ -65,6 +66,11 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
private TouchAnimator mNonfirstPageDelayedAnimator;
|
||||
private TouchAnimator mBrightnessAnimator;
|
||||
|
||||
/**
|
||||
* Whether the animation is stable and not in the middle of animating between the collapsed and
|
||||
* expanded states.
|
||||
*/
|
||||
private boolean mIsInStableState;
|
||||
private boolean mOnKeyguard;
|
||||
|
||||
private boolean mAllowFancy;
|
||||
@@ -89,6 +95,10 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
Log.w(TAG, "QS Not using page layout");
|
||||
}
|
||||
panel.setPageListener(this);
|
||||
|
||||
// At time of creation, the QS panel is always considered stable as it's not in the middle
|
||||
// of collapse/expanded.
|
||||
mIsInStableState = true;
|
||||
}
|
||||
|
||||
public void onRtlChanged() {
|
||||
@@ -243,6 +253,11 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
} else {
|
||||
mBrightnessAnimator = null;
|
||||
}
|
||||
View headerView = mQsPanel.getHeaderView();
|
||||
if (headerView!= null) {
|
||||
firstPageBuilder.addFloat(headerView, "translationY", heightDiff, 0);
|
||||
mAllViews.add(headerView);
|
||||
}
|
||||
mFirstPageAnimator = firstPageBuilder
|
||||
.setListener(this)
|
||||
.build();
|
||||
@@ -326,11 +341,21 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
|
||||
@Override
|
||||
public void onAnimationAtStart() {
|
||||
if (!mIsInStableState) {
|
||||
mQsPanel.onCollapse();
|
||||
}
|
||||
mIsInStableState = true;
|
||||
|
||||
mQuickQsPanel.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationAtEnd() {
|
||||
if (!mIsInStableState) {
|
||||
mQsPanel.onExpanded();
|
||||
}
|
||||
mIsInStableState = true;
|
||||
|
||||
mQuickQsPanel.setVisibility(View.INVISIBLE);
|
||||
final int N = mQuickQsViews.size();
|
||||
for (int i = 0; i < N; i++) {
|
||||
@@ -340,6 +365,11 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
|
||||
|
||||
@Override
|
||||
public void onAnimationStarted() {
|
||||
if (mIsInStableState) {
|
||||
mQsPanel.onAnimating();
|
||||
}
|
||||
mIsInStableState = false;
|
||||
|
||||
mQuickQsPanel.setVisibility(mOnKeyguard ? View.INVISIBLE : View.VISIBLE);
|
||||
if (mOnFirstPage) {
|
||||
final int N = mQuickQsViews.size();
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.qs;
|
||||
|
||||
import static com.android.systemui.qs.tileimpl.QSTileImpl.getColorForState;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
@@ -58,6 +59,7 @@ import java.util.Collection;
|
||||
public class QSPanel extends LinearLayout implements Tunable, Callback, BrightnessMirrorListener {
|
||||
|
||||
public static final String QS_SHOW_BRIGHTNESS = "qs_show_brightness";
|
||||
public static final String QS_SHOW_LONG_PRESS_TOOLTIP = "qs_show_long_press";
|
||||
|
||||
protected final Context mContext;
|
||||
protected final ArrayList<TileRecord> mRecords = new ArrayList<TileRecord>();
|
||||
@@ -72,6 +74,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
private BrightnessController mBrightnessController;
|
||||
protected QSTileHost mHost;
|
||||
|
||||
protected QSTooltipView mTooltipView;
|
||||
protected QSSecurityFooter mFooter;
|
||||
private boolean mGridContentVisible = true;
|
||||
|
||||
@@ -94,6 +97,9 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
|
||||
setOrientation(VERTICAL);
|
||||
|
||||
mTooltipView = (QSTooltipView) LayoutInflater.from(mContext)
|
||||
.inflate(R.layout.quick_settings_header, this, false);
|
||||
|
||||
mBrightnessView = LayoutInflater.from(mContext).inflate(
|
||||
R.layout.quick_settings_brightness_dialog, this, false);
|
||||
mTileLayout = new TileLayout(mContext);
|
||||
@@ -101,7 +107,12 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
Space space = new Space(mContext);
|
||||
space.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
|
||||
mContext.getResources().getDimensionPixelSize(R.dimen.qs_footer_height)));
|
||||
mScrollLayout = new QSScrollLayout(mContext, mBrightnessView, (View) mTileLayout, space);
|
||||
mScrollLayout = new QSScrollLayout(
|
||||
mContext,
|
||||
mTooltipView,
|
||||
mBrightnessView,
|
||||
(View) mTileLayout,
|
||||
space);
|
||||
addView(mScrollLayout);
|
||||
|
||||
addDivider();
|
||||
@@ -134,7 +145,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
Dependency.get(TunerService.class).addTunable(this, QS_SHOW_BRIGHTNESS);
|
||||
final TunerService tunerService = Dependency.get(TunerService.class);
|
||||
tunerService.addTunable(this, QS_SHOW_BRIGHTNESS);
|
||||
tunerService.addTunable(this, QS_SHOW_LONG_PRESS_TOOLTIP);
|
||||
|
||||
if (mHost != null) {
|
||||
setTiles(mHost.getTiles());
|
||||
}
|
||||
@@ -166,11 +180,16 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
@Override
|
||||
public void onTuningChanged(String key, String newValue) {
|
||||
if (QS_SHOW_BRIGHTNESS.equals(key)) {
|
||||
mBrightnessView.setVisibility(newValue == null || Integer.parseInt(newValue) != 0
|
||||
? VISIBLE : GONE);
|
||||
updateViewVisibilityForTuningValue(mBrightnessView, newValue);
|
||||
} else if (QS_SHOW_LONG_PRESS_TOOLTIP.equals(key)) {
|
||||
updateViewVisibilityForTuningValue(mTooltipView, newValue);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateViewVisibilityForTuningValue(View view, @Nullable String newValue) {
|
||||
view.setVisibility(newValue == null || Integer.parseInt(newValue) != 0 ? VISIBLE : GONE);
|
||||
}
|
||||
|
||||
public void openDetails(String subPanel) {
|
||||
QSTile tile = getTile(subPanel);
|
||||
showDetailAdapter(true, tile.getDetailAdapter(), new int[]{getWidth() / 2, 0});
|
||||
@@ -205,6 +224,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
return mBrightnessView;
|
||||
}
|
||||
|
||||
View getHeaderView() {
|
||||
return mTooltipView;
|
||||
}
|
||||
|
||||
public void setCallback(QSDetail.Callback callback) {
|
||||
mCallback = callback;
|
||||
}
|
||||
@@ -266,11 +289,27 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
|
||||
if (mCustomizePanel != null && mCustomizePanel.isShown()) {
|
||||
mCustomizePanel.hide(mCustomizePanel.getWidth() / 2, mCustomizePanel.getHeight() / 2);
|
||||
}
|
||||
|
||||
// Instantly hide the header here since we don't want it to still be animating.
|
||||
mTooltipView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the panel is fully animated out/expanded. This is different from the state
|
||||
* tracked by {@link #mExpanded}, which only checks if the panel is even partially pulled out.
|
||||
*/
|
||||
public void onExpanded() {
|
||||
mTooltipView.fadeIn();
|
||||
}
|
||||
|
||||
public void onAnimating() {
|
||||
mTooltipView.fadeOut();
|
||||
}
|
||||
|
||||
public void setExpanded(boolean expanded) {
|
||||
if (mExpanded == expanded) return;
|
||||
mExpanded = expanded;
|
||||
|
||||
if (!mExpanded) {
|
||||
if (mTileLayout instanceof PagedTileLayout) {
|
||||
((PagedTileLayout) mTileLayout).setCurrentItem(0, false);
|
||||
|
||||
122
packages/SystemUI/src/com/android/systemui/qs/QSTooltipView.java
Normal file
122
packages/SystemUI/src/com/android/systemui/qs/QSTooltipView.java
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* 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.systemui.qs;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.android.systemui.Prefs;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
* Tooltip/header view for the Quick Settings panel.
|
||||
*/
|
||||
public class QSTooltipView extends LinearLayout {
|
||||
|
||||
private static final int FADE_ANIMATION_DURATION_MS = 300;
|
||||
private static final long AUTO_FADE_OUT_DELAY_MS = TimeUnit.SECONDS.toMillis(6);
|
||||
private static final int TOOLTIP_NOT_YET_SHOWN_COUNT = 0;
|
||||
public static final int MAX_TOOLTIP_SHOWN_COUNT = 3;
|
||||
|
||||
private final Handler mHandler = new Handler();
|
||||
private final Runnable mAutoFadeOutRunnable = () -> fadeOut();
|
||||
|
||||
private int mShownCount;
|
||||
|
||||
public QSTooltipView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public QSTooltipView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mShownCount = getStoredShownCount();
|
||||
}
|
||||
|
||||
/** Returns the latest stored tooltip shown count from SharedPreferences. */
|
||||
private int getStoredShownCount() {
|
||||
return Prefs.getInt(
|
||||
mContext,
|
||||
Prefs.Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT,
|
||||
TOOLTIP_NOT_YET_SHOWN_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades in the header view if we can show the tooltip - short circuits any running animation.
|
||||
*/
|
||||
public void fadeIn() {
|
||||
if (mShownCount < MAX_TOOLTIP_SHOWN_COUNT) {
|
||||
animate().cancel();
|
||||
setVisibility(View.VISIBLE);
|
||||
animate()
|
||||
.alpha(1f)
|
||||
.setDuration(FADE_ANIMATION_DURATION_MS)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mHandler.postDelayed(mAutoFadeOutRunnable, AUTO_FADE_OUT_DELAY_MS);
|
||||
}
|
||||
})
|
||||
.start();
|
||||
|
||||
// Increment and drop the shown count in prefs for the next time we're deciding to
|
||||
// fade in the tooltip. We first sanity check that the tooltip count hasn't changed yet
|
||||
// in prefs (say, from a long press).
|
||||
if (getStoredShownCount() <= mShownCount) {
|
||||
Prefs.putInt(mContext, Prefs.Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT, ++mShownCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades out the header view if it's partially visible - short circuits any running animation.
|
||||
*/
|
||||
public void fadeOut() {
|
||||
animate().cancel();
|
||||
if (getVisibility() == View.VISIBLE && getAlpha() != 0f) {
|
||||
mHandler.removeCallbacks(mAutoFadeOutRunnable);
|
||||
animate()
|
||||
.alpha(0f)
|
||||
.setDuration(FADE_ANIMATION_DURATION_MS)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
perhapsMakeViewInvisible();
|
||||
}
|
||||
})
|
||||
.start();
|
||||
} else {
|
||||
perhapsMakeViewInvisible();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Only update visibility if the view is currently being shown. Otherwise, it's already been
|
||||
* hidden by some other manner.
|
||||
*/
|
||||
private void perhapsMakeViewInvisible() {
|
||||
if (getVisibility() == View.VISIBLE) {
|
||||
setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,9 +124,8 @@ public class QuickQSPanel extends QSPanel {
|
||||
|
||||
@Override
|
||||
public void onTuningChanged(String key, String newValue) {
|
||||
// No tunings for you.
|
||||
if (key.equals(QS_SHOW_BRIGHTNESS)) {
|
||||
// No Brightness for you.
|
||||
if (QS_SHOW_BRIGHTNESS.equals(key) || QS_SHOW_LONG_PRESS_TOOLTIP.equals(key)) {
|
||||
// No Brightness or Tooltip for you!
|
||||
super.onTuningChanged(key, "0");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,11 @@ public class TileLayout extends ViewGroup implements QSTileLayout {
|
||||
record.tileView.measure(exactly(mCellWidth), exactly(mCellHeight));
|
||||
previousView = record.tileView.updateAccessibilityOrder(previousView);
|
||||
}
|
||||
int height = (mCellHeight + mCellMargin) * rows + (mCellMarginTop - mCellMargin);
|
||||
|
||||
// Only include the top margin in our measurement if we have more than 1 row to show.
|
||||
// Otherwise, don't add the extra margin buffer at top.
|
||||
int height = (mCellHeight + mCellMargin) * rows +
|
||||
rows != 0 ? (mCellMarginTop - mCellMargin) : 0;
|
||||
if (height < 0) height = 0;
|
||||
setMeasuredDimension(width, height);
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ public class TouchAnimator {
|
||||
void onAnimationAtStart();
|
||||
|
||||
/**
|
||||
* Called when the animator moves into a position of "0". Start and end delays are
|
||||
* Called when the animator moves into a position of "1". Start and end delays are
|
||||
* taken into account, so this position may cover a range of fractional inputs.
|
||||
*/
|
||||
void onAnimationAtEnd();
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Prefs;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||
import com.android.systemui.plugins.qs.QSIconView;
|
||||
@@ -49,6 +50,7 @@ import com.android.systemui.plugins.qs.QSTile;
|
||||
import com.android.systemui.plugins.qs.QSTile.State;
|
||||
import com.android.systemui.qs.PagedTileLayout.TilePage;
|
||||
import com.android.systemui.qs.QSHost;
|
||||
import com.android.systemui.qs.QSTooltipView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -191,6 +193,11 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
|
||||
public void longClick() {
|
||||
mMetricsLogger.write(populate(new LogMaker(ACTION_QS_LONG_PRESS).setType(TYPE_ACTION)));
|
||||
mHandler.sendEmptyMessage(H.LONG_CLICK);
|
||||
|
||||
Prefs.putInt(
|
||||
mContext,
|
||||
Prefs.Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT,
|
||||
QSTooltipView.MAX_TOOLTIP_SHOWN_COUNT);
|
||||
}
|
||||
|
||||
public LogMaker populate(LogMaker logMaker) {
|
||||
|
||||
@@ -37,6 +37,7 @@ import static java.lang.Thread.sleep;
|
||||
import android.content.Intent;
|
||||
import android.metrics.LogMaker;
|
||||
import android.support.test.filters.SmallTest;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
@@ -73,6 +74,7 @@ public class QSTileImplTest extends SysuiTestCase {
|
||||
mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
|
||||
mHost = mock(QSTileHost.class);
|
||||
when(mHost.indexOf(spec)).thenReturn(POSITION);
|
||||
when(mHost.getContext()).thenReturn(mContext.getBaseContext());
|
||||
|
||||
mTile = spy(new TileImpl(mHost));
|
||||
mTile.mHandler = mTile.new H(mTestableLooper.getLooper());
|
||||
|
||||
Reference in New Issue
Block a user