Merge "Extract plugin interface for QS"
This commit is contained in:
committed by
Android (Google) Code Review
commit
de402a7d4e
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* 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.systemui.plugins.qs;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
public abstract class QSContainer extends FrameLayout {
|
||||
|
||||
public static final String ACTION = "com.android.systemui.action.PLUGIN_QS";
|
||||
|
||||
// This should be incremented any time this class or ActivityStarter or BaseStatusBarHeader
|
||||
// change in incompatible ways.
|
||||
public static final int VERSION = 1;
|
||||
|
||||
public QSContainer(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public abstract void setPanelView(HeightListener notificationPanelView);
|
||||
public abstract BaseStatusBarHeader getHeader();
|
||||
|
||||
public abstract int getQsMinExpansionHeight();
|
||||
public abstract int getDesiredHeight();
|
||||
public abstract void setHeightOverride(int desiredHeight);
|
||||
public abstract void setHeaderClickable(boolean qsExpansionEnabled);
|
||||
public abstract boolean isCustomizing();
|
||||
public abstract void setOverscrolling(boolean overscrolling);
|
||||
public abstract void setExpanded(boolean qsExpanded);
|
||||
public abstract void setListening(boolean listening);
|
||||
public abstract boolean isShowingDetail();
|
||||
public abstract void closeDetail();
|
||||
public abstract void setKeyguardShowing(boolean keyguardShowing);
|
||||
public abstract void animateHeaderSlidingIn(long delay);
|
||||
public abstract void animateHeaderSlidingOut();
|
||||
public abstract void setQsExpansion(float qsExpansionFraction, float headerTranslation);
|
||||
public abstract void setHeaderListening(boolean listening);
|
||||
public abstract void notifyCustomizeChanged();
|
||||
|
||||
public abstract void setContainer(ViewGroup container);
|
||||
|
||||
public interface HeightListener {
|
||||
void onQsHeightChanged();
|
||||
}
|
||||
|
||||
public interface Callback {
|
||||
void onShowingDetail(DetailAdapter detail, int x, int y);
|
||||
void onToggleStateChanged(boolean state);
|
||||
void onScanStateChanged(boolean state);
|
||||
}
|
||||
|
||||
public interface DetailAdapter {
|
||||
CharSequence getTitle();
|
||||
Boolean getToggleState();
|
||||
default boolean getToggleEnabled() {
|
||||
return true;
|
||||
}
|
||||
View createDetailView(Context context, View convertView, ViewGroup parent);
|
||||
Intent getSettingsIntent();
|
||||
void setToggleState(boolean state);
|
||||
int getMetricsCategory();
|
||||
|
||||
/**
|
||||
* Indicates whether the detail view wants to have its header (back button, title and
|
||||
* toggle) shown.
|
||||
*/
|
||||
default boolean hasHeader() { return true; }
|
||||
}
|
||||
|
||||
public abstract static class BaseStatusBarHeader extends RelativeLayout {
|
||||
|
||||
public BaseStatusBarHeader(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public abstract int getCollapsedHeight();
|
||||
public abstract int getExpandedHeight();
|
||||
|
||||
public abstract void setExpanded(boolean b);
|
||||
public abstract void setExpansion(float headerExpansionFraction);
|
||||
public abstract void setListening(boolean listening);
|
||||
public abstract void updateEverything();
|
||||
public abstract void setActivityStarter(ActivityStarter activityStarter);
|
||||
public abstract void setCallback(Callback qsPanelCallback);
|
||||
public abstract View getExpandView();
|
||||
}
|
||||
|
||||
/**
|
||||
* An interface to start activities. This is used to as a callback from the views to
|
||||
* {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the
|
||||
* Keyguard.
|
||||
*/
|
||||
public static interface ActivityStarter {
|
||||
|
||||
void startPendingIntentDismissingKeyguard(PendingIntent intent);
|
||||
void startActivity(Intent intent, boolean dismissShade);
|
||||
void startActivity(Intent intent, boolean dismissShade, Callback callback);
|
||||
void preventNextAnimation();
|
||||
|
||||
interface Callback {
|
||||
void onActivityStarted(int resultCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<com.android.systemui.qs.QSContainer
|
||||
<com.android.systemui.qs.QSContainerImpl
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/quick_settings_container"
|
||||
android:layout_width="match_parent"
|
||||
@@ -38,4 +38,4 @@
|
||||
<include android:id="@+id/qs_customize" layout="@layout/qs_customize_panel"
|
||||
android:visibility="gone" />
|
||||
|
||||
</com.android.systemui.qs.QSContainer>
|
||||
</com.android.systemui.qs.QSContainerImpl>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
<com.android.systemui.statusbar.phone.NotificationPanelView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/notification_panel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -39,14 +39,15 @@
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false">
|
||||
|
||||
<com.android.systemui.AutoReinflateContainer
|
||||
<com.android.systemui.PluginInflateContainer
|
||||
android:id="@+id/qs_auto_reinflate_container"
|
||||
android:layout="@layout/qs_panel"
|
||||
android:layout_width="@dimen/notification_panel_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="@integer/notification_panel_layout_gravity"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false" />
|
||||
android:clipChildren="false"
|
||||
systemui:viewType="com.android.systemui.plugins.qs.QSContainer" />
|
||||
|
||||
<com.android.systemui.statusbar.stack.NotificationStackScrollLayout
|
||||
android:id="@+id/notification_stack_scroller"
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
|
||||
package com.android.systemui.qs;
|
||||
|
||||
import android.graphics.Path;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.View.OnAttachStateChangeListener;
|
||||
import android.view.View.OnLayoutChangeListener;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.qs.PagedTileLayout.PageListener;
|
||||
import com.android.systemui.qs.QSPanel.QSTileLayout;
|
||||
import com.android.systemui.qs.QSTile.Host.Callback;
|
||||
|
||||
@@ -24,14 +24,16 @@ import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.qs.customize.QSCustomizer;
|
||||
import com.android.systemui.statusbar.phone.BaseStatusBarHeader;
|
||||
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||
import com.android.systemui.statusbar.phone.QSTileHost;
|
||||
import com.android.systemui.statusbar.phone.QuickStatusBarHeader;
|
||||
import com.android.systemui.statusbar.stack.StackStateAnimator;
|
||||
|
||||
/**
|
||||
@@ -39,7 +41,7 @@ import com.android.systemui.statusbar.stack.StackStateAnimator;
|
||||
*
|
||||
* Also manages animations for the QS Header and Panel.
|
||||
*/
|
||||
public class QSContainer extends FrameLayout {
|
||||
public class QSContainerImpl extends QSContainer {
|
||||
private static final String TAG = "QSContainer";
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
@@ -49,7 +51,7 @@ public class QSContainer extends FrameLayout {
|
||||
private int mHeightOverride = -1;
|
||||
protected QSPanel mQSPanel;
|
||||
private QSDetail mQSDetail;
|
||||
protected BaseStatusBarHeader mHeader;
|
||||
protected QuickStatusBarHeader mHeader;
|
||||
protected float mQsExpansion;
|
||||
private boolean mQsExpanded;
|
||||
private boolean mHeaderAnimating;
|
||||
@@ -59,10 +61,10 @@ public class QSContainer extends FrameLayout {
|
||||
private long mDelay;
|
||||
private QSAnimator mQSAnimator;
|
||||
private QSCustomizer mQSCustomizer;
|
||||
private NotificationPanelView mPanelView;
|
||||
private HeightListener mPanelView;
|
||||
private boolean mListening;
|
||||
|
||||
public QSContainer(Context context, AttributeSet attrs) {
|
||||
public QSContainerImpl(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@@ -71,7 +73,7 @@ public class QSContainer extends FrameLayout {
|
||||
super.onFinishInflate();
|
||||
mQSPanel = (QSPanel) findViewById(R.id.quick_settings_panel);
|
||||
mQSDetail = (QSDetail) findViewById(R.id.qs_detail);
|
||||
mHeader = (BaseStatusBarHeader) findViewById(R.id.header);
|
||||
mHeader = (QuickStatusBarHeader) findViewById(R.id.header);
|
||||
mQSDetail.setQsPanel(mQSPanel, mHeader);
|
||||
mQSAnimator = new QSAnimator(this, (QuickQSPanel) mHeader.findViewById(R.id.quick_qs_panel),
|
||||
mQSPanel);
|
||||
@@ -92,7 +94,7 @@ public class QSContainer extends FrameLayout {
|
||||
mQSAnimator.setHost(qsh);
|
||||
}
|
||||
|
||||
public void setPanelView(NotificationPanelView panelView) {
|
||||
public void setPanelView(HeightListener panelView) {
|
||||
mPanelView = panelView;
|
||||
}
|
||||
|
||||
@@ -137,6 +139,13 @@ public class QSContainer extends FrameLayout {
|
||||
updateBottom();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContainer(ViewGroup container) {
|
||||
if (container instanceof NotificationsQuickSettingsContainer) {
|
||||
mQSCustomizer.setContainer((NotificationsQuickSettingsContainer) container);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The height this view wants to be. This is different from {@link #getMeasuredHeight} such that
|
||||
* during closing the detail panel, this already returns the smaller height.
|
||||
@@ -291,6 +300,11 @@ public class QSContainer extends FrameLayout {
|
||||
.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeDetail() {
|
||||
mQSPanel.closeDetail();
|
||||
}
|
||||
|
||||
private final ViewTreeObserver.OnPreDrawListener mStartHeaderSlidingIn
|
||||
= new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
@@ -35,8 +35,9 @@ import android.widget.TextView;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSTile.DetailAdapter;
|
||||
import com.android.systemui.statusbar.phone.BaseStatusBarHeader;
|
||||
import com.android.systemui.plugins.qs.QSContainer.BaseStatusBarHeader;
|
||||
import com.android.systemui.plugins.qs.QSContainer.Callback;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.statusbar.phone.QSTileHost;
|
||||
|
||||
public class QSDetail extends LinearLayout {
|
||||
@@ -151,7 +152,7 @@ public class QSDetail extends LinearLayout {
|
||||
|
||||
|
||||
|
||||
public void handleShowingDetail(final QSTile.DetailAdapter adapter, int x, int y,
|
||||
public void handleShowingDetail(final DetailAdapter adapter, int x, int y,
|
||||
boolean toggleQs) {
|
||||
final boolean showingDetail = adapter != null;
|
||||
setClickable(showingDetail);
|
||||
@@ -287,7 +288,7 @@ public class QSDetail extends LinearLayout {
|
||||
mDetailAdapter != null && mDetailAdapter.getToggleEnabled());
|
||||
}
|
||||
|
||||
protected QSPanel.Callback mQsPanelCallback = new QSPanel.Callback() {
|
||||
protected Callback mQsPanelCallback = new Callback() {
|
||||
@Override
|
||||
public void onToggleStateChanged(final boolean state) {
|
||||
post(new Runnable() {
|
||||
|
||||
@@ -30,7 +30,8 @@ import android.widget.LinearLayout;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSTile.DetailAdapter;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSTile.Host.Callback;
|
||||
import com.android.systemui.qs.customize.QSCustomizer;
|
||||
import com.android.systemui.qs.external.CustomTile;
|
||||
@@ -59,7 +60,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
|
||||
protected boolean mExpanded;
|
||||
protected boolean mListening;
|
||||
|
||||
private Callback mCallback;
|
||||
private QSContainer.Callback mCallback;
|
||||
private BrightnessController mBrightnessController;
|
||||
protected QSTileHost mHost;
|
||||
|
||||
@@ -170,7 +171,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
|
||||
return mBrightnessView;
|
||||
}
|
||||
|
||||
public void setCallback(Callback callback) {
|
||||
public void setCallback(QSContainer.Callback callback) {
|
||||
mCallback = callback;
|
||||
}
|
||||
|
||||
@@ -542,12 +543,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
|
||||
public QSTile.Callback callback;
|
||||
}
|
||||
|
||||
public interface Callback {
|
||||
void onShowingDetail(DetailAdapter detail, int x, int y);
|
||||
void onToggleStateChanged(boolean state);
|
||||
void onScanStateChanged(boolean state);
|
||||
}
|
||||
|
||||
public interface QSTileLayout {
|
||||
void addTile(TileRecord tile);
|
||||
void removeTile(TileRecord tile);
|
||||
|
||||
@@ -27,12 +27,11 @@ import android.os.Message;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSTile.State;
|
||||
import com.android.systemui.qs.external.TileServices;
|
||||
import com.android.systemui.statusbar.phone.ManagedProfileController;
|
||||
@@ -42,7 +41,6 @@ import com.android.systemui.statusbar.policy.CastController;
|
||||
import com.android.systemui.statusbar.policy.FlashlightController;
|
||||
import com.android.systemui.statusbar.policy.HotspotController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
||||
import com.android.systemui.statusbar.policy.Listenable;
|
||||
import com.android.systemui.statusbar.policy.LocationController;
|
||||
import com.android.systemui.statusbar.policy.NetworkController;
|
||||
import com.android.systemui.statusbar.policy.RotationLockController;
|
||||
@@ -147,29 +145,6 @@ public abstract class QSTile<TState extends State> {
|
||||
return true;
|
||||
}
|
||||
|
||||
public interface DetailAdapter {
|
||||
CharSequence getTitle();
|
||||
Boolean getToggleState();
|
||||
default boolean getToggleEnabled() {
|
||||
return true;
|
||||
}
|
||||
View createDetailView(Context context, View convertView, ViewGroup parent);
|
||||
Intent getSettingsIntent();
|
||||
void setToggleState(boolean state);
|
||||
int getMetricsCategory();
|
||||
|
||||
/**
|
||||
* @return the height in px the content of the detail view should take.
|
||||
*/
|
||||
default int getDetailViewHeight() { throw new UnsupportedOperationException(); };
|
||||
|
||||
/**
|
||||
* Indicates whether the detail view wants to have its header (back button, title and
|
||||
* toggle) shown.
|
||||
*/
|
||||
default boolean hasHeader() { return true; }
|
||||
}
|
||||
|
||||
// safe to call from any thread
|
||||
|
||||
public void addCallback(Callback callback) {
|
||||
|
||||
@@ -33,10 +33,11 @@ import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Toolbar;
|
||||
import android.widget.Toolbar.OnMenuItemClickListener;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSContainer;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.qs.QSDetailClipper;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||
|
||||
@@ -40,6 +40,7 @@ import com.android.settingslib.BatteryInfo;
|
||||
import com.android.settingslib.graph.UsageView;
|
||||
import com.android.systemui.BatteryMeterDrawable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSDetailItems;
|
||||
import com.android.systemui.qs.QSDetailItems.Item;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.widget.Button;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSDetailItems;
|
||||
import com.android.systemui.qs.QSDetailItems.Item;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
|
||||
@@ -24,12 +24,12 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.Switch;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSIconView;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.qs.SignalTileView;
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.Prefs;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysUIToast;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.statusbar.policy.ZenModeController;
|
||||
import com.android.systemui.volume.ZenModePanel;
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.provider.Settings;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.settingslib.wifi.AccessPoint;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSDetailItems;
|
||||
import com.android.systemui.qs.QSDetailItems.Item;
|
||||
import com.android.systemui.qs.QSIconView;
|
||||
|
||||
@@ -15,17 +15,14 @@
|
||||
*/
|
||||
package com.android.systemui.statusbar.car;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityManager.StackId;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.util.SimpleArrayMap;
|
||||
import android.util.Log;
|
||||
import android.util.SparseBooleanArray;
|
||||
@@ -33,7 +30,7 @@ import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.QSContainer.ActivityStarter;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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.statusbar.phone;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Intent;
|
||||
|
||||
/**
|
||||
* An interface to start activities. This is used to as a callback from the views to
|
||||
* {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the
|
||||
* Keyguard.
|
||||
*/
|
||||
public interface ActivityStarter {
|
||||
void startPendingIntentDismissingKeyguard(PendingIntent intent);
|
||||
void startActivity(Intent intent, boolean dismissShade);
|
||||
void startActivity(Intent intent, boolean dismissShade, Callback callback);
|
||||
void preventNextAnimation();
|
||||
|
||||
interface Callback {
|
||||
void onActivityStarted(int resultCode);
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2015 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.statusbar.phone;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.RelativeLayout;
|
||||
import com.android.systemui.qs.QSPanel;
|
||||
import com.android.systemui.qs.QSPanel.Callback;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.NetworkControllerImpl;
|
||||
import com.android.systemui.statusbar.policy.NextAlarmController;
|
||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||
|
||||
public abstract class BaseStatusBarHeader extends RelativeLayout implements
|
||||
NetworkControllerImpl.EmergencyListener {
|
||||
|
||||
public BaseStatusBarHeader(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public abstract int getCollapsedHeight();
|
||||
public abstract int getExpandedHeight();
|
||||
|
||||
public abstract void setExpanded(boolean b);
|
||||
public abstract void setExpansion(float headerExpansionFraction);
|
||||
public abstract void setListening(boolean listening);
|
||||
public abstract void updateEverything();
|
||||
public abstract void setActivityStarter(ActivityStarter activityStarter);
|
||||
public abstract void setQSPanel(QSPanel qSPanel);
|
||||
public abstract void setBatteryController(BatteryController batteryController);
|
||||
public abstract void setNextAlarmController(NextAlarmController nextAlarmController);
|
||||
public abstract void setUserInfoController(UserInfoController userInfoController);
|
||||
public abstract void setCallback(Callback qsPanelCallback);
|
||||
}
|
||||
@@ -61,6 +61,7 @@ import com.android.systemui.EventLogTags;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.plugins.qs.QSContainer.ActivityStarter;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.KeyguardAffordanceView;
|
||||
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.ContactsContract;
|
||||
import android.text.TextUtils;
|
||||
@@ -31,8 +30,8 @@ import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.QSPanel;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
|
||||
@@ -183,7 +182,7 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener
|
||||
return false;
|
||||
}
|
||||
|
||||
protected QSTile.DetailAdapter getUserDetailAdapter() {
|
||||
protected DetailAdapter getUserDetailAdapter() {
|
||||
return mUserSwitcherController.userDetailAdapter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ import com.android.systemui.EventLogTags;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.classifier.FalsingManager;
|
||||
import com.android.systemui.qs.QSContainer;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.statusbar.ExpandableNotificationRow;
|
||||
import com.android.systemui.statusbar.ExpandableView;
|
||||
import com.android.systemui.statusbar.FlingAnimationUtils;
|
||||
@@ -70,7 +70,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
ExpandableView.OnHeightChangedListener,
|
||||
View.OnClickListener, NotificationStackScrollLayout.OnOverscrollTopChangedListener,
|
||||
KeyguardAffordanceHelper.Callback, NotificationStackScrollLayout.OnEmptySpaceClickListener,
|
||||
HeadsUpManager.OnHeadsUpChangedListener {
|
||||
HeadsUpManager.OnHeadsUpChangedListener, QSContainer.HeightListener {
|
||||
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
@@ -242,7 +242,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
public void onInflated(View v) {
|
||||
mQsContainer = (QSContainer) v.findViewById(R.id.quick_settings_container);
|
||||
mQsContainer.setPanelView(NotificationPanelView.this);
|
||||
mQsContainer.getHeader().findViewById(R.id.expand_indicator)
|
||||
mQsContainer.getHeader().getExpandView()
|
||||
.setOnClickListener(NotificationPanelView.this);
|
||||
|
||||
// recompute internal state when qspanel height changes
|
||||
@@ -2011,7 +2011,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
}
|
||||
|
||||
public void closeQsDetail() {
|
||||
mQsContainer.getQsPanel().closeDetail();
|
||||
mQsContainer.closeDetail();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,10 +24,10 @@ import android.view.View;
|
||||
import android.view.ViewStub;
|
||||
import android.view.WindowInsets;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.systemui.AutoReinflateContainer;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSContainer;
|
||||
import com.android.systemui.qs.customize.QSCustomizer;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
|
||||
/**
|
||||
* The container with notification stack scroller and quick settings inside.
|
||||
@@ -130,8 +130,8 @@ public class NotificationsQuickSettingsContainer extends FrameLayout
|
||||
|
||||
@Override
|
||||
public void onInflated(View v) {
|
||||
QSCustomizer customizer = ((QSContainer) v).getCustomizer();
|
||||
customizer.setContainer(this);
|
||||
QSContainer container = (QSContainer) v;
|
||||
container.setContainer(this);
|
||||
}
|
||||
|
||||
public void setQsExpanded(boolean expanded) {
|
||||
|
||||
@@ -141,7 +141,10 @@ import com.android.systemui.classifier.FalsingManager;
|
||||
import com.android.systemui.doze.DozeHost;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.qs.QSContainer;
|
||||
import com.android.systemui.plugins.qs.QSContainer.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.QSContainer.BaseStatusBarHeader;
|
||||
import com.android.systemui.plugins.qs.QSContainer;
|
||||
import com.android.systemui.qs.QSContainerImpl;
|
||||
import com.android.systemui.qs.QSPanel;
|
||||
import com.android.systemui.recents.ScreenPinningRequest;
|
||||
import com.android.systemui.recents.events.EventBus;
|
||||
@@ -933,10 +936,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
public void onInflated(View v) {
|
||||
QSContainer qsContainer = (QSContainer) v.findViewById(
|
||||
R.id.quick_settings_container);
|
||||
qsContainer.setHost(qsh);
|
||||
mQSPanel = qsContainer.getQsPanel();
|
||||
mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
|
||||
mKeyguardStatusBar.setQSPanel(mQSPanel);
|
||||
if (qsContainer instanceof QSContainerImpl) {
|
||||
((QSContainerImpl) qsContainer).setHost(qsh);
|
||||
mQSPanel = ((QSContainerImpl) qsContainer).getQsPanel();
|
||||
mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
|
||||
mKeyguardStatusBar.setQSPanel(mQSPanel);
|
||||
}
|
||||
mHeader = qsContainer.getHeader();
|
||||
initSignalCluster(mHeader);
|
||||
mHeader.setActivityStarter(PhoneStatusBar.this);
|
||||
|
||||
@@ -37,12 +37,15 @@ import com.android.internal.logging.MetricsProto;
|
||||
import com.android.keyguard.KeyguardStatusView;
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.qs.QSContainer.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.QSContainer.BaseStatusBarHeader;
|
||||
import com.android.systemui.qs.QSPanel;
|
||||
import com.android.systemui.qs.QSPanel.Callback;
|
||||
import com.android.systemui.plugins.qs.QSContainer.Callback;
|
||||
import com.android.systemui.qs.QuickQSPanel;
|
||||
import com.android.systemui.qs.TouchAnimator;
|
||||
import com.android.systemui.qs.TouchAnimator.Builder;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
|
||||
import com.android.systemui.statusbar.policy.NextAlarmController;
|
||||
import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback;
|
||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||
@@ -50,7 +53,7 @@ import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChange
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
|
||||
public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
||||
NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener {
|
||||
NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener {
|
||||
|
||||
private static final String TAG = "QuickStatusBarHeader";
|
||||
|
||||
@@ -254,6 +257,11 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
||||
updateListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getExpandView() {
|
||||
return findViewById(R.id.expand_indicator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEverything() {
|
||||
post(() -> {
|
||||
@@ -293,7 +301,6 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
||||
mActivityStarter = activityStarter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setQSPanel(final QSPanel qsPanel) {
|
||||
mQsPanel = qsPanel;
|
||||
setupHost(qsPanel.getHost());
|
||||
@@ -354,17 +361,14 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
|
||||
true /* dismissShade */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNextAlarmController(NextAlarmController nextAlarmController) {
|
||||
mNextAlarmController = nextAlarmController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBatteryController(BatteryController batteryController) {
|
||||
// Don't care
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserInfoController(UserInfoController userInfoController) {
|
||||
userInfoController.addListener(this);
|
||||
}
|
||||
|
||||
@@ -50,15 +50,14 @@ import android.widget.BaseAdapter;
|
||||
|
||||
import com.android.internal.logging.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.util.UserIcons;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.systemui.GuestResumeSessionReceiver;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.SystemUISecondaryUserService;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
import com.android.systemui.plugins.qs.QSContainer.DetailAdapter;
|
||||
import com.android.systemui.qs.tiles.UserDetailView;
|
||||
import com.android.systemui.statusbar.phone.ActivityStarter;
|
||||
import com.android.systemui.plugins.qs.QSContainer.ActivityStarter;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
@@ -793,7 +792,7 @@ public class UserSwitcherController {
|
||||
}
|
||||
}
|
||||
|
||||
public final QSTile.DetailAdapter userDetailAdapter = new QSTile.DetailAdapter() {
|
||||
public final DetailAdapter userDetailAdapter = new DetailAdapter() {
|
||||
private final Intent USER_SETTINGS_INTENT = new Intent(Settings.ACTION_USER_SETTINGS);
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user