Use multiple actions to launch Wi-Fi DPP configurator with different mode.

Bug: 118797380
Bug: 118794858
Test: atest WifiDppConfiguratorActivityTest
      atest WifiDppQrCodeScannerFragmentTest
      atest atest RunSettingsRoboTests

Change-Id: I96aba3c5e3d57c89d6948d3bf3dd85f29f705778
This commit is contained in:
Arc Wang
2018-12-03 17:16:55 +08:00
parent 4c3251ebab
commit e43bb77e5d
8 changed files with 283 additions and 80 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
@@ -30,32 +31,22 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.R;
public class WifiDppConfiguratorActivity extends InstrumentedActivity {
public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
WifiNetworkConfig.Retriever {
private static final String TAG = "WifiDppConfiguratorActivity";
public static final String ACTION_CONFIGURATOR_QR_CODE_SCANNER =
"android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_SCANNER";
public static final String ACTION_CONFIGURATOR_QR_CODE_GENERATOR =
"android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_GENERATOR";
public static final String ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK =
"android.settings.WIFI_DPP_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK";
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
public static final String EXTRA_LAUNCH_MODE =
"com.android.settings.wifi.dpp.EXTRA_LAUNCH_MODE";
public static final String EXTRA_SSID = "com.android.settings.wifi.dpp.EXTRA_SSID";
public enum LaunchMode {
LAUNCH_MODE_QR_CODE_SCANNER(1),
LAUNCH_MODE_QR_CODE_GENERATOR(2),
LAUNCH_MODE_CHOOSE_SAVED_WIFI_NETWORK(3),
LAUNCH_MODE_NOT_DEFINED(-1);
private int mMode;
LaunchMode(int mode) {
this.mMode = mode;
}
public int getMode() {
return mMode;
}
}
/** The Wi-Fi network which will be configured */
private WifiNetworkConfig mWifiNetworkConfig;
@Override
public int getMetricsCategory() {
@@ -71,37 +62,59 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = getSupportFragmentManager().beginTransaction();
final int launchMode = getIntent().getIntExtra(EXTRA_LAUNCH_MODE,
LaunchMode.LAUNCH_MODE_NOT_DEFINED.getMode());
if (launchMode == LaunchMode.LAUNCH_MODE_QR_CODE_SCANNER.getMode()) {
addQrCodeScannerFragment();
} else if (launchMode == LaunchMode.LAUNCH_MODE_QR_CODE_GENERATOR.getMode()) {
addQrCodeGeneratorFragment();
} else if (launchMode == LaunchMode.LAUNCH_MODE_CHOOSE_SAVED_WIFI_NETWORK.getMode()) {
addChooseSavedWifiNetworkFragment();
} else {
Log.e(TAG, "Launch with an invalid mode extra");
Intent intent = getIntent();
boolean cancelActivity = false;
WifiNetworkConfig config;
switch (intent.getAction()) {
case ACTION_CONFIGURATOR_QR_CODE_SCANNER:
config = WifiNetworkConfig.getValidConfigOrNull(intent);
if (config == null) {
cancelActivity = true;
} else {
mWifiNetworkConfig = config;
addQrCodeScannerFragment(/* addToBackStack= */ false);
}
break;
case ACTION_CONFIGURATOR_QR_CODE_GENERATOR:
config = WifiNetworkConfig.getValidConfigOrNull(intent);
if (config == null) {
cancelActivity = true;
} else {
mWifiNetworkConfig = config;
addQrCodeGeneratorFragment();
}
break;
case ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK:
addChooseSavedWifiNetworkFragment(/* addToBackStack */ false);
break;
default:
cancelActivity = true;
Log.e(TAG, "Launch with an invalid action");
}
if (cancelActivity) {
setResult(Activity.RESULT_CANCELED);
finish();
}
}
private void addQrCodeScannerFragment() {
final WifiDppQrCodeScannerFragment fragment = new WifiDppQrCodeScannerFragment();
private void addQrCodeScannerFragment(boolean addToBackStack) {
WifiDppQrCodeScannerFragment fragment = new WifiDppQrCodeScannerFragment();
mFragmentTransaction.add(R.id.fragment_container, fragment);
mFragmentTransaction.addToBackStack(/* name */ null);
if (addToBackStack) {
mFragmentTransaction.addToBackStack(/* name */ null);
}
mFragmentTransaction.commit();
}
private void addQrCodeGeneratorFragment() {
final WifiDppQrCodeGeneratorFragment fragment = new WifiDppQrCodeGeneratorFragment();
WifiDppQrCodeGeneratorFragment fragment = new WifiDppQrCodeGeneratorFragment();
mFragmentTransaction.add(R.id.fragment_container, fragment);
mFragmentTransaction.addToBackStack(/* name */ null);
mFragmentTransaction.commit();
}
private void addChooseSavedWifiNetworkFragment() {
final ActionBar action = getActionBar();
private void addChooseSavedWifiNetworkFragment(boolean addToBackStack) {
ActionBar action = getActionBar();
if (action != null) {
action.hide();
}
@@ -109,13 +122,15 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {
WifiDppChooseSavedWifiNetworkFragment fragment =
new WifiDppChooseSavedWifiNetworkFragment();
mFragmentTransaction.add(R.id.fragment_container, fragment);
mFragmentTransaction.addToBackStack(/* name */ null);
if (addToBackStack) {
mFragmentTransaction.addToBackStack(/* name */ null);
}
mFragmentTransaction.commit();
}
@Override
protected void onStop() {
final Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
if (fragment != null) {
// Remove it to prevent stacking multiple fragments after screen rotated.
mFragmentManager.beginTransaction().remove(fragment).commit();
@@ -123,4 +138,19 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity {
super.onStop();
}
@Override
public WifiNetworkConfig getWifiNetworkConfig() {
return mWifiNetworkConfig;
}
@Override
public boolean setWifiNetworkConfig(WifiNetworkConfig config) {
if(!WifiNetworkConfig.isValidConfig(config)) {
return false;
} else {
mWifiNetworkConfig = new WifiNetworkConfig(config);
return true;
}
}
}