[Partial Screensharing] Update app selector (ChooserActivity) header am: 2d2b24f09d am: 21ceb39058
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19537653 Change-Id: Iac3673d9720a28cf07bcf069cc6f4c20eab21dba 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) {
|
||||
mChooserMultiProfilePagerAdapter.getInactiveListAdapter().destroyAppPredictor();
|
||||
}
|
||||
mPersonalAppPredictor = null;
|
||||
mWorkAppPredictor = null;
|
||||
}
|
||||
|
||||
@Override // ResolverListCommunicator
|
||||
|
||||
@@ -79,6 +79,11 @@
|
||||
<java-symbol type="id" name="deny_button" />
|
||||
<java-symbol type="id" name="description" />
|
||||
<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="edittext_container" />
|
||||
<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>
|
||||
@@ -1453,6 +1453,8 @@
|
||||
|
||||
<dimen name="fgs_manager_list_top_spacing">12dp</dimen>
|
||||
|
||||
<dimen name="media_projection_app_selector_icon_size">32dp</dimen>
|
||||
|
||||
<!-- Dream overlay related dimensions -->
|
||||
<dimen name="dream_overlay_status_bar_height">60dp</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.IBinder
|
||||
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.ResolverListController
|
||||
import com.android.internal.app.chooser.NotSelectableTargetInfo
|
||||
import com.android.internal.app.chooser.TargetInfo
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.util.AsyncActivityLauncher
|
||||
import com.android.systemui.R;
|
||||
import javax.inject.Inject
|
||||
import com.android.systemui.R
|
||||
import com.android.internal.R as AndroidR
|
||||
|
||||
class MediaProjectionAppSelectorActivity @Inject constructor(
|
||||
private val activityLauncher: AsyncActivityLauncher
|
||||
class MediaProjectionAppSelectorActivity constructor(
|
||||
private val activityLauncher: AsyncActivityLauncher,
|
||||
/** This is used to override the dependency in a screenshot test */
|
||||
@VisibleForTesting
|
||||
private val listControllerFactory: ((userHandle: UserHandle) -> ResolverListController)? = null
|
||||
) : ChooserActivity() {
|
||||
|
||||
override fun getLayoutResource() =
|
||||
R.layout.media_projection_app_selector
|
||||
|
||||
public override fun onCreate(bundle: Bundle?) {
|
||||
val queryIntent = Intent(Intent.ACTION_MAIN)
|
||||
.addCategory(Intent.CATEGORY_LAUNCHER)
|
||||
intent.putExtra(Intent.EXTRA_INTENT, queryIntent)
|
||||
|
||||
// TODO(b/235465652) Use resource lexeme
|
||||
intent.putExtra(Intent.EXTRA_TITLE, "Record or cast an app")
|
||||
// TODO(b/240939253): update copies
|
||||
val title = getString(R.string.media_projection_dialog_service_title)
|
||||
intent.putExtra(Intent.EXTRA_TITLE, title)
|
||||
|
||||
super.onCreate(bundle)
|
||||
|
||||
// TODO(b/235465652) we should update VisD of the title and add an icon
|
||||
findViewById<View>(R.id.title)?.visibility = View.VISIBLE
|
||||
requireViewById<ImageView>(AndroidR.id.icon).setImageResource(R.drawable.ic_present_to_all)
|
||||
}
|
||||
|
||||
override fun appliedThemeResId(): Int =
|
||||
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) {
|
||||
val currentListAdapter = mChooserMultiProfilePagerAdapter.activeListAdapter
|
||||
val targetInfo = currentListAdapter.targetInfoForPosition(which, filtered) ?: return
|
||||
|
||||
@@ -18,8 +18,10 @@ package com.android.systemui.media.dagger
|
||||
|
||||
import android.app.Activity
|
||||
import com.android.systemui.media.MediaProjectionAppSelectorActivity
|
||||
import com.android.systemui.util.AsyncActivityLauncher
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.multibindings.ClassKey
|
||||
import dagger.multibindings.IntoMap
|
||||
|
||||
@@ -29,7 +31,17 @@ abstract class MediaProjectionModule {
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(MediaProjectionAppSelectorActivity::class)
|
||||
abstract fun provideMediaProjectionAppSelectorActivity(
|
||||
abstract fun bindMediaProjectionAppSelectorActivity(
|
||||
activity: MediaProjectionAppSelectorActivity): Activity
|
||||
|
||||
companion object {
|
||||
@Provides
|
||||
fun provideMediaProjectionAppSelectorActivity(
|
||||
activityLauncher: AsyncActivityLauncher
|
||||
): MediaProjectionAppSelectorActivity {
|
||||
return MediaProjectionAppSelectorActivity(
|
||||
activityLauncher
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user