diff options
Diffstat (limited to 'src/com/android/settings/wifi/WifiSetupActivity.java')
-rw-r--r-- | src/com/android/settings/wifi/WifiSetupActivity.java | 199 |
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(); + } + } } |