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

Commit d3b3ed5e authored by jasonwshsu's avatar jasonwshsu
Browse files

Add ability to handle onActivityResult for AbstractPreferenceController in DashboardFragment

* AbstractPreferenceController now can implement OnActivityResultListener to receive callback from DashboardFragment#onActivityResult()

Bug: 270096758
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.dashboard.DashboardFragmentTest
Change-Id: Ib734287c6fe06fcdde3b2fe6ae9f4b778020b60b
parent 0bf3e6c9
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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<AbstractPreferenceController> 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;
    }
+28 −0
Original line number Diff line number Diff line
@@ -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;