Merge "Fix default home detection logic" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-06-14 16:53:33 +00:00
committed by Android (Google) Code Review
2 changed files with 72 additions and 11 deletions

View File

@@ -16,14 +16,13 @@
package com.android.systemui.assist; package com.android.systemui.assist;
import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ResolveInfo;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.provider.Settings; import android.provider.Settings;
@@ -44,6 +43,7 @@ import com.android.systemui.statusbar.StatusBarState;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@@ -68,6 +68,14 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
private static final boolean DEFAULT_SUPPRESS_ON_LAUNCHER = false; private static final boolean DEFAULT_SUPPRESS_ON_LAUNCHER = false;
private static final boolean DEFAULT_SUPPRESS_ON_APPS = false; private static final boolean DEFAULT_SUPPRESS_ON_APPS = false;
private static final String[] DEFAULT_HOME_CHANGE_ACTIONS = new String[] {
PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED,
Intent.ACTION_BOOT_COMPLETED,
Intent.ACTION_PACKAGE_ADDED,
Intent.ACTION_PACKAGE_CHANGED,
Intent.ACTION_PACKAGE_REMOVED
};
private final StatusBarStateController.StateListener mStatusBarStateListener = private final StatusBarStateController.StateListener mStatusBarStateListener =
new StatusBarStateController.StateListener() { new StatusBarStateController.StateListener() {
@Override @Override
@@ -110,8 +118,7 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
mDefaultHome = getCurrentDefaultHome(); mDefaultHome = getCurrentDefaultHome();
} }
}; };
private final IntentFilter mDefaultHomeIntentFilter = private final IntentFilter mDefaultHomeIntentFilter;
new IntentFilter(ACTION_PREFERRED_ACTIVITY_CHANGED);
private final Runnable mResetConsecutiveTaskSwitches = this::resetConsecutiveTaskSwitches; private final Runnable mResetConsecutiveTaskSwitches = this::resetConsecutiveTaskSwitches;
private final Handler mHandler; private final Handler mHandler;
@@ -146,6 +153,10 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
mStatusBarStateController = Dependency.get(StatusBarStateController.class); mStatusBarStateController = Dependency.get(StatusBarStateController.class);
mActivityManagerWrapper = ActivityManagerWrapper.getInstance(); mActivityManagerWrapper = ActivityManagerWrapper.getInstance();
mOverviewProxyService = Dependency.get(OverviewProxyService.class); mOverviewProxyService = Dependency.get(OverviewProxyService.class);
mDefaultHomeIntentFilter = new IntentFilter();
for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
mDefaultHomeIntentFilter.addAction(action);
}
} }
@Override @Override
@@ -205,7 +216,24 @@ final class AssistHandleReminderExpBehavior implements BehaviorController {
@Nullable @Nullable
private static ComponentName getCurrentDefaultHome() { private static ComponentName getCurrentDefaultHome() {
return PackageManagerWrapper.getInstance().getHomeActivities(new ArrayList<>()); List<ResolveInfo> homeActivities = new ArrayList<>();
ComponentName defaultHome =
PackageManagerWrapper.getInstance().getHomeActivities(homeActivities);
if (defaultHome != null) {
return defaultHome;
}
int topPriority = Integer.MIN_VALUE;
ComponentName topComponent = null;
for (ResolveInfo resolveInfo : homeActivities) {
if (resolveInfo.priority > topPriority) {
topComponent = resolveInfo.activityInfo.getComponentName();
topPriority = resolveInfo.priority;
} else if (resolveInfo.priority == topPriority) {
topComponent = null;
}
}
return topComponent;
} }
private void handleStatusBarStateChanged(int newState) { private void handleStatusBarStateChanged(int newState) {

View File

@@ -16,8 +16,6 @@
package com.android.systemui.assist; package com.android.systemui.assist;
import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.KeyguardManager; import android.app.KeyguardManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@@ -25,6 +23,7 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ResolveInfo;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -38,6 +37,7 @@ import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
/** Class to monitor and report the state of the phone. */ /** Class to monitor and report the state of the phone. */
final class PhoneStateMonitor { final class PhoneStateMonitor {
@@ -53,6 +53,14 @@ final class PhoneStateMonitor {
private static final int PHONE_STATE_APP_IMMERSIVE = 9; private static final int PHONE_STATE_APP_IMMERSIVE = 9;
private static final int PHONE_STATE_APP_FULLSCREEN = 10; private static final int PHONE_STATE_APP_FULLSCREEN = 10;
private static final String[] DEFAULT_HOME_CHANGE_ACTIONS = new String[] {
PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED,
Intent.ACTION_BOOT_COMPLETED,
Intent.ACTION_PACKAGE_ADDED,
Intent.ACTION_PACKAGE_CHANGED,
Intent.ACTION_PACKAGE_REMOVED
};
private final Context mContext; private final Context mContext;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
@@ -64,14 +72,17 @@ final class PhoneStateMonitor {
mStatusBarStateController = Dependency.get(StatusBarStateController.class); mStatusBarStateController = Dependency.get(StatusBarStateController.class);
ActivityManagerWrapper activityManagerWrapper = ActivityManagerWrapper.getInstance(); ActivityManagerWrapper activityManagerWrapper = ActivityManagerWrapper.getInstance();
mDefaultHome = PackageManagerWrapper.getInstance().getHomeActivities(new ArrayList<>()); mDefaultHome = getCurrentDefaultHome();
IntentFilter intentFilter = new IntentFilter();
for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
intentFilter.addAction(action);
}
mContext.registerReceiver(new BroadcastReceiver() { mContext.registerReceiver(new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
mDefaultHome = mDefaultHome = getCurrentDefaultHome();
PackageManagerWrapper.getInstance().getHomeActivities(new ArrayList<>());
} }
}, new IntentFilter(ACTION_PREFERRED_ACTIVITY_CHANGED)); }, intentFilter);
mLauncherShowing = isLauncherShowing(activityManagerWrapper.getRunningTask()); mLauncherShowing = isLauncherShowing(activityManagerWrapper.getRunningTask());
activityManagerWrapper.registerTaskStackListener(new TaskStackChangeListener() { activityManagerWrapper.registerTaskStackListener(new TaskStackChangeListener() {
@Override @Override
@@ -93,6 +104,28 @@ final class PhoneStateMonitor {
return phoneState; return phoneState;
} }
@Nullable
private static ComponentName getCurrentDefaultHome() {
List<ResolveInfo> homeActivities = new ArrayList<>();
ComponentName defaultHome =
PackageManagerWrapper.getInstance().getHomeActivities(homeActivities);
if (defaultHome != null) {
return defaultHome;
}
int topPriority = Integer.MIN_VALUE;
ComponentName topComponent = null;
for (ResolveInfo resolveInfo : homeActivities) {
if (resolveInfo.priority > topPriority) {
topComponent = resolveInfo.activityInfo.getComponentName();
topPriority = resolveInfo.priority;
} else if (resolveInfo.priority == topPriority) {
topComponent = null;
}
}
return topComponent;
}
private int getPhoneLockscreenState() { private int getPhoneLockscreenState() {
if (isDozing()) { if (isDozing()) {
return PHONE_STATE_AOD1; return PHONE_STATE_AOD1;