Merge "Should not decode Wi-Fi QR code after onPause" into qt-dev
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index fa17f07..d0322b7 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -47,6 +47,7 @@
import androidx.annotation.StringRes;
import androidx.annotation.UiThread;
+import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.ViewModelProviders;
import com.android.settings.R;
@@ -262,6 +263,24 @@
}
@Override
+ public void onPause() {
+ if (mCamera != null) {
+ mCamera.stop();
+ }
+
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ if (!isGoingInitiator()) {
+ restartCamera();
+ }
+ }
+
+ @Override
public int getMetricsCategory() {
if (mIsConfiguratorMode) {
return SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR;
@@ -702,4 +721,9 @@
public void onAccessPointsChanged() {
// Do nothing.
}
+
+ @VisibleForTesting
+ protected boolean isDecodeTaskAlive() {
+ return mCamera != null && mCamera.isDecodeTaskAlive();
+ }
}
diff --git a/src/com/android/settings/wifi/qrcode/QrCamera.java b/src/com/android/settings/wifi/qrcode/QrCamera.java
index 45de6b5..b7d41ba 100644
--- a/src/com/android/settings/wifi/qrcode/QrCamera.java
+++ b/src/com/android/settings/wifi/qrcode/QrCamera.java
@@ -401,4 +401,14 @@
mScannerCallback.handleSuccessfulResult(qrCode.getText());
}
}
+
+ /**
+ * After {@link #start(SurfaceTexture)}, DecodingTask runs continuously to capture images and
+ * decode QR code. DecodingTask become null After {@link #stop()}.
+ *
+ * Uses this method in test case to prevent power consumption problem.
+ */
+ public boolean isDecodeTaskAlive() {
+ return mDecodeTask != null;
+ }
}
diff --git a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
index 16be216..d633689 100644
--- a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
+++ b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java
@@ -16,9 +16,16 @@
package com.android.settings.wifi.dpp;
+import static com.android.settings.wifi.dpp.WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.Instrumentation;
import android.content.Intent;
import android.content.pm.ActivityInfo;
+import androidx.fragment.app.FragmentManager;
+import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
@@ -38,6 +45,7 @@
Intent intent = new Intent(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_SCANNER);
intent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WEP");
intent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+ intent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "password");
mActivityRule.launchActivity(intent);
}
@@ -48,4 +56,21 @@
mActivityRule.getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
+
+ @Test
+ public void onPause_shouldNotDecodeQrCode() {
+ final WifiDppConfiguratorActivity hostActivity =
+ (WifiDppConfiguratorActivity) mActivityRule.getActivity();
+ final FragmentManager fragmentManager = hostActivity.getSupportFragmentManager();
+ final WifiDppQrCodeScannerFragment scannerFragment =
+ (WifiDppQrCodeScannerFragment) fragmentManager
+ .findFragmentByTag(TAG_FRAGMENT_QR_CODE_SCANNER);
+ final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+
+ instrumentation.runOnMainSync(() -> {
+ instrumentation.callActivityOnPause(hostActivity);
+
+ assertThat(scannerFragment.isDecodeTaskAlive()).isEqualTo(false);
+ });
+ }
}