Fix Wi-Fi DPP fragment back stack problems

1. When a Wi-Fi network connected and receiving
   intent android.settings.PROCESS_WIFI_EASY_CONNECT_QR_CODE,
   show WifiDppAddDeviceFragment from WifiDppConfiguratorActivity
   instead of WifiNetworkListFragment

2. Only handle intent when savedInstanceState is null

3. To show a fragment
   I. do nothing when a fragment is already visible on screen,
   II. pop back stack if it's in back stack, we can do this because
   current fragment transactions are arranged in an order

Bug: 124194531
Test: atest WifiQrCodeTest
      atest WifiDppConfiguratorActivityTest
      atest WifiDppEnrolleeActivityTest
      atest WifiDppQrCodeGeneratorFragmentTest
      atest WifiDppQrCodeScannerFragmentTest
      atest WifiNetworkListFragmentTest
      atest WifiDppChooseSavedWifiNetworkFragmentTest

Change-Id: I1d44eeb3bdc7bfb2ec2e4d81efaab64b066651ad
This commit is contained in:
Arc Wang
2019-01-31 11:07:38 +08:00
parent fd9cdb50c5
commit 9d33313735
5 changed files with 114 additions and 49 deletions

View File

@@ -100,7 +100,9 @@ public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
setContentView(R.layout.wifi_dpp_activity);
mFragmentManager = getSupportFragmentManager();
handleIntent(getIntent());
if (savedInstanceState == null) {
handleIntent(getIntent());
}
ActionBar actionBar = getActionBar();
if (actionBar != null) {
@@ -122,13 +124,23 @@ public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
}
private void showQrCodeScannerFragment(boolean addToBackStack, String ssid) {
// Avoid to replace the same fragment during configuration change
if (mFragmentManager.findFragmentByTag(WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER) != null) {
WifiDppQrCodeScannerFragment fragment =
(WifiDppQrCodeScannerFragment) mFragmentManager.findFragmentByTag(
WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
if (fragment == null) {
fragment = new WifiDppQrCodeScannerFragment(ssid);
} else {
if (fragment.isVisible()) {
return;
}
// When the fragment in back stack but not on top of the stack, we can simply pop
// stack because current fragment transactions are arranged in an order
mFragmentManager.popBackStackImmediate();
return;
}
WifiDppQrCodeScannerFragment fragment = new WifiDppQrCodeScannerFragment(ssid);
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
final FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment,
WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);