summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java98
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt99
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt8
4 files changed, 99 insertions, 118 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt
index d84e67620177..68f010e1c50d 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/people/ui/compose/PeopleScreen.kt
@@ -42,13 +42,10 @@ import androidx.compose.runtime.key
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.repeatOnLifecycle
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.systemui.R
import com.android.systemui.compose.modifiers.sysuiResTag
@@ -70,15 +67,6 @@ fun PeopleScreen(
val priorityTiles by viewModel.priorityTiles.collectAsState()
val recentTiles by viewModel.recentTiles.collectAsState()
- // Make sure to refresh the tiles/conversations when the lifecycle is resumed, so that it
- // updates them when going back to the Activity after leaving it.
- val lifecycleOwner = LocalLifecycleOwner.current
- LaunchedEffect(lifecycleOwner, viewModel) {
- lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
- viewModel.onTileRefreshRequested()
- }
- }
-
// Call [onResult] this activity when the ViewModel tells us so.
LaunchedEffect(viewModel.result) {
viewModel.result.collect { result ->
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 d1d3e3de39f0..000000000000
--- 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<PeopleViewModel.Result, Unit> 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 000000000000..5b7eb454597c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.kt
@@ -0,0 +1,99 @@
+/*
+ * 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.Lifecycle
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+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
+import kotlinx.coroutines.launch
+
+/** 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)
+
+ // Make sure to refresh the tiles/conversations when the lifecycle is resumed, so that it
+ // updates them when going back to the Activity after leaving it.
+ // Note that we do this here instead of inside an effect in the PeopleScreen() composable
+ // because otherwise onTileRefreshRequested() will be called after the first composition,
+ // which will trigger a new recomposition and redraw, affecting the GPU memory (see
+ // b/276871425).
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.RESUMED) { viewModel.onTileRefreshRequested() }
+ }
+
+ // 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
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt
index d8a429e5bb1a..5f338c30c966 100644
--- a/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt
@@ -109,14 +109,6 @@ object PeopleViewBinder {
}
}
}
-
- // Make sure to refresh the tiles/conversations when the Activity is resumed, so that it
- // updates them when going back to the Activity after leaving it.
- lifecycleOwner.lifecycleScope.launch {
- lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
- viewModel.onTileRefreshRequested()
- }
- }
}
private fun setNoConversationsContent(view: ViewGroup, onGotItClicked: () -> Unit) {