diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java index fa17f073803..d0322b7f4c8 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java +++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java @@ -47,6 +47,7 @@ import android.widget.TextView; import androidx.annotation.StringRes; import androidx.annotation.UiThread; +import androidx.annotation.VisibleForTesting; import androidx.lifecycle.ViewModelProviders; import com.android.settings.R; @@ -261,6 +262,24 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl }); } + @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) { @@ -702,4 +721,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl 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 45de6b5147c..b7d41baf0a2 100644 --- a/src/com/android/settings/wifi/qrcode/QrCamera.java +++ b/src/com/android/settings/wifi/qrcode/QrCamera.java @@ -401,4 +401,14 @@ public class QrCamera extends Handler { 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 16be216f780..d633689eeff 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 @@ public class WifiDppQrCodeScannerFragmentTest { 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 @@ public class WifiDppQrCodeScannerFragmentTest { 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); + }); + } }