[Partial Screensharing] Update app selector (ChooserActivity) header am: 2d2b24f09d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19537653 Change-Id: Ica3a17529f4e730104bf6ee1b43bc5d24bbaf584 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1632,6 +1632,8 @@ public class ChooserActivity extends ResolverActivity implements
|
|||||||
if (mChooserMultiProfilePagerAdapter.getInactiveListAdapter() != null) {
|
if (mChooserMultiProfilePagerAdapter.getInactiveListAdapter() != null) {
|
||||||
mChooserMultiProfilePagerAdapter.getInactiveListAdapter().destroyAppPredictor();
|
mChooserMultiProfilePagerAdapter.getInactiveListAdapter().destroyAppPredictor();
|
||||||
}
|
}
|
||||||
|
mPersonalAppPredictor = null;
|
||||||
|
mWorkAppPredictor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override // ResolverListCommunicator
|
@Override // ResolverListCommunicator
|
||||||
|
|||||||
@@ -79,6 +79,11 @@
|
|||||||
<java-symbol type="id" name="deny_button" />
|
<java-symbol type="id" name="deny_button" />
|
||||||
<java-symbol type="id" name="description" />
|
<java-symbol type="id" name="description" />
|
||||||
<java-symbol type="id" name="divider" />
|
<java-symbol type="id" name="divider" />
|
||||||
|
<java-symbol type="id" name="drag" />
|
||||||
|
<java-symbol type="id" name="profile_pager" />
|
||||||
|
<java-symbol type="id" name="chooser_header" />
|
||||||
|
<java-symbol type="id" name="content_preview_container" />
|
||||||
|
<java-symbol type="id" name="profile_tabhost" />
|
||||||
<java-symbol type="id" name="edit_query" />
|
<java-symbol type="id" name="edit_query" />
|
||||||
<java-symbol type="id" name="edittext_container" />
|
<java-symbol type="id" name="edittext_container" />
|
||||||
<java-symbol type="id" name="expand_activities_button" />
|
<java-symbol type="id" name="expand_activities_button" />
|
||||||
|
|||||||
25
packages/SystemUI/res/drawable/ic_present_to_all.xml
Normal file
25
packages/SystemUI/res/drawable/ic_present_to_all.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (C) 2022 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v14c0,1.11 0.89,2 2,2h18c1.11,0 2,-0.89 2,-2L23,5c0,-1.11 -0.89,-2 -2,-2zM21,19.02L3,19.02L3,4.98h18v14.04zM8,12l4,-4 4,4 -1.41,1.41L13,11.83L13,16h-2v-4.17l-1.59,1.59L8,12z"/>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (C) 2022 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.
|
||||||
|
-->
|
||||||
|
<com.android.internal.widget.ResolverDrawerLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
androidprv:maxCollapsedHeight="0dp"
|
||||||
|
androidprv:maxCollapsedHeightSmall="56dp"
|
||||||
|
androidprv:maxWidth="@*android:dimen/chooser_width"
|
||||||
|
android:id="@*android:id/contentPanel">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@*android:id/chooser_header"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
androidprv:layout_alwaysShow="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:elevation="0dp"
|
||||||
|
android:background="@*android:drawable/bottomsheet_background">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@*android:id/icon"
|
||||||
|
android:layout_width="@dimen/media_projection_app_selector_icon_size"
|
||||||
|
android:layout_height="@dimen/media_projection_app_selector_icon_size"
|
||||||
|
android:layout_marginTop="@*android:dimen/chooser_edge_margin_normal"
|
||||||
|
android:layout_marginBottom="@*android:dimen/chooser_edge_margin_normal"
|
||||||
|
android:importantForAccessibility="no"
|
||||||
|
android:tint="?android:attr/textColorPrimary"/>
|
||||||
|
|
||||||
|
<TextView android:id="@*android:id/title"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingBottom="@*android:dimen/chooser_view_spacing"
|
||||||
|
android:paddingLeft="24dp"
|
||||||
|
android:paddingRight="24dp"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@*android:id/content_preview_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<TabHost
|
||||||
|
android:id="@*android:id/profile_tabhost"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:background="?android:attr/colorBackground">
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
<TabWidget
|
||||||
|
android:id="@*android:id/tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone">
|
||||||
|
</TabWidget>
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@*android:id/tabcontent"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
<com.android.internal.app.ResolverViewPager
|
||||||
|
android:id="@*android:id/profile_pager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
</FrameLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</TabHost>
|
||||||
|
|
||||||
|
</com.android.internal.widget.ResolverDrawerLayout>
|
||||||
@@ -1440,6 +1440,8 @@
|
|||||||
|
|
||||||
<dimen name="fgs_manager_list_top_spacing">12dp</dimen>
|
<dimen name="fgs_manager_list_top_spacing">12dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="media_projection_app_selector_icon_size">32dp</dimen>
|
||||||
|
|
||||||
<!-- Dream overlay related dimensions -->
|
<!-- Dream overlay related dimensions -->
|
||||||
<dimen name="dream_overlay_status_bar_height">60dp</dimen>
|
<dimen name="dream_overlay_status_bar_height">60dp</dimen>
|
||||||
<dimen name="dream_overlay_status_bar_margin">40dp</dimen>
|
<dimen name="dream_overlay_status_bar_margin">40dp</dimen>
|
||||||
|
|||||||
@@ -23,35 +23,47 @@ import android.os.Binder
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.ResultReceiver
|
import android.os.ResultReceiver
|
||||||
import android.view.View
|
import android.os.UserHandle
|
||||||
|
import android.widget.ImageView
|
||||||
import com.android.internal.app.ChooserActivity
|
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.NotSelectableTargetInfo
|
||||||
import com.android.internal.app.chooser.TargetInfo
|
import com.android.internal.app.chooser.TargetInfo
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.systemui.util.AsyncActivityLauncher
|
import com.android.systemui.util.AsyncActivityLauncher
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R
|
||||||
import javax.inject.Inject
|
import com.android.internal.R as AndroidR
|
||||||
|
|
||||||
class MediaProjectionAppSelectorActivity @Inject constructor(
|
class MediaProjectionAppSelectorActivity constructor(
|
||||||
private val activityLauncher: AsyncActivityLauncher
|
private val activityLauncher: AsyncActivityLauncher,
|
||||||
|
/** This is used to override the dependency in a screenshot test */
|
||||||
|
@VisibleForTesting
|
||||||
|
private val listControllerFactory: ((userHandle: UserHandle) -> ResolverListController)? = null
|
||||||
) : ChooserActivity() {
|
) : ChooserActivity() {
|
||||||
|
|
||||||
|
override fun getLayoutResource() =
|
||||||
|
R.layout.media_projection_app_selector
|
||||||
|
|
||||||
public override fun onCreate(bundle: Bundle?) {
|
public override fun onCreate(bundle: Bundle?) {
|
||||||
val queryIntent = Intent(Intent.ACTION_MAIN)
|
val queryIntent = Intent(Intent.ACTION_MAIN)
|
||||||
.addCategory(Intent.CATEGORY_LAUNCHER)
|
.addCategory(Intent.CATEGORY_LAUNCHER)
|
||||||
intent.putExtra(Intent.EXTRA_INTENT, queryIntent)
|
intent.putExtra(Intent.EXTRA_INTENT, queryIntent)
|
||||||
|
|
||||||
// TODO(b/235465652) Use resource lexeme
|
// TODO(b/240939253): update copies
|
||||||
intent.putExtra(Intent.EXTRA_TITLE, "Record or cast an app")
|
val title = getString(R.string.media_projection_dialog_service_title)
|
||||||
|
intent.putExtra(Intent.EXTRA_TITLE, title)
|
||||||
|
|
||||||
super.onCreate(bundle)
|
super.onCreate(bundle)
|
||||||
|
|
||||||
// TODO(b/235465652) we should update VisD of the title and add an icon
|
requireViewById<ImageView>(AndroidR.id.icon).setImageResource(R.drawable.ic_present_to_all)
|
||||||
findViewById<View>(R.id.title)?.visibility = View.VISIBLE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun appliedThemeResId(): Int =
|
override fun appliedThemeResId(): Int =
|
||||||
R.style.Theme_SystemUI_MediaProjectionAppSelector
|
R.style.Theme_SystemUI_MediaProjectionAppSelector
|
||||||
|
|
||||||
|
override fun createListController(userHandle: UserHandle): ResolverListController =
|
||||||
|
listControllerFactory?.invoke(userHandle) ?: super.createListController(userHandle)
|
||||||
|
|
||||||
override fun startSelected(which: Int, always: Boolean, filtered: Boolean) {
|
override fun startSelected(which: Int, always: Boolean, filtered: Boolean) {
|
||||||
val currentListAdapter = mChooserMultiProfilePagerAdapter.activeListAdapter
|
val currentListAdapter = mChooserMultiProfilePagerAdapter.activeListAdapter
|
||||||
val targetInfo = currentListAdapter.targetInfoForPosition(which, filtered) ?: return
|
val targetInfo = currentListAdapter.targetInfoForPosition(which, filtered) ?: return
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ package com.android.systemui.media.dagger
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import com.android.systemui.media.MediaProjectionAppSelectorActivity
|
import com.android.systemui.media.MediaProjectionAppSelectorActivity
|
||||||
|
import com.android.systemui.util.AsyncActivityLauncher
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
import dagger.multibindings.ClassKey
|
import dagger.multibindings.ClassKey
|
||||||
import dagger.multibindings.IntoMap
|
import dagger.multibindings.IntoMap
|
||||||
|
|
||||||
@@ -29,7 +31,17 @@ abstract class MediaProjectionModule {
|
|||||||
@Binds
|
@Binds
|
||||||
@IntoMap
|
@IntoMap
|
||||||
@ClassKey(MediaProjectionAppSelectorActivity::class)
|
@ClassKey(MediaProjectionAppSelectorActivity::class)
|
||||||
abstract fun provideMediaProjectionAppSelectorActivity(
|
abstract fun bindMediaProjectionAppSelectorActivity(
|
||||||
activity: MediaProjectionAppSelectorActivity): Activity
|
activity: MediaProjectionAppSelectorActivity): Activity
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@Provides
|
||||||
|
fun provideMediaProjectionAppSelectorActivity(
|
||||||
|
activityLauncher: AsyncActivityLauncher
|
||||||
|
): MediaProjectionAppSelectorActivity {
|
||||||
|
return MediaProjectionAppSelectorActivity(
|
||||||
|
activityLauncher
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user