Initial commit for AndroidStudio project with gradle build system.
6
.idea/vcs.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
114
app/app.iml
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="android-gradle" name="Android-Gradle">
|
||||||
|
<configuration>
|
||||||
|
<option name="GRADLE_PROJECT_PATH" value=":app" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
<facet type="android" name="Android">
|
||||||
|
<configuration>
|
||||||
|
<option name="SELECTED_BUILD_VARIANT" value="debug" />
|
||||||
|
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
|
||||||
|
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
|
||||||
|
<afterSyncTasks>
|
||||||
|
<task>generateDebugSources</task>
|
||||||
|
</afterSyncTasks>
|
||||||
|
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||||
|
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
|
||||||
|
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
|
||||||
|
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
|
||||||
|
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
|
||||||
|
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
|
||||||
|
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
19
app/build.gradle
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 21
|
||||||
|
buildToolsVersion "27.0.2"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "nl.eventinfra.wifisetup"
|
||||||
|
minSdkVersion 18
|
||||||
|
targetSdkVersion 21
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
app/lint.xml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<lint>
|
||||||
|
</lint>
|
22
app/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="nl.eventinfra.wifisetup" android:installLocation="auto" android:versionCode="20171222" android:versionName="0.20">
|
||||||
|
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
|
||||||
|
<uses-feature android:name="android.hardware.wifi" android:required="true"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon">
|
||||||
|
<activity android:name="nl.eventinfra.wifisetup.WifiSetup"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@android:style/Theme.Holo.Light">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</manifest>
|
443
app/src/main/java/nl/eventinfra/wifisetup/WifiSetup.java
Normal file
|
@ -0,0 +1,443 @@
|
||||||
|
/* Copyright 2013-2016 Wilco Baan Hofman <wilco@baanhofman.nl>
|
||||||
|
*
|
||||||
|
* 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 nl.eventinfra.wifisetup;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
import android.provider.Settings.Secure;
|
||||||
|
import android.security.KeyChain;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
import java.security.KeyStore;
|
||||||
|
import java.security.KeyStoreException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.NoSuchProviderException;
|
||||||
|
import java.security.Security;
|
||||||
|
import java.security.cert.Certificate;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.CertificateFactory;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.NameValuePair;
|
||||||
|
import org.apache.http.client.ClientProtocolException;
|
||||||
|
import org.apache.http.client.HttpClient;
|
||||||
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.impl.client.DefaultHttpClient;
|
||||||
|
import org.apache.http.message.BasicNameValuePair;
|
||||||
|
/* import android.util.Base64; */
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import nl.eventinfra.wifisetup.R;
|
||||||
|
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.AlertDialog.Builder;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
import android.net.wifi.WifiEnterpriseConfig.Phase2;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.ViewFlipper;
|
||||||
|
|
||||||
|
// API level 18 and up
|
||||||
|
import android.net.wifi.WifiEnterpriseConfig;
|
||||||
|
import android.net.wifi.WifiEnterpriseConfig.Eap;
|
||||||
|
|
||||||
|
public class WifiSetup extends Activity {
|
||||||
|
// FIXME This should be a configuration setting somehow
|
||||||
|
private static final String INT_EAP = "eap";
|
||||||
|
private static final String INT_PHASE2 = "phase2";
|
||||||
|
private static final String INT_ENGINE = "engine";
|
||||||
|
private static final String INT_ENGINE_ID = "engine_id";
|
||||||
|
private static final String INT_CLIENT_CERT = "client_cert";
|
||||||
|
private static final String INT_CA_CERT = "ca_cert";
|
||||||
|
private static final String INT_PRIVATE_KEY = "private_key";
|
||||||
|
private static final String INT_PRIVATE_KEY_ID = "key_id";
|
||||||
|
private static final String INT_SUBJECT_MATCH = "subject_match";
|
||||||
|
private static final String INT_ALTSUBJECT_MATCH = "altsubject_match";
|
||||||
|
private static final String INT_PASSWORD = "password";
|
||||||
|
private static final String INT_IDENTITY = "identity";
|
||||||
|
private static final String INT_ANONYMOUS_IDENTITY = "anonymous_identity";
|
||||||
|
private static final String INT_ENTERPRISEFIELD_NAME = "android.net.wifi.WifiConfiguration$EnterpriseField";
|
||||||
|
|
||||||
|
// Because android.security.Credentials cannot be resolved...
|
||||||
|
private static final String INT_KEYSTORE_URI = "keystore://";
|
||||||
|
private static final String INT_CA_PREFIX = INT_KEYSTORE_URI + "CACERT_";
|
||||||
|
private static final String INT_PRIVATE_KEY_PREFIX = INT_KEYSTORE_URI + "USRPKEY_";
|
||||||
|
private static final String INT_PRIVATE_KEY_ID_PREFIX = "USRPKEY_";
|
||||||
|
private static final String INT_CLIENT_CERT_PREFIX = INT_KEYSTORE_URI + "USRCERT_";
|
||||||
|
|
||||||
|
protected static final int SHOW_PREFERENCES = 0;
|
||||||
|
private Handler mHandler = new Handler();
|
||||||
|
private EditText username;
|
||||||
|
private EditText password;
|
||||||
|
private CheckBox check5g;
|
||||||
|
private Button btn;
|
||||||
|
private String subject_match;
|
||||||
|
private String altsubject_match;
|
||||||
|
|
||||||
|
private String realm;
|
||||||
|
private String ssid;
|
||||||
|
private boolean busy = false;
|
||||||
|
private Toast toast = null;
|
||||||
|
private int logoclicks = 0;
|
||||||
|
private String s_username;
|
||||||
|
private String s_password;
|
||||||
|
private ViewFlipper flipper;
|
||||||
|
|
||||||
|
private void toastText(final String text) {
|
||||||
|
if (toast != null)
|
||||||
|
toast.cancel();
|
||||||
|
toast = Toast.makeText(getBaseContext(), text, Toast.LENGTH_SHORT);
|
||||||
|
toast.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unfortunately, this returns false on a LOT of devices :(
|
||||||
|
*
|
||||||
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
|
private boolean get5G() {
|
||||||
|
WifiManager wifiManager = (WifiManager) this.getSystemService(WIFI_SERVICE);
|
||||||
|
return wifiManager.is5GHzBandSupported();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Called when the activity is first created.
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.logon);
|
||||||
|
|
||||||
|
flipper = (ViewFlipper) findViewById(R.id.viewflipper);
|
||||||
|
username = (EditText) findViewById(R.id.username);
|
||||||
|
password = (EditText) findViewById(R.id.password);
|
||||||
|
|
||||||
|
check5g = (CheckBox) findViewById(R.id.check5g);
|
||||||
|
check5g.setChecked(true);
|
||||||
|
/*
|
||||||
|
TextView label5g = (TextView) findViewById(R.id.label5g);
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 21) {
|
||||||
|
check5g.setChecked(get5G());
|
||||||
|
label5g.setText("(autodetected value)");
|
||||||
|
} else {
|
||||||
|
check5g.setChecked(true);
|
||||||
|
label5g.setText("(Android 5.0 is needed to autodetect this)");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
ImageView img = (ImageView) findViewById(R.id.logo);
|
||||||
|
img.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
logoclicks++;
|
||||||
|
if (logoclicks == 4) {
|
||||||
|
toastText("You're cute!");
|
||||||
|
}
|
||||||
|
if (logoclicks == 6) {
|
||||||
|
toastText("Stop that!");
|
||||||
|
}
|
||||||
|
if (logoclicks == 7) {
|
||||||
|
View logindata = findViewById(R.id.logindata);
|
||||||
|
logindata.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btn = (Button) findViewById(R.id.button1);
|
||||||
|
if (btn == null)
|
||||||
|
throw new RuntimeException("button1 not found. Odd");
|
||||||
|
btn.setOnClickListener(new Button.OnClickListener() {
|
||||||
|
public void onClick(View _v) {
|
||||||
|
if (busy) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
busy = true;
|
||||||
|
_v.setClickable(false);
|
||||||
|
|
||||||
|
// Most of this stuff runs in the background
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 18) {
|
||||||
|
saveWifiConfig();
|
||||||
|
resultStatus(true, "You should now have a wifi connection entry with correct security settings and certificate verification.\n\nMake sure to actually use it!");
|
||||||
|
// Clear the password field in the UI thread
|
||||||
|
/*
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
password.setText("");
|
||||||
|
};
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("What version is this?! API Mismatch");
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
resultStatus(false, "Something went wrong: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
busy = false;
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
btn.setClickable(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveWifiConfig() {
|
||||||
|
WifiManager wifiManager = (WifiManager) this.getApplicationContext().getSystemService(WIFI_SERVICE);
|
||||||
|
if (!wifimanager) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wifiManager.setWifiEnabled(true);
|
||||||
|
|
||||||
|
WifiConfiguration currentConfig = new WifiConfiguration();
|
||||||
|
|
||||||
|
List<WifiConfiguration> configs = null;
|
||||||
|
for (int i = 0; i < 10 && configs == null; i++) {
|
||||||
|
configs = wifiManager.getConfiguredNetworks();
|
||||||
|
try {
|
||||||
|
Thread.sleep(1);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
// Do nothing ;-)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check5g.isChecked()) {
|
||||||
|
ssid = "34C3";
|
||||||
|
} else {
|
||||||
|
ssid = "34C3-legacy";
|
||||||
|
}
|
||||||
|
subject_match = "/CN=radius.c3noc.net";
|
||||||
|
altsubject_match = "DNS:radius.c3noc.net";
|
||||||
|
|
||||||
|
s_username = username.getText().toString();
|
||||||
|
s_password = password.getText().toString();
|
||||||
|
realm = "";
|
||||||
|
if (s_username.equals("") && s_password.equals("")) {
|
||||||
|
s_username = "34c3";
|
||||||
|
s_password = "34c3";
|
||||||
|
} else {
|
||||||
|
if (s_username.contains("@")) {
|
||||||
|
int idx = s_username.indexOf("@");
|
||||||
|
realm = s_username.substring(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Use the existing eduroam profile if it exists.
|
||||||
|
boolean ssidExists = false;
|
||||||
|
if (configs != null) {
|
||||||
|
for (WifiConfiguration config : configs) {
|
||||||
|
if (config.SSID.equals(surroundWithQuotes(ssid))) {
|
||||||
|
currentConfig = config;
|
||||||
|
ssidExists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentConfig.SSID = surroundWithQuotes(ssid);
|
||||||
|
currentConfig.hiddenSSID = false;
|
||||||
|
currentConfig.priority = 40;
|
||||||
|
currentConfig.status = WifiConfiguration.Status.DISABLED;
|
||||||
|
|
||||||
|
currentConfig.allowedKeyManagement.clear();
|
||||||
|
currentConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
|
||||||
|
|
||||||
|
// GroupCiphers (Allow most ciphers)
|
||||||
|
currentConfig.allowedGroupCiphers.clear();
|
||||||
|
currentConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
|
||||||
|
currentConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
|
||||||
|
currentConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
|
||||||
|
|
||||||
|
|
||||||
|
// PairwiseCiphers (CCMP = WPA2 only)
|
||||||
|
currentConfig.allowedPairwiseCiphers.clear();
|
||||||
|
currentConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
|
||||||
|
|
||||||
|
// Authentication Algorithms (OPEN)
|
||||||
|
currentConfig.allowedAuthAlgorithms.clear();
|
||||||
|
currentConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
|
||||||
|
|
||||||
|
// Protocols (RSN/WPA2 only)
|
||||||
|
currentConfig.allowedProtocols.clear();
|
||||||
|
currentConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
|
||||||
|
|
||||||
|
// Enterprise Settings
|
||||||
|
HashMap<String,String> configMap = new HashMap<>();
|
||||||
|
configMap.put(INT_SUBJECT_MATCH, subject_match);
|
||||||
|
configMap.put(INT_ALTSUBJECT_MATCH, altsubject_match);
|
||||||
|
configMap.put(INT_ANONYMOUS_IDENTITY, "anonymous" + realm);
|
||||||
|
configMap.put(INT_IDENTITY, s_username);
|
||||||
|
configMap.put(INT_PASSWORD, s_password);
|
||||||
|
configMap.put(INT_EAP, "TTLS");
|
||||||
|
configMap.put(INT_PHASE2, "auth=PAP");
|
||||||
|
configMap.put(INT_ENGINE, "0");
|
||||||
|
// configMap.put(INT_CA_CERT, INT_CA_PREFIX + ca_name);
|
||||||
|
|
||||||
|
applyAndroid43EnterpriseSettings(currentConfig, configMap);
|
||||||
|
|
||||||
|
if (!ssidExists) {
|
||||||
|
int networkId = wifiManager.addNetwork(currentConfig);
|
||||||
|
wifiManager.enableNetwork(networkId, false);
|
||||||
|
} else {
|
||||||
|
wifiManager.updateNetwork(currentConfig);
|
||||||
|
wifiManager.enableNetwork(currentConfig.networkId, false);
|
||||||
|
}
|
||||||
|
wifiManager.saveConfiguration();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
|
||||||
|
private void applyAndroid43EnterpriseSettings(WifiConfiguration currentConfig, HashMap<String,String> configMap) {
|
||||||
|
try {
|
||||||
|
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
|
||||||
|
InputStream in = getResources().openRawResource(R.raw.cacert);
|
||||||
|
// InputStream in = new ByteArrayInputStream(Base64.decode(ca.replaceAll("-----(BEGIN|END) CERTIFICATE-----", ""), 0));
|
||||||
|
X509Certificate caCert = (X509Certificate) certFactory.generateCertificate(in);
|
||||||
|
|
||||||
|
WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
|
||||||
|
enterpriseConfig.setPhase2Method(Phase2.PAP);
|
||||||
|
enterpriseConfig.setAnonymousIdentity(configMap.get(INT_ANONYMOUS_IDENTITY));
|
||||||
|
enterpriseConfig.setEapMethod(Eap.TTLS);
|
||||||
|
|
||||||
|
enterpriseConfig.setCaCertificate(caCert);
|
||||||
|
enterpriseConfig.setIdentity(s_username);
|
||||||
|
enterpriseConfig.setPassword(s_password);
|
||||||
|
enterpriseConfig.setSubjectMatch(configMap.get(INT_SUBJECT_MATCH));
|
||||||
|
currentConfig.enterpriseConfig = enterpriseConfig;
|
||||||
|
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.options_menu, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item){
|
||||||
|
Builder builder = new AlertDialog.Builder(this);
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.about:
|
||||||
|
PackageInfo pi = null;
|
||||||
|
try{
|
||||||
|
pi = getPackageManager().getPackageInfo(getClass().getPackage().getName(), 0);
|
||||||
|
} catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
builder.setTitle(getString(R.string.ABOUT_TITLE));
|
||||||
|
builder.setMessage(getString(R.string.ABOUT_CONTENT)+
|
||||||
|
"\n\n"+pi.packageName+"\n"+
|
||||||
|
"V"+pi.versionName+
|
||||||
|
"C"+pi.versionCode+"-equi");
|
||||||
|
builder.setPositiveButton(getString(android.R.string.ok), null);
|
||||||
|
builder.show();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
case R.id.exit:
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Update the status in the main thread */
|
||||||
|
protected void resultStatus(final boolean success, final String text) {
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
TextView res_title = (TextView) findViewById(R.id.resulttitle);
|
||||||
|
TextView res_text = (TextView) findViewById(R.id.result);
|
||||||
|
|
||||||
|
System.out.println(text);
|
||||||
|
res_text.setText(text);
|
||||||
|
if (success)
|
||||||
|
res_title.setText("Success!");
|
||||||
|
else
|
||||||
|
res_title.setText("ERROR!");
|
||||||
|
|
||||||
|
if (toast != null)
|
||||||
|
toast.cancel();
|
||||||
|
/* toast = Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG);
|
||||||
|
toast.show(); */
|
||||||
|
flipper.showNext();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static String removeQuotes(String str) {
|
||||||
|
int len = str.length();
|
||||||
|
if ((len > 1) && (str.charAt(0) == '"') && (str.charAt(len - 1) == '"')) {
|
||||||
|
return str.substring(1, len - 1);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String surroundWithQuotes(String string) {
|
||||||
|
return "\"" + string + "\"";
|
||||||
|
}
|
||||||
|
}
|
BIN
app/src/main/res/drawable-hdpi/ccc34c3logo.png
Normal file
After Width: | Height: | Size: 416 KiB |
BIN
app/src/main/res/drawable-hdpi/emflogo.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
app/src/main/res/drawable-hdpi/icon.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable-hdpi/logo.png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
app/src/main/res/drawable-hdpi/shalogo.png
Normal file
After Width: | Height: | Size: 403 KiB |
BIN
app/src/main/res/drawable-ldpi/icon.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/drawable-mdpi/icon.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
4
app/src/main/res/drawable/rectangle.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
|
||||||
|
<solid android:color="#ffffff" />
|
||||||
|
<stroke android:width="1dip" android:color="#4fa5d5"/>
|
||||||
|
</shape>
|
132
app/src/main/res/layout/logon.xml
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ViewFlipper
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context=".WifiSetup"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:id="@+id/viewflipper"
|
||||||
|
>
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:id="@+id/FirstView"
|
||||||
|
>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/logonLayout"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center_horizontal|top">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/logo"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:contentDescription="@string/LOGO"
|
||||||
|
android:src="@drawable/ccc34c3logo"
|
||||||
|
android:padding="0dp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:text="@string/twitter"/>
|
||||||
|
|
||||||
|
<CheckBox android:id="@+id/check5g"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:text="@string/c5ghz"/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/label5g"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:text="@string/l5ghz"/>
|
||||||
|
<TextView
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:id="@+id/labelkeystore"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:text="@string/lkeystore"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/logindata"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center_horizontal|top"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/username"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="textEmailAddress"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:hint="@string/Username"
|
||||||
|
>
|
||||||
|
<requestFocus />
|
||||||
|
</EditText>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/password"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="textPassword"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="@string/Password"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/Logon"
|
||||||
|
android:layout_margin="15dp"/>
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:id="@+id/logonLayout2"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/resulttitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="15dp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textSize="24sp"
|
||||||
|
/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/result"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="15sp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
||||||
|
</ViewFlipper>
|
5
app/src/main/res/menu/options_menu.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item android:id="@+id/about" android:title="@string/ABOUT_TITLE"/>
|
||||||
|
<item android:id="@+id/exit" android:title="@string/EXIT_TITLE"/>
|
||||||
|
</menu>
|
BIN
app/src/main/res/raw/cacert.der
Normal file
4
app/src/main/res/values/arrays.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
</resources>
|
22
app/src/main/res/values/strings.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">34C3 Wifi Setup</string>
|
||||||
|
|
||||||
|
<string name="TITLE_LOGON">Please logon</string>
|
||||||
|
<string name="Username">username@realm</string>
|
||||||
|
<string name="Password">password</string>
|
||||||
|
<string name="Logon">Create connection entry</string>
|
||||||
|
|
||||||
|
<string name="twitter">https://twitter.com/sha2017noc</string>
|
||||||
|
|
||||||
|
<string name="c5ghz">This device supports the 5GHz band</string>
|
||||||
|
<string name="l5ghz">(Unfortunately, autodetecting 5GHz support is broken...)</string>
|
||||||
|
<string name="lkeystore">Note: if you have no screen lock, Android refuses to store the security settings!</string>
|
||||||
|
|
||||||
|
|
||||||
|
<string name="ABOUT_TITLE">About</string>
|
||||||
|
<string name="EXIT_TITLE">Exit</string>
|
||||||
|
|
||||||
|
<string name="ABOUT_CONTENT">This small helper app creates a Wifi connection entry for the CCC/EMF/SHA2017 networks. It configures the correct SSL CA and subject name match, making it a little more secure than a hand-created entry.</string>
|
||||||
|
<string name="LOGO">34C3 Logo</string>
|
||||||
|
</resources>
|
11
app/src/main/res/xml/userpreferences.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:title="@string/TITLE_LOGON">
|
||||||
|
<PreferenceCategory android:title="SSID"
|
||||||
|
android:orderingFromXml="true">
|
||||||
|
<EditTextPreference android:key="Username"
|
||||||
|
android:summary="@string/Username" android:title="@string/Username"></EditTextPreference>
|
||||||
|
<EditTextPreference android:key="Password" android:summary="@string/Username" android:title="@string/Password" android:password="true"></EditTextPreference>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
15
build.gradle
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
}
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#Fri Dec 22 12:53:58 CET 2017
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
|
160
gradlew
vendored
Executable file
|
@ -0,0 +1,160 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn ( ) {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die ( ) {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
(0) set -- ;;
|
||||||
|
(1) set -- "$args0" ;;
|
||||||
|
(2) set -- "$args0" "$args1" ;;
|
||||||
|
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||||
|
function splitJvmOpts() {
|
||||||
|
JVM_OPTS=("$@")
|
||||||
|
}
|
||||||
|
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||||
|
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
90
gradlew.bat
vendored
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS=
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windowz variants
|
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
|
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||||
|
|
||||||
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
|
set _SKIP=2
|
||||||
|
|
||||||
|
:win9xME_args_slurp
|
||||||
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
|
goto execute
|
||||||
|
|
||||||
|
:4NT_args
|
||||||
|
@rem Get arguments from the 4NT Shell from JP Software
|
||||||
|
set CMD_LINE_ARGS=%$
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
38
import-summary.txt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
ECLIPSE ANDROID PROJECT IMPORT SUMMARY
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Ignored Files:
|
||||||
|
--------------
|
||||||
|
The following files were *not* copied into the new Gradle project; you
|
||||||
|
should evaluate whether these are still needed in your project and if
|
||||||
|
so manually move them:
|
||||||
|
|
||||||
|
* 0001-Add-33c3-configuration-No-CA-yet.patch
|
||||||
|
* android.iml
|
||||||
|
* patches.txt
|
||||||
|
|
||||||
|
Moved Files:
|
||||||
|
------------
|
||||||
|
Android Gradle projects use a different directory structure than ADT
|
||||||
|
Eclipse projects. Here's how the projects were restructured:
|
||||||
|
|
||||||
|
* AndroidManifest.xml => app/src/main/AndroidManifest.xml
|
||||||
|
* assets/ => app/src/main/assets
|
||||||
|
* lint.xml => app/lint.xml
|
||||||
|
* res/ => app/src/main/res/
|
||||||
|
* src/ => app/src/main/java/
|
||||||
|
|
||||||
|
Next Steps:
|
||||||
|
-----------
|
||||||
|
You can now build the project. The Gradle project needs network
|
||||||
|
connectivity to download dependencies.
|
||||||
|
|
||||||
|
Bugs:
|
||||||
|
-----
|
||||||
|
If for some reason your project does not build, and you determine that
|
||||||
|
it is due to a bug or limitation of the Eclipse to Gradle importer,
|
||||||
|
please file a bug at http://b.android.com with category
|
||||||
|
Component-Tools.
|
||||||
|
|
||||||
|
(This import summary is for your information only, and can be deleted
|
||||||
|
after import once you are satisfied with the results.)
|
1
settings.gradle
Normal file
|
@ -0,0 +1 @@
|
||||||
|
include ':app'
|
19
wifisetup.iml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="wifisetup" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="java-gradle" name="Java-Gradle">
|
||||||
|
<configuration>
|
||||||
|
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
|
||||||
|
<option name="BUILDABLE" value="false" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|