Merge "Add multi-user support for kids mode" into tm-dev

This commit is contained in:
Shawn Lin
2022-05-10 12:30:16 +00:00
committed by Android (Google) Code Review
4 changed files with 45 additions and 11 deletions

View File

@@ -16,13 +16,18 @@
package com.android.internal.policy; package com.android.internal.policy;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import java.util.Collection;
/** /**
* A ContentObserver for listening {@link Settings.Secure#NAV_BAR_FORCE_VISIBLE} setting key. * A ContentObserver for listening {@link Settings.Secure#NAV_BAR_FORCE_VISIBLE} setting key.
* *
@@ -59,7 +64,11 @@ public class ForceShowNavBarSettingsObserver extends ContentObserver {
} }
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange, @NonNull Collection<Uri> uris, int flags, int userId) {
if (userId != ActivityManager.getCurrentUser()) {
return;
}
if (mOnChangeRunnable != null) { if (mOnChangeRunnable != null) {
mOnChangeRunnable.run(); mOnChangeRunnable.run();
} }

View File

@@ -16,13 +16,18 @@
package com.android.wm.shell.kidsmode; package com.android.wm.shell.kidsmode;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import java.util.Collection;
/** /**
* A ContentObserver for listening kids mode relative setting keys: * A ContentObserver for listening kids mode relative setting keys:
* - {@link Settings.Secure#NAVIGATION_MODE} * - {@link Settings.Secure#NAVIGATION_MODE}
@@ -64,7 +69,11 @@ public class KidsModeSettingsObserver extends ContentObserver {
} }
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange, @NonNull Collection<Uri> uris, int flags, int userId) {
if (userId != ActivityManager.getCurrentUser()) {
return;
}
if (mOnChangeRunnable != null) { if (mOnChangeRunnable != null) {
mOnChangeRunnable.run(); mOnChangeRunnable.run();
} }

View File

@@ -23,7 +23,10 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.DEFAULT_DISPLAY;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Binder; import android.os.Binder;
@@ -87,6 +90,13 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer {
private KidsModeSettingsObserver mKidsModeSettingsObserver; private KidsModeSettingsObserver mKidsModeSettingsObserver;
private boolean mEnabled; private boolean mEnabled;
private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateKidsModeState();
}
};
DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener = DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
new DisplayController.OnDisplaysChangedListener() { new DisplayController.OnDisplaysChangedListener() {
@Override @Override
@@ -169,12 +179,15 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer {
public void initialize(StartingWindowController startingWindowController) { public void initialize(StartingWindowController startingWindowController) {
initStartingWindow(startingWindowController); initStartingWindow(startingWindowController);
if (mKidsModeSettingsObserver == null) { if (mKidsModeSettingsObserver == null) {
mKidsModeSettingsObserver = new KidsModeSettingsObserver( mKidsModeSettingsObserver = new KidsModeSettingsObserver(mMainHandler, mContext);
mMainHandler, mContext);
} }
mKidsModeSettingsObserver.setOnChangeRunnable(() -> updateKidsModeState()); mKidsModeSettingsObserver.setOnChangeRunnable(() -> updateKidsModeState());
updateKidsModeState(); updateKidsModeState();
mKidsModeSettingsObserver.register(); mKidsModeSettingsObserver.register();
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
mContext.registerReceiverForAllUsers(mUserSwitchIntentReceiver, filter, null, mMainHandler);
} }
@Override @Override

View File

@@ -651,17 +651,19 @@ public class DisplayPolicy {
mForceShowNavBarSettingsObserver = new ForceShowNavBarSettingsObserver( mForceShowNavBarSettingsObserver = new ForceShowNavBarSettingsObserver(
mHandler, mContext); mHandler, mContext);
mForceShowNavBarSettingsObserver.setOnChangeRunnable(() -> { mForceShowNavBarSettingsObserver.setOnChangeRunnable(this::updateForceShowNavBarSettings);
synchronized (mLock) {
mForceShowNavigationBarEnabled =
mForceShowNavBarSettingsObserver.isEnabled();
updateSystemBarAttributes();
}
});
mForceShowNavigationBarEnabled = mForceShowNavBarSettingsObserver.isEnabled(); mForceShowNavigationBarEnabled = mForceShowNavBarSettingsObserver.isEnabled();
mHandler.post(mForceShowNavBarSettingsObserver::register); mHandler.post(mForceShowNavBarSettingsObserver::register);
} }
private void updateForceShowNavBarSettings() {
synchronized (mLock) {
mForceShowNavigationBarEnabled =
mForceShowNavBarSettingsObserver.isEnabled();
updateSystemBarAttributes();
}
}
/** /**
* Returns the first non-null alt bar window matching the given position. * Returns the first non-null alt bar window matching the given position.
*/ */
@@ -1801,6 +1803,7 @@ public class DisplayPolicy {
*/ */
public void switchUser() { public void switchUser() {
updateCurrentUserResources(); updateCurrentUserResources();
updateForceShowNavBarSettings();
} }
/** /**