Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa3d2c40 authored by Irfan Sheriff's avatar Irfan Sheriff
Browse files

Add mobile hotspot provisioning support

Bug: 5346812
Change-Id: I3e117fb62039c1d8370440ab4109705894011928
parent 3f28ff1a
Loading
Loading
Loading
Loading
+38 −6
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.os.Environment;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.webkit.WebView;
@@ -52,7 +53,7 @@ import java.util.Locale;
 * Displays preferences for Tethering.
 */
public class TetherSettings extends SettingsPreferenceFragment
        implements DialogInterface.OnClickListener {
        implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener {

    private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
    private static final String ENABLE_WIFI_AP = "enable_wifi_ap";
@@ -70,6 +71,8 @@ public class TetherSettings extends SettingsPreferenceFragment
    private CheckBoxPreference mUsbTether;

    private WifiApEnabler mWifiApEnabler;
    private CheckBoxPreference mEnableWifiAp;
    private static final int MHS_REQUEST = 0;

    private CheckBoxPreference mBluetoothTether;

@@ -89,7 +92,6 @@ public class TetherSettings extends SettingsPreferenceFragment

    private String[] mSecurityType;
    private Preference mCreateNetwork;
    private CheckBoxPreference mEnableWifiAp;

    private WifiApDialog mDialog;
    private WifiManager mWifiManager;
@@ -112,7 +114,7 @@ public class TetherSettings extends SettingsPreferenceFragment
                    BluetoothProfile.PAN);
        }

        CheckBoxPreference enableWifiAp =
        mEnableWifiAp =
                (CheckBoxPreference) findPreference(ENABLE_WIFI_AP);
        Preference wifiApSettings = findPreference(WIFI_AP_SSID_AND_SECURITY);
        mUsbTether = (CheckBoxPreference) findPreference(USB_TETHER_SETTINGS);
@@ -135,10 +137,10 @@ public class TetherSettings extends SettingsPreferenceFragment
        }

        if (wifiAvailable) {
            mWifiApEnabler = new WifiApEnabler(activity, enableWifiAp);
            mWifiApEnabler = new WifiApEnabler(activity, mEnableWifiAp);
            initWifiTethering();
        } else {
            getPreferenceScreen().removePreference(enableWifiAp);
            getPreferenceScreen().removePreference(mEnableWifiAp);
            getPreferenceScreen().removePreference(wifiApSettings);
        }

@@ -162,7 +164,6 @@ public class TetherSettings extends SettingsPreferenceFragment
        mSecurityType = getResources().getStringArray(R.array.wifi_ap_security);

        mCreateNetwork = findPreference(WIFI_AP_SSID_AND_SECURITY);
        mEnableWifiAp = (CheckBoxPreference) findPreference(ENABLE_WIFI_AP);

        if (mWifiConfig == null) {
            final String s = activity.getString(
@@ -315,6 +316,7 @@ public class TetherSettings extends SettingsPreferenceFragment

        if (intent != null) mTetherChangeReceiver.onReceive(activity, intent);
        if (mWifiApEnabler != null) {
            mEnableWifiAp.setOnPreferenceChangeListener(this);
            mWifiApEnabler.resume();
        }

@@ -327,6 +329,7 @@ public class TetherSettings extends SettingsPreferenceFragment
        getActivity().unregisterReceiver(mTetherChangeReceiver);
        mTetherChangeReceiver = null;
        if (mWifiApEnabler != null) {
            mEnableWifiAp.setOnPreferenceChangeListener(null);
            mWifiApEnabler.pause();
        }
    }
@@ -447,6 +450,35 @@ public class TetherSettings extends SettingsPreferenceFragment
        }
    }

    public boolean onPreferenceChange(Preference preference, Object value) {
        boolean enable = (Boolean) value;

        if (enable) {
            //Check if provisioning is needed
            String intentStr = getActivity().getString(
                    com.android.internal.R.string.config_mobile_hotspot_provision_intent);

            if (TextUtils.isEmpty(intentStr)) {
                mWifiApEnabler.setSoftapEnabled(true);
            } else {
                Intent intent = new Intent(intentStr);
                startActivityForResult(intent, MHS_REQUEST);
            }
        } else {
            mWifiApEnabler.setSoftapEnabled(false);
        }
        return false;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (requestCode == MHS_REQUEST) {
            if (resultCode == Activity.RESULT_OK) {
                mWifiApEnabler.setSoftapEnabled(true);
            }
        }
    }

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
        ConnectivityManager cm =
+2 −10
Original line number Diff line number Diff line
@@ -33,14 +33,13 @@ import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.preference.Preference;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

public class WifiApEnabler implements Preference.OnPreferenceChangeListener {
public class WifiApEnabler {
    private final Context mContext;
    private final CheckBoxPreference mCheckBox;
    private final CharSequence mOriginalSummary;
@@ -92,12 +91,10 @@ public class WifiApEnabler implements Preference.OnPreferenceChangeListener {
    public void resume() {
        mContext.registerReceiver(mReceiver, mIntentFilter);
        enableWifiCheckBox();
        mCheckBox.setOnPreferenceChangeListener(this);
    }

    public void pause() {
        mContext.unregisterReceiver(mReceiver);
        mCheckBox.setOnPreferenceChangeListener(null);
    }

    private void enableWifiCheckBox() {
@@ -111,11 +108,8 @@ public class WifiApEnabler implements Preference.OnPreferenceChangeListener {
        }
    }

    public boolean onPreferenceChange(Preference preference, Object value) {

    public void setSoftapEnabled(boolean enable) {
        final ContentResolver cr = mContext.getContentResolver();
        boolean enable = (Boolean)value;

        /**
         * Disable Wifi if enabling tethering
         */
@@ -148,8 +142,6 @@ public class WifiApEnabler implements Preference.OnPreferenceChangeListener {
                Settings.Secure.putInt(cr, Settings.Secure.WIFI_SAVED_STATE, 0);
            }
        }

        return false;
    }

    public void updateConfigSummary(WifiConfiguration wifiConfig) {