summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/wifi/WifiSetupActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/wifi/WifiSetupActivity.java')
-rw-r--r--src/com/android/settings/wifi/WifiSetupActivity.java199
1 files changed, 186 insertions, 13 deletions
diff --git a/src/com/android/settings/wifi/WifiSetupActivity.java b/src/com/android/settings/wifi/WifiSetupActivity.java
index d4811ed..8e4ff48 100644
--- a/src/com/android/settings/wifi/WifiSetupActivity.java
+++ b/src/com/android/settings/wifi/WifiSetupActivity.java
@@ -15,37 +15,210 @@
*/
package com.android.settings.wifi;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+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.setupwizard.navigationbar.SetupWizardNavBar;
+import com.android.setupwizard.navigationbar.SetupWizardNavBar.NavigationBarListener;
-import android.content.res.Resources;
+public class WifiSetupActivity extends WifiPickerActivity
+ implements ButtonBarHandler, NavigationBarListener {
+ private static final String TAG = "WifiSetupActivity";
-import java.lang.Class;
+ private static final String EXTRA_ALLOW_SKIP = "allowSkip";
+ private static final String EXTRA_USE_IMMERSIVE_MODE = "useImmersiveMode";
+
+ // this boolean extra shows a custom button that we can control
+ protected static final String EXTRA_SHOW_CUSTOM_BUTTON = "wifi_show_custom_button";
-public class WifiSetupActivity extends WifiPickerActivity implements ButtonBarHandler {
// Extra containing the resource name of the theme to be used
private static final String EXTRA_THEME = "theme";
private static final String THEME_HOLO = "holo";
private static final String THEME_HOLO_LIGHT = "holo_light";
+ private static final String THEME_MATERIAL = "material";
+ private static final String THEME_MATERIAL_LIGHT = "material_light";
+
+ // Activity result when pressing the Skip button
+ private static final int RESULT_SKIP = Activity.RESULT_FIRST_USER;
- // Style resources containing theme settings
- private static final String RESOURCE_THEME_DARK = "SetupWizardWifiTheme";
- private static final String RESOURCE_THEME_LIGHT = "SetupWizardWifiTheme.Light";
+ // From WizardManager (must match constants maintained there)
+ private static final String ACTION_NEXT = "com.android.wizard.NEXT";
+ private static final String EXTRA_SCRIPT_URI = "scriptUri";
+ private static final String EXTRA_ACTION_ID = "actionId";
+ private static final String EXTRA_RESULT_CODE = "com.android.setupwizard.ResultCode";
+ private static final int NEXT_REQUEST = 10000;
@Override
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
String themeName = getIntent().getStringExtra(EXTRA_THEME);
- if (THEME_HOLO_LIGHT.equalsIgnoreCase(themeName)) {
- resid = getResources().getIdentifier(RESOURCE_THEME_LIGHT, "style",
- getPackageName());
- } else if (THEME_HOLO.equalsIgnoreCase(themeName)) {
- resid = getResources().getIdentifier(RESOURCE_THEME_DARK, "style",
- getPackageName());
+ if (THEME_HOLO_LIGHT.equalsIgnoreCase(themeName) ||
+ THEME_MATERIAL_LIGHT.equalsIgnoreCase(themeName)) {
+ resid = R.style.SetupWizardWifiTheme_Light;
+ } else if (THEME_HOLO.equalsIgnoreCase(themeName) ||
+ THEME_MATERIAL.equalsIgnoreCase(themeName)) {
+ resid = R.style.SetupWizardWifiTheme;
}
super.onApplyThemeResource(theme, resid, first);
}
@Override
- /* package */ Class getWifiSettingsClass() {
+ protected boolean isValidFragment(String fragmentName) {
+ return WifiSettingsForSetupWizard.class.getName().equals(fragmentName);
+ }
+
+ @Override
+ /* package */ Class<? extends PreferenceFragment> getWifiSettingsClass() {
return WifiSettingsForSetupWizard.class;
}
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == Activity.RESULT_CANCELED) {
+ // Before returning to the settings panel, forget any current access point so it will
+ // not attempt to automatically reconnect and advance
+ // FIXME: when coming back, it would be better to keep the current connection and
+ // override the auto-advance feature
+ final WifiManager wifiManager = (WifiManager)(getSystemService(Context.WIFI_SERVICE));
+ if (wifiManager != null) {
+ final WifiInfo info = wifiManager.getConnectionInfo();
+ if (info != null) {
+ int netId = info.getNetworkId();
+ if (netId != WifiConfiguration.INVALID_NETWORK_ID) {
+ wifiManager.forget(netId, null);
+ }
+ }
+ }
+ }
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+
+ /**
+ * 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=" + isUsingWizardManager());
+ if (isUsingWizardManager()) {
+ sendResultsToSetupWizard(resultCode);
+ } else {
+ setResult(resultCode);
+ finish();
+ }
+ }
+
+ private boolean isUsingWizardManager() {
+ return getIntent().hasExtra(EXTRA_SCRIPT_URI);
+ }
+
+ /**
+ * Send the results of this activity to WizardManager, which will then send out the next
+ * scripted activity. WizardManager does not actually return an activity result, but if we
+ * invoke WizardManager without requesting a result, the framework will choose not to issue a
+ * call to onActivityResult with RESULT_CANCELED when navigating backward.
+ */
+ private void sendResultsToSetupWizard(int resultCode) {
+ final Intent intent = getIntent();
+ final Intent nextIntent = new Intent(ACTION_NEXT);
+ nextIntent.putExtra(EXTRA_SCRIPT_URI, intent.getStringExtra(EXTRA_SCRIPT_URI));
+ nextIntent.putExtra(EXTRA_ACTION_ID, intent.getStringExtra(EXTRA_ACTION_ID));
+ nextIntent.putExtra(EXTRA_RESULT_CODE, resultCode);
+ startActivityForResult(nextIntent, NEXT_REQUEST);
+ }
+
+ @Override
+ public void onNavigationBarCreated(final SetupWizardNavBar bar) {
+ final boolean useImmersiveMode =
+ getIntent().getBooleanExtra(EXTRA_USE_IMMERSIVE_MODE, false);
+ bar.setUseImmersiveMode(useImmersiveMode);
+ if (useImmersiveMode) {
+ getWindow().setNavigationBarColor(Color.TRANSPARENT);
+ getWindow().setStatusBarColor(Color.TRANSPARENT);
+ }
+ getIntent().putExtra(EXTRA_SHOW_CUSTOM_BUTTON, false);
+ bar.getNextButton().setText(R.string.skip_label);
+
+ if (!getIntent().getBooleanExtra(EXTRA_ALLOW_SKIP, true)) {
+ bar.getNextButton().setEnabled(false);
+ }
+ }
+
+ @Override
+ public void onNavigateBack() {
+ onBackPressed();
+ }
+
+ @Override
+ public void onNavigateNext() {
+ boolean isConnected = false;
+ final ConnectivityManager connectivity = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivity != null) {
+ final NetworkInfo info = connectivity.getActiveNetworkInfo();
+ isConnected = (info != null) && info.isConnected();
+ }
+ if (isConnected) {
+ // Warn of possible data charges
+ WifiSkipDialog.newInstance(R.string.wifi_skipped_message)
+ .show(getFragmentManager(), "dialog");
+ } else {
+ // Warn of lack of updates
+ WifiSkipDialog.newInstance(R.string.wifi_and_mobile_skipped_message)
+ .show(getFragmentManager(), "dialog");
+ }
+ }
+
+ private 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)
+ .setNegativeButton(R.string.wifi_skip_anyway,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ WifiSetupActivity activity = (WifiSetupActivity) getActivity();
+ activity.finishOrNext(RESULT_SKIP);
+ }
+ })
+ .setPositiveButton(R.string.wifi_dont_skip,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ }
+ })
+ .create();
+ }
+ }
}