diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 5f8ec24..c2a73ef 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -5,7 +5,7 @@
-
+
+
+
+
+
+
+
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..e5bcd84
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..3b31283
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fbb6828..5d19981 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 6564d52..94a25f7 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
index 17220a5..02a1abc 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -28,7 +25,7 @@
-
+
@@ -36,13 +33,13 @@
-
+
-
+
@@ -50,6 +47,15 @@
+
+
+
+
+
+
+
+
+
@@ -57,6 +63,7 @@
+
@@ -64,26 +71,38 @@
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 11deb5e..8c4e1c8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,7 +5,7 @@ dependencies {
}
android {
compileSdkVersion 21
- buildToolsVersion '19.1.0'
+ buildToolsVersion '21.1.2'
defaultConfig {
minSdkVersion 19
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8167217..43c6724 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,7 +8,6 @@
-
task = new AsyncTask() {
+
+ double latitude = gps.getLatitude();
+ double longitude = gps.getLongitude();
+ String server = Client_Functions.getPref("server_URL", getApplicationContext());
+ String path = Client_Functions.cleanPath(Client_Functions.getPref("script_path", getApplicationContext()));
+ String script = Client_Functions.getPref("script_name", getApplicationContext());
+ String fullurl = "http://" + server + ((path.equals("")) ? script : "/" + path + "/" + script);
+
+ protected String doInBackground(String... urls) {
+ String response = "";
+
+ try {
+ HttpClient client = new DefaultHttpClient();
+ HttpPost httpPOST = new HttpPost(fullurl);
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("UID", uid));
+ params.add(new BasicNameValuePair("DID", getAndroid_id()));
+ params.add(new BasicNameValuePair("DeviceName", getDeviceName()));
+ params.add(new BasicNameValuePair("hasNFC", getNfc_support()));
+ params.add(new BasicNameValuePair("Latitude", String.valueOf(latitude)));
+ params.add(new BasicNameValuePair("Longitude", String.valueOf(longitude)));
+ params.add(new BasicNameValuePair("TelNum", number));
+ params.add(new BasicNameValuePair("switch", "motion"));
+ params.add(new BasicNameValuePair("motion_thread", thread));
+ params.add(new BasicNameValuePair("motion_action", action));
+ UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
+ httpPOST.setEntity(ent);
+ HttpResponse execute = client.execute(httpPOST);
+ InputStream content = execute.getEntity().getContent();
+ BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
+ String s;
+
+ while ((s = buffer.readLine()) != null) {
+ response += s;
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return response;
+ }
+
+ protected void onPostExecute(String result) {
+ if (result == "Log in") {
+ finish();
+ }
+ JsonReadTask task = new JsonReadTask();
+ web.setEnabled(true);
+ task.execute();
+ textView.setText(result);
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ myProgress.setProgress(0);
+ }
+ });
+ }
+ };
+ //----run task----
+
+ task.execute();
+ }
+ private class DownloadImageTask extends AsyncTask {
+ ImageView bmImage;
+ String server = Client_Functions.getPref("server_URL", getApplicationContext());
+ String path = Client_Functions.cleanPath(Client_Functions.getPref("script_path", getApplicationContext()));
+ String script = Client_Functions.getPref("script_name", getApplicationContext());
+ String fullurl = "http://" + server + ((path.equals("")) ? script : "/" + path + "/" + script);
+
+ public DownloadImageTask(ImageView bmImage) {
+ this.bmImage = bmImage;
+ }
+
+ protected Bitmap doInBackground(String... urls) {
+ Bitmap mIcon11 = null;
+ String imagefile = urls[0];
+ try {
+ HttpClient client = new DefaultHttpClient();
+
+ HttpPost httpPOST = new HttpPost(fullurl);
+ List params = new ArrayList<>();
+
+ //params.add(new BasicNameValuePair("retrieve", "switch_info"));
+ params.add(new BasicNameValuePair("UID", uid));
+ params.add(new BasicNameValuePair("DID", getAndroid_id()));
+ params.add(new BasicNameValuePair("DeviceName", getDeviceName()));
+ params.add(new BasicNameValuePair("hasNFC", getNfc_support()));
+ params.add(new BasicNameValuePair("TelNum", number));
+ params.add(new BasicNameValuePair("switch", "retrieve_image"));
+ params.add(new BasicNameValuePair("motion_image", imagefile));
+ UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
+ httpPOST.setEntity(ent);
+
+ HttpResponse response = client.execute(httpPOST);
+
+ HttpEntity entity = response.getEntity();
+ InputStream is = entity.getContent();
+
+ mIcon11 = BitmapFactory.decodeStream(is);
+
+ } catch (Exception e) {
+ Log.e("Error", e.getMessage());
+ e.printStackTrace();
+ }
+ return mIcon11;
+ }
+ }
+
private class JsonReadTask extends AsyncTask {
+
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
String server = Client_Functions.getPref("server_URL", getApplicationContext());
@@ -453,66 +593,200 @@ protected void onPostExecute(String result) {
CreateButtons();
}
}
+
public void CreateButtons() {
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("switch_info");
LinearLayout ll = (LinearLayout) findViewById(R.id.LinearLayout1);
+
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
- params.setMargins(0, 22, 0, 0);
+ params.weight = 1.0f;
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ params.setMargins(20, 20, 20, 0);
+
+ LinearLayout.LayoutParams webparams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT
+ );
+ webparams.weight = 1.0f;
+ webparams.gravity = Gravity.CENTER_HORIZONTAL;
+ Display display = getWindowManager().getDefaultDisplay();
+ Point size = new Point();
+ display.getSize(size);
+ int width = size.x;
+
+ int dimensMargin = 160;
+ float densityMargin = getResources().getDisplayMetrics().density;
+ int finalDimensMargin = (int)(dimensMargin * densityMargin);
+ webparams.setMargins((width/2-finalDimensMargin), 0, (width/2-finalDimensMargin), 0);
+
for (int i = 0; i < jsonMainNode.length(); i++) {
+
final JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
final String name = jsonChildNode.optString("name");
+ final Boolean reports_current_status = jsonChildNode.optBoolean("reports_current_status", false);
+ final Boolean current_status = jsonChildNode.optBoolean("current_status", false);
final String app_will_request = jsonChildNode.optString("app_will_request");
+ final String motion_thread = jsonChildNode.optString("motion_thread");
- if(jsonChildNode.optString("timeout") != "") {
+ if (jsonChildNode.optString("timeout") != "") {
final String sleepytime = jsonChildNode.optString("timeout");
SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
prefs.putString("sleepytime_" + i, sleepytime);
prefs.commit();
- }
- else{
+ } else {
final String sleepytime = "0";
SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
prefs.putString("sleepytime_" + i, sleepytime);
prefs.commit();
}
- if(jsonChildNode.optString("display_progress") != "") {
+ if (jsonChildNode.optString("display_progress") != "") {
final String dsleepytime = jsonChildNode.optString("display_progress");
SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
prefs.putString("dsleepytime_" + i, dsleepytime);
prefs.commit();
- }
- else{
- final String dsleepytime = "notapplicable";
+ } else {
+ final String dsleepytime = "0";
SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
prefs.putString("dsleepytime_" + i, dsleepytime);
prefs.commit();
}
-
- ToggleButton btn = new ToggleButton(this);
- btn.setId(i);
- final int id_ = btn.getId();
- btn.setText(name);
- btn.setTextOn(name);
- btn.setTextOff(name);
- //btn.setLayoutParams(params);
- ll.addView(btn, params);
- btn = (ToggleButton) findViewById(id_);
- btn.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- textView.setText("Toggling " + name + "...");
- ToggleButton tb = (ToggleButton) view;
- tb.setEnabled(!tb.isEnabled());
- tb.setChecked(!tb.isChecked());
- runControl(app_will_request, id_);
- }
- });
+ //ll.removeView(findViewById(i));
+ if (findViewById(i) == null) {
+ Log.v("button", String.valueOf(i));
+ ToggleButton btn = new ToggleButton(this);
+ btn.setId(i);
+ final int id_ = btn.getId();
+ btn.setText(name);
+ btn.setTextOn(name);
+ btn.setTextOff(name);
+ btn.setChecked(current_status);
+ //btn.setLayoutParams();
+ ll.addView(btn, params);
+ btn = (ToggleButton) findViewById(id_);
+ btn.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View view) {
+ textView.setText("Toggling " + name + "...");
+ ToggleButton tb = (ToggleButton) view;
+ tb.setEnabled(!tb.isEnabled());
+ tb.setChecked(!tb.isChecked());
+ runControl(app_will_request, id_);
+ }
+ });
+ /*
+ if(motion_image_file != ""){
+ ImageView img = new ImageView(this);
+ img.setId(12 + i);
+ img.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ img.setAdjustViewBounds(true);
+ final int iid_ = img.getId();
+ ll.addView(img);
+ new DownloadImageTask((ImageView) findViewById(iid_)).execute(motion_image_file);
+ }
+ */
+ if(motion_thread != ""){
+ String server = Client_Functions.getPref("server_URL", getApplicationContext());
+ String path = Client_Functions.cleanPath(Client_Functions.getPref("script_path", getApplicationContext()));
+ String script = Client_Functions.getPref("script_name", getApplicationContext());
+ String fullurl = "http://"+server+((path.equals(""))? script : "/"+path+"/"+script);
+
+ String postData = "UID="+uid+"&DID="+getAndroid_id()+"&DeviceName="+getDeviceName()+"&hasNFC="+getNfc_support()+"&motion_thread="+motion_thread+"&TelNum="+number+"&switch=motion&motion_action=retrieve_image";
+
+ WebView web = new WebView(this);
+ web.setId(12 + i);
+
+ LinearLayout secondlayout=(LinearLayout)this.getLayoutInflater().inflate(R.layout.webview,null);
+
+ //params.setMargins(300, 300, 0, 0);
+ //web.setLayoutParams(params);
+ //web.setLeft(100);
+
+ //web.getSettings().setUseWideViewPort(true);
+ web.postUrl(fullurl, EncodingUtils.getBytes(postData, "BASE64"));
+ //web.loadUrl(motion_image_url);1
+ final int iid_ = web.getId();
+ secondlayout.addView(web, webparams);
+ //btn.setLayoutParams();
+
+ ll.addView(secondlayout);
+ web = (WebView) findViewById(iid_);
+ web.setOnTouchListener(new View.OnTouchListener() {
+
+ public final static int FINGER_RELEASED = 0;
+ public final static int FINGER_TOUCHED = 1;
+ public final static int FINGER_DRAGGING = 2;
+ public final static int FINGER_UNDEFINED = 3;
+
+ private int fingerState = FINGER_RELEASED;
+
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+
+ switch (motionEvent.getAction()) {
+
+ case MotionEvent.ACTION_DOWN:
+ if (fingerState == FINGER_RELEASED) fingerState = FINGER_TOUCHED;
+ else fingerState = FINGER_UNDEFINED;
+ break;
+
+ case MotionEvent.ACTION_UP:
+ webControl(motion_thread, "snapshot", iid_);
+ //Toast.makeText(getBaseContext(), "Snapshot thread " + motion_thread, Toast.LENGTH_SHORT).show();
+ if(fingerState != FINGER_DRAGGING) {
+ fingerState = FINGER_RELEASED;
+ // Your onClick codes
+ }
+ else if (fingerState == FINGER_DRAGGING) fingerState = FINGER_RELEASED;
+ else fingerState = FINGER_UNDEFINED;
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ if (fingerState == FINGER_TOUCHED || fingerState == FINGER_DRAGGING) fingerState = FINGER_DRAGGING;
+ else fingerState = FINGER_UNDEFINED;
+ break;
+
+ default:
+ fingerState = FINGER_UNDEFINED;
+
+ }
+
+ return false;
+ }
+ });
+
+ //web.setClickable(true);
+ //web.getSettings().setBuiltInZoomControls(false);
+ //web.setOnTouchListener(new View.OnTouchListener() {
+ // public boolean onTouch(View v, MotionEvent event) {
+ // if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ // webControl(motion_thread, "snapshot", iid_);
+ // Toast.makeText(getBaseContext(), "Snapshot thread " + motion_thread, Toast.LENGTH_SHORT).show();
+ // return false;
+ // }
+ // return false;
+ // }
+ //});
+ web.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ webControl(motion_thread, "restart", iid_);
+ Toast.makeText(getBaseContext(), "Restart motion", Toast.LENGTH_SHORT).show();
+ return true;
+ }
+ });
+ }
+ } else {
+ if(reports_current_status) {
+ ToggleButton b = (ToggleButton) findViewById(i);
+ b.setChecked(current_status);
+ }
+ }
}
} catch (JSONException e) {
if(jsonResult.contains("Geo")){
diff --git a/app/src/main/java/com/airlim/garagetrois/Login.java b/app/src/main/java/com/airlim/garagetrois/Login.java
index 53b4d94..2b86a42 100644
--- a/app/src/main/java/com/airlim/garagetrois/Login.java
+++ b/app/src/main/java/com/airlim/garagetrois/Login.java
@@ -7,6 +7,9 @@
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.telephony.TelephonyManager;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -16,7 +19,9 @@
import android.os.AsyncTask;
import android.provider.Settings.Secure;
import android.util.Log;
+import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.TextView;
import org.apache.http.HttpResponse;
@@ -33,6 +38,7 @@
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.logging.Logger;
import android.widget.Toast;
@@ -60,6 +66,19 @@ public void onBackPressed() {
}
}
+ private EditText findInput(ViewGroup np) {
+ int count = np.getChildCount();
+ for (int i = 0; i < count; i++) {
+ final View child = np.getChildAt(i);
+ if (child instanceof ViewGroup) {
+ findInput((ViewGroup) child);
+ } else if (child instanceof EditText) {
+ return (EditText) child;
+ }
+ }
+ return null;
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -121,12 +140,62 @@ public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
np2.requestFocus();
}
});
+
+ EditText input = findInput(np);
+ TextWatcher tw = new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {}
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.toString().length() != 0) {
+ Integer value = Integer.parseInt(s.toString());
+ if (value >= np.getMinValue()) {
+ np.setValue(value);
+ np2.requestFocus();
+ }
+ }
+ }
+ };
+ input.addTextChangedListener(tw);
+
np2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
np3.requestFocus();
}
});
+
+ EditText input2 = findInput(np2);
+ TextWatcher tw2 = new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {}
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.toString().length() != 0) {
+ Integer value = Integer.parseInt(s.toString());
+ if (value >= np2.getMinValue()) {
+ np2.setValue(value);
+ np3.requestFocus();
+ }
+ }
+ }
+ };
+ input2.addTextChangedListener(tw2);
+
np3.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
@@ -134,11 +203,62 @@ public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
np4.requestFocus();
}
});
+
+ EditText input3 = findInput(np3);
+ TextWatcher tw3 = new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {}
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.toString().length() != 0) {
+ Integer value = Integer.parseInt(s.toString());
+ if (value >= np3.getMinValue()) {
+ np3.setValue(value);
+ np4.requestFocus();
+ }
+ }
+ }
+ };
+ input3.addTextChangedListener(tw3);
+
np4.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
}
});
+ EditText input4 = findInput(np4);
+ TextWatcher tw4 = new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {}
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.toString().length() != 0) {
+ Integer value = Integer.parseInt(s.toString());
+ if (value >= np4.getMinValue()) {
+ np4.setValue(value);
+ np4.clearFocus();
+ LogInTask task = new LogInTask();
+ //String formatted = String.format("%s%s%s%s", a, a2, a3, a4);
+ task.execute(createuid());
+ }
+ }
+ }
+ };
+ input4.addTextChangedListener(tw4);
}
@Override
@@ -219,8 +339,9 @@ protected void onPostExecute(String result) {
if(result.startsWith(Hash.md5(adminresult))){
String[] response_var = result.split(",");
geofence = response_var[1];
- Log.v("geofence",geofence);
Log.v("result",result);
+ Log.v("geofence",geofence);
+
authd = "true";
admind = "true";
show();
@@ -247,12 +368,16 @@ else if(result.startsWith(Hash.md5(userresult))){
}
public String createuid(){
NumberPicker numPicker = (NumberPicker)findViewById(R.id.numberPicker1);
+ numPicker.clearFocus();
int x = numPicker.getValue();
NumberPicker numPicker2 = (NumberPicker)findViewById(R.id.numberPicker2);
+ numPicker2.clearFocus();
int x2 = numPicker2.getValue();
NumberPicker numPicker3 = (NumberPicker)findViewById(R.id.numberPicker3);
+ numPicker3.clearFocus();
int x3 = numPicker3.getValue();
NumberPicker numPicker4 = (NumberPicker)findViewById(R.id.numberPicker4);
+ numPicker4.clearFocus();
int x4 = numPicker4.getValue();
String formatted = String.format("%d%d%d%d", x, x2, x3, x4);
return formatted;
@@ -269,7 +394,7 @@ public void show()
{
final Context context = this;
Intent intent = new Intent(context, Control.class);
- if(tryuid.equals("gps0")) {
+ if(tryuid.equals("gps0") && Objects.equals(createuid(), "0000")) {
tryuid = "";
intent.putExtra("uid", "gps0");
}
diff --git a/app/src/main/res/layout/control.xml b/app/src/main/res/layout/control.xml
index 412d110..b5c3ae6 100644
--- a/app/src/main/res/layout/control.xml
+++ b/app/src/main/res/layout/control.xml
@@ -1,35 +1,39 @@
-
+
+
-
+ android:textSize="20sp"
+ android:text="@string/placeholder" />
+
+
-
-
-
+ android:layout_height="20dp">
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/webview.xml b/app/src/main/res/layout/webview.xml
new file mode 100644
index 0000000..fed0264
--- /dev/null
+++ b/app/src/main/res/layout/webview.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d78c45f..8784f3a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,6 +24,7 @@
Garage à Trois - User List
Waiting for server…
Debug
+ Motion
Settings
diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml
index 602034d..cfbee98 100644
--- a/app/src/main/res/values/strings_activity_settings.xml
+++ b/app/src/main/res/values/strings_activity_settings.xml
@@ -34,5 +34,6 @@
Other Settings
Enable toast messages and raw HTML output to be displayed
Disable Settings Menu
+ Enable Motion webcam/camera image
Disable access to this menu, this can be reverted by clearing app data.
diff --git a/build.gradle b/build.gradle
index 5a968eb..6b87642 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:2.1.2'
}
}
diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml
index a232590..e9e1ca9 100644
--- a/build/intermediates/dex-cache/cache.xml
+++ b/build/intermediates/dex-cache/cache.xml
@@ -2,25 +2,25 @@
-
-
+ revision="21.1.2"
+ sha1="4b74cefe1f0c1b819e7260c8627a14674e37fd35">
+
-
-
+
-
-
+ revision="21.1.2"
+ sha1="2c91c949a45a21cdecf26e03951e46c7beec9ad8">
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 332ef88..ec47262 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu May 28 09:41:47 MDT 2015
+#Mon Jul 25 23:23:45 MDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip