Create configure Wi-Fi screen

Add a gear on Settings menu, and move a bunch of stuff from
overflow and advanced screen to there.  Also move add network
to be the last item in the list rather than in overflow.

Also fix WifiP2p breakage.

Change-Id: I5c84c25e5ba9224f77dcd988b0b2850ae6e71168
This commit is contained in:
Jason Monk
2015-12-04 09:36:36 -05:00
parent e1481ee90d
commit 0b4fdc49fb
8 changed files with 421 additions and 346 deletions

View File

@@ -32,7 +32,7 @@ import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
@@ -47,9 +47,11 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder;
import android.text.Spannable;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
@@ -99,14 +101,13 @@ public class WifiSettings extends RestrictedSettingsFragment
/* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
private static final int MENU_ID_SAVED_NETWORK = Menu.FIRST + 2;
/* package */ static final int MENU_ID_ADD_NETWORK = Menu.FIRST + 3;
private static final int MENU_ID_ADVANCED = Menu.FIRST + 4;
private static final int MENU_ID_SCAN = Menu.FIRST + 5;
private static final int MENU_ID_CONNECT = Menu.FIRST + 6;
private static final int MENU_ID_FORGET = Menu.FIRST + 7;
private static final int MENU_ID_MODIFY = Menu.FIRST + 8;
private static final int MENU_ID_WRITE_NFC = Menu.FIRST + 9;
private static final int MENU_ID_CONFIGURE = Menu.FIRST + 10;
public static final int WIFI_DIALOG_ID = 1;
/* package */ static final int WPS_PBC_DIALOG_ID = 2;
@@ -118,8 +119,6 @@ public class WifiSettings extends RestrictedSettingsFragment
private static final String SAVE_DIALOG_ACCESS_POINT_STATE = "wifi_ap_state";
private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state";
private static boolean savedNetworksExist;
protected WifiManager mWifiManager;
private WifiManager.ActionListener mConnectListener;
private WifiManager.ActionListener mSaveListener;
@@ -157,6 +156,7 @@ public class WifiSettings extends RestrictedSettingsFragment
private HandlerThread mBgThread;
private UserBadgeCache mUserBadgeCache;
private Preference mAddPreference;
/* End of "used in Wifi Setup context" */
@@ -177,6 +177,14 @@ public class WifiSettings extends RestrictedSettingsFragment
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.wifi_settings);
mAddPreference = new Preference(getContext());
Drawable ic_add = getContext().getDrawable(R.drawable.ic_menu_add).mutate();
TypedValue tv = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.colorAccent, tv, true);
ic_add.setTint(getContext().getColor(tv.resourceId));
mAddPreference.setIcon(ic_add);
mAddPreference.setTitle(R.string.wifi_add_network);
mUserBadgeCache = new UserBadgeCache(getPackageManager());
mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
@@ -343,24 +351,14 @@ public class WifiSettings extends RestrictedSettingsFragment
*/
void addOptionsMenuItems(Menu menu) {
final boolean wifiIsEnabled = mWifiTracker.isWifiEnabled();
TypedArray ta = getActivity().getTheme().obtainStyledAttributes(
new int[] {R.attr.ic_menu_add, R.attr.ic_wps});
menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network)
.setIcon(ta.getDrawable(0))
.setEnabled(wifiIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
if (savedNetworksExist) {
menu.add(Menu.NONE, MENU_ID_SAVED_NETWORK, 0, R.string.wifi_saved_access_points_label)
.setIcon(ta.getDrawable(0))
.setEnabled(wifiIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.menu_stats_refresh)
.setEnabled(wifiIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
ta.recycle();
menu.add(Menu.NONE, MENU_ID_CONFIGURE, 0, R.string.wifi_menu_configure)
.setIcon(R.drawable.ic_settings_24dp)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
@Override
@@ -419,22 +417,6 @@ public class WifiSettings extends RestrictedSettingsFragment
MetricsLogger.action(getActivity(), MetricsLogger.ACTION_WIFI_FORCE_SCAN);
mWifiTracker.forceScan();
return true;
case MENU_ID_ADD_NETWORK:
if (mWifiTracker.isWifiEnabled()) {
onAddNetworkPressed();
}
return true;
case MENU_ID_SAVED_NETWORK:
if (getActivity() instanceof SettingsActivity) {
((SettingsActivity) getActivity()).startPreferencePanel(
SavedAccessPointsWifiSettings.class.getCanonicalName(), null,
R.string.wifi_saved_access_points_titlebar, null, this, 0);
} else {
startFragment(this, SavedAccessPointsWifiSettings.class.getCanonicalName(),
R.string.wifi_saved_access_points_titlebar,
-1 /* Do not request a result */, null);
}
return true;
case MENU_ID_ADVANCED:
if (getActivity() instanceof SettingsActivity) {
((SettingsActivity) getActivity()).startPreferencePanel(
@@ -446,6 +428,18 @@ public class WifiSettings extends RestrictedSettingsFragment
null);
}
return true;
case MENU_ID_CONFIGURE:
if (getActivity() instanceof SettingsActivity) {
((SettingsActivity) getActivity()).startPreferencePanel(
ConfigureWifiSettings.class.getCanonicalName(), null,
R.string.wifi_configure_titlebar, null, this, 0);
} else {
startFragment(this, ConfigureWifiSettings.class.getCanonicalName(),
R.string.wifi_configure_titlebar, -1 /* Do not request a results */,
null);
}
return true;
}
return super.onOptionsItemSelected(item);
}
@@ -530,16 +524,14 @@ public class WifiSettings extends RestrictedSettingsFragment
if (mSelectedAccessPoint.getSecurity() == AccessPoint.SECURITY_NONE &&
!mSelectedAccessPoint.isSaved() && !mSelectedAccessPoint.isActive()) {
mSelectedAccessPoint.generateOpenNetworkConfig();
if (!savedNetworksExist) {
savedNetworksExist = true;
getActivity().invalidateOptionsMenu();
}
connect(mSelectedAccessPoint.getConfig());
} else if (mSelectedAccessPoint.isSaved()){
} else if (mSelectedAccessPoint.isSaved()) {
showDialog(mSelectedAccessPoint, WifiConfigUiBase.MODE_VIEW);
} else {
showDialog(mSelectedAccessPoint, WifiConfigUiBase.MODE_CONNECT);
}
} else if (preference == mAddPreference) {
onAddNetworkPressed();
} else {
return super.onPreferenceTreeClick(preference);
}
@@ -678,8 +670,23 @@ public class WifiSettings extends RestrictedSettingsFragment
}
if (!hasAvailableAccessPoints) {
setProgressBarVisible(true);
addMessagePreference(R.string.wifi_empty_list_wifi_on);
Preference pref = new Preference(getContext()) {
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
// Show a line on each side of add network.
holder.setDividerAllowedBelow(true);
}
};
pref.setSelectable(false);
pref.setSummary(R.string.wifi_empty_list_wifi_on);
pref.setOrder(0);
getPreferenceScreen().addPreference(pref);
mAddPreference.setOrder(1);
getPreferenceScreen().addPreference(mAddPreference);
} else {
mAddPreference.setOrder(index++);
getPreferenceScreen().addPreference(mAddPreference);
setProgressBarVisible(false);
}
break;
@@ -699,11 +706,6 @@ public class WifiSettings extends RestrictedSettingsFragment
setProgressBarVisible(false);
break;
}
// Update "Saved Networks" menu option.
if (savedNetworksExist != mWifiTracker.doSavedNetworksExist()) {
savedNetworksExist = !savedNetworksExist;
getActivity().invalidateOptionsMenu();
}
}
protected TextView initEmptyView() {
@@ -768,11 +770,6 @@ public class WifiSettings extends RestrictedSettingsFragment
@Override
public void onWifiStateChanged(int state) {
Activity activity = getActivity();
if (activity != null) {
activity.invalidateOptionsMenu();
}
switch (state) {
case WifiManager.WIFI_STATE_ENABLING:
addMessagePreference(R.string.wifi_starting);