Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6caeeb1a authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

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
parent 8a4ce2a5
Loading
Loading
Loading
Loading
+0 −98
Original line number Diff line number Diff line
/*
 * 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();
    }
}
+85 −0
Original line number Diff line number Diff line
/*
 * 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
    }
}