Merge "StatusBar: add DISABLE2_SYSTEM_ICONS flag"
This commit is contained in:
@@ -70,14 +70,15 @@ public class StatusBarManager {
|
||||
* Setting this flag disables quick settings completely, but does not disable expanding the
|
||||
* notification shade.
|
||||
*/
|
||||
public static final int DISABLE2_QUICK_SETTINGS = 0x00000001;
|
||||
public static final int DISABLE2_QUICK_SETTINGS = 1;
|
||||
public static final int DISABLE2_SYSTEM_ICONS = 1 << 1;
|
||||
|
||||
public static final int DISABLE2_NONE = 0x00000000;
|
||||
|
||||
public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS;
|
||||
public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS;
|
||||
|
||||
@IntDef(flag = true,
|
||||
value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS})
|
||||
value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Disable2Flags {}
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.systemui;
|
||||
|
||||
import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS;
|
||||
import static android.app.StatusBarManager.DISABLE_NONE;
|
||||
import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;
|
||||
|
||||
import android.animation.ArgbEvaluator;
|
||||
@@ -52,6 +54,7 @@ import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
|
||||
import com.android.systemui.statusbar.policy.IconLogger;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.tuner.TunerService.Tunable;
|
||||
import com.android.systemui.util.Utils.DisableStateTracker;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
|
||||
@@ -101,6 +104,9 @@ public class BatteryMeterView extends LinearLayout implements
|
||||
|
||||
mSettingObserver = new SettingObserver(new Handler(context.getMainLooper()));
|
||||
|
||||
addOnAttachStateChangeListener(
|
||||
new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS));
|
||||
|
||||
mSlotBattery = context.getString(
|
||||
com.android.internal.R.string.status_bar_battery);
|
||||
mBatteryIconView = new ImageView(context);
|
||||
|
||||
@@ -16,14 +16,15 @@
|
||||
|
||||
package com.android.systemui.statusbar;
|
||||
|
||||
import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS;
|
||||
import static android.app.StatusBarManager.DISABLE_NONE;
|
||||
|
||||
import android.annotation.DrawableRes;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.util.ArraySet;
|
||||
@@ -50,14 +51,14 @@ import com.android.systemui.statusbar.policy.NetworkControllerImpl;
|
||||
import com.android.systemui.statusbar.policy.SecurityController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.tuner.TunerService.Tunable;
|
||||
import com.android.systemui.util.Utils.DisableStateTracker;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
// Intimately tied to the design of res/layout/signal_cluster_view.xml
|
||||
public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback,
|
||||
SecurityController.SecurityControllerCallback, Tunable,
|
||||
DarkReceiver {
|
||||
SecurityController.SecurityControllerCallback, Tunable, DarkReceiver {
|
||||
|
||||
static final String TAG = "SignalClusterView";
|
||||
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
@@ -148,6 +149,8 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
||||
mIconScaleFactor = typedValue.getFloat();
|
||||
mNetworkController = Dependency.get(NetworkController.class);
|
||||
mSecurityController = Dependency.get(SecurityController.class);
|
||||
addOnAttachStateChangeListener(
|
||||
new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS));
|
||||
updateActivityEnabled();
|
||||
}
|
||||
|
||||
|
||||
@@ -2624,8 +2624,11 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
flagdbg.append(0 != ((diff1 & StatusBarManager.DISABLE_CLOCK)) ? '!' : ' ');
|
||||
flagdbg.append(0 != ((state1 & StatusBarManager.DISABLE_SEARCH)) ? 'S' : 's');
|
||||
flagdbg.append(0 != ((diff1 & StatusBarManager.DISABLE_SEARCH)) ? '!' : ' ');
|
||||
flagdbg.append("> disable2<");
|
||||
flagdbg.append(0 != ((state2 & StatusBarManager.DISABLE2_QUICK_SETTINGS)) ? 'Q' : 'q');
|
||||
flagdbg.append(0 != ((diff2 & StatusBarManager.DISABLE2_QUICK_SETTINGS)) ? '!' : ' ');
|
||||
flagdbg.append(0 != ((state2 & StatusBarManager.DISABLE2_SYSTEM_ICONS)) ? 'I' : 'i');
|
||||
flagdbg.append(0 != ((diff2 & StatusBarManager.DISABLE2_SYSTEM_ICONS)) ? '!' : ' ');
|
||||
flagdbg.append('>');
|
||||
Log.d(TAG, flagdbg.toString());
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.annotation.ColorInt;
|
||||
import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS;
|
||||
import static android.app.StatusBarManager.DISABLE_NONE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArraySet;
|
||||
@@ -29,11 +29,11 @@ import android.widget.LinearLayout;
|
||||
import android.widget.LinearLayout.LayoutParams;
|
||||
|
||||
import com.android.internal.statusbar.StatusBarIcon;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.StatusBarIconView;
|
||||
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
|
||||
import com.android.systemui.util.Utils.DisableStateTracker;
|
||||
|
||||
public interface StatusBarIconController {
|
||||
|
||||
@@ -149,6 +149,14 @@ public interface StatusBarIconController {
|
||||
mContext = group.getContext();
|
||||
mIconSize = mContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.status_bar_icon_size);
|
||||
|
||||
DisableStateTracker tracker =
|
||||
new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS);
|
||||
mGroup.addOnAttachStateChangeListener(tracker);
|
||||
if (mGroup.isAttachedToWindow()) {
|
||||
// In case we miss the first onAttachedToWindow event
|
||||
tracker.onViewAttachedToWindow(mGroup);
|
||||
}
|
||||
}
|
||||
|
||||
protected void onIconAdded(int index, String slot, boolean blocked,
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.StatusBarIconView;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
|
||||
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
|
||||
import com.android.systemui.statusbar.policy.IconLogger;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.tuner.TunerService.Tunable;
|
||||
@@ -50,21 +49,17 @@ import java.util.ArrayList;
|
||||
public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable,
|
||||
ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController {
|
||||
|
||||
private final DarkIconDispatcher mDarkIconDispatcher;
|
||||
private final ArrayList<IconManager> mIconGroups = new ArrayList<>();
|
||||
private final ArraySet<String> mIconBlacklist = new ArraySet<>();
|
||||
private final IconLogger mIconLogger = Dependency.get(IconLogger.class);
|
||||
|
||||
private Context mContext;
|
||||
private DemoStatusIcons mDemoStatusIcons;
|
||||
|
||||
private final ArrayList<IconManager> mIconGroups = new ArrayList<>();
|
||||
|
||||
private final ArraySet<String> mIconBlacklist = new ArraySet<>();
|
||||
private final IconLogger mIconLogger = Dependency.get(IconLogger.class);
|
||||
|
||||
public StatusBarIconControllerImpl(Context context) {
|
||||
super(context.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_statusBarIcons));
|
||||
Dependency.get(ConfigurationController.class).addCallback(this);
|
||||
mDarkIconDispatcher = Dependency.get(DarkIconDispatcher.class);
|
||||
mContext = context;
|
||||
|
||||
loadDimens();
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
|
||||
package com.android.systemui.util;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.android.systemui.SysUiServiceProvider;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -28,4 +33,52 @@ public class Utils {
|
||||
c.accept(list.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the visibility of an UI element according to the DISABLE_* flags in
|
||||
* {@link android.app.StatusBarManager}.
|
||||
*/
|
||||
public static class DisableStateTracker implements CommandQueue.Callbacks,
|
||||
View.OnAttachStateChangeListener {
|
||||
private final int mMask1;
|
||||
private final int mMask2;
|
||||
private View mView;
|
||||
private boolean mDisabled;
|
||||
|
||||
public DisableStateTracker(int disableMask, int disable2Mask) {
|
||||
mMask1 = disableMask;
|
||||
mMask2 = disable2Mask;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewAttachedToWindow(View v) {
|
||||
mView = v;
|
||||
SysUiServiceProvider.getComponent(v.getContext(), CommandQueue.class)
|
||||
.addCallbacks(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewDetachedFromWindow(View v) {
|
||||
SysUiServiceProvider.getComponent(mView.getContext(), CommandQueue.class)
|
||||
.removeCallbacks(this);
|
||||
mView = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets visibility of this {@link View} given the states passed from
|
||||
* {@link com.android.systemui.statusbar.CommandQueue.Callbacks#disable(int, int)}.
|
||||
*/
|
||||
@Override
|
||||
public void disable(int state1, int state2, boolean animate) {
|
||||
final boolean disabled = ((state1 & mMask1) != 0) || ((state2 & mMask2) != 0);
|
||||
if (disabled == mDisabled) return;
|
||||
mDisabled = disabled;
|
||||
mView.setVisibility(disabled ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
/** @return {@code true} if and only if this {@link View} is currently disabled */
|
||||
public boolean isDisabled() {
|
||||
return mDisabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
package com.android.systemui.qs.car;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.test.filters.SmallTest;
|
||||
@@ -27,6 +28,7 @@ import android.widget.FrameLayout;
|
||||
import com.android.keyguard.CarrierText;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.SysuiBaseFragmentTest;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.policy.Clock;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -54,7 +56,7 @@ public class CarQsFragmentTest extends SysuiBaseFragmentTest {
|
||||
.replace(CarrierText.class, View.class)
|
||||
.replace(Clock.class, View.class)
|
||||
.build());
|
||||
|
||||
mSysuiContext.putComponent(CommandQueue.class, mock(CommandQueue.class));
|
||||
mDependency.injectTestDependency(Dependency.BG_LOOPER,
|
||||
TestableLooper.get(this).getLooper());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user