From 6caeeb1aebb2231942581ce63fbca535db10f06c Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Mon, 7 Aug 2023 10:09:24 +0200 Subject: [PATCH] Convert PeopleSpaceActivity to Kotlin This CL converts the PeopleSpaceActivity to Kotlin. This is so that ag/24308773 can call coroutines extension functions, which look extremely bad when called in Java. This is a pure conversion with no change in logic. Bug: 238993727 Test: Manual, built and started the PeopleSpaceActivity by adding a Conversation widget to the launcher. Change-Id: Id5e94ce517111d503a7e48576891d7b7680835e3 Change-Id: Id8eeac2b5dd52849b85f9e92c7e052987507451c --- .../systemui/people/PeopleSpaceActivity.java | 98 ------------------- .../systemui/people/PeopleSpaceActivity.kt | 85 ++++++++++++++++ 2 files changed, 85 insertions(+), 98 deletions(-) delete mode 100644 packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java create mode 100644 packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java deleted file mode 100644 index d1d3e3de39f0d..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2020 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.people; - -import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID; -import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID; - -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.ViewGroup; - -import androidx.activity.ComponentActivity; -import androidx.lifecycle.ViewModelProvider; - -import com.android.systemui.compose.ComposeFacade; -import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.flags.Flags; -import com.android.systemui.people.ui.view.PeopleViewBinder; -import com.android.systemui.people.ui.viewmodel.PeopleViewModel; - -import javax.inject.Inject; - -import kotlin.Unit; -import kotlin.jvm.functions.Function1; - -/** People Tile Widget configuration activity that shows the user their conversation tiles. */ -public class PeopleSpaceActivity extends ComponentActivity { - - private static final String TAG = "PeopleSpaceActivity"; - private static final boolean DEBUG = PeopleSpaceUtils.DEBUG; - - private final PeopleViewModel.Factory mViewModelFactory; - private final FeatureFlags mFeatureFlags; - - @Inject - public PeopleSpaceActivity(PeopleViewModel.Factory viewModelFactory, - FeatureFlags featureFlags) { - super(); - mViewModelFactory = viewModelFactory; - mFeatureFlags = featureFlags; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setResult(RESULT_CANCELED); - - PeopleViewModel viewModel = new ViewModelProvider(this, mViewModelFactory).get( - PeopleViewModel.class); - - // Update the widget ID coming from the intent. - int widgetId = getIntent().getIntExtra(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID); - viewModel.onWidgetIdChanged(widgetId); - - Function1 onResult = (result) -> { - finishActivity(result); - return null; - }; - - if (mFeatureFlags.isEnabled(Flags.COMPOSE_PEOPLE_SPACE) - && ComposeFacade.INSTANCE.isComposeAvailable()) { - Log.d(TAG, "Using the Compose implementation of the PeopleSpaceActivity"); - ComposeFacade.INSTANCE.setPeopleSpaceActivityContent(this, viewModel, onResult); - } else { - Log.d(TAG, "Using the View implementation of the PeopleSpaceActivity"); - ViewGroup view = PeopleViewBinder.create(this); - PeopleViewBinder.bind(view, viewModel, /* lifecycleOwner= */ this, onResult); - setContentView(view); - } - } - - private void finishActivity(PeopleViewModel.Result result) { - if (result instanceof PeopleViewModel.Result.Success) { - if (DEBUG) Log.d(TAG, "Widget added!"); - Intent data = ((PeopleViewModel.Result.Success) result).getData(); - setResult(RESULT_OK, data); - } else { - if (DEBUG) Log.d(TAG, "Activity dismissed with no widgets added!"); - setResult(RESULT_CANCELED); - } - finish(); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt new file mode 100644 index 0000000000000..30e84368ac0b3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt @@ -0,0 +1,85 @@ +/* + * 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.people + +import android.appwidget.AppWidgetManager +import android.os.Bundle +import android.util.Log +import androidx.activity.ComponentActivity +import androidx.lifecycle.ViewModelProvider +import com.android.systemui.compose.ComposeFacade.isComposeAvailable +import com.android.systemui.compose.ComposeFacade.setPeopleSpaceActivityContent +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags +import com.android.systemui.people.ui.view.PeopleViewBinder +import com.android.systemui.people.ui.view.PeopleViewBinder.bind +import com.android.systemui.people.ui.viewmodel.PeopleViewModel +import javax.inject.Inject + +/** People Tile Widget configuration activity that shows the user their conversation tiles. */ +class PeopleSpaceActivity +@Inject +constructor( + private val viewModelFactory: PeopleViewModel.Factory, + private val featureFlags: FeatureFlags, +) : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setResult(RESULT_CANCELED) + + // Update the widget ID coming from the intent. + val viewModel = ViewModelProvider(this, viewModelFactory)[PeopleViewModel::class.java] + val widgetId = + intent.getIntExtra( + AppWidgetManager.EXTRA_APPWIDGET_ID, + AppWidgetManager.INVALID_APPWIDGET_ID, + ) + viewModel.onWidgetIdChanged(widgetId) + + // Set the content of the activity, using either the View or Compose implementation. + if (featureFlags.isEnabled(Flags.COMPOSE_PEOPLE_SPACE) && isComposeAvailable()) { + Log.d(TAG, "Using the Compose implementation of the PeopleSpaceActivity") + setPeopleSpaceActivityContent( + activity = this, + viewModel, + onResult = { finishActivity(it) }, + ) + } else { + Log.d(TAG, "Using the View implementation of the PeopleSpaceActivity") + val view = PeopleViewBinder.create(this) + bind(view, viewModel, lifecycleOwner = this, onResult = { finishActivity(it) }) + setContentView(view) + } + } + + private fun finishActivity(result: PeopleViewModel.Result) { + if (result is PeopleViewModel.Result.Success) { + if (DEBUG) Log.d(TAG, "Widget added!") + setResult(RESULT_OK, result.data) + } else { + if (DEBUG) Log.d(TAG, "Activity dismissed with no widgets added!") + setResult(RESULT_CANCELED) + } + + finish() + } + + companion object { + private const val TAG = "PeopleSpaceActivity" + private const val DEBUG = PeopleSpaceUtils.DEBUG + } +}