From 9d62bb22446fa17a3e18301d37551376b2499c15 Mon Sep 17 00:00:00 2001 From: Hypothesis-Z Date: Thu, 16 May 2019 14:31:30 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 + .idea/codeStyles/Project.xml | 29 + .idea/gradle.xml | 18 + .idea/misc.xml | 38 + .idea/runConfigurations.xml | 12 + agri-iot-app/.gitignore | 1 + agri-iot-app/build.gradle | 39 + agri-iot-app/proguard-rules.pro | 21 + .../zzq/agriiot/ExampleInstrumentedTest.java | 26 + agri-iot-app/src/main/AndroidManifest.xml | 47 + agri-iot-app/src/main/ic_launcher-web.png | Bin 0 -> 36725 bytes .../src/main/ic_launcher_round-web.png | Bin 0 -> 65169 bytes .../java/com/zzq/agriiot/LoginActivity.java | 501 ++++++ .../java/com/zzq/agriiot/MainActivity.java | 1501 +++++++++++++++++ .../main/res/drawable-v21/ic_menu_camera.xml | 12 + .../main/res/drawable-v21/ic_menu_gallery.xml | 9 + .../main/res/drawable-v21/ic_menu_manage.xml | 9 + .../main/res/drawable-v21/ic_menu_send.xml | 9 + .../main/res/drawable-v21/ic_menu_share.xml | 9 + .../res/drawable-v21/ic_menu_slideshow.xml | 9 + .../drawable-v24/ic_launcher_foreground.xml | 34 + .../main/res/drawable/btn_request_history.xml | 11 + .../drawable/btn_request_history_query.xml | 9 + .../drawable/btn_request_history_selected.xml | 10 + .../res/drawable/ic_account_background.xml | 8 + .../drawable/ic_account_circle_black_24dp.xml | 5 + .../res/drawable/ic_account_foreground.xml | 12 + .../src/main/res/drawable/ic_cloud.xml | 9 + .../res/drawable/ic_cloud_off_black_24dp.xml | 5 + .../res/drawable/ic_cloud_off_black_48dp.xml | 5 + .../drawable/ic_cloud_queue_black_24dp.xml | 5 + .../drawable/ic_cloud_queue_black_48dp.xml | 5 + .../src/main/res/drawable/ic_cloud_resize.xml | 9 + .../src/main/res/drawable/ic_date_range.xml | 5 + .../res/drawable/ic_date_range_black_24dp.xml | 5 + .../drawable/ic_file_download_black_24dp.xml | 5 + .../ic_insert_drive_file_black_48dp.xml | 5 + .../res/drawable/ic_launcher_background.xml | 74 + .../ic_notifications_none_black_24dp.xml | 5 + .../ic_notifications_none_black_48dp.xml | 5 + .../src/main/res/drawable/ic_plant.xml | 9 + .../src/main/res/drawable/ic_plant_cloud.xml | 12 + .../src/main/res/drawable/ic_plant_resize.xml | 9 + .../res/drawable/ic_refresh_black_24dp.xml | 5 + .../res/drawable/ic_refresh_black_48dp.xml | 5 + .../main/res/drawable/linechart_fade_blue.xml | 9 + .../drawable/relative_layout_underline.xml | 15 + .../src/main/res/drawable/side_nav_bar.xml | 8 + .../src/main/res/layout/activity_login.xml | 110 ++ .../src/main/res/layout/activity_main.xml | 25 + .../src/main/res/layout/app_bar_main.xml | 98 ++ .../src/main/res/layout/content_main.xml | 260 +++ .../res/layout/content_main_download_item.xml | 21 + .../res/layout/content_main_download_list.xml | 11 + ...ontent_main_request_history_parameters.xml | 122 ++ .../src/main/res/layout/nav_header_main.xml | 37 + .../src/main/res/layout/setup_main.xml | 100 ++ .../main/res/menu/activity_main_drawer.xml | 38 + agri-iot-app/src/main/res/menu/main.xml | 9 + .../src/main/res/menu/toolbar_menu.xml | 7 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2717 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4386 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1926 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2718 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3788 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6468 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6245 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10956 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8812 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16439 bytes .../src/main/res/values-v21/styles.xml | 12 + agri-iot-app/src/main/res/values/array.xml | 14 + agri-iot-app/src/main/res/values/colors.xml | 8 + agri-iot-app/src/main/res/values/dimens.xml | 19 + .../src/main/res/values/drawables.xml | 8 + agri-iot-app/src/main/res/values/strings.xml | 53 + agri-iot-app/src/main/res/values/styles.xml | 23 + agri-iot-app/src/main/res/xml/file_paths.xml | 9 + .../java/com/zzq/agriiot/ExampleUnitTest.java | 17 + build.gradle | 30 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 ++ gradlew.bat | 84 + settings.gradle | 1 + 88 files changed, 3925 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 agri-iot-app/.gitignore create mode 100644 agri-iot-app/build.gradle create mode 100644 agri-iot-app/proguard-rules.pro create mode 100644 agri-iot-app/src/androidTest/java/com/zzq/agriiot/ExampleInstrumentedTest.java create mode 100644 agri-iot-app/src/main/AndroidManifest.xml create mode 100644 agri-iot-app/src/main/ic_launcher-web.png create mode 100644 agri-iot-app/src/main/ic_launcher_round-web.png create mode 100644 agri-iot-app/src/main/java/com/zzq/agriiot/LoginActivity.java create mode 100644 agri-iot-app/src/main/java/com/zzq/agriiot/MainActivity.java create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_camera.xml create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_gallery.xml create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_manage.xml create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_send.xml create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_share.xml create mode 100644 agri-iot-app/src/main/res/drawable-v21/ic_menu_slideshow.xml create mode 100644 agri-iot-app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 agri-iot-app/src/main/res/drawable/btn_request_history.xml create mode 100644 agri-iot-app/src/main/res/drawable/btn_request_history_query.xml create mode 100644 agri-iot-app/src/main/res/drawable/btn_request_history_selected.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_account_background.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_account_circle_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_account_foreground.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud_off_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud_off_black_48dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud_queue_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud_queue_black_48dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_cloud_resize.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_date_range.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_date_range_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_file_download_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_insert_drive_file_black_48dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_notifications_none_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_notifications_none_black_48dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_plant.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_plant_cloud.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_plant_resize.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_refresh_black_24dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/ic_refresh_black_48dp.xml create mode 100644 agri-iot-app/src/main/res/drawable/linechart_fade_blue.xml create mode 100644 agri-iot-app/src/main/res/drawable/relative_layout_underline.xml create mode 100644 agri-iot-app/src/main/res/drawable/side_nav_bar.xml create mode 100644 agri-iot-app/src/main/res/layout/activity_login.xml create mode 100644 agri-iot-app/src/main/res/layout/activity_main.xml create mode 100644 agri-iot-app/src/main/res/layout/app_bar_main.xml create mode 100644 agri-iot-app/src/main/res/layout/content_main.xml create mode 100644 agri-iot-app/src/main/res/layout/content_main_download_item.xml create mode 100644 agri-iot-app/src/main/res/layout/content_main_download_list.xml create mode 100644 agri-iot-app/src/main/res/layout/content_main_request_history_parameters.xml create mode 100644 agri-iot-app/src/main/res/layout/nav_header_main.xml create mode 100644 agri-iot-app/src/main/res/layout/setup_main.xml create mode 100644 agri-iot-app/src/main/res/menu/activity_main_drawer.xml create mode 100644 agri-iot-app/src/main/res/menu/main.xml create mode 100644 agri-iot-app/src/main/res/menu/toolbar_menu.xml create mode 100644 agri-iot-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 agri-iot-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 agri-iot-app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 agri-iot-app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 agri-iot-app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 agri-iot-app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 agri-iot-app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 agri-iot-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 agri-iot-app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 agri-iot-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 agri-iot-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 agri-iot-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 agri-iot-app/src/main/res/values-v21/styles.xml create mode 100644 agri-iot-app/src/main/res/values/array.xml create mode 100644 agri-iot-app/src/main/res/values/colors.xml create mode 100644 agri-iot-app/src/main/res/values/dimens.xml create mode 100644 agri-iot-app/src/main/res/values/drawables.xml create mode 100644 agri-iot-app/src/main/res/values/strings.xml create mode 100644 agri-iot-app/src/main/res/values/styles.xml create mode 100644 agri-iot-app/src/main/res/xml/file_paths.xml create mode 100644 agri-iot-app/src/test/java/com/zzq/agriiot/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd45b12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.iml +.gradle +/local.properties +/.idea/caches/build_file_checksums.ser +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..4bf66be --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e0d5b93 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/agri-iot-app/.gitignore b/agri-iot-app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/agri-iot-app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/agri-iot-app/build.gradle b/agri-iot-app/build.gradle new file mode 100644 index 0000000..7bec3d2 --- /dev/null +++ b/agri-iot-app/build.gradle @@ -0,0 +1,39 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId 'com.zzq.agriiot' + minSdkVersion 15 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + packagingOptions { + exclude 'META-INF/proguard/androidx-annotations.pro' + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + productFlavors { + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.github.trc1993:dashboard:1.0.0' + implementation 'com.contrarywind:Android-PickerView:4.1.7' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0-alpha' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'net.sourceforge.jexcelapi:jxl:2.6.12' +} diff --git a/agri-iot-app/proguard-rules.pro b/agri-iot-app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/agri-iot-app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/agri-iot-app/src/androidTest/java/com/zzq/agriiot/ExampleInstrumentedTest.java b/agri-iot-app/src/androidTest/java/com/zzq/agriiot/ExampleInstrumentedTest.java new file mode 100644 index 0000000..1d64ffd --- /dev/null +++ b/agri-iot-app/src/androidTest/java/com/zzq/agriiot/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.zzq.agriiot; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.zzq.helloworld", appContext.getPackageName()); + } +} diff --git a/agri-iot-app/src/main/AndroidManifest.xml b/agri-iot-app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4b24c06 --- /dev/null +++ b/agri-iot-app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/agri-iot-app/src/main/ic_launcher-web.png b/agri-iot-app/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..2d04fd67a17fc675f557374998e335a1a82d0110 GIT binary patch literal 36725 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
iUen^97f5BoMOSTgfB*St)J( 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 x^x=-I0ZWRC@eO=?r<(C{H{yzwuq5=Q_ literal 0 HcmV?d00001 diff --git a/agri-iot-app/src/main/java/com/zzq/agriiot/LoginActivity.java b/agri-iot-app/src/main/java/com/zzq/agriiot/LoginActivity.java new file mode 100644 index 0000000..7a1c7c2 --- /dev/null +++ b/agri-iot-app/src/main/java/com/zzq/agriiot/LoginActivity.java @@ -0,0 +1,501 @@ +package com.zzq.agriiot; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.support.annotation.NonNull; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.app.LoaderManager.LoaderCallbacks; + +import android.content.CursorLoader; +import android.content.Loader; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.AsyncTask; + +import android.os.Build; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; +import java.util.ArrayList; +import java.util.List; + +import static android.Manifest.permission.READ_CONTACTS; + +/** + * A login screen that offers login via email/password. + */ +public class LoginActivity extends AppCompatActivity implements LoaderCallbacks { + + /** + * Id to identity READ_CONTACTS permission request. + */ + private static final int REQUEST_READ_CONTACTS = 0; + + /** + * A dummy authentication store containing known user names and passwords. + * TODO: remove after connecting to a real authentication system. + */ + private static final String[] DUMMY_CREDENTIALS = new String[]{ + "foo@example.com:hello", "bar@example.com:world" + }; + /** + * Keep track of the login task to ensure we can cancel it if requested. + */ + private UserLoginTask mAuthTask = null; + + // UI references. + private AutoCompleteTextView mEmailView; + private EditText mPasswordView; + private CheckBox mRememberView; + private CheckBox mAutoLoginView; + private View mProgressView; + private View mLoginFormView; + private SharedPreferences sp; + + private int ACTION_LOGIN = 0; + private int ACTION_REGISTER = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.activity_login); + // Set up the login form. + mEmailView = (AutoCompleteTextView) findViewById(R.id.email); + populateAutoComplete(); + + mPasswordView = (EditText) findViewById(R.id.password); + mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { + if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { + attemptLogin(ACTION_LOGIN); + return true; + } + return false; + } + }); + + mRememberView = (CheckBox) findViewById(R.id.rememberPassword); + mAutoLoginView = (CheckBox) findViewById(R.id.autoLogin); + sp = this.getSharedPreferences("userinfo", Context.MODE_PRIVATE); + mEmailView.setText(sp.getString("USERNAME", "")); + + final Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button); + mEmailSignInButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + attemptLogin(ACTION_LOGIN); + } + }); + + final Button mRegisterButton = (Button) findViewById(R.id.register_button); + mRegisterButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + attemptLogin(ACTION_REGISTER); + } + }); + + + mLoginFormView = findViewById(R.id.login_form); + mProgressView = findViewById(R.id.login_progress); + + mLoginFormView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + mEmailView.clearFocus(); + mPasswordView.clearFocus(); + mLoginFormView.performClick(); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); + return false; + } + }); + + if (sp.getBoolean("REMEMBER", false)){ + mRememberView.setChecked(true); + mPasswordView.setText(sp.getString("PASSWORD", "")); + if (sp.getBoolean("AUTO_LOGIN", false)){ + mAutoLoginView.setChecked(true); + attemptLogin(ACTION_LOGIN); + } + } + } + + private void populateAutoComplete() { + if (!mayRequestContacts()) { + return; + } + + getLoaderManager().initLoader(0, null, this); + } + + private boolean mayRequestContacts() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + return true; + } + if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { + return true; + } + if (shouldShowRequestPermissionRationale(READ_CONTACTS)) { + Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE) + .setAction(android.R.string.ok, new View.OnClickListener() { + @Override + @TargetApi(Build.VERSION_CODES.M) + public void onClick(View v) { + requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); + } + }); + } else { + requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); + } + return false; + } + + /** + * Callback received when a permissions request has been completed. + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { + if (requestCode == REQUEST_READ_CONTACTS) { + if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + populateAutoComplete(); + } + } + } + + + /** + * Attempts to sign in or register the account specified by the login form. + * If there are form errors (invalid email, missing fields, etc.), the + * errors are presented and no actual login attempt is made. + */ + private void attemptLogin(int action) { + if (mAuthTask != null) { + return; + } + + // Reset errors. + mEmailView.setError(null); + mPasswordView.setError(null); + + // Store values at the time of the login attempt. + String email = mEmailView.getText().toString(); + String password = mPasswordView.getText().toString(); + + boolean cancel = false; + View focusView = null; + + // Check for a valid password, if the user entered one. + if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) { + mPasswordView.setError(getString(R.string.error_invalid_password)); + focusView = mPasswordView; + cancel = true; + } + + // Check for a valid email address. + if (TextUtils.isEmpty(email)) { + mEmailView.setError(getString(R.string.error_field_required)); + focusView = mEmailView; + cancel = true; + } else if (!isEmailValid(email)) { + mEmailView.setError(getString(R.string.error_invalid_email)); + focusView = mEmailView; + cancel = true; + } + + if (cancel) { + // There was an error; don't attempt login and focus the first + // form field with an error. + focusView.requestFocus(); + } else { + // Show a progress spinner, and kick off a background task to + // perform the user login attempt. + showProgress(true); + mAuthTask = new UserLoginTask(email, password, action); + mAuthTask.execute((Void) null); + } + } + + private boolean isEmailValid(String email) { +// //TODO: Replace this with your own logic +// return email.contains("@"); + return email.matches("[0-9A-Za-z_]+"); + } + + private boolean isPasswordValid(String password) { + //TODO: Replace this with your own logic + return password.matches("[0-9A-Za-z_]+"); + } + + /** + * Shows the progress UI and hides the login form. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) + private void showProgress(final boolean show) { + // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow + // for very easy animations. If available, use these APIs to fade-in + // the progress spinner. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); + + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + mLoginFormView.animate().setDuration(shortAnimTime).alpha( + show ? 0 : 1).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + } + }); + + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + mProgressView.animate().setDuration(shortAnimTime).alpha( + show ? 1 : 0).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + } + }); + } else { + // The ViewPropertyAnimator APIs are not available, so simply show + // and hide the relevant UI components. + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + } + } + + @Override + public Loader onCreateLoader(int i, Bundle bundle) { + return new CursorLoader(this, + // Retrieve data rows for the device user's 'profile' contact. + Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, + ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION, + + // Select only email addresses. + ContactsContract.Contacts.Data.MIMETYPE + + " = ?", new String[]{ContactsContract.CommonDataKinds.Email + .CONTENT_ITEM_TYPE}, + + // Show primary email addresses first. Note that there won't be + // a primary email address if the user hasn't specified one. + ContactsContract.Contacts.Data.IS_PRIMARY + " DESC"); + } + + @Override + public void onLoadFinished(Loader cursorLoader, Cursor cursor) { + List emails = new ArrayList<>(); + cursor.moveToFirst(); + while (!cursor.isAfterLast()) { + emails.add(cursor.getString(ProfileQuery.ADDRESS)); + cursor.moveToNext(); + } + + addEmailsToAutoComplete(emails); + } + + @Override + public void onLoaderReset(Loader cursorLoader) { + + } + + private void addEmailsToAutoComplete(List emailAddressCollection) { + //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list. + ArrayAdapter adapter = + new ArrayAdapter<>(LoginActivity.this, + android.R.layout.simple_dropdown_item_1line, emailAddressCollection); + + mEmailView.setAdapter(adapter); + } + + + private interface ProfileQuery { + String[] PROJECTION = { + ContactsContract.CommonDataKinds.Email.ADDRESS, + ContactsContract.CommonDataKinds.Email.IS_PRIMARY, + }; + + int ADDRESS = 0; + int IS_PRIMARY = 1; + } + + /** + * Represents an asynchronous login/registration task used to authenticate + * the user. + */ + public class UserLoginTask extends AsyncTask { + + private final String mEmail; + private final String mPassword; + private final int mAction; + + UserLoginTask(String email, String password, int action) { + mEmail = email; + mPassword = password; + mAction = action; + } + @Override + protected Boolean doInBackground(Void... params) { + // TODO: attempt authentication against a network service. + if(mAction == ACTION_LOGIN) { + try { + // Simulate network access. + String socketData = "GET http://api.heclouds.com/devices/524467815/datapoints?datastream_id=user&limit=1000 HTTP/1.1\r\n" + + "api-key:LO79mBj364HBhD1ZuPNPEDiMMAw=\r\n" + + "Host:api.heclouds.com\r\n\r\n"; + Socket socket = new Socket(InetAddress.getByName("183.230.40.33"), 80); + OutputStream outputStream = socket.getOutputStream(); + outputStream.write(socketData.getBytes()); + outputStream.flush(); + InputStream inputStream = socket.getInputStream(); + byte buffer[] = new byte[1000000]; + StringBuilder sb = new StringBuilder(); + int count; + while ((count = inputStream.read(buffer)) != -1) { + String part = new String(buffer, 0, count); + sb.append(part); + if (part.contains("\"succ\"}")) + break; + } + String response = sb.toString(); + if (response.contains(mEmail + ";" + mPassword)) + return true; + } catch (Exception e) { + return false; + } + + for (String credential : DUMMY_CREDENTIALS) { + String[] pieces = credential.split(":"); + if (pieces[0].equals(mEmail)) { + // Account exists, return true if the password matches. + return pieces[1].equals(mPassword); + } + } + return false; + } + else if (mAction == ACTION_REGISTER){ + try{ + String socketData = "GET http://api.heclouds.com/devices/524467815/datapoints?datastream_id=user&limit=1000 HTTP/1.1\r\n" + + "api-key:LO79mBj364HBhD1ZuPNPEDiMMAw=\r\n" + + "Host:api.heclouds.com\r\n\r\n"; + Socket socket = new Socket(InetAddress.getByName("183.230.40.33"), 80); + OutputStream outputStream = socket.getOutputStream(); + outputStream.write(socketData.getBytes()); + outputStream.flush(); + InputStream inputStream = socket.getInputStream(); + byte buffer[] = new byte[1000000]; + StringBuilder sb = new StringBuilder(); + int count; + while ((count = inputStream.read(buffer)) != -1) { + String part = new String(buffer, 0, count); + sb.append(part); + if (part.contains("\"succ\"}")) + break; + } + String response = sb.toString(); + if (response.contains(mEmail + ";")) + return false; + String data ="{\"datastreams\":[" + + "{\"id\":\"user\",\"datapoints\":[{\"value\":\""+ mEmail + ";" + mPassword + "\"}]}" + + "]}"; + socketData = "POST http://api.heclouds.com/devices/524467815/datapoints HTTP/1.1\r\n" + + "api-key:LO79mBj364HBhD1ZuPNPEDiMMAw=\r\n" + + "Host:api.heclouds.com\r\n" + + "Content-Length: " + String.valueOf((data.length())) + "\r\n" + + "\r\n" + + data; + InetAddress socketAddress = InetAddress.getByName("183.230.40.33"); + int socketPort = 80; + outputStream.write(socketData.getBytes()); + outputStream.flush(); + buffer = new byte[1000000]; + sb = new StringBuilder(); + while ((count = inputStream.read(buffer)) != -1) { + String part = new String(buffer, 0, count); + sb.append(part); + if (part.contains("\"succ\"}")) + break; + } + return true; + } + catch(Exception e){ + return false; + } + } + return false; + } + + @Override + protected void onPostExecute(final Boolean success) { + mAuthTask = null; + + if (mAction == ACTION_LOGIN) { + if (success) { + if (mRememberView.isChecked()) { + SharedPreferences.Editor editor = sp.edit(); + editor.putString("USERNAME", mEmail); + editor.putString("PASSWORD", mPassword); + editor.apply(); + editor.putBoolean("REMEMBER", mRememberView.isChecked()).commit(); + editor.putBoolean("AUTO_LOGIN", mAutoLoginView.isChecked()).commit(); + } + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + String[] strArray = {mEmail, mPassword}; + bundle.putStringArray("account", strArray); + intent.putExtras(bundle); + setResult(Activity.RESULT_OK, intent); + finish(); + } else { + mPasswordView.setError(getString(R.string.error_incorrect_password)); + mPasswordView.requestFocus(); + showProgress(false); + } + } + else if (mAction == ACTION_REGISTER){ + if (success){ + showProgress(false); + Toast.makeText(LoginActivity.this, getResources().getString(R.string.register_success), Toast.LENGTH_SHORT).show(); + } + else{ + showProgress(false); + Toast.makeText(LoginActivity.this, getResources().getString(R.string.register_fail), Toast.LENGTH_SHORT).show(); + } + } + } + + @Override + protected void onCancelled() { + mAuthTask = null; + showProgress(false); + } + } +} + diff --git a/agri-iot-app/src/main/java/com/zzq/agriiot/MainActivity.java b/agri-iot-app/src/main/java/com/zzq/agriiot/MainActivity.java new file mode 100644 index 0000000..28dc3a0 --- /dev/null +++ b/agri-iot-app/src/main/java/com/zzq/agriiot/MainActivity.java @@ -0,0 +1,1501 @@ +package com.zzq.agriiot; + +import android.Manifest; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.annotation.TargetApi; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.app.Service; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Typeface; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.support.annotation.ColorInt; +import android.support.annotation.ColorLong; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.constraint.ConstraintLayout; +import android.support.constraint.ConstraintSet; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v4.content.FileProvider; +import android.text.Layout; +import android.util.Log; +import android.util.TypedValue; +import android.view.ContextMenu; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.support.design.widget.NavigationView; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.Spinner; +import android.widget.TableLayout; +import android.widget.TableRow; +import android.widget.TextView; +import android.widget.Toast; + +import com.bigkoo.pickerview.builder.TimePickerBuilder; +import com.bigkoo.pickerview.listener.OnTimeSelectListener; +import com.bigkoo.pickerview.view.TimePickerView; +import com.dashboard.trc.AngleBean; +import com.dashboard.trc.DashBoardManager; +import com.dashboard.trc.DashboardView; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.components.AxisBase; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.components.XAxis; +import com.github.mikephil.charting.components.YAxis; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.formatter.IAxisValueFormatter; +import com.github.mikephil.charting.renderer.XAxisRenderer; +import com.github.mikephil.charting.utils.MPPointF; +import com.github.mikephil.charting.utils.Transformer; +import com.github.mikephil.charting.utils.Utils; +import com.github.mikephil.charting.utils.ViewPortHandler; + +import org.apache.log4j.chainsaw.Main; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jxl.Workbook; +import jxl.format.Alignment; +import jxl.format.UnderlineStyle; +import jxl.format.VerticalAlignment; +import jxl.write.Label; +import jxl.write.WritableCellFormat; +import jxl.write.WritableFont; +import jxl.write.WritableSheet; +import jxl.write.WritableWorkbook; + +public class MainActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener { + private static final String TAG = "MainActivity"; + + /** + * Request code + */ + private static final int REQUEST_LOGIN = 1; + private static final int REQUEST_WRITE_EXTERNAL_STORAGE = 1; + + private static final int MENU_OPEN = 1; + private static final int MENU_RENAME = 2; + private static final int MENU_DELETE = 3; + + /** + * Account + */ + private String[] strAccount = null; + private TCPConnectionTask mTask = null; + private Handler taskHandler = new Handler(); + private Runnable taskRunnable = null; + private View mContent; + private View mProgress; + private MenuItem mMenuItem; + private boolean ifOnline = true; + private ShowDownloadListRunnable mShowDownloadListRunnable; + private Map deviceMap = new HashMap<>(); + private String device = "esp8266"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + + mContent = findViewById(R.id.content); + mProgress = findViewById(R.id.main_progress); + mMenuItem = (MenuItem) findViewById(R.id.nav_realTime); + + ImageButton refreshImgBtn = (ImageButton) findViewById(R.id.refresh); + refreshImgBtn.setOnClickListener(new ImageButton.OnClickListener(){ + @Override + public void onClick(View v){ + if (mMenuItem == (MenuItem) findViewById(R.id.nav_realTime)) { + taskHandler.removeCallbacks(taskRunnable); + afterLogin(true); + } + } + }); + + final ImageButton ifOnlineImgBtn = (ImageButton) findViewById(R.id.ifOnline); + ifOnlineImgBtn.setOnClickListener(new ImageButton.OnClickListener(){ + @Override + public void onClick(View v){ + String stringIfOnline = ifOnline ? "服务器连接正常" : "服务器连接失败"; + // 底部消息 + Snackbar.make(v, stringIfOnline, Snackbar.LENGTH_LONG).setAction("Action", null).show(); + } + }); + + + // 判断是否连接正常 + final Handler handlerIfOnline = new Handler(); + Runnable runnableIfOnline = new Runnable() { + @Override + public void run() { + if (ifOnline){ + ifOnlineImgBtn.setImageDrawable(getResources().getDrawable(R.drawable.ic_cloud_queue_black_24dp)); + } + else{ + ifOnlineImgBtn.setImageDrawable(getResources().getDrawable(R.drawable.ic_cloud_off_black_24dp)); + } + ifOnlineImgBtn.refreshDrawableState(); + // 定时30秒重复执行 + handlerIfOnline.postDelayed(this, 30000); + } + }; + // 开始执行 + handlerIfOnline.postDelayed(runnableIfOnline, 10000); + + deviceMap.put("esp8266", "503698659"); + deviceMap.put("esp8266_2", "524629255"); + // Login Activity + Login(); + //afterLogin(); + } + + private void afterLogin(boolean firstCall){ + + if(strAccount==null) + return; + + runOnUiThread(new Runnable() { + @Override + public void run() { + TextView textView = (TextView)findViewById(R.id.textView); + textView.setText(strAccount[0]); + } + }); + + Log.i(TAG, "account set"); + + taskRunnable = new Runnable() { + @Override + public void run() { + ImageButton refreshImgBtn = (ImageButton) findViewById(R.id.refresh); + ImageButton ifOnlineImgBtn = (ImageButton) findViewById(R.id.ifOnline); + ImageButton downloadImgBtn = (ImageButton) findViewById(R.id.download); + refreshImgBtn.setVisibility(View.VISIBLE); + ifOnlineImgBtn.setVisibility(View.VISIBLE); + downloadImgBtn.setVisibility(View.GONE); + + try { + int port = 80; + InetAddress address; + String data = "GET http://api.heclouds.com/devices/" + deviceMap.get(device) + "/datapoints HTTP/1.1\r\n" + + "api-key:LO79mBj364HBhD1ZuPNPEDiMMAw=\r\n" + + "Host:api.heclouds.com\r\n\r\n"; + address = InetAddress.getByName("183.230.40.33"); + mTask = new TCPConnectionTask(address, port, data); + showProgress(true); + Log.i(TAG, "mTask.execute() called."); + mTask.execute((Void) null); + } catch (Exception e) { + Log.e(TAG, "mTask error."); + } + } + }; + taskHandler.postDelayed(taskRunnable, firstCall? 1:300000); + } + + private void navHistory(){ + + // ToolBar visibility + ImageButton refreshImgBtn = (ImageButton) findViewById(R.id.refresh); + ImageButton ifOnlineImgBtn = (ImageButton) findViewById(R.id.ifOnline); + ImageButton downloadImgBtn = (ImageButton) findViewById(R.id.download); + refreshImgBtn.setVisibility(View.GONE); + ifOnlineImgBtn.setVisibility(View.GONE); + downloadImgBtn.setVisibility(View.GONE); + + if(strAccount == null) + return; + runOnUiThread(new Runnable() { + @Override + public void run() { + ConstraintLayout content = (ConstraintLayout) mContent; + LayoutInflater inflater = (LayoutInflater) getLayoutInflater(); + inflater.inflate(R.layout.content_main_request_history_parameters, content); + // 设置按钮 + final Button btnHour = (Button)findViewById(R.id.btn_recent_hour); + final Button btnDay = (Button)findViewById(R.id.btn_recent_day); + final Button btnWeek = (Button)findViewById(R.id.btn_recent_week); + final Button btnCustom = (Button)findViewById(R.id.btn_custom); + final ImageButton imgBtnStart = (ImageButton) findViewById(R.id.imgBtn_start_time); + final ImageButton imgBtnEnd = (ImageButton) findViewById(R.id.imgBtn_end_time); + final EditText textStart = (EditText)findViewById(R.id.text_start_time); + final EditText textEnd = (EditText)findViewById(R.id.text_end_time); + final Button btnQuery = (Button)findViewById(R.id.btn_query); + final List