[Partial Screensharing] Update app selector (ChooserActivity) header
Updates title style (increases font size), adds an icon and hides the drag handle for media projection app selector activity which is based on ChooserActivity. Bug: 235465652 Test: atest com.android.internal.app.ChooserActivityTest Test: screenshot test in a follow-up CL Change-Id: Ib717d3f7e6132d56e8344f4e06a12a64ee63457b
This commit is contained in:
@@ -1619,6 +1619,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>
|
||||||
@@ -1446,6 +1446,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