diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index 8fc28915ce3..6076a25ddc1 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -19,12 +19,15 @@ import android.app.Activity; import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.os.Bundle; +import android.preference.PreferenceManager.OnActivityResultListener; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; import androidx.annotation.CallSuper; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleObserver; import androidx.preference.Preference; @@ -265,6 +268,19 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment getMetricsCategory(), null, 0); } + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + for (List controllerList : mPreferenceControllers.values()) { + for (AbstractPreferenceController controller : controllerList) { + if (controller instanceof OnActivityResultListener) { + ((OnActivityResultListener) controller).onActivityResult( + requestCode, resultCode, data); + } + } + } + super.onActivityResult(requestCode, resultCode, data); + } + protected boolean shouldForceRoundedIcon() { return false; } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java index fd6689a50a1..d7ac433b497 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java @@ -33,10 +33,12 @@ import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ProviderInfo; import android.net.Uri; import android.os.Bundle; +import android.preference.PreferenceManager.OnActivityResultListener; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; @@ -356,6 +358,19 @@ public class DashboardFragmentTest { assertThat(pref).isInstanceOf(PrimarySwitchPreference.class); } + @Test + public void onActivityResult_test() { + final int requestCode = 10; + final int resultCode = 1; + final TestOnActivityResultPreferenceController activityResultPref = spy( + new TestOnActivityResultPreferenceController(mContext)); + mTestFragment.addPreferenceController(activityResultPref); + + mTestFragment.onActivityResult(requestCode, resultCode, null); + + verify(activityResultPref).onActivityResult(requestCode, resultCode, null); + } + public static class TestPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin { @@ -390,6 +405,19 @@ public class DashboardFragmentTest { } } + public static class TestOnActivityResultPreferenceController extends + TestPreferenceController implements OnActivityResultListener { + + private TestOnActivityResultPreferenceController(Context context) { + super(context); + } + + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + return true; + } + } + private static class TestFragment extends DashboardFragment { private final PreferenceManager mPreferenceManager;