Loading src/com/android/settings/SettingsActivity.java +15 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.backup.BackupSettingsActivity; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.gateway.SettingsGateway; Loading @@ -64,6 +65,7 @@ import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; import java.util.List; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; Loading Loading @@ -375,6 +377,19 @@ public class SettingsActivity extends SettingsBaseActivity } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); final List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment instanceof OnActivityResultListener) { fragment.onActivityResult(requestCode, resultCode, data); } } } } @VisibleForTesting void launchSettingFragment(String initialFragmentName, boolean isSubSettings, Intent intent) { if (!mIsShowingDashboard && initialFragmentName != null) { Loading src/com/android/settings/core/OnActivityResultListener.java 0 → 100644 +30 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.settings.core; import android.app.Activity; import android.content.Intent; /** * This interface marks a class that it wants to listen to * {@link Activity#onActivityResult(int, int, Intent)}. * * Whenever {@link com.android.settings.SettingsActivity} receives an activity result, it will * propagate the data to this interface so it has a chance to inspect and handle activity results. */ public interface OnActivityResultListener { } src/com/android/settings/notification/ConfigureNotificationSettings.java +3 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.provider.SearchIndexableResource; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.RingtonePreference; import com.android.settings.core.OnActivityResultListener; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.search.BaseSearchIndexProvider; Loading @@ -44,7 +45,8 @@ import androidx.fragment.app.Fragment; import androidx.preference.Preference; @SearchIndexable public class ConfigureNotificationSettings extends DashboardFragment { public class ConfigureNotificationSettings extends DashboardFragment implements OnActivityResultListener { private static final String TAG = "ConfigNotiSettings"; @VisibleForTesting Loading src/com/android/settings/notification/SoundSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.RingtonePreference; import com.android.settings.core.OnActivityResultListener; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.sound.HandsFreeProfileOutputPreferenceController; Loading @@ -51,7 +52,7 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; @SearchIndexable public class SoundSettings extends DashboardFragment { public class SoundSettings extends DashboardFragment implements OnActivityResultListener { private static final String TAG = "SoundSettings"; private static final String SELECTED_PREFERENCE_KEY = "selected_preference"; Loading tests/robotests/src/com/android/settings/SettingsActivityTest.java +32 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; Loading @@ -26,6 +27,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.Intent; import com.android.settings.core.OnActivityResultListener; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; Loading @@ -35,6 +37,10 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.List; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; Loading Loading @@ -65,9 +71,34 @@ public class SettingsActivityTest { } @Test public void testSetTaskDescription_IconChanged() { public void setTaskDescription_shouldUpdateIcon() { mActivity.setTaskDescription(mTaskDescription); verify(mTaskDescription).setIcon(anyInt()); } @Test public void onActivityResult_shouldDelegateToListener() { final List<Fragment> fragments = new ArrayList<>(); fragments.add(new Fragment()); fragments.add(new ListenerFragment()); final FragmentManager manager = mock(FragmentManager.class); when(mActivity.getSupportFragmentManager()).thenReturn(manager); when(manager.getFragments()).thenReturn(fragments); mActivity.onActivityResult(0, 0, new Intent()); assertThat(((ListenerFragment) fragments.get(1)).mOnActivityResultCalled).isTrue(); } public static class ListenerFragment extends Fragment implements OnActivityResultListener { public boolean mOnActivityResultCalled; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { mOnActivityResultCalled = true; } } } Loading
src/com/android/settings/SettingsActivity.java +15 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.backup.BackupSettingsActivity; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.gateway.SettingsGateway; Loading @@ -64,6 +65,7 @@ import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; import java.util.List; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; Loading Loading @@ -375,6 +377,19 @@ public class SettingsActivity extends SettingsBaseActivity } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); final List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment instanceof OnActivityResultListener) { fragment.onActivityResult(requestCode, resultCode, data); } } } } @VisibleForTesting void launchSettingFragment(String initialFragmentName, boolean isSubSettings, Intent intent) { if (!mIsShowingDashboard && initialFragmentName != null) { Loading
src/com/android/settings/core/OnActivityResultListener.java 0 → 100644 +30 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.settings.core; import android.app.Activity; import android.content.Intent; /** * This interface marks a class that it wants to listen to * {@link Activity#onActivityResult(int, int, Intent)}. * * Whenever {@link com.android.settings.SettingsActivity} receives an activity result, it will * propagate the data to this interface so it has a chance to inspect and handle activity results. */ public interface OnActivityResultListener { }
src/com/android/settings/notification/ConfigureNotificationSettings.java +3 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.provider.SearchIndexableResource; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.RingtonePreference; import com.android.settings.core.OnActivityResultListener; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.search.BaseSearchIndexProvider; Loading @@ -44,7 +45,8 @@ import androidx.fragment.app.Fragment; import androidx.preference.Preference; @SearchIndexable public class ConfigureNotificationSettings extends DashboardFragment { public class ConfigureNotificationSettings extends DashboardFragment implements OnActivityResultListener { private static final String TAG = "ConfigNotiSettings"; @VisibleForTesting Loading
src/com/android/settings/notification/SoundSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.RingtonePreference; import com.android.settings.core.OnActivityResultListener; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.sound.HandsFreeProfileOutputPreferenceController; Loading @@ -51,7 +52,7 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; @SearchIndexable public class SoundSettings extends DashboardFragment { public class SoundSettings extends DashboardFragment implements OnActivityResultListener { private static final String TAG = "SoundSettings"; private static final String SELECTED_PREFERENCE_KEY = "selected_preference"; Loading
tests/robotests/src/com/android/settings/SettingsActivityTest.java +32 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; Loading @@ -26,6 +27,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.Intent; import com.android.settings.core.OnActivityResultListener; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; Loading @@ -35,6 +37,10 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.List; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; Loading Loading @@ -65,9 +71,34 @@ public class SettingsActivityTest { } @Test public void testSetTaskDescription_IconChanged() { public void setTaskDescription_shouldUpdateIcon() { mActivity.setTaskDescription(mTaskDescription); verify(mTaskDescription).setIcon(anyInt()); } @Test public void onActivityResult_shouldDelegateToListener() { final List<Fragment> fragments = new ArrayList<>(); fragments.add(new Fragment()); fragments.add(new ListenerFragment()); final FragmentManager manager = mock(FragmentManager.class); when(mActivity.getSupportFragmentManager()).thenReturn(manager); when(manager.getFragments()).thenReturn(fragments); mActivity.onActivityResult(0, 0, new Intent()); assertThat(((ListenerFragment) fragments.get(1)).mOnActivityResultCalled).isTrue(); } public static class ListenerFragment extends Fragment implements OnActivityResultListener { public boolean mOnActivityResultCalled; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { mOnActivityResultCalled = true; } } }