Loading core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +3 −3 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { * <code>1</code> would return the work profile {@link ProfileDescriptor}.</li> * </ul> */ abstract ProfileDescriptor getItem(int pageIndex); public abstract ProfileDescriptor getItem(int pageIndex); /** * Returns the number of {@link ProfileDescriptor} objects. Loading Loading @@ -438,8 +438,8 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { && isQuietModeEnabled(mWorkProfileUserHandle)); } protected class ProfileDescriptor { final ViewGroup rootView; public static class ProfileDescriptor { public final ViewGroup rootView; private final ViewGroup mEmptyStateView; ProfileDescriptor(ViewGroup rootView) { this.rootView = rootView; Loading core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd } @Override ChooserProfileDescriptor getItem(int pageIndex) { public ChooserProfileDescriptor getItem(int pageIndex) { return mItems[pageIndex]; } Loading core/java/com/android/internal/app/ResolverActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -2623,13 +2623,13 @@ public class ResolverActivity extends Activity implements * An a11y delegate that expands resolver drawer when gesture navigation reaches a partially * invisible target in the list. */ private static class AppListAccessibilityDelegate extends View.AccessibilityDelegate { public static class AppListAccessibilityDelegate extends View.AccessibilityDelegate { private final ResolverDrawerLayout mDrawer; @Nullable private final View mBottomBar; private final Rect mRect = new Rect(); private AppListAccessibilityDelegate(ResolverDrawerLayout drawer) { public AppListAccessibilityDelegate(ResolverDrawerLayout drawer) { mDrawer = drawer; mBottomBar = mDrawer.findViewById(R.id.button_bar_container); } Loading core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA } @Override ResolverProfileDescriptor getItem(int pageIndex) { public ResolverProfileDescriptor getItem(int pageIndex) { return mItems[pageIndex]; } Loading packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt +50 −0 Original line number Diff line number Diff line Loading @@ -29,7 +29,10 @@ import android.os.Bundle import android.os.IBinder import android.os.ResultReceiver import android.os.UserHandle import android.util.Log import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry Loading @@ -40,6 +43,9 @@ import com.android.internal.app.ChooserActivity import com.android.internal.app.ResolverListController import com.android.internal.app.chooser.NotSelectableTargetInfo import com.android.internal.app.chooser.TargetInfo import com.android.internal.widget.RecyclerView import com.android.internal.widget.RecyclerViewAccessibilityDelegate import com.android.internal.widget.ResolverDrawerLayout import com.android.systemui.R import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorComponent import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorController Loading Loading @@ -105,6 +111,10 @@ class MediaProjectionAppSelectorActivity( super.onCreate(bundle) controller.init() // we override AppList's AccessibilityDelegate set in ResolverActivity.onCreate because in // our case this delegate must extend RecyclerViewAccessibilityDelegate, otherwise // RecyclerView scrolling is broken setAppListAccessibilityDelegate() } override fun onStart() { Loading Loading @@ -277,6 +287,8 @@ class MediaProjectionAppSelectorActivity( recentsViewController.createView(parent) companion object { const val TAG = "MediaProjectionAppSelectorActivity" /** * When EXTRA_CAPTURE_REGION_RESULT_RECEIVER is passed as intent extra the activity will * send the [CaptureRegion] to the result receiver instead of returning media projection Loading Loading @@ -313,4 +325,42 @@ class MediaProjectionAppSelectorActivity( putExtra(EXTRA_SELECTED_PROFILE, selectedProfile) } } private fun setAppListAccessibilityDelegate() { val rdl = requireViewById<ResolverDrawerLayout>(com.android.internal.R.id.contentPanel) for (i in 0 until mMultiProfilePagerAdapter.count) { val list = mMultiProfilePagerAdapter .getItem(i) .rootView .findViewById<View>(com.android.internal.R.id.resolver_list) if (list == null || list !is RecyclerView) { Log.wtf(TAG, "MediaProjection only supports RecyclerView") } else { list.accessibilityDelegate = RecyclerViewExpandingAccessibilityDelegate(rdl, list) } } } /** * An a11y delegate propagating all a11y events to [AppListAccessibilityDelegate] so that it can * expand drawer when needed. It needs to extend [RecyclerViewAccessibilityDelegate] because * that superclass handles RecyclerView scrolling while using a11y services. */ private class RecyclerViewExpandingAccessibilityDelegate( rdl: ResolverDrawerLayout, view: RecyclerView ) : RecyclerViewAccessibilityDelegate(view) { private val delegate = AppListAccessibilityDelegate(rdl) override fun onRequestSendAccessibilityEvent( host: ViewGroup, child: View, event: AccessibilityEvent ): Boolean { super.onRequestSendAccessibilityEvent(host, child, event) return delegate.onRequestSendAccessibilityEvent(host, child, event) } } } Loading
core/java/com/android/internal/app/AbstractMultiProfilePagerAdapter.java +3 −3 Original line number Diff line number Diff line Loading @@ -177,7 +177,7 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { * <code>1</code> would return the work profile {@link ProfileDescriptor}.</li> * </ul> */ abstract ProfileDescriptor getItem(int pageIndex); public abstract ProfileDescriptor getItem(int pageIndex); /** * Returns the number of {@link ProfileDescriptor} objects. Loading Loading @@ -438,8 +438,8 @@ public abstract class AbstractMultiProfilePagerAdapter extends PagerAdapter { && isQuietModeEnabled(mWorkProfileUserHandle)); } protected class ProfileDescriptor { final ViewGroup rootView; public static class ProfileDescriptor { public final ViewGroup rootView; private final ViewGroup mEmptyStateView; ProfileDescriptor(ViewGroup rootView) { this.rootView = rootView; Loading
core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -94,7 +94,7 @@ public class ChooserMultiProfilePagerAdapter extends AbstractMultiProfilePagerAd } @Override ChooserProfileDescriptor getItem(int pageIndex) { public ChooserProfileDescriptor getItem(int pageIndex) { return mItems[pageIndex]; } Loading
core/java/com/android/internal/app/ResolverActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -2623,13 +2623,13 @@ public class ResolverActivity extends Activity implements * An a11y delegate that expands resolver drawer when gesture navigation reaches a partially * invisible target in the list. */ private static class AppListAccessibilityDelegate extends View.AccessibilityDelegate { public static class AppListAccessibilityDelegate extends View.AccessibilityDelegate { private final ResolverDrawerLayout mDrawer; @Nullable private final View mBottomBar; private final Rect mRect = new Rect(); private AppListAccessibilityDelegate(ResolverDrawerLayout drawer) { public AppListAccessibilityDelegate(ResolverDrawerLayout drawer) { mDrawer = drawer; mBottomBar = mDrawer.findViewById(R.id.button_bar_container); } Loading
core/java/com/android/internal/app/ResolverMultiProfilePagerAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerA } @Override ResolverProfileDescriptor getItem(int pageIndex) { public ResolverProfileDescriptor getItem(int pageIndex) { return mItems[pageIndex]; } Loading
packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt +50 −0 Original line number Diff line number Diff line Loading @@ -29,7 +29,10 @@ import android.os.Bundle import android.os.IBinder import android.os.ResultReceiver import android.os.UserHandle import android.util.Log import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry Loading @@ -40,6 +43,9 @@ import com.android.internal.app.ChooserActivity import com.android.internal.app.ResolverListController import com.android.internal.app.chooser.NotSelectableTargetInfo import com.android.internal.app.chooser.TargetInfo import com.android.internal.widget.RecyclerView import com.android.internal.widget.RecyclerViewAccessibilityDelegate import com.android.internal.widget.ResolverDrawerLayout import com.android.systemui.R import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorComponent import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorController Loading Loading @@ -105,6 +111,10 @@ class MediaProjectionAppSelectorActivity( super.onCreate(bundle) controller.init() // we override AppList's AccessibilityDelegate set in ResolverActivity.onCreate because in // our case this delegate must extend RecyclerViewAccessibilityDelegate, otherwise // RecyclerView scrolling is broken setAppListAccessibilityDelegate() } override fun onStart() { Loading Loading @@ -277,6 +287,8 @@ class MediaProjectionAppSelectorActivity( recentsViewController.createView(parent) companion object { const val TAG = "MediaProjectionAppSelectorActivity" /** * When EXTRA_CAPTURE_REGION_RESULT_RECEIVER is passed as intent extra the activity will * send the [CaptureRegion] to the result receiver instead of returning media projection Loading Loading @@ -313,4 +325,42 @@ class MediaProjectionAppSelectorActivity( putExtra(EXTRA_SELECTED_PROFILE, selectedProfile) } } private fun setAppListAccessibilityDelegate() { val rdl = requireViewById<ResolverDrawerLayout>(com.android.internal.R.id.contentPanel) for (i in 0 until mMultiProfilePagerAdapter.count) { val list = mMultiProfilePagerAdapter .getItem(i) .rootView .findViewById<View>(com.android.internal.R.id.resolver_list) if (list == null || list !is RecyclerView) { Log.wtf(TAG, "MediaProjection only supports RecyclerView") } else { list.accessibilityDelegate = RecyclerViewExpandingAccessibilityDelegate(rdl, list) } } } /** * An a11y delegate propagating all a11y events to [AppListAccessibilityDelegate] so that it can * expand drawer when needed. It needs to extend [RecyclerViewAccessibilityDelegate] because * that superclass handles RecyclerView scrolling while using a11y services. */ private class RecyclerViewExpandingAccessibilityDelegate( rdl: ResolverDrawerLayout, view: RecyclerView ) : RecyclerViewAccessibilityDelegate(view) { private val delegate = AppListAccessibilityDelegate(rdl) override fun onRequestSendAccessibilityEvent( host: ViewGroup, child: View, event: AccessibilityEvent ): Boolean { super.onRequestSendAccessibilityEvent(host, child, event) return delegate.onRequestSendAccessibilityEvent(host, child, event) } } }