[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:
Nick Chameyev
2022-08-05 16:36:46 +00:00
parent 4cce97fd2e
commit 2d2b24f09d
7 changed files with 160 additions and 10 deletions

View File

@@ -1619,6 +1619,8 @@ public class ChooserActivity extends ResolverActivity implements
if (mChooserMultiProfilePagerAdapter.getInactiveListAdapter() != null) {
mChooserMultiProfilePagerAdapter.getInactiveListAdapter().destroyAppPredictor();
}
mPersonalAppPredictor = null;
mWorkAppPredictor = null;
}
@Override // ResolverListCommunicator

View File

@@ -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" />

View 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>

View File

@@ -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>

View File

@@ -1446,6 +1446,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>

View File

@@ -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

View File

@@ -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
)
}
}
}