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

Commit 56172bf3 authored by Yvonne Jiang's avatar Yvonne Jiang Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Add registerForActivityResult to PreferenceLifecycleContext." into main

parents 0eb37e5f 13d1d211
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@ import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.os.Bundle
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContract
import androidx.lifecycle.LifecycleCoroutineScope
import com.android.settingslib.datastore.KeyValueStore
import kotlinx.coroutines.CoroutineScope
@@ -171,4 +174,16 @@ abstract class PreferenceLifecycleContext(context: Context) : ContextWrapper(con
     * on the preference screen.
     */
    abstract fun startActivityForResult(intent: Intent, requestCode: Int, options: Bundle?)

    /**
     * Register a request to start an activity, see [androidx.activity.result.ActivityResultCaller].
     *
     * Because this must be called unconditionally as part of the initialization path of the
     * Fragment, this API can only be invoked by a preference during
     * [PreferenceLifecycleProvider.onCreate].
     */
    abstract fun <I, O> registerForActivityResult(
        contract: ActivityResultContract<I, O>,
        callback: ActivityResultCallback<O>
    ): ActivityResultLauncher<I>
}
+7 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.settingslib.preference
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.contract.ActivityResultContract
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
@@ -81,6 +83,11 @@ class PreferenceScreenBindingHelper(
                requestCode: Int,
                options: Bundle?,
            ) = fragment.startActivityForResult(intent, requestCode, options)

            override fun <I, O> registerForActivityResult(
                contract: ActivityResultContract<I, O>,
                callback: ActivityResultCallback<O>
            ) = fragment.registerForActivityResult(contract, callback)
        }

    private val preferences: ImmutableMap<String, PreferenceHierarchyNode>