Merge "StatusBar: add DISABLE2_SYSTEM_ICONS flag"

This commit is contained in:
Charles He
2017-09-26 15:32:35 +00:00
committed by Android (Google) Code Review
8 changed files with 91 additions and 20 deletions

View File

@@ -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 {}

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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());

View File

@@ -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,

View File

@@ -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();

View File

@@ -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;
}
}
}

View File

@@ -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());
}