Files
packages_apps_Settings/src/com/android/settings/wifi/p2p/WifiP2pEnabler.java
Irfan Sheriff 1610a74a26 Expose wifi p2p toggle switch to user
We will not show the Wifi p2p settings to user but the turn on/off capability
is exposed to the user and applications will be expected to let user turn on
and turn off p2p at launch.

Remove the compound button integration from the settings page.

Bug: 5242230
Change-Id: I54ec307304256b051e85201b8bb829d0e5544bfc
2011-08-31 11:54:46 -07:00

140 lines
4.6 KiB
Java

/*
* Copyright (C) 2011 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.p2p;
import com.android.settings.R;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.p2p.WifiP2pManager;
import android.os.Handler;
import android.os.Message;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.provider.Settings;
import android.util.Log;
/**
* WifiP2pEnabler is a helper to manage the Wifi p2p on/off
*/
public class WifiP2pEnabler implements Preference.OnPreferenceChangeListener {
private static final String TAG = "WifiP2pEnabler";
private final Context mContext;
private final CheckBoxPreference mCheckBox;
private final IntentFilter mIntentFilter;
private final Handler mHandler = new WifiP2pHandler();
private WifiP2pManager mWifiP2pManager;
private WifiP2pManager.Channel mChannel;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
handleP2pStateChanged(intent.getIntExtra(
WifiP2pManager.EXTRA_WIFI_STATE, WifiP2pManager.WIFI_P2P_STATE_DISABLED));
}
}
};
public WifiP2pEnabler(Context context, CheckBoxPreference checkBox) {
mContext = context;
mCheckBox = checkBox;
mWifiP2pManager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE);
if (mWifiP2pManager != null) {
mChannel = mWifiP2pManager.initialize(mContext, mHandler);
if (mChannel == null) {
//Failure to set up connection
Log.e(TAG, "Failed to set up connection with wifi p2p service");
mWifiP2pManager = null;
mCheckBox.setEnabled(false);
}
} else {
Log.e(TAG, "mWifiP2pManager is null!");
}
mIntentFilter = new IntentFilter(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
}
public void resume() {
if (mWifiP2pManager == null) return;
mContext.registerReceiver(mReceiver, mIntentFilter);
mCheckBox.setOnPreferenceChangeListener(this);
}
public void pause() {
if (mWifiP2pManager == null) return;
mContext.unregisterReceiver(mReceiver);
mCheckBox.setOnPreferenceChangeListener(null);
}
public boolean onPreferenceChange(Preference preference, Object value) {
if (mWifiP2pManager == null) return false;
mCheckBox.setEnabled(false);
final boolean enable = (Boolean) value;
if (enable) {
mWifiP2pManager.enableP2p(mChannel);
} else {
mWifiP2pManager.disableP2p(mChannel);
}
return false;
}
private void handleP2pStateChanged(int state) {
mCheckBox.setEnabled(true);
switch (state) {
case WifiP2pManager.WIFI_P2P_STATE_ENABLED:
mCheckBox.setChecked(true);
break;
case WifiP2pManager.WIFI_P2P_STATE_DISABLED:
mCheckBox.setChecked(false);
break;
default:
Log.e(TAG,"Unhandled wifi state " + state);
break;
}
}
private class WifiP2pHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WifiP2pManager.HANDLER_DISCONNECTION:
//Failure to set up connection
Log.e(TAG, "Lost connection with wifi p2p service");
mWifiP2pManager = null;
mCheckBox.setEnabled(false);
break;
case WifiP2pManager.ENABLE_P2P_FAILED:
mCheckBox.setEnabled(true);
break;
default:
//Ignore
break;
}
}
}
}