diff options
| author | 2023-12-19 21:11:55 +0000 | |
|---|---|---|
| committer | 2023-12-19 21:11:55 +0000 | |
| commit | a94d5736993840f1655c6163fe469d19ea2b3d86 (patch) | |
| tree | b278d68620b60f3d8a3da83186306f9220157d6c | |
| parent | 170445c454e4ee7e83f6272ab7d541949324e00e (diff) | |
| parent | 66ad1353967051e996c2f37354bb142facb721d1 (diff) | |
Merge "Use Launcher's widget picker to add widgets to the hub." into main
5 files changed, 34 insertions, 165 deletions
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 1a35f04b393f..a03fa9b39bfc 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -256,6 +256,9 @@ <!-- launcher apps --> <uses-permission android:name="android.permission.ACCESS_SHORTCUTS" /> + <!-- Permission to start Launcher's widget picker activity. --> + <uses-permission android:name="android.permission.START_WIDGET_PICKER_ACTIVITY" /> + <uses-permission android:name="android.permission.MODIFY_THEME_OVERLAY" /> <!-- accessibility --> @@ -974,15 +977,6 @@ android:excludeFromRecents="true" android:visibleToInstantApps="true"/> - <activity android:name="com.android.systemui.communal.widgets.WidgetPickerActivity" - android:theme="@style/Theme.EditWidgetsActivity" - android:excludeFromRecents="true" - android:autoRemoveFromRecents="true" - android:showOnLockScreen="true" - android:launchMode="singleTop" - android:exported="false"> - </activity> - <activity android:name="com.android.systemui.communal.widgets.EditWidgetsActivity" android:theme="@style/Theme.EditWidgetsActivity" android:excludeFromRecents="true" diff --git a/packages/SystemUI/res/layout/widget_picker.xml b/packages/SystemUI/res/layout/widget_picker.xml deleted file mode 100644 index 21dc224a6f14..000000000000 --- a/packages/SystemUI/res/layout/widget_picker.xml +++ /dev/null @@ -1,30 +0,0 @@ -<!-- - ~ Copyright (C) 2023 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. - --> - -<HorizontalScrollView - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <LinearLayout - android:id="@+id/widgets_container" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:gravity="center_vertical" - android:orientation="horizontal"> - </LinearLayout> - -</HorizontalScrollView> diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt index 887b18cfe4c9..0a13e4887ebe 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt @@ -16,8 +16,9 @@ package com.android.systemui.communal.widgets -import android.appwidget.AppWidgetProviderInfo +import android.content.ComponentName import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle import android.os.RemoteException import android.util.Log @@ -39,10 +40,8 @@ constructor( private var windowManagerService: IWindowManager? = null, ) : ComponentActivity() { companion object { - /** - * Intent extra name for the {@link AppWidgetProviderInfo} of a widget to add to hub mode. - */ - const val ADD_WIDGET_INFO = "add_widget_info" + private const val EXTRA_FILTER_STRATEGY = "filter_strategy" + private const val FILTER_STRATEGY_GLANCEABLE_HUB = 1 private const val TAG = "EditWidgetsActivity" } @@ -51,13 +50,8 @@ constructor( when (result.resultCode) { RESULT_OK -> { result.data - ?.let { - it.getParcelableExtra( - ADD_WIDGET_INFO, - AppWidgetProviderInfo::class.java - ) - } - ?.let { communalInteractor.addWidget(it.provider, 0) } + ?.getParcelableExtra(Intent.EXTRA_COMPONENT_NAME, ComponentName::class.java) + ?.let { communalInteractor.addWidget(it, 0) } ?: run { Log.w(TAG, "No AppWidgetProviderInfo found in result.") } } else -> @@ -71,13 +65,35 @@ constructor( override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + setShowWhenLocked(true) + setCommunalEditWidgetActivityContent( activity = this, viewModel = communalViewModel, onOpenWidgetPicker = { - addWidgetActivityLauncher.launch( - Intent(applicationContext, WidgetPickerActivity::class.java) - ) + val localPackageManager: PackageManager = getPackageManager() + val intent = + Intent(Intent.ACTION_MAIN).also { it.addCategory(Intent.CATEGORY_HOME) } + localPackageManager + .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) + ?.activityInfo + ?.packageName + ?.let { packageName -> + try { + addWidgetActivityLauncher.launch( + Intent(Intent.ACTION_PICK).also { + it.setPackage(packageName) + it.putExtra( + EXTRA_FILTER_STRATEGY, + FILTER_STRATEGY_GLANCEABLE_HUB + ) + } + ) + } catch (e: Exception) { + Log.e(TAG, "Failed to launch widget picker activity", e) + } + } + ?: run { Log.e(TAG, "Couldn't resolve launcher package name") } }, onEditDone = { try { diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/WidgetPickerActivity.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/WidgetPickerActivity.kt deleted file mode 100644 index a26afc86aa2e..000000000000 --- a/packages/SystemUI/src/com/android/systemui/communal/widgets/WidgetPickerActivity.kt +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ - -package com.android.systemui.communal.widgets - -import android.appwidget.AppWidgetManager -import android.appwidget.AppWidgetProviderInfo -import android.content.Intent -import android.graphics.Color -import android.os.Bundle -import android.util.Log -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.LinearLayout -import androidx.activity.ComponentActivity -import androidx.core.view.setMargins -import androidx.core.view.setPadding -import com.android.systemui.res.R -import javax.inject.Inject - -/** - * An Activity responsible for displaying a list of widgets to add to the hub mode grid. This is - * essentially a placeholder until Launcher's widget picker can be used. - */ -class WidgetPickerActivity -@Inject -constructor( - private val appWidgetManager: AppWidgetManager, -) : ComponentActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - setContentView(R.layout.widget_picker) - loadWidgets() - } - - private fun loadWidgets() { - val containerView: ViewGroup? = findViewById(R.id.widgets_container) - containerView?.apply { - try { - appWidgetManager - .getInstalledProviders(AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD) - ?.stream() - ?.forEach { widgetInfo -> - val activity = this@WidgetPickerActivity - (widgetInfo.loadPreviewImage(activity, 0) - ?: widgetInfo.loadIcon(activity, 0)) - ?.let { - addView( - ImageView(activity).also { v -> - v.setImageDrawable(it) - v.setBackgroundColor(WIDGET_PREVIEW_BACKGROUND_COLOR) - v.setPadding(WIDGET_PREVIEW_PADDING) - v.layoutParams = - LinearLayout.LayoutParams( - WIDGET_PREVIEW_SIZE, - WIDGET_PREVIEW_SIZE - ) - .also { lp -> - lp.setMargins(WIDGET_PREVIEW_MARGINS) - } - v.setOnClickListener { - setResult( - RESULT_OK, - Intent() - .putExtra( - EditWidgetsActivity.ADD_WIDGET_INFO, - widgetInfo - ) - ) - finish() - } - } - ) - } - } - } catch (e: RuntimeException) { - Log.e(TAG, "Exception fetching widget providers", e) - } - } - } - - companion object { - private const val WIDGET_PREVIEW_SIZE = 600 - private const val WIDGET_PREVIEW_MARGINS = 32 - private const val WIDGET_PREVIEW_PADDING = 32 - private val WIDGET_PREVIEW_BACKGROUND_COLOR = Color.rgb(216, 225, 220) - private const val TAG = "WidgetPickerActivity" - } -} diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java index 4b27af1fc989..9afd5ede0b4c 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java @@ -20,7 +20,6 @@ import android.app.Activity; import com.android.systemui.ForegroundServicesDialog; import com.android.systemui.communal.widgets.EditWidgetsActivity; -import com.android.systemui.communal.widgets.WidgetPickerActivity; import com.android.systemui.contrast.ContrastDialogActivity; import com.android.systemui.keyguard.WorkLockActivity; import com.android.systemui.people.PeopleSpaceActivity; @@ -158,12 +157,6 @@ public abstract class DefaultActivityBinder { @ClassKey(EditWidgetsActivity.class) public abstract Activity bindEditWidgetsActivity(EditWidgetsActivity activity); - /** Inject into WidgetPickerActivity. */ - @Binds - @IntoMap - @ClassKey(WidgetPickerActivity.class) - public abstract Activity bindWidgetPickerActivity(WidgetPickerActivity activity); - /** Inject into SwitchToManagedProfileForCallActivity. */ @Binds @IntoMap |