From b91db421001e5130997ea653fc55d4eed687e6d7 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 9 Feb 2018 10:25:55 -0800 Subject: [PATCH] Fix double search icon in wifi calling page - Moved fragments into wifi sub-package. - Cleaned up inheritance for WifiCallingSettings - Attach help and search action menu controller correctly. Change-Id: I0bc8ab99df5d8c5ea64fb64de5ae70c2c9bd6f31 Fixes: 72958674 Test: robotest --- AndroidManifest.xml | 6 +-- res/values/strings.xml | 1 + .../core/gateway/SettingsGateway.java | 2 +- .../SuggestionFeatureProviderImpl.java | 2 +- .../actionbar/SearchMenuController.java | 5 +++ .../support/actionbar/HelpMenuController.java | 5 +++ .../calling}/WifiCallingSettings.java | 43 ++++++++----------- .../calling}/WifiCallingSettingsForSub.java | 17 +++----- .../WifiCallingSuggestionActivity.java | 2 +- .../grandfather_not_implementing_indexable | 3 +- .../actionbar/SearchMenuControllerTest.java | 35 ++++++++++++--- .../suggestions/SettingsSuggestionsTest.java | 2 +- 12 files changed, 73 insertions(+), 50 deletions(-) rename src/com/android/settings/{ => wifi/calling}/WifiCallingSettings.java (80%) rename src/com/android/settings/{ => wifi/calling}/WifiCallingSettingsForSub.java (98%) rename src/com/android/settings/wifi/{ => calling}/WifiCallingSuggestionActivity.java (96%) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 846f221e551..9ff2e463d3e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2840,12 +2840,12 @@ + android:value="com.android.settings.wifi.calling.WifiCallingSettings" /> - @@ -2854,7 +2854,7 @@ + android:value="com.android.settings.wifi.calling.WifiCallingSettings" /> + Account for content diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 76def2ca10f..c75b0c60cde 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -28,7 +28,7 @@ import com.android.settings.Settings; import com.android.settings.TestingSettings; import com.android.settings.TetherSettings; import com.android.settings.TrustedCredentialsSettings; -import com.android.settings.WifiCallingSettings; +import com.android.settings.wifi.calling.WifiCallingSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard; import com.android.settings.accessibility.CaptionPropertiesFragment; diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index 8523273252d..07ffb8a4dd2 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -37,7 +37,7 @@ import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ScreenLockSuggestionActivity; import com.android.settings.support.NewDeviceIntroSuggestionActivity; import com.android.settings.wallpaper.WallpaperSuggestionActivity; -import com.android.settings.wifi.WifiCallingSuggestionActivity; +import com.android.settings.wifi.calling.WifiCallingSuggestionActivity; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.drawer.Tile; import com.android.settingslib.suggestions.SuggestionControllerMixin; diff --git a/src/com/android/settings/search/actionbar/SearchMenuController.java b/src/com/android/settings/search/actionbar/SearchMenuController.java index f3a92852359..1729ccdb39a 100644 --- a/src/com/android/settings/search/actionbar/SearchMenuController.java +++ b/src/com/android/settings/search/actionbar/SearchMenuController.java @@ -28,6 +28,7 @@ import com.android.settings.R; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.SearchFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.ObservableFragment; import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; @@ -41,6 +42,10 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM host.getLifecycle().addObserver(new SearchMenuController(host)); } + public static void init(@NonNull ObservableFragment host) { + host.getLifecycle().addObserver(new SearchMenuController(host)); + } + private SearchMenuController(@NonNull Fragment host) { mHost = host; } diff --git a/src/com/android/settings/support/actionbar/HelpMenuController.java b/src/com/android/settings/support/actionbar/HelpMenuController.java index a95d44e5d44..1188fc2bb1a 100644 --- a/src/com/android/settings/support/actionbar/HelpMenuController.java +++ b/src/com/android/settings/support/actionbar/HelpMenuController.java @@ -27,6 +27,7 @@ import android.view.MenuInflater; import com.android.settingslib.HelpUtils; import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.ObservableFragment; import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; @@ -41,6 +42,10 @@ public class HelpMenuController implements LifecycleObserver, OnCreateOptionsMen host.getLifecycle().addObserver(new HelpMenuController(host)); } + public static void init(@NonNull ObservableFragment host) { + host.getLifecycle().addObserver(new HelpMenuController(host)); + } + private HelpMenuController(@NonNull Fragment host) { mHost = host; } diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/wifi/calling/WifiCallingSettings.java similarity index 80% rename from src/com/android/settings/WifiCallingSettings.java rename to src/com/android/settings/wifi/calling/WifiCallingSettings.java index e872fb80446..7bab07a5840 100644 --- a/src/com/android/settings/WifiCallingSettings.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettings.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.wifi.calling; import android.app.Fragment; import android.app.FragmentManager; -import android.content.Context; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.telephony.SubscriptionInfo; @@ -28,9 +27,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.android.ims.ImsConfig; import com.android.ims.ImsManager; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.R; +import com.android.settings.core.InstrumentedFragment; +import com.android.settings.search.actionbar.SearchMenuController; +import com.android.settings.support.actionbar.HelpMenuController; +import com.android.settings.support.actionbar.HelpResourceProvider; import com.android.settings.widget.RtlCompatibleViewPager; import com.android.settings.widget.SlidingTabLayout; @@ -40,7 +43,7 @@ import java.util.List; * "Wi-Fi Calling settings" screen. This is the container fragment which holds * {@link WifiCallingSettingsForSub} fragments. */ -public class WifiCallingSettings extends SettingsPreferenceFragment { +public class WifiCallingSettings extends InstrumentedFragment implements HelpResourceProvider { private static final String TAG = "WifiCallingSettings"; private List mSil; @@ -71,6 +74,10 @@ public class WifiCallingSettings extends SettingsPreferenceFragment { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + setHasOptionsMenu(true); + SearchMenuController.init(this /* host */); + HelpMenuController.init(this /* host */); + // TODO: besides in onCreate, we should also update subList when SIM / Sub status // changes. updateSubList(); @@ -87,6 +94,11 @@ public class WifiCallingSettings extends SettingsPreferenceFragment { } } + @Override + public int getHelpResource() { + return R.string.help_uri_wifi_calling; + } + private final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter { private final RtlCompatibleViewPager mViewPager; @@ -105,6 +117,7 @@ public class WifiCallingSettings extends SettingsPreferenceFragment { public Fragment getItem(int position) { Log.d(TAG, "Adapter getItem " + position); final Bundle args = new Bundle(); + args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); args.putInt(WifiCallingSettingsForSub.FRAGMENT_BUNDLE_SUBID, mSil.get(position).getSubscriptionId()); WifiCallingSettingsForSub fragment = new WifiCallingSettingsForSub(); @@ -132,26 +145,6 @@ public class WifiCallingSettings extends SettingsPreferenceFragment { } } - public static int getWfcModeSummary(Context context, int wfcMode) { - int resId = com.android.internal.R.string.wifi_calling_off_summary; - if (ImsManager.isWfcEnabledByUser(context)) { - switch (wfcMode) { - case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY: - resId = com.android.internal.R.string.wfc_mode_wifi_only_summary; - break; - case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED: - resId = com.android.internal.R.string.wfc_mode_cellular_preferred_summary; - break; - case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED: - resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary; - break; - default: - Log.e(TAG, "Unexpected WFC mode value: " + wfcMode); - } - } - return resId; - } - private void updateSubList() { mSil = SubscriptionManager.from(getActivity()).getActiveSubscriptionInfoList(); @@ -159,7 +152,7 @@ public class WifiCallingSettings extends SettingsPreferenceFragment { if (mSil == null) { return; } - for (int i = 0; i < mSil.size();) { + for (int i = 0; i < mSil.size(); ) { ImsManager imsManager = ImsManager.getInstance(getActivity(), mSil.get(i).getSimSlotIndex()); if (!imsManager.isWfcEnabledByPlatform()) { diff --git a/src/com/android/settings/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java similarity index 98% rename from src/com/android/settings/WifiCallingSettingsForSub.java rename to src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java index ba5ba84a418..2bfd7961d26 100644 --- a/src/com/android/settings/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.wifi.calling; import android.app.Activity; import android.app.AlertDialog; @@ -45,6 +45,10 @@ import com.android.ims.ImsConfig; import com.android.ims.ImsManager; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.telephony.Phone; +import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; import com.android.settings.widget.SwitchBar; /** @@ -54,7 +58,7 @@ import com.android.settings.widget.SwitchBar; public class WifiCallingSettingsForSub extends SettingsPreferenceFragment implements SwitchBar.OnSwitchChangeListener, Preference.OnPreferenceChangeListener { - private static final String TAG = "WifiCallingSettingsForSub"; + private static final String TAG = "WifiCallingForSub"; //String keys for preference lookup private static final String BUTTON_WFC_MODE = "wifi_calling_mode"; @@ -130,12 +134,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } }; - @Override - public int getHelpResource() { - // Helper resource is already defined in the container fragment. - return 0; - } - private final OnPreferenceClickListener mUpdateAddressListener = new OnPreferenceClickListener() { /* @@ -226,8 +224,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment // SubId should always be specified when creating this fragment. Either through // fragment.setArguments() or through savedInstanceState. - if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID)) - { + if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID)) { mSubId = getArguments().getInt(FRAGMENT_BUNDLE_SUBID); } else if (savedInstanceState != null) { mSubId = savedInstanceState.getInt( diff --git a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java b/src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java similarity index 96% rename from src/com/android/settings/wifi/WifiCallingSuggestionActivity.java rename to src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java index c3c7adb2687..9a50a837246 100644 --- a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSuggestionActivity.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.wifi; +package com.android.settings.wifi.calling; import android.content.Context; diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable index 5a3c0446bb6..748dc94439e 100644 --- a/tests/robotests/assets/grandfather_not_implementing_indexable +++ b/tests/robotests/assets/grandfather_not_implementing_indexable @@ -60,8 +60,7 @@ com.android.settings.applications.appinfo.PictureInPictureSettings com.android.settings.applications.appinfo.PictureInPictureDetails com.android.settings.ApnSettings com.android.settings.PrivacySettings -com.android.settings.WifiCallingSettings -com.android.settings.WifiCallingSettingsForSub +com.android.settings.wifi.calling.WifiCallingSettingsForSub com.android.settings.password.SetupChooseLockGeneric$SetupChooseLockGenericFragment com.android.settings.SetupRedactionInterstitial$SetupRedactionInterstitialFragment com.android.settings.security.trustagent.TrustAgentSettings diff --git a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java index e1c77cd37f7..d6e8c633c95 100644 --- a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java +++ b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.search.actionbar; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.os.Bundle; @@ -27,6 +28,7 @@ import android.view.MenuItem; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.lifecycle.ObservableFragment; import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import org.junit.Before; @@ -42,26 +44,47 @@ public class SearchMenuControllerTest { @Mock private Menu mMenu; - private TestFragment mHost; + private TestPreferenceFragment mPreferenceHost; + private ObservableFragment mHost; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mHost = new TestFragment(); + mHost = new ObservableFragment(); + mPreferenceHost = new TestPreferenceFragment(); + + when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu)) + .thenReturn(mock(MenuItem.class)); } @Test - public void init_shouldAddMenu() { - when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu)) - .thenReturn(mock(MenuItem.class)); + public void init_prefFragment_shouldAddMenu() { + SearchMenuController.init(mPreferenceHost); + mPreferenceHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */); + verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu); + } + + @Test + public void init_observableFragment_shouldAddMenu() { SearchMenuController.init(mHost); mHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */); verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu); } - public static class TestFragment extends ObservablePreferenceFragment { + @Test + public void init_doNotNeedSearchIcon_shouldNotAddMenu() { + final Bundle args = new Bundle(); + args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); + mHost.setArguments(args); + + SearchMenuController.init(mHost); + mHost.getLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */); + verifyZeroInteractions(mMenu); + } + + public static class TestPreferenceFragment extends ObservablePreferenceFragment { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java index 677bf418ca1..9dff92532a1 100644 --- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java +++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java @@ -68,7 +68,7 @@ public class SettingsSuggestionsTest { @Test public void wifiCallingSuggestion_isValid() { - assertSuggestionEquals("com.android.settings.wifi.WifiCallingSuggestionActivity", + assertSuggestionEquals("com.android.settings.wifi.calling.WifiCallingSuggestionActivity", CATEGORY_FIRST_IMPRESSION, R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary); }