Files
app_Settings/src/com/android/settings/wifi/WifiSetupActivity.java
Maurice Lam ab4fb49ab1 [WifiSetup] Swap buttons position in Skip dialog
According to material-spec, buttons that keep users in the same
screen should be on the left (negative button) while button that
intorduce changes should be on the right, even if the action is
destructive.

Bug: 18542108
Change-Id: I335f83c6bb810cd43aeda28566baacea39435c57
2014-12-01 12:09:10 -08:00

260 lines
10 KiB
Java

/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.wifi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.util.Log;
import com.android.settings.ButtonBarHandler;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.setupwizard.navigationbar.SetupWizardNavBar;
import com.android.setupwizard.navigationbar.SetupWizardNavBar.NavigationBarListener;
public class WifiSetupActivity extends WifiPickerActivity
implements ButtonBarHandler, NavigationBarListener {
private static final String TAG = "WifiSetupActivity";
private static final String EXTRA_ALLOW_SKIP = "allowSkip";
// this boolean extra specifies whether to auto finish when connection is established
private static final String EXTRA_AUTO_FINISH_ON_CONNECT = "wifi_auto_finish_on_connect";
// Whether auto finish is suspended until user connects to an access point
private static final String EXTRA_REQUIRE_USER_NETWORK_SELECTION =
"wifi_require_user_network_selection";
// Key for whether the user selected network in saved instance state bundle
private static final String PARAM_USER_SELECTED_NETWORK = "userSelectedNetwork";
// Activity result when pressing the Skip button
private static final int RESULT_SKIP = Activity.RESULT_FIRST_USER;
// Whether we allow skipping without a valid network connection
private boolean mAllowSkip = true;
// Whether to auto finish when the user selected a network and successfully connected
private boolean mAutoFinishOnConnection;
// Whether the user connected to a network. This excludes the auto-connecting by the system.
private boolean mUserSelectedNetwork;
// Whether the device is connected to WiFi
private boolean mWifiConnected;
private SetupWizardNavBar mNavigationBar;
private final IntentFilter mFilter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Refresh the connection state with the latest connection info. Use the connection info
// from ConnectivityManager instead of the one attached in the intent to make sure
// we have the most up-to-date connection state. b/17511772
refreshConnectionState();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false);
mAllowSkip = intent.getBooleanExtra(EXTRA_ALLOW_SKIP, true);
// Behave like the user already selected a network if we do not require selection
mUserSelectedNetwork = !intent.getBooleanExtra(EXTRA_REQUIRE_USER_NETWORK_SELECTION, false);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(PARAM_USER_SELECTED_NETWORK, mUserSelectedNetwork);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mUserSelectedNetwork = savedInstanceState.getBoolean(PARAM_USER_SELECTED_NETWORK, true);
}
private void refreshConnectionState() {
final ConnectivityManager connectivity = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
boolean connected = connectivity != null &&
connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
refreshConnectionState(connected);
}
private void refreshConnectionState(boolean connected) {
mWifiConnected = connected;
if (connected) {
if (mAutoFinishOnConnection && mUserSelectedNetwork) {
Log.d(TAG, "Auto-finishing with connection");
finishOrNext(Activity.RESULT_OK);
// Require a user selection before auto-finishing next time we are here. The user
// can either connect to a different network or press "next" to proceed.
mUserSelectedNetwork = false;
}
if (mNavigationBar != null) {
mNavigationBar.getNextButton().setText(R.string.setup_wizard_next_button_label);
mNavigationBar.getNextButton().setEnabled(true);
}
} else {
if (mNavigationBar != null) {
mNavigationBar.getNextButton().setText(R.string.skip_label);
mNavigationBar.getNextButton().setEnabled(mAllowSkip);
}
}
}
/* package */ void networkSelected() {
Log.d(TAG, "Network selected by user");
mUserSelectedNetwork = true;
}
@Override
public void onResume() {
super.onResume();
registerReceiver(mReceiver, mFilter);
refreshConnectionState();
}
@Override
public void onPause() {
unregisterReceiver(mReceiver);
super.onPause();
}
@Override
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
resid = SetupWizardUtils.getTheme(getIntent(), resid);
super.onApplyThemeResource(theme, resid, first);
}
@Override
protected boolean isValidFragment(String fragmentName) {
return WifiSettingsForSetupWizard.class.getName().equals(fragmentName);
}
@Override
/* package */ Class<? extends PreferenceFragment> getWifiSettingsClass() {
return WifiSettingsForSetupWizard.class;
}
/**
* Complete this activity and return the results to the caller. If using WizardManager, this
* will invoke the next scripted action; otherwise, we simply finish.
*/
public void finishOrNext(int resultCode) {
Log.d(TAG, "finishOrNext resultCode=" + resultCode
+ " isUsingWizardManager=" + SetupWizardUtils.isUsingWizardManager(this));
if (SetupWizardUtils.isUsingWizardManager(this)) {
SetupWizardUtils.sendResultsToSetupWizard(this, resultCode);
} else {
setResult(resultCode);
finish();
}
}
@Override
public void onNavigationBarCreated(final SetupWizardNavBar bar) {
mNavigationBar = bar;
SetupWizardUtils.setImmersiveMode(this, bar);
}
@Override
public void onNavigateBack() {
onBackPressed();
}
@Override
public void onNavigateNext() {
if (mWifiConnected) {
finishOrNext(RESULT_OK);
} else {
// Warn of possible data charges if there is a network connection, or lack of updates
// if there is none.
final int message = isNetworkConnected() ? R.string.wifi_skipped_message :
R.string.wifi_and_mobile_skipped_message;
WifiSkipDialog.newInstance(message).show(getFragmentManager(), "dialog");
}
}
/**
* @return True if there is a valid network connection, whether it is via WiFi, mobile data or
* other means.
*/
private boolean isNetworkConnected() {
final ConnectivityManager connectivity = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
}
final NetworkInfo info = connectivity.getActiveNetworkInfo();
return info != null && info.isConnected();
}
public static class WifiSkipDialog extends DialogFragment {
public static WifiSkipDialog newInstance(int messageRes) {
final Bundle args = new Bundle();
args.putInt("messageRes", messageRes);
final WifiSkipDialog dialog = new WifiSkipDialog();
dialog.setArguments(args);
return dialog;
}
public WifiSkipDialog() {
// no-arg constructor for fragment
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int messageRes = getArguments().getInt("messageRes");
return new AlertDialog.Builder(getActivity())
.setMessage(messageRes)
.setCancelable(false)
.setPositiveButton(R.string.wifi_skip_anyway,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
WifiSetupActivity activity = (WifiSetupActivity) getActivity();
activity.finishOrNext(RESULT_SKIP);
}
})
.setNegativeButton(R.string.wifi_dont_skip,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.create();
}
}
}