Merge "[DO NOT MERGE] qt-qpr1-sysui-dev @ build 5814791" into qt-qpr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
05b2c6883e
@@ -95,7 +95,6 @@
|
||||
<string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
|
||||
<string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string>
|
||||
<string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string>
|
||||
<string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string>
|
||||
<string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string>
|
||||
<string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string>
|
||||
<string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string>
|
||||
|
||||
@@ -95,7 +95,6 @@
|
||||
<string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
|
||||
<string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi calling"</string>
|
||||
<string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string>
|
||||
<string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string>
|
||||
<string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string>
|
||||
<string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string>
|
||||
<string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string>
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.settingslib.helputils">
|
||||
package="com.android.settingslib.widget">
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -33,11 +33,11 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MenuItem.OnMenuItemClickListener;
|
||||
|
||||
import com.android.settingslib.widget.R;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.android.settingslib.helputils.R;
|
||||
|
||||
/**
|
||||
* Functions to easily prepare contextual help menu option items with an intent that opens up the
|
||||
* browser to a particular URL, while taking into account the preferred language and app version.
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.settingslib.restrictedlockutils">
|
||||
package="com.android.settingslib.widget">
|
||||
|
||||
</manifest>
|
||||
@@ -71,10 +71,6 @@ android_library {
|
||||
"telephony-common",
|
||||
],
|
||||
|
||||
aaptflags: [
|
||||
"--extra-packages",
|
||||
"com.android.keyguard",
|
||||
],
|
||||
kotlincflags: ["-Xjvm-default=enable"],
|
||||
|
||||
plugins: ["dagger2-compiler-2.19"],
|
||||
@@ -132,7 +128,7 @@ android_library {
|
||||
kotlincflags: ["-Xjvm-default=enable"],
|
||||
aaptflags: [
|
||||
"--extra-packages",
|
||||
"com.android.keyguard:com.android.systemui",
|
||||
"com.android.systemui",
|
||||
],
|
||||
plugins: ["dagger2-compiler-2.19"],
|
||||
}
|
||||
@@ -160,10 +156,6 @@ android_app {
|
||||
kotlincflags: ["-Xjvm-default=enable"],
|
||||
|
||||
dxflags: ["--multi-dex"],
|
||||
aaptflags: [
|
||||
"--extra-packages",
|
||||
"com.android.keyguard",
|
||||
],
|
||||
required: ["privapp_whitelist_com.android.systemui"],
|
||||
|
||||
}
|
||||
@@ -180,10 +172,6 @@ android_app {
|
||||
privileged: true,
|
||||
|
||||
dxflags: ["--multi-dex"],
|
||||
aaptflags: [
|
||||
"--extra-packages",
|
||||
"com.android.keyguard",
|
||||
],
|
||||
optimize: {
|
||||
proguard_flags_files: ["proguard.flags", "legacy/recents/proguard.flags"],
|
||||
},
|
||||
|
||||
@@ -273,7 +273,6 @@
|
||||
|
||||
<!-- SystemUI Services: The classes of the stuff to start. -->
|
||||
<string-array name="config_systemUIServiceComponents" translatable="false">
|
||||
<item>com.android.systemui.Dependency$DependencyCreator</item>
|
||||
<item>com.android.systemui.util.NotificationChannels</item>
|
||||
<item>com.android.systemui.statusbar.CommandQueue$CommandQueueStart</item>
|
||||
<item>com.android.systemui.keyguard.KeyguardViewMediator</item>
|
||||
@@ -304,7 +303,6 @@
|
||||
|
||||
<!-- SystemUI Services (per user): The classes of the stuff to start for each user. This is a subset of the config_systemUIServiceComponents -->
|
||||
<string-array name="config_systemUIServiceComponentsPerUser" translatable="false">
|
||||
<item>com.android.systemui.Dependency$DependencyCreator</item>
|
||||
<item>com.android.systemui.util.NotificationChannels</item>
|
||||
</string-array>
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class CarrierText extends TextView {
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.android.internal.telephony.TelephonyIntents;
|
||||
import com.android.internal.telephony.TelephonyProperties;
|
||||
import com.android.settingslib.WirelessUtils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -21,6 +21,8 @@ import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
public class EmergencyCarrierArea extends AlphaOptimizedLinearLayout {
|
||||
|
||||
private CarrierText mCarrierText;
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.widget.LinearLayout;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.internal.widget.LockPatternChecker;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Replaces fancy colons with regular colons. Only works on TextViews.
|
||||
*/
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.android.internal.colorextraction.ColorExtractor;
|
||||
import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener;
|
||||
import com.android.keyguard.clock.ClockManager;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.view.WindowManager;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.NavigationBarController;
|
||||
import com.android.systemui.statusbar.phone.NavigationBarView;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
@@ -32,6 +32,8 @@ import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/***
|
||||
* This button is used by the device with embedded SIM card to disable current carrier to unlock
|
||||
* the device with no cellular service.
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.keyguard.KeyguardSecurityContainer.SecurityCallback;
|
||||
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -31,6 +31,7 @@ import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.view.animation.AnimationUtils;
|
||||
|
||||
import com.android.settingslib.animation.AppearAnimationUtils;
|
||||
import com.android.settingslib.animation.DisappearAnimationUtils;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Displays a PIN pad for unlocking.
|
||||
|
||||
@@ -37,6 +37,7 @@ import android.widget.TextView;
|
||||
import android.widget.TextView.OnEditorActionListener;
|
||||
|
||||
import com.android.internal.widget.TextViewInputDisabler;
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.List;
|
||||
/**
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.internal.widget.LockPatternView;
|
||||
import com.android.settingslib.animation.AppearAnimationCreator;
|
||||
import com.android.settingslib.animation.AppearAnimationUtils;
|
||||
import com.android.settingslib.animation.DisappearAnimationUtils;
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* A Pin based Keyguard input view
|
||||
*/
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.statusbar.phone.UnlockMethodCache;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.widget.FrameLayout;
|
||||
import android.widget.ViewFlipper;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Subclass of the current view flipper that allows us to overload dispatchTouchEvent() so
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.android.internal.telephony.ITelephony;
|
||||
import com.android.internal.telephony.IccCardConstants;
|
||||
import com.android.internal.telephony.IccCardConstants.State;
|
||||
import com.android.internal.telephony.PhoneConstants;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Displays a PIN pad for unlocking.
|
||||
|
||||
@@ -40,6 +40,7 @@ import com.android.internal.telephony.ITelephony;
|
||||
import com.android.internal.telephony.IccCardConstants;
|
||||
import com.android.internal.telephony.IccCardConstants.State;
|
||||
import com.android.internal.telephony.PhoneConstants;
|
||||
import com.android.systemui.R;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,6 +40,7 @@ import androidx.core.graphics.ColorUtils;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
|
||||
@@ -94,6 +94,7 @@ import com.android.internal.telephony.TelephonyIntents;
|
||||
import com.android.internal.util.Preconditions;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.settingslib.WirelessUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.systemui.R;
|
||||
|
||||
public class NumPadKey extends ViewGroup {
|
||||
// list of "ABC", etc per digit, starting with '0'
|
||||
|
||||
@@ -42,6 +42,8 @@ import android.view.animation.AnimationUtils;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Stack;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import android.view.View;
|
||||
import android.widget.TextClock;
|
||||
|
||||
import com.android.internal.colorextraction.ColorExtractor;
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import android.view.View;
|
||||
import android.widget.TextClock;
|
||||
|
||||
import com.android.internal.colorextraction.ColorExtractor;
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.util.MathUtils;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Positions clock faces (analog, digital, typographic) and handles pixel shifting
|
||||
|
||||
@@ -26,7 +26,7 @@ import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.internal.colorextraction.ColorExtractor;
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.content.res.Resources;
|
||||
import android.util.MathUtils;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* Computes preferred position of clock by considering height of status bar and lock icon.
|
||||
@@ -40,10 +41,10 @@ class SmallClockPosition {
|
||||
private float mDarkAmount;
|
||||
|
||||
SmallClockPosition(Resources res) {
|
||||
this(res.getDimensionPixelSize(com.android.keyguard.R.dimen.status_bar_height),
|
||||
res.getDimensionPixelSize(com.android.keyguard.R.dimen.keyguard_lock_padding),
|
||||
res.getDimensionPixelSize(com.android.keyguard.R.dimen.keyguard_lock_height),
|
||||
res.getDimensionPixelSize(com.android.keyguard.R.dimen.burn_in_prevention_offset_y)
|
||||
this(res.getDimensionPixelSize(R.dimen.status_bar_height),
|
||||
res.getDimensionPixelSize(R.dimen.keyguard_lock_padding),
|
||||
res.getDimensionPixelSize(R.dimen.keyguard_lock_height),
|
||||
res.getDimensionPixelSize(R.dimen.burn_in_prevention_offset_y)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ package com.android.systemui;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.INotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.hardware.SensorPrivacyManager;
|
||||
import android.hardware.display.NightDisplayListener;
|
||||
@@ -114,7 +113,6 @@ import com.android.systemui.util.leak.LeakReporter;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -138,9 +136,7 @@ import dagger.Subcomponent;
|
||||
* they have no clients they should not have any registered resources like bound
|
||||
* services, registered receivers, etc.
|
||||
*/
|
||||
public class Dependency extends SystemUI {
|
||||
private static final String TAG = "Dependency";
|
||||
|
||||
public class Dependency {
|
||||
/**
|
||||
* Key for getting a background Looper for background work.
|
||||
*/
|
||||
@@ -305,8 +301,20 @@ public class Dependency extends SystemUI {
|
||||
public Dependency() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
|
||||
/**
|
||||
* Initialize Depenency.
|
||||
*/
|
||||
public static void initDependencies(SystemUIRootComponent rootComponent) {
|
||||
if (sDependency != null) {
|
||||
return;
|
||||
}
|
||||
sDependency = new Dependency();
|
||||
rootComponent.createDependency().createSystemUI(sDependency);
|
||||
sDependency.start();
|
||||
}
|
||||
|
||||
protected void start() {
|
||||
// TODO: Think about ways to push these creation rules out of Dependency to cut down
|
||||
// on imports.
|
||||
mProviders.put(TIME_TICK_HANDLER, mTimeTickHandler::get);
|
||||
@@ -486,10 +494,14 @@ public class Dependency extends SystemUI {
|
||||
sDependency = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
super.dump(fd, pw, args);
|
||||
static void staticDump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
sDependency.dump(fd, pw, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@see SystemUI.dump}
|
||||
*/
|
||||
public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
// Make sure that the DumpController gets added to mDependencies, as they are only added
|
||||
// with Dependency#get.
|
||||
getDependency(DumpController.class);
|
||||
@@ -509,9 +521,11 @@ public class Dependency extends SystemUI {
|
||||
.forEach(o -> ((Dumpable) o).dump(fd, pw, args));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected static void staticOnConfigurationChanged(Configuration newConfig) {
|
||||
sDependency.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
protected synchronized void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
mDependencies.values().stream().filter(obj -> obj instanceof ConfigurationChangedReceiver)
|
||||
.forEach(o -> ((ConfigurationChangedReceiver) o).onConfigurationChanged(newConfig));
|
||||
}
|
||||
@@ -564,20 +578,6 @@ public class Dependency extends SystemUI {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used in separate processes (like tuner settings) to init the dependencies.
|
||||
*/
|
||||
public static void initDependencies(Context context) {
|
||||
if (sDependency != null) return;
|
||||
Dependency d = new Dependency();
|
||||
SystemUIFactory.getInstance().getRootComponent()
|
||||
.createDependency()
|
||||
.createSystemUI(d);
|
||||
d.mContext = context;
|
||||
d.mComponents = new HashMap<>();
|
||||
d.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Used in separate process teardown to ensure the context isn't leaked.
|
||||
*
|
||||
@@ -629,15 +629,4 @@ public class Dependency extends SystemUI {
|
||||
public interface DependencyInjector {
|
||||
void createSystemUI(Dependency dependency);
|
||||
}
|
||||
|
||||
public static class DependencyCreator implements Injector {
|
||||
@Override
|
||||
public SystemUI apply(Context context) {
|
||||
Dependency dependency = new Dependency();
|
||||
SystemUIFactory.getInstance().getRootComponent()
|
||||
.createDependency()
|
||||
.createSystemUI(dependency);
|
||||
return dependency;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public final class ForegroundServicesDialog extends AlertActivity implements
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Dependency.initDependencies(getApplicationContext());
|
||||
Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent());
|
||||
|
||||
mMetricsLogger = Dependency.get(MetricsLogger.class);
|
||||
|
||||
|
||||
@@ -62,19 +62,28 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
|
||||
private final Map<Class<?>, Object> mComponents = new HashMap<>();
|
||||
private ContextAvailableCallback mContextAvailableCallback;
|
||||
|
||||
public SystemUIApplication() {
|
||||
super();
|
||||
Log.v(TAG, "SystemUIApplication constructed.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Log.v(TAG, "SystemUIApplication created.");
|
||||
// This line is used to setup Dagger's dependency injection and should be kept at the
|
||||
// top of this method.
|
||||
TimingsTraceLog log = new TimingsTraceLog("SystemUIBootTiming",
|
||||
Trace.TRACE_TAG_APP);
|
||||
log.traceBegin("DependencyInjection");
|
||||
mContextAvailableCallback.onContextAvailable(this);
|
||||
log.traceEnd();
|
||||
|
||||
// Set the application theme that is inherited by all services. Note that setting the
|
||||
// application theme in the manifest does only work for activities. Keep this in sync with
|
||||
// the theme set there.
|
||||
setTheme(R.style.Theme_SystemUI);
|
||||
|
||||
|
||||
if (Process.myUserHandle().equals(UserHandle.SYSTEM)) {
|
||||
IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
|
||||
bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
|
||||
@@ -138,7 +147,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
|
||||
|
||||
/**
|
||||
* Ensures that all the Secondary user SystemUI services are running. If they are already
|
||||
* running, this is a no-op. This is needed to conditinally start all the services, as we only
|
||||
* running, this is a no-op. This is needed to conditionally start all the services, as we only
|
||||
* need to have it in the main process.
|
||||
* <p>This method must only be called from the main thread.</p>
|
||||
*/
|
||||
@@ -159,7 +168,9 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
|
||||
// see ActivityManagerService.finishBooting()
|
||||
if ("1".equals(SystemProperties.get("sys.boot_completed"))) {
|
||||
mBootCompleted = true;
|
||||
if (DEBUG) Log.v(TAG, "BOOT_COMPLETED was already sent");
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "BOOT_COMPLETED was already sent");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,6 +284,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
if (mServicesStarted) {
|
||||
Dependency.staticOnConfigurationChanged(newConfig);
|
||||
int len = mServices.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (mServices[i] != null) {
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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;
|
||||
|
||||
import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.dock.DockManagerImpl;
|
||||
import com.android.systemui.power.EnhancedEstimates;
|
||||
import com.android.systemui.power.EnhancedEstimatesImpl;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationData;
|
||||
import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/**
|
||||
* A dagger module for injecting default implementations of components of System UI that may be
|
||||
* overridden by the System UI implementation.
|
||||
*/
|
||||
@Module
|
||||
abstract class SystemUIDefaultModule {
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named(LEAK_REPORT_EMAIL_NAME)
|
||||
@Nullable
|
||||
static String provideLeakReportEmail() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Binds
|
||||
abstract EnhancedEstimates bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates);
|
||||
|
||||
@Binds
|
||||
abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
|
||||
NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);
|
||||
|
||||
@Binds
|
||||
abstract DockManager bindDockManager(DockManagerImpl dockManager);
|
||||
|
||||
@Binds
|
||||
abstract NotificationData.KeyguardEnvironment bindKeyguardEnvironment(
|
||||
KeyguardEnvironmentImpl keyguardEnvironment);
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
static ShadeController provideShadeController(Context context) {
|
||||
return SysUiServiceProvider.getComponent(context, StatusBar.class);
|
||||
}
|
||||
}
|
||||
@@ -16,13 +16,8 @@
|
||||
|
||||
package com.android.systemui;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.AlarmManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
@@ -33,59 +28,40 @@ import com.android.internal.util.function.TriConsumer;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.ViewMediatorCallback;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.keyguard.DismissCallbackRegistry;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.power.EnhancedEstimates;
|
||||
import com.android.systemui.power.EnhancedEstimatesImpl;
|
||||
import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||
import com.android.systemui.statusbar.NotificationListener;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
|
||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||
import com.android.systemui.statusbar.ScrimView;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
|
||||
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationData;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBouncer;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
|
||||
import com.android.systemui.statusbar.phone.KeyguardLiftController;
|
||||
import com.android.systemui.statusbar.phone.LockIcon;
|
||||
import com.android.systemui.statusbar.phone.LockscreenWallpaper;
|
||||
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
||||
import com.android.systemui.statusbar.phone.ScrimController;
|
||||
import com.android.systemui.statusbar.phone.ScrimState;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockMethodCache;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
||||
import com.android.systemui.util.AsyncSensorManager;
|
||||
import com.android.systemui.volume.VolumeDialogComponent;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/**
|
||||
* Class factory to provide customizable SystemUI components.
|
||||
*/
|
||||
@Module
|
||||
public class SystemUIFactory {
|
||||
private static final String TAG = "SystemUIFactory";
|
||||
|
||||
static SystemUIFactory mFactory;
|
||||
private SystemUIRootComponent mRootComponent;
|
||||
protected SystemUIRootComponent mRootComponent;
|
||||
|
||||
public static <T extends SystemUIFactory> T getInstance() {
|
||||
return (T) mFactory;
|
||||
@@ -110,9 +86,16 @@ public class SystemUIFactory {
|
||||
|
||||
public SystemUIFactory() {}
|
||||
|
||||
protected void init(Context context) {
|
||||
mRootComponent = DaggerSystemUIRootComponent.builder()
|
||||
.systemUIFactory(this)
|
||||
private void init(Context context) {
|
||||
mRootComponent = buildSystemUIRootComponent(context);
|
||||
|
||||
// Every other part of our codebase currently relies on Dependency, so we
|
||||
// really need to ensure the Dependency gets initialized early on.
|
||||
Dependency.initDependencies(mRootComponent);
|
||||
}
|
||||
|
||||
protected SystemUIRootComponent buildSystemUIRootComponent(Context context) {
|
||||
return DaggerSystemUIRootComponent.builder()
|
||||
.dependencyProvider(new com.android.systemui.DependencyProvider())
|
||||
.contextHolder(new ContextHolder(context))
|
||||
.build();
|
||||
@@ -128,14 +111,15 @@ public class SystemUIFactory {
|
||||
}
|
||||
|
||||
public KeyguardBouncer createKeyguardBouncer(Context context, ViewMediatorCallback callback,
|
||||
LockPatternUtils lockPatternUtils, ViewGroup container,
|
||||
LockPatternUtils lockPatternUtils, ViewGroup container,
|
||||
DismissCallbackRegistry dismissCallbackRegistry,
|
||||
KeyguardBouncer.BouncerExpansionCallback expansionCallback,
|
||||
FalsingManager falsingManager) {
|
||||
FalsingManager falsingManager, KeyguardBypassController bypassController) {
|
||||
return new KeyguardBouncer(context, callback, lockPatternUtils, container,
|
||||
dismissCallbackRegistry, falsingManager,
|
||||
expansionCallback, UnlockMethodCache.getInstance(context),
|
||||
KeyguardUpdateMonitor.getInstance(context), new Handler(Looper.getMainLooper()));
|
||||
KeyguardUpdateMonitor.getInstance(context), bypassController,
|
||||
new Handler(Looper.getMainLooper()));
|
||||
}
|
||||
|
||||
public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
|
||||
@@ -166,93 +150,8 @@ public class SystemUIFactory {
|
||||
return new VolumeDialogComponent(systemUi, context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public NotificationData.KeyguardEnvironment provideKeyguardEnvironment(Context context) {
|
||||
return new KeyguardEnvironmentImpl();
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public NotificationLockscreenUserManager provideNotificationLockscreenUserManager(
|
||||
Context context) {
|
||||
return new NotificationLockscreenUserManagerImpl(context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public AssistManager provideAssistManager(DeviceProvisionedController controller,
|
||||
Context context) {
|
||||
return new AssistManager(controller, context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Nullable
|
||||
public DockManager provideDockManager(Context context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public NotificationEntryManager provideNotificationEntryManager(Context context) {
|
||||
return new NotificationEntryManager(context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public EnhancedEstimates provideEnhancedEstimates(Context context) {
|
||||
return new EnhancedEstimatesImpl();
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named(LEAK_REPORT_EMAIL_NAME)
|
||||
@Nullable
|
||||
public String provideLeakReportEmail() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Nullable
|
||||
public KeyguardLiftController provideKeyguardLiftController(Context context,
|
||||
StatusBarStateController statusBarStateController,
|
||||
AsyncSensorManager asyncSensorManager) {
|
||||
if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
|
||||
return null;
|
||||
}
|
||||
return new KeyguardLiftController(context, statusBarStateController, asyncSensorManager);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public NotificationListener provideNotificationListener(Context context) {
|
||||
return new NotificationListener(context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public NotificationInterruptionStateProvider provideNotificationInterruptionStateProvider(
|
||||
Context context) {
|
||||
return new NotificationInterruptionStateProvider(context);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
|
||||
public boolean provideAllowNotificationLongPress() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
public ShadeController provideShadeController(Context context) {
|
||||
return SysUiServiceProvider.getComponent(context, StatusBar.class);
|
||||
}
|
||||
|
||||
@Module
|
||||
protected static class ContextHolder {
|
||||
public static class ContextHolder {
|
||||
private Context mContext;
|
||||
|
||||
public ContextHolder(Context context) {
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardLiftController;
|
||||
import com.android.systemui.util.AsyncSensorManager;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/**
|
||||
* A dagger module for injecting components of System UI that are not overridden by the System UI
|
||||
* implementation.
|
||||
*/
|
||||
@Module
|
||||
public abstract class SystemUIModule {
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Nullable
|
||||
static KeyguardLiftController provideKeyguardLiftController(Context context,
|
||||
StatusBarStateController statusBarStateController,
|
||||
AsyncSensorManager asyncSensorManager) {
|
||||
if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
|
||||
return null;
|
||||
}
|
||||
return new KeyguardLiftController(context, statusBarStateController, asyncSensorManager);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
|
||||
static boolean provideAllowNotificationLongPress() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -16,11 +16,14 @@
|
||||
|
||||
package com.android.systemui;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
|
||||
import com.android.systemui.fragments.FragmentService;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
import com.android.systemui.util.leak.GarbageMonitor;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Component;
|
||||
@@ -29,8 +32,13 @@ import dagger.Component;
|
||||
* Root component for Dagger injection.
|
||||
*/
|
||||
@Singleton
|
||||
@Component(modules = {SystemUIFactory.class, DependencyProvider.class, DependencyBinder.class,
|
||||
ServiceBinder.class, SystemUIFactory.ContextHolder.class})
|
||||
@Component(modules = {
|
||||
DependencyProvider.class,
|
||||
DependencyBinder.class,
|
||||
ServiceBinder.class,
|
||||
SystemUIFactory.ContextHolder.class,
|
||||
SystemUIModule.class,
|
||||
SystemUIDefaultModule.class})
|
||||
public interface SystemUIRootComponent {
|
||||
/**
|
||||
* Main dependency providing module.
|
||||
@@ -61,6 +69,12 @@ public interface SystemUIRootComponent {
|
||||
@Singleton
|
||||
GarbageMonitor createGarbageMonitor();
|
||||
|
||||
/**
|
||||
* Whether notification long press is allowed.
|
||||
*/
|
||||
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
|
||||
boolean allowNotificationLongPressName();
|
||||
|
||||
/**
|
||||
* Injects into the supplied argument.
|
||||
*/
|
||||
|
||||
@@ -38,25 +38,8 @@ public class SystemUISecondaryUserService extends Service {
|
||||
|
||||
@Override
|
||||
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
SystemUI[] services = ((SystemUIApplication) getApplication()).getServices();
|
||||
if (args == null || args.length == 0) {
|
||||
for (SystemUI ui: services) {
|
||||
if (ui != null) {
|
||||
pw.println("dumping service: " + ui.getClass().getName());
|
||||
ui.dump(fd, pw, args);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String svc = args[0];
|
||||
for (SystemUI ui: services) {
|
||||
if (ui != null) {
|
||||
String name = ui.getClass().getName();
|
||||
if (name.endsWith(svc)) {
|
||||
ui.dump(fd, pw, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SystemUIService.dumpServices(
|
||||
((SystemUIApplication) getApplication()).getServices(), fd, pw, args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,8 +66,14 @@ public class SystemUIService extends Service {
|
||||
|
||||
@Override
|
||||
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
SystemUI[] services = ((SystemUIApplication) getApplication()).getServices();
|
||||
dumpServices(((SystemUIApplication) getApplication()).getServices(), fd, pw, args);
|
||||
}
|
||||
|
||||
static void dumpServices(
|
||||
SystemUI[] services, FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
if (args == null || args.length == 0) {
|
||||
pw.println("dumping service: " + Dependency.class.getName());
|
||||
Dependency.staticDump(fd, pw, args);
|
||||
for (SystemUI ui: services) {
|
||||
pw.println("dumping service: " + ui.getClass().getName());
|
||||
ui.dump(fd, pw, args);
|
||||
@@ -78,6 +84,9 @@ public class SystemUIService extends Service {
|
||||
}
|
||||
} else {
|
||||
String svc = args[0].toLowerCase();
|
||||
if (Dependency.class.getName().endsWith(svc)) {
|
||||
Dependency.staticDump(fd, pw, args);
|
||||
}
|
||||
for (SystemUI ui: services) {
|
||||
String name = ui.getClass().getName().toLowerCase();
|
||||
if (name.endsWith(svc)) {
|
||||
|
||||
@@ -177,6 +177,12 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
|
||||
mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed();
|
||||
}
|
||||
|
||||
void onAssistHandlesRequested() {
|
||||
if (mInGesturalMode) {
|
||||
mBehaviorMap.get(mCurrentBehavior).onAssistHandlesRequested();
|
||||
}
|
||||
}
|
||||
|
||||
void setBehavior(AssistHandleBehavior behavior) {
|
||||
if (mCurrentBehavior == behavior) {
|
||||
return;
|
||||
@@ -316,6 +322,7 @@ public final class AssistHandleBehaviorController implements AssistHandleCallbac
|
||||
void onModeActivated(Context context, AssistHandleCallbacks callbacks);
|
||||
default void onModeDeactivated() {}
|
||||
default void onAssistantGesturePerformed() {}
|
||||
default void onAssistHandlesRequested() {}
|
||||
default void dump(PrintWriter pw, String prefix) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,6 +211,13 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
|
||||
mContext.getContentResolver(), LEARNING_EVENT_COUNT_KEY, ++mLearningCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAssistHandlesRequested() {
|
||||
if (mAssistHandleCallbacks != null && !mIsDozing && !mIsNavBarHidden && !mOnLockscreen) {
|
||||
mAssistHandleCallbacks.showAndGo();
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isNavBarHidden(int sysuiStateFlags) {
|
||||
return (sysuiStateFlags & QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
|
||||
}
|
||||
|
||||
@@ -48,9 +48,13 @@ import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Class to manage everything related to assist in SystemUI.
|
||||
*/
|
||||
@Singleton
|
||||
public class AssistManager implements ConfigurationChangedReceiver {
|
||||
|
||||
/**
|
||||
@@ -97,6 +101,8 @@ public class AssistManager implements ConfigurationChangedReceiver {
|
||||
private static final String INVOCATION_TIME_MS_KEY = "invocation_time_ms";
|
||||
private static final String INVOCATION_PHONE_STATE_KEY = "invocation_phone_state";
|
||||
public static final String INVOCATION_TYPE_KEY = "invocation_type";
|
||||
protected static final String ACTION_KEY = "action";
|
||||
protected static final String SHOW_ASSIST_HANDLES_ACTION = "show_assist_handles";
|
||||
|
||||
public static final int INVOCATION_TYPE_GESTURE = 1;
|
||||
public static final int INVOCATION_TYPE_ACTIVE_EDGE = 2;
|
||||
@@ -147,6 +153,7 @@ public class AssistManager implements ConfigurationChangedReceiver {
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public AssistManager(DeviceProvisionedController controller, Context context) {
|
||||
mContext = context;
|
||||
mDeviceProvisionedController = controller;
|
||||
@@ -204,6 +211,9 @@ public class AssistManager implements ConfigurationChangedReceiver {
|
||||
if (VERBOSE) {
|
||||
Log.v(TAG, "UI hints received");
|
||||
}
|
||||
if (SHOW_ASSIST_HANDLES_ACTION.equals(hints.getString(ACTION_KEY))) {
|
||||
requestAssistHandles();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -277,6 +287,10 @@ public class AssistManager implements ConfigurationChangedReceiver {
|
||||
mUiController.onGestureCompletion(velocity);
|
||||
}
|
||||
|
||||
protected void requestAssistHandles() {
|
||||
mHandleController.onAssistHandlesRequested();
|
||||
}
|
||||
|
||||
public void hideAssist() {
|
||||
mAssistUtils.hideCurrentSession();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.dock;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class DockManagerImpl implements DockManager {
|
||||
|
||||
@Inject
|
||||
public DockManagerImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(DockEventListener callback) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(DockEventListener callback) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDocked() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -81,6 +81,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.keyguard.ViewMediatorCallback;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.UiOffloadThread;
|
||||
@@ -713,8 +714,7 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
|
||||
// Assume keyguard is showing (unless it's disabled) until we know for sure, unless Keyguard
|
||||
// is disabled.
|
||||
if (mContext.getResources().getBoolean(
|
||||
com.android.keyguard.R.bool.config_enableKeyguardService)) {
|
||||
if (mContext.getResources().getBoolean(R.bool.config_enableKeyguardService)) {
|
||||
setShowingLocked(!shouldWaitForProvisioning()
|
||||
&& !mLockPatternUtils.isLockScreenDisabled(
|
||||
KeyguardUpdateMonitor.getCurrentUser()), true /* forceCallbacks */);
|
||||
|
||||
@@ -2,8 +2,16 @@ package com.android.systemui.power;
|
||||
|
||||
import com.android.settingslib.fuelgauge.Estimate;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class EnhancedEstimatesImpl implements EnhancedEstimates {
|
||||
|
||||
@Inject
|
||||
public EnhancedEstimatesImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHybridNotificationEnabled() {
|
||||
return false;
|
||||
|
||||
@@ -37,11 +37,15 @@ import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* This class handles listening to notification updates and passing them along to
|
||||
* NotificationPresenter to be displayed to the user.
|
||||
*/
|
||||
@SuppressLint("OverrideAbstract")
|
||||
@Singleton
|
||||
public class NotificationListener extends NotificationListenerWithPlugins {
|
||||
private static final String TAG = "NotificationListener";
|
||||
|
||||
@@ -56,6 +60,7 @@ public class NotificationListener extends NotificationListenerWithPlugins {
|
||||
private final ArrayList<NotificationSettingsListener> mSettingsListeners = new ArrayList<>();
|
||||
private final Context mContext;
|
||||
|
||||
@Inject
|
||||
public NotificationListener(Context context) {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
@@ -58,10 +58,14 @@ import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Handles keeping track of the current user, profiles, and various things related to hiding
|
||||
* contents, redacting notifications, and the lockscreen.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationLockscreenUserManagerImpl implements
|
||||
Dumpable, NotificationLockscreenUserManager, StateListener {
|
||||
private static final String TAG = "LockscreenUserManager";
|
||||
@@ -171,6 +175,7 @@ public class NotificationLockscreenUserManagerImpl implements
|
||||
return mEntryManager;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public NotificationLockscreenUserManagerImpl(Context context) {
|
||||
mContext = context;
|
||||
mDevicePolicyManager = (DevicePolicyManager) mContext.getSystemService(
|
||||
|
||||
@@ -54,11 +54,15 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* NotificationEntryManager is responsible for the adding, removing, and updating of notifications.
|
||||
* It also handles tasks such as their inflation and their interaction with other
|
||||
* Notification.*Manager objects.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationEntryManager implements
|
||||
Dumpable,
|
||||
NotificationContentInflater.InflationCallback,
|
||||
@@ -118,6 +122,7 @@ public class NotificationEntryManager implements
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
public NotificationEntryManager(Context context) {
|
||||
mNotificationData = new NotificationData();
|
||||
}
|
||||
|
||||
@@ -42,9 +42,13 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Provides heads-up and pulsing state for notification entries.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationInterruptionStateProvider {
|
||||
|
||||
private static final String TAG = "InterruptionStateProvider";
|
||||
@@ -72,6 +76,7 @@ public class NotificationInterruptionStateProvider {
|
||||
protected boolean mUseHeadsUp = false;
|
||||
private boolean mDisableNotificationAlerts;
|
||||
|
||||
@Inject
|
||||
public NotificationInterruptionStateProvider(Context context) {
|
||||
this(context,
|
||||
(PowerManager) context.getSystemService(Context.POWER_SERVICE),
|
||||
|
||||
@@ -40,9 +40,9 @@ import com.android.keyguard.KeyguardHostView;
|
||||
import com.android.keyguard.KeyguardSecurityView;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.keyguard.R;
|
||||
import com.android.keyguard.ViewMediatorCallback;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.keyguard.DismissCallbackRegistry;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
|
||||
@@ -77,6 +77,7 @@ public class KeyguardBouncer {
|
||||
}
|
||||
};
|
||||
private final Runnable mRemoveViewRunnable = this::removeView;
|
||||
private final KeyguardBypassController mKeyguardBypassController;
|
||||
protected KeyguardHostView mKeyguardView;
|
||||
private final Runnable mResetRunnable = ()-> {
|
||||
if (mKeyguardView != null) {
|
||||
@@ -97,7 +98,8 @@ public class KeyguardBouncer {
|
||||
LockPatternUtils lockPatternUtils, ViewGroup container,
|
||||
DismissCallbackRegistry dismissCallbackRegistry, FalsingManager falsingManager,
|
||||
BouncerExpansionCallback expansionCallback, UnlockMethodCache unlockMethodCache,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor, Handler handler) {
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
KeyguardBypassController keyguardBypassController, Handler handler) {
|
||||
mContext = context;
|
||||
mCallback = callback;
|
||||
mLockPatternUtils = lockPatternUtils;
|
||||
@@ -109,6 +111,7 @@ public class KeyguardBouncer {
|
||||
mHandler = handler;
|
||||
mUnlockMethodCache = unlockMethodCache;
|
||||
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
|
||||
mKeyguardBypassController = keyguardBypassController;
|
||||
}
|
||||
|
||||
public void show(boolean resetSecuritySelection) {
|
||||
@@ -171,7 +174,8 @@ public class KeyguardBouncer {
|
||||
// Split up the work over multiple frames.
|
||||
DejankUtils.removeCallbacks(mResetRunnable);
|
||||
if (mUnlockMethodCache.isFaceAuthEnabled() && !needsFullscreenBouncer()
|
||||
&& !mKeyguardUpdateMonitor.userNeedsStrongAuth()) {
|
||||
&& !mKeyguardUpdateMonitor.userNeedsStrongAuth()
|
||||
&& !mKeyguardBypassController.getBypassEnabled()) {
|
||||
mHandler.postDelayed(mShowRunnable, BOUNCER_FACE_DELAY);
|
||||
} else {
|
||||
DejankUtils.postAfterTraversal(mShowRunnable);
|
||||
|
||||
@@ -25,6 +25,10 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationData.KeyguardEnvironment;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class KeyguardEnvironmentImpl implements KeyguardEnvironment {
|
||||
|
||||
private static final String TAG = "KeyguardEnvironmentImpl";
|
||||
@@ -34,6 +38,7 @@ public class KeyguardEnvironmentImpl implements KeyguardEnvironment {
|
||||
private final DeviceProvisionedController mDeviceProvisionedController =
|
||||
Dependency.get(DeviceProvisionedController.class);
|
||||
|
||||
@Inject
|
||||
public KeyguardEnvironmentImpl() {
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import static android.app.StatusBarManager.WindowVisibleState;
|
||||
import static android.app.StatusBarManager.windowStateToString;
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
import static com.android.systemui.Dependency.BG_HANDLER;
|
||||
import static com.android.systemui.Dependency.MAIN_HANDLER;
|
||||
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
|
||||
@@ -238,6 +239,7 @@ import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import dagger.Subcomponent;
|
||||
|
||||
@@ -382,6 +384,9 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
@Nullable
|
||||
@Inject
|
||||
protected KeyguardLiftController mKeyguardLiftController;
|
||||
@Inject
|
||||
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
|
||||
boolean mAllowNotificationLongPress;
|
||||
|
||||
// expanded notifications
|
||||
protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
|
||||
@@ -1064,7 +1069,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
final NotificationRowBinderImpl rowBinder =
|
||||
new NotificationRowBinderImpl(
|
||||
mContext,
|
||||
SystemUIFactory.getInstance().provideAllowNotificationLongPress(),
|
||||
mAllowNotificationLongPress,
|
||||
mKeyguardBypassController,
|
||||
mStatusBarStateController);
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
mBiometricUnlockController = biometricUnlockController;
|
||||
mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext,
|
||||
mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry,
|
||||
mExpansionCallback, falsingManager);
|
||||
mExpansionCallback, falsingManager, bypassController);
|
||||
mNotificationPanelView = notificationPanelView;
|
||||
notificationPanelView.addExpansionListener(this);
|
||||
mBypassController = bypassController;
|
||||
|
||||
@@ -39,9 +39,9 @@ import android.view.WindowManager;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.keyguard.R;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
|
||||
@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.fragments.FragmentService;
|
||||
|
||||
public class TunerActivity extends Activity implements
|
||||
@@ -50,7 +51,7 @@ public class TunerActivity extends Activity implements
|
||||
setActionBar(toolbar);
|
||||
}
|
||||
|
||||
Dependency.initDependencies(this);
|
||||
Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent());
|
||||
|
||||
if (getFragmentManager().findFragmentByTag(TAG_TUNER) == null) {
|
||||
final String action = getIntent().getAction();
|
||||
|
||||
@@ -39,7 +39,7 @@ LOCAL_JAVA_LIBRARIES := \
|
||||
telephony-common \
|
||||
android.test.base \
|
||||
|
||||
LOCAL_AAPT_FLAGS := --extra-packages com.android.systemui:com.android.keyguard
|
||||
LOCAL_AAPT_FLAGS := --extra-packages com.android.systemui
|
||||
|
||||
# sign this with platform cert, so this test is allowed to inject key events into
|
||||
# UI it doesn't own. This is necessary to allow screenshots to be taken
|
||||
|
||||
@@ -46,6 +46,7 @@ import android.testing.TestableLooper;
|
||||
|
||||
import com.android.internal.telephony.IccCardConstants;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.widget.TextView;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -39,6 +39,7 @@ import android.widget.FrameLayout;
|
||||
import android.widget.TextClock;
|
||||
|
||||
import com.android.keyguard.clock.ClockManager;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.testing.AndroidTestingRunner
|
||||
import android.testing.TestableLooper
|
||||
import android.view.LayoutInflater
|
||||
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.view.LayoutInflater;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.view.LayoutInflater;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -27,6 +27,7 @@ import androidx.slice.SliceProvider;
|
||||
import androidx.slice.SliceSpecs;
|
||||
import androidx.slice.builders.ListBuilder;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.keyguard.KeyguardSliceProvider;
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.util.Assert;
|
||||
|
||||
@@ -74,6 +74,6 @@ public class DependencyTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testInitDependency() {
|
||||
Dependency.clearDependencies();
|
||||
Dependency.initDependencies(mContext);
|
||||
Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import androidx.test.filters.MediumTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.internal.util.XmlUtils;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -25,10 +25,6 @@ public class TestableDependency extends Dependency {
|
||||
private final ArraySet<Object> mInstantiatedObjects = new ArraySet<>();
|
||||
|
||||
public TestableDependency(Context context) {
|
||||
if (context instanceof SysuiTestableContext) {
|
||||
mComponents = ((SysuiTestableContext) context).getComponents();
|
||||
}
|
||||
mContext = context;
|
||||
SystemUIFactory.createFromConfig(context);
|
||||
SystemUIFactory.getInstance().getRootComponent()
|
||||
.createDependency()
|
||||
|
||||
@@ -20,7 +20,7 @@ import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
/**
|
||||
* Referenced by NotificationTestHelper#makeBubbleMetadata
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.android.systemui.screenshot;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
/**
|
||||
* A stub activity used in {@link ScreenshotTest}.
|
||||
*/
|
||||
|
||||
@@ -40,7 +40,6 @@ import android.widget.RemoteViews;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.bubbles.BubblesTestActivity;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
@@ -50,7 +49,7 @@ import com.android.systemui.statusbar.notification.row.NotificationContentInflat
|
||||
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
/**
|
||||
* A helper class to create {@link ExpandableNotificationRow} (for both individual and group
|
||||
|
||||
@@ -38,8 +38,8 @@ import android.widget.RemoteViews;
|
||||
import androidx.palette.graphics.Palette;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -23,7 +23,6 @@ import static com.android.systemui.statusbar.notification.row.NotificationConten
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -44,12 +43,12 @@ import android.widget.RemoteViews;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.InflationTask;
|
||||
import com.android.systemui.statusbar.NotificationTestHelper;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationContentInflater.InflationCallback;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -24,10 +24,10 @@ import android.widget.RemoteViews;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.NotificationTestHelper;
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
|
||||
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.never;
|
||||
@@ -84,6 +85,8 @@ public class KeyguardBouncerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private UnlockMethodCache mUnlockMethodCache;
|
||||
@Mock
|
||||
private KeyguardBypassController mKeyguardBypassController;
|
||||
@Mock
|
||||
private Handler mHandler;
|
||||
|
||||
private KeyguardBouncer mBouncer;
|
||||
@@ -98,7 +101,8 @@ public class KeyguardBouncerTest extends SysuiTestCase {
|
||||
when(mKeyguardHostView.getHeight()).thenReturn(500);
|
||||
mBouncer = new KeyguardBouncer(getContext(), mViewMediatorCallback,
|
||||
mLockPatternUtils, container, mDismissCallbackRegistry, mFalsingManager,
|
||||
mExpansionCallback, mUnlockMethodCache, mKeyguardUpdateMonitor, mHandler) {
|
||||
mExpansionCallback, mUnlockMethodCache, mKeyguardUpdateMonitor,
|
||||
mKeyguardBypassController, mHandler) {
|
||||
@Override
|
||||
protected void inflateView() {
|
||||
super.inflateView();
|
||||
@@ -390,6 +394,15 @@ public class KeyguardBouncerTest extends SysuiTestCase {
|
||||
verify(mHandler).removeCallbacks(eq(showRunnable.getValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShow_delaysIfFaceAuthIsRunning_unlessBypass() {
|
||||
when(mUnlockMethodCache.isFaceAuthEnabled()).thenReturn(true);
|
||||
when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true);
|
||||
mBouncer.show(true /* reset */);
|
||||
|
||||
verify(mHandler, never()).postDelayed(any(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterUpdateMonitorCallback() {
|
||||
verify(mKeyguardUpdateMonitor).registerCallback(any());
|
||||
|
||||
@@ -68,7 +68,7 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase {
|
||||
mDependency.injectTestDependency(ShadeController.class, mShadeController);
|
||||
mDependency.injectTestDependency(NotificationLockscreenUserManager.class,
|
||||
mNotificationLockscreenUserManager);
|
||||
mDependency.putComponent(CommandQueue.class, mock(CommandQueue.class));
|
||||
mContext.putComponent(CommandQueue.class, mock(CommandQueue.class));
|
||||
|
||||
mRemoteInputCallback = spy(new StatusBarRemoteInputCallback(mContext,
|
||||
mock(NotificationGroupManager.class)));
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkInfo;
|
||||
@@ -16,13 +23,6 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@RunWithLooper
|
||||
|
||||
@@ -20,6 +20,8 @@ import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import libcore.util.SneakyThrow;
|
||||
|
||||
import org.junit.rules.TestRule;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
@@ -55,7 +57,11 @@ public class DexmakerShareClassLoaderRule implements TestRule {
|
||||
* WARNING: This is absolutely incompatible with running tests in parallel!
|
||||
*/
|
||||
public static void runWithDexmakerShareClassLoader(Runnable r) {
|
||||
apply(r::run).run();
|
||||
try {
|
||||
apply(r::run).run();
|
||||
} catch (Throwable t) {
|
||||
SneakyThrow.sneakyThrow(t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user