[Wi-Fi DPP] Refine Wi-Fi DPP UI layouts with SUW library

1. Use GlifLayout in all fragments
2. Fragments use 32dp icon instead of 48 dp
3. Replace ScrollView & ProgressBar & Header & Footer of original layout with GlifLayout design
4. Remove ActionBar (no more back button on screen top)

Bug: 129021867
Test: manual
Change-Id: I2fda48cb7f7819b2c8dd85c10d39e1f187463bd8
This commit is contained in:
Arc Wang
2019-05-03 17:38:48 +08:00
parent 0d1dc2bd59
commit 8e3c49123d
24 changed files with 334 additions and 455 deletions

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -32,7 +31,6 @@ import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import androidx.lifecycle.ViewModelProviders;
@@ -47,11 +45,8 @@ import java.util.concurrent.Executor;
public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
private static final String TAG = "WifiDppAddDeviceFragment";
private ProgressBar mProgressBar;
private ImageView mWifiApPictureView;
private Button mChooseDifferentNetwork;
private Button mButtonLeft;
private Button mButtonRight;
private int mLatestStatusCode = WifiDppUtils.EASY_CONNECT_EVENT_FAILURE_NONE;
@@ -83,16 +78,16 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
}
private void showSuccessUi(boolean isConfigurationChange) {
setHeaderIconImageResource(R.drawable.ic_devices_check_circle_green);
mTitle.setText(R.string.wifi_dpp_wifi_shared_with_device);
mProgressBar.setVisibility(isGoingInitiator() ? View.VISIBLE : View.INVISIBLE);
setHeaderIconImageResource(R.drawable.ic_devices_check_circle_green_32dp);
setHeaderTitle(R.string.wifi_dpp_wifi_shared_with_device);
setProgressBarShown(isGoingInitiator());
mSummary.setVisibility(View.INVISIBLE);
mWifiApPictureView.setImageResource(R.drawable.wifi_dpp_success);
mChooseDifferentNetwork.setVisibility(View.INVISIBLE);
mButtonLeft.setText(R.string.wifi_dpp_add_another_device);
mButtonLeft.setOnClickListener(v -> getFragmentManager().popBackStack());
mButtonRight.setText(R.string.done);
mButtonRight.setOnClickListener(v -> {
mLeftButton.setText(getContext(), R.string.wifi_dpp_add_another_device);
mLeftButton.setOnClickListener(v -> getFragmentManager().popBackStack());
mRightButton.setText(getContext(), R.string.done);
mRightButton.setOnClickListener(v -> {
final Activity activity = getActivity();
activity.setResult(Activity.RESULT_OK);
activity.finish();
@@ -100,7 +95,6 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
if (!isConfigurationChange) {
mLatestStatusCode = WifiDppUtils.EASY_CONNECT_EVENT_SUCCESS;
changeFocusAndAnnounceChange(mButtonRight, mTitle);
}
}
@@ -159,27 +153,26 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
throw(new IllegalStateException("Unexpected Wi-Fi DPP error"));
}
mTitle.setText(R.string.wifi_dpp_could_not_add_device);
setHeaderTitle(R.string.wifi_dpp_could_not_add_device);
mWifiApPictureView.setImageResource(R.drawable.wifi_dpp_error);
mChooseDifferentNetwork.setVisibility(View.INVISIBLE);
if (hasRetryButton(code)) {
mButtonRight.setText(R.string.retry);
mRightButton.setText(getContext(), R.string.retry);
} else {
mButtonRight.setText(R.string.done);
mButtonRight.setOnClickListener(v -> getActivity().finish());
mButtonLeft.setVisibility(View.INVISIBLE);
mRightButton.setText(getContext(), R.string.done);
mRightButton.setOnClickListener(v -> getActivity().finish());
mLeftButton.setVisibility(View.INVISIBLE);
}
if (isGoingInitiator()) {
mSummary.setText(R.string.wifi_dpp_sharing_wifi_with_this_device);
}
mProgressBar.setVisibility(isGoingInitiator() ? View.VISIBLE : View.INVISIBLE);
mButtonRight.setVisibility(isGoingInitiator() ? View.INVISIBLE : View.VISIBLE);
setProgressBarShown(isGoingInitiator());
mRightButton.setVisibility(isGoingInitiator() ? View.INVISIBLE : View.VISIBLE);
if (!isConfigurationChange) {
mLatestStatusCode = code;
changeFocusAndAnnounceChange(mButtonRight, mSummary);
}
}
@@ -228,16 +221,6 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
});
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final ActionBar actionBar = getActivity().getActionBar();
if (actionBar != null) {
actionBar.hide();
}
}
@Override
public final View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -249,17 +232,15 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHeaderIconImageResource(R.drawable.ic_devices_other_opaque_black);
mProgressBar = view.findViewById(R.id.indeterminate_bar);
setHeaderIconImageResource(R.drawable.ic_devices_other_32dp);
final WifiQrCode wifiQrCode = ((WifiDppConfiguratorActivity) getActivity())
.getWifiDppQrCode();
final String information = wifiQrCode.getInformation();
if (TextUtils.isEmpty(information)) {
mTitle.setText(R.string.wifi_dpp_device_found);
setHeaderTitle(R.string.wifi_dpp_device_found);
} else {
mTitle.setText(information);
setHeaderTitle(information);
}
updateSummary();
@@ -270,31 +251,26 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
mClickChooseDifferentNetworkListener.onClickChooseDifferentNetwork()
);
mButtonLeft = view.findViewById(R.id.button_left);
mButtonLeft.setText(R.string.cancel);
mButtonLeft.setOnClickListener(v -> getActivity().finish());
mLeftButton.setText(getContext(), R.string.cancel);
mLeftButton.setOnClickListener(v -> getActivity().finish());
mButtonRight = view.findViewById(R.id.button_right);
mButtonRight.setText(R.string.wifi_dpp_share_wifi);
mButtonRight.setOnClickListener(v -> {
mProgressBar.setVisibility(View.VISIBLE);
mButtonRight.setVisibility(View.INVISIBLE);
mRightButton.setText(getContext(), R.string.wifi_dpp_share_wifi);
mRightButton.setOnClickListener(v -> {
setProgressBarShown(true);
mRightButton.setVisibility(View.INVISIBLE);
startWifiDppConfiguratorInitiator();
updateSummary();
mTitleSummaryContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
});
if (savedInstanceState != null) {
if (mLatestStatusCode == WifiDppUtils.EASY_CONNECT_EVENT_SUCCESS) {
showSuccessUi(/* isConfigurationChange */ true);
} else if (mLatestStatusCode == WifiDppUtils.EASY_CONNECT_EVENT_FAILURE_NONE) {
mProgressBar.setVisibility(isGoingInitiator() ? View.VISIBLE : View.INVISIBLE);
mButtonRight.setVisibility(isGoingInitiator() ? View.INVISIBLE : View.VISIBLE);
setProgressBarShown(isGoingInitiator());
mRightButton.setVisibility(isGoingInitiator() ? View.INVISIBLE : View.VISIBLE);
} else {
showErrorUi(mLatestStatusCode, /* isConfigurationChange */ true);
}
} else {
changeFocusAndAnnounceChange(mButtonRight, mTitleSummaryContainer);
}
}
@@ -374,4 +350,9 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
focusView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
announceView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
}
@Override
protected boolean isFooterAvailable() {
return true;
}
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
@@ -24,7 +23,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.ListView;
import androidx.fragment.app.FragmentManager;
@@ -40,8 +38,6 @@ public class WifiDppChooseSavedWifiNetworkFragment extends WifiDppQrCodeBaseFrag
private static final String TAG_FRAGMENT_WIFI_NETWORK_LIST = "wifi_network_list_fragment";
private ListView mSavedWifiNetworkList;
private Button mButtonLeft;
private Button mButtonRight;
@Override
public int getMetricsCategory() {
@@ -52,11 +48,6 @@ public class WifiDppChooseSavedWifiNetworkFragment extends WifiDppQrCodeBaseFrag
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final ActionBar actionBar = getActivity().getActionBar();
if (actionBar != null) {
actionBar.hide();
}
/** Embeded WifiNetworkListFragment as child fragment within
* WifiDppChooseSavedWifiNetworkFragment. */
final FragmentManager fragmentManager = getChildFragmentManager();
@@ -82,14 +73,11 @@ public class WifiDppChooseSavedWifiNetworkFragment extends WifiDppQrCodeBaseFrag
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHeaderIconImageResource(R.drawable.ic_wifi_signal_4);
mTitle.setText(R.string.wifi_dpp_choose_network);
setHeaderTitle(R.string.wifi_dpp_choose_network);
mSummary.setText(R.string.wifi_dpp_choose_network_to_connect_device);
mButtonLeft = view.findViewById(R.id.button_left);
mButtonLeft.setText(R.string.cancel);
mButtonLeft.setOnClickListener(v -> {
mLeftButton.setText(getContext(), R.string.cancel);
mLeftButton.setOnClickListener(v -> {
String action = null;
final Intent intent = getActivity().getIntent();
if (intent != null) {
@@ -104,13 +92,11 @@ public class WifiDppChooseSavedWifiNetworkFragment extends WifiDppQrCodeBaseFrag
}
});
mButtonRight = view.findViewById(R.id.button_right);
mButtonRight.setVisibility(View.GONE);
mRightButton.setVisibility(View.GONE);
}
if (savedInstanceState == null) {
// For Talkback to describe this fragment
mTitleSummaryContainer.sendAccessibilityEvent(
AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
}
@Override
protected boolean isFooterAvailable() {
return true;
}
}

View File

@@ -16,9 +16,9 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
@@ -33,6 +33,7 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.core.InstrumentedActivity;
import java.util.List;
@@ -93,6 +94,13 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
return SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR;
}
@Override
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
resid = SetupWizardUtils.getTheme(getIntent());
theme.applyStyle(R.style.SetupWizardPartnerResource, /* force */ true);
super.onApplyThemeResource(theme, resid, first);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -117,12 +125,6 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
} else {
handleIntent(getIntent());
}
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setElevation(0);
actionBar.setDisplayShowTitleEnabled(false);
}
}
private void handleIntent(Intent intent) {
@@ -321,14 +323,6 @@ public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
return true;
}
@Override
public boolean onNavigateUp() {
if (!mFragmentManager.popBackStackImmediate()) {
finish();
}
return true;
}
@Override
public void onQrCodeGeneratorFragmentAddButtonClicked() {
showQrCodeScannerFragment(/* addToBackStack */ true);

View File

@@ -16,9 +16,9 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
@@ -27,10 +27,9 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.core.InstrumentedActivity;
import com.google.android.setupcompat.util.WizardManagerHelper;
/**
* To provision "this" device with specified Wi-Fi network.
*
@@ -51,26 +50,23 @@ public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
return SettingsEnums.SETTINGS_WIFI_DPP_ENROLLEE;
}
@Override
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
resid = SetupWizardUtils.getTheme(getIntent());
theme.applyStyle(R.style.SetupWizardPartnerResource, /* force */ true);
super.onApplyThemeResource(theme, resid, first);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
setTheme(R.style.LightTheme_SettingsBase_SetupWizard);
}
setContentView(R.layout.wifi_dpp_activity);
mFragmentManager = getSupportFragmentManager();
if (savedInstanceState == null) {
handleIntent(getIntent());
}
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setElevation(0);
actionBar.setDisplayShowTitleEnabled(false);
}
}
private void handleIntent(Intent intent) {
@@ -112,12 +108,6 @@ public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
fragmentTransaction.commit();
}
@Override
public boolean onNavigateUp(){
finish();
return true;
}
@Override
public void onScanWifiDppSuccess(WifiQrCode wifiQrCode) {
// Do nothing

View File

@@ -16,14 +16,22 @@
package com.android.settings.wifi.dpp;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.GlifLayout;
/**
* There are below 4 fragments for Wi-Fi DPP UI flow, to reduce redundant code of UI components,
* this parent fragment instantiates common UI components
@@ -34,37 +42,63 @@ import com.android.settings.core.InstrumentedFragment;
* {@code WifiDppAddDeviceFragment}
*/
public abstract class WifiDppQrCodeBaseFragment extends InstrumentedFragment {
private GlifLayout mGlifLayout;
private ImageView mHeaderIcon;
private ImageView mDevicesCheckCircleGreenHeaderIcon;
protected TextView mTitle;
protected TextView mSummary;
protected View mTitleSummaryContainer;
protected FooterButton mLeftButton;
protected FooterButton mRightButton;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mGlifLayout = (GlifLayout) view;
mHeaderIcon = view.findViewById(android.R.id.icon);
mDevicesCheckCircleGreenHeaderIcon =
view.findViewById(R.id.devices_check_circle_green_icon);
mTitle = view.findViewById(android.R.id.title);
mSummary = view.findViewById(android.R.id.summary);
// This is the LinearLayout which groups mTitle and mSummary for Talkback to announce the
// content in a way that reflects its natural groupings.
mTitleSummaryContainer = view.findViewById(R.id.title_summary_container);
}
if (isFooterAvailable()) {
FooterBarMixin FooterBarMixin = ((GlifLayout) view).getMixin(FooterBarMixin.class);
protected void setHeaderIconImageResource(int resId) {
// ic_devices_check_circle_green is a LayerDrawable,
// it has different size from other VectorDrawable icons
if (resId == R.drawable.ic_devices_check_circle_green) {
mHeaderIcon.setVisibility(View.GONE);
mDevicesCheckCircleGreenHeaderIcon.setVisibility(View.VISIBLE);
} else {
mDevicesCheckCircleGreenHeaderIcon.setVisibility(View.GONE);
mHeaderIcon.setImageResource(resId);
mHeaderIcon.setVisibility(View.VISIBLE);
mLeftButton = new FooterButton.Builder(getContext())
.setButtonType(FooterButton.ButtonType.CANCEL)
.setTheme(R.style.SudGlifButton_Secondary)
.build();
mGlifLayout.getMixin(FooterBarMixin.class).setSecondaryButton(mLeftButton);
mRightButton = new FooterButton.Builder(getContext())
.setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(R.style.SudGlifButton_Primary)
.build();
mGlifLayout.getMixin(FooterBarMixin.class).setPrimaryButton(mRightButton);
}
}
protected void setHeaderIconImageResource(@DrawableRes int iconResId) {
mGlifLayout.setIcon(getDrawable(iconResId));
}
private Drawable getDrawable(@DrawableRes int iconResId) {
Drawable buttonIcon = null;
try {
buttonIcon = getContext().getDrawable(iconResId);
} catch (Resources.NotFoundException exception) {
}
return buttonIcon;
}
protected void setHeaderTitle(String title) {
mGlifLayout.setHeaderText(title);
}
protected void setHeaderTitle(int resId, Object... formatArgs) {
mGlifLayout.setHeaderText(getString(resId, formatArgs));
}
protected void setProgressBarShown(boolean shown) {
mGlifLayout.setProgressBarShown(shown);
}
protected abstract boolean isFooterAvailable();
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.graphics.Bitmap;
@@ -70,13 +69,6 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {
} else {
getActivity().setTitle(R.string.wifi_dpp_share_wifi);
}
setHasOptionsMenu(true);
final ActionBar actionBar = getActivity().getActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.show();
}
}
@Override
@@ -116,13 +108,11 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {
mQrCodeView = view.findViewById(R.id.qrcode_view);
setHeaderIconImageResource(R.drawable.ic_qrcode_24dp);
final WifiNetworkConfig wifiNetworkConfig = getWifiNetworkConfigFromHostActivity();
if (wifiNetworkConfig.isHotspot()) {
mTitle.setText(R.string.wifi_dpp_share_hotspot);
setHeaderTitle(R.string.wifi_dpp_share_hotspot);
} else {
mTitle.setText(R.string.wifi_dpp_share_wifi);
setHeaderTitle(R.string.wifi_dpp_share_wifi);
}
final String password = wifiNetworkConfig.getPreSharedKey();
@@ -168,4 +158,9 @@ public class WifiDppQrCodeGeneratorFragment extends WifiDppQrCodeBaseFragment {
return wifiNetworkConfig;
}
@Override
protected boolean isFooterAvailable() {
return false;
}
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.dpp;
import android.app.ActionBar;
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -42,7 +41,6 @@ import android.view.TextureView.SurfaceTextureListener;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.StringRes;
@@ -91,7 +89,6 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
private static final int ARG_RESTART_CAMERA = 1;
private ProgressBar mProgressBar;
private QrCamera mCamera;
private TextureView mTextureView;
private QrDecorateView mDecorateView;
@@ -136,7 +133,7 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
SHOW_ERROR_MESSAGE_INTERVAL);
if (msg.arg1 == ARG_RESTART_CAMERA) {
mProgressBar.setVisibility(View.INVISIBLE);
setProgressBarShown(false);
mDecorateView.setFocused(false);
restartCamera();
}
@@ -150,7 +147,7 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
mScanWifiDppSuccessListener.onScanWifiDppSuccess((WifiQrCode)msg.obj);
if (!mIsConfiguratorMode) {
mProgressBar.setVisibility(View.VISIBLE);
setProgressBarShown(true);
startWifiDppEnrolleeInitiator((WifiQrCode)msg.obj);
updateEnrolleeSummary();
mSummary.sendAccessibilityEvent(
@@ -335,12 +332,6 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
} else {
getActivity().setTitle(R.string.wifi_dpp_scan_qr_code);
}
final ActionBar actionBar = getActivity().getActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.show();
}
}
@Override
@@ -373,13 +364,10 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
mDecorateView = (QrDecorateView) view.findViewById(R.id.decorate_view);
setHeaderIconImageResource(R.drawable.ic_scan_24dp);
mProgressBar = view.findViewById(R.id.indeterminate_bar);
mProgressBar.setVisibility(isGoingInitiator() ? View.VISIBLE : View.INVISIBLE);
setProgressBarShown(isGoingInitiator());
if (mIsConfiguratorMode) {
mTitle.setText(R.string.wifi_dpp_add_device_to_network);
setHeaderTitle(R.string.wifi_dpp_add_device_to_network);
WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
.getWifiNetworkConfig();
@@ -389,7 +377,7 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
mSummary.setText(getString(R.string.wifi_dpp_center_qr_code,
wifiNetworkConfig.getSsid()));
} else {
mTitle.setText(R.string.wifi_dpp_scan_qr_code);
setHeaderTitle(R.string.wifi_dpp_scan_qr_code);
updateEnrolleeSummary();
}
@@ -733,4 +721,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl
protected boolean isDecodeTaskAlive() {
return mCamera != null && mCamera.isDecodeTaskAlive();
}
@Override
protected boolean isFooterAvailable() {
return false;
}
}