Browse Source

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu

raomeng 8 years ago
parent
commit
2c4b842e2d
22 changed files with 205 additions and 270 deletions
  1. 4 3
      WeiChat/build.gradle
  2. 5 3
      WeiChat/src/main/AndroidManifest.xml
  3. 1 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/CustomerAddActivity.java
  4. 0 207
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/PDFDownloadActivity.java
  5. 7 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportQueryCriteriaActivity.java
  6. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormDetailActivity.java
  7. 7 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java
  8. 32 14
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java
  9. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java
  10. 3 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/WorksFragment.java
  11. 6 11
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java
  12. 4 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/AutoErpService.java
  13. 18 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XReconnectionManager.java
  14. 7 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XmppConnectionManager.java
  15. 2 2
      WeiChat/src/main/res/raw/versionconfiguration.properties
  16. 17 0
      app_modular/AppWorks/src/test/java/com/uas/appworks/ExampleUnitTest.java
  17. 35 0
      applogin/build.gradle
  18. 26 0
      applogin/src/androidTest/java/com/uas/applogin/ExampleInstrumentedTest.java
  19. 5 0
      applogin/src/main/AndroidManifest.xml
  20. 3 0
      applogin/src/main/res/values/strings.xml
  21. 17 0
      applogin/src/test/java/com/uas/applogin/ExampleUnitTest.java
  22. 2 2
      version.gradle

+ 4 - 3
WeiChat/build.gradle

@@ -62,12 +62,13 @@ android {
         }
         }
     }
     }
     productFlavors {  // Gradle 多渠道打包
     productFlavors {  // Gradle 多渠道打包
-        wandoujia {}
-        _360 {}
         baidu {}
         baidu {}
+        wandoujia {}
+
         xiaomi {}
         xiaomi {}
         tencent {}
         tencent {}
         taobao {}
         taobao {}
+       
     }
     }
 
 
     productFlavors.all {
     productFlavors.all {
@@ -122,7 +123,7 @@ dependencies {
     compile project(':lib-zxing')
     compile project(':lib-zxing')
     compile project(':library-refreshlayout')
     compile project(':library-refreshlayout')
     compile 'com.squareup.okhttp3:okhttp:3.8.1'
     compile 'com.squareup.okhttp3:okhttp:3.8.1'
-    compile project(':android-pdf-viewer')
+    //compile project(':android-pdf-viewer')
 }
 }
 
 
 buildscript {
 buildscript {

+ 5 - 3
WeiChat/src/main/AndroidManifest.xml

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.xzjmyk.pm.activity"
     package="com.xzjmyk.pm.activity"
-    android:versionCode="111"
-    android:versionName="5.8.9">
+    android:versionCode="113"
+    android:versionName="5.9.0">
 
 
     <uses-sdk
     <uses-sdk
         android:minSdkVersion="11"
         android:minSdkVersion="11"
@@ -127,6 +127,8 @@
         <meta-data
         <meta-data
             android:name="UMENG_CHANNEL"
             android:name="UMENG_CHANNEL"
             android:value="${UMENG_CHANNEL_VALUE}" />
             android:value="${UMENG_CHANNEL_VALUE}" />
+        
+        
         <!-- 启动页面 -->
         <!-- 启动页面 -->
         <activity android:name=".ui.SplashActivity">
         <activity android:name=".ui.SplashActivity">
             <intent-filter>
             <intent-filter>
@@ -995,7 +997,7 @@
         <activity android:name=".ui.erp.activity.datainquiry.activity.ReportQueryCriteriaActivity"
         <activity android:name=".ui.erp.activity.datainquiry.activity.ReportQueryCriteriaActivity"
                   android:windowSoftInputMode="adjustPan"/>
                   android:windowSoftInputMode="adjustPan"/>
         <activity android:name=".ui.erp.activity.datainquiry.activity.ReportStatisticsMoreMenuActivity"/>
         <activity android:name=".ui.erp.activity.datainquiry.activity.ReportStatisticsMoreMenuActivity"/>
-        <activity android:name=".ui.erp.activity.datainquiry.activity.PDFDownloadActivity"/>
+    <!--    <activity android:name=".ui.erp.activity.datainquiry.activity.PDFDownloadActivity"/>-->
     </application>
     </application>
 
 
 </manifest>
 </manifest>

+ 1 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/CustomerAddActivity.java

@@ -39,7 +39,6 @@ import com.xzjmyk.pm.activity.util.DateFormatUtil;
 import org.json.JSONException;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.json.JSONObject;
 
 
-import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -377,7 +376,7 @@ public class CustomerAddActivity extends BaseActivity implements View.OnClickLis
                         " \"cu_add1\":\"" + CommonUtil.getNoMarkEditText(tv_cu_address) + "\",\n" +
                         " \"cu_add1\":\"" + CommonUtil.getNoMarkEditText(tv_cu_address) + "\",\n" +
                         " \"cu_kind\":\"" + CommonUtil.getNoMarkEditText(et_cu_kind) + "\",\n" +
                         " \"cu_kind\":\"" + CommonUtil.getNoMarkEditText(et_cu_kind) + "\",\n" +
                         " \"cu_district\":\"" + CommonUtil.getNoMarkEditText(et_cu_district) + "\",\n" +
                         " \"cu_district\":\"" + CommonUtil.getNoMarkEditText(et_cu_district) + "\",\n" +
-                        " \"cu_payments\":\"" + URLEncoder.encode(et_cu_payments.getText().toString()) + "\",\n" +
+                        " \"cu_payments\":\"" +CommonUtil.getNoMarkEditText(et_cu_payments) + "\",\n" +
                         " \"cu_paymentscode\":\"" + pa_code + "\",\n" +
                         " \"cu_paymentscode\":\"" + pa_code + "\",\n" +
                         " \"cu_sellername\":\"" + CommonUtil.getNoMarkEditText(et_cu_sellername) + "\",\n" +
                         " \"cu_sellername\":\"" + CommonUtil.getNoMarkEditText(et_cu_sellername) + "\",\n" +
                         " \"cu_contact\":\"" + CommonUtil.getNoMarkEditText(tv_cu_contact) + "\",\n" +
                         " \"cu_contact\":\"" + CommonUtil.getNoMarkEditText(tv_cu_contact) + "\",\n" +

+ 0 - 207
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/PDFDownloadActivity.java

@@ -1,207 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.activity;
-
-import android.content.Intent;
-import android.graphics.Canvas;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import com.github.barteksc.pdfviewer.PDFView;
-import com.github.barteksc.pdfviewer.listener.OnDrawListener;
-import com.github.barteksc.pdfviewer.listener.OnErrorListener;
-import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
-import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
-import com.github.barteksc.pdfviewer.listener.OnPageScrollListener;
-import com.github.barteksc.pdfviewer.listener.OnRenderListener;
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.base.BaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.Constants;
-import com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.PDFUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
-
-import java.io.File;
-
-/**
- * Created by RaoMeng on 2017/8/17.
- * 报表统计PDF文件下载并展示页面
- */
-public class PDFDownloadActivity extends BaseActivity implements View.OnClickListener, OnDrawListener, OnLoadCompleteListener, OnPageChangeListener, OnPageScrollListener, OnErrorListener, OnRenderListener {
-    private PDFView mPDFView;
-    private TextView mStateTextView, mRemainTextView, mReloadTextView, mExitTextView;
-    private ProgressBar mDownloadProgressBar;
-    private RelativeLayout mDownloadRelativeLayout;
-    private LinearLayout mErrorLinearLayout;
-    private String downloadUrl = "", mReportName = "";
-    private String mCondition;
-
-    private Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case Constants.CONSTANT.DOWNLOAD_PROGRESS:
-                    try {
-                        int progress = (int) msg.obj;
-                        Log.d("progress", progress + "");
-                        mStateTextView.setText(R.string.str_loading);
-                        mDownloadProgressBar.setProgress(progress);
-                        mRemainTextView.setText((100 - progress) + "");
-                    } catch (Exception e) {
-
-                    }
-                    break;
-                case Constants.CONSTANT.DOWNLOAD_SUCCESS:
-                    mStateTextView.setText("报表文件下载成功!");
-                    mDownloadProgressBar.setProgress(100);
-                    mRemainTextView.setText("0");
-                    mDownloadRelativeLayout.postDelayed(new Runnable() {
-                        @Override
-                        public void run() {
-                            mDownloadRelativeLayout.setVisibility(View.GONE);
-                        }
-                    }, 1000);
-                    displayFromFile(new File(Constants.CONSTANT.PDF_FILE_PATH, Constants.CONSTANT.PDF_FILE_NAME));
-                    break;
-                case Constants.CONSTANT.PDF_OVERLOAD:
-                    mErrorLinearLayout.setVisibility(View.VISIBLE);
-                    mStateTextView.setText("数据量过载,报表文件获取失败!");
-                    mDownloadProgressBar.setProgress(0);
-                    mRemainTextView.setText(100 + "");
-                    break;
-                case Constants.CONSTANT.DOWNLOAD_FAILED:
-                    mErrorLinearLayout.setVisibility(View.VISIBLE);
-                    String info = "";
-                    if (msg.obj != null) {
-                        info = "\n" + (String) msg.obj;
-                    }
-                    mStateTextView.setText("报表文件下载失败" + info);
-                    mDownloadProgressBar.setProgress(0);
-                    mRemainTextView.setText(100 + "");
-                    break;
-            }
-        }
-    };
-
-    private void displayFromFile(File fileName) {
-        mPDFView.fromFile(fileName)
-//                .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
-                .enableSwipe(true) // allows to block changing pages using swipe
-                .swipeHorizontal(true)
-                .enableDoubletap(true)
-                .defaultPage(0)
-                        // allows to draw something on the current page, usually visible in the middle of the screen
-                .onDraw(this)
-                        // allows to draw something on all pages, separately for every page. Called only for visible pages
-                .onDrawAll(this)
-                .onLoad(this) // called after document is loaded and starts to be rendered
-                .onPageChange(this)
-                .onPageScroll(this)
-                .onError(this)
-                .onRender(this) // called after document is rendered for the first time
-                .enableAnnotationRendering(false) // render annotations (such as comments, colors or forms)
-                .password(null)
-                .scrollHandle(null)
-                .enableAntialiasing(true) // improve rendering a little bit on low-res screens
-                        // spacing between pages in dp. To define spacing color, set view background
-                .spacing(10)
-                .load();
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_pdf_download);
-
-        initViews();
-        initEvents();
-        downloadPDF();
-    }
-
-    private void downloadPDF() {
-        PDFUtils.downloadPDF(downloadUrl, mHandler);
-    }
-
-    private void initViews() {
-        Intent intent = getIntent();
-        if (intent != null) {
-            mCondition = intent.getStringExtra("condition");
-            mReportName = intent.getStringExtra("reportName");
-        }
-
-//        downloadUrl = com.xzjmyk.pm.activity.ui.erp.util.Constants.getAppBaseUrl(this)
-//                + "report/pdf/data?u=" + CommonUtil.getSharedPreferences(ct, "erp_master")
-//                + "&pf=phone&r=" + mReportName + "&w=" + mCondition;
-//        downloadUrl = "http://192.168.253.60:8090/report/pdf/data?u=" + CommonUtil.getSharedPreferences(ct, "erp_master")
-//                + "&pf=phone&r=" + mReportName + "&w=where " + mCondition;
-        downloadUrl = "http://print.ubtob.com/report/pdf/data?u=" + CommonUtil.getSharedPreferences(ct, "erp_master")
-                + "&pf=phone&r=" + mReportName + "&w=where " + mCondition;
-
-        Log.d("downloadUrl", downloadUrl);
-
-        mPDFView = (PDFView) findViewById(R.id.pdf_download_pdfview);
-        mPDFView.useBestQuality(true);
-
-        mStateTextView = (TextView) findViewById(R.id.pdf_download_state_tv);
-        mRemainTextView = (TextView) findViewById(R.id.pdf_download_remain_tv);
-        mDownloadProgressBar = (ProgressBar) findViewById(R.id.pdf_download_progress_pb);
-        mDownloadRelativeLayout = (RelativeLayout) findViewById(R.id.pdf_download_progress_rl);
-        mReloadTextView = (TextView) findViewById(R.id.pdf_download_reload_tv);
-        mExitTextView = (TextView) findViewById(R.id.pdf_download_exit_tv);
-        mErrorLinearLayout = (LinearLayout) findViewById(R.id.pdf_download_error_menu_ll);
-    }
-
-    private void initEvents() {
-        mExitTextView.setOnClickListener(this);
-        mReloadTextView.setOnClickListener(this);
-        mDownloadRelativeLayout.setOnClickListener(this);
-    }
-
-    @Override
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.pdf_download_exit_tv:
-                onBackPressed();
-                break;
-            case R.id.pdf_download_reload_tv:
-                mStateTextView.setText(R.string.str_loading);
-                mErrorLinearLayout.setVisibility(View.GONE);
-                PDFUtils.downloadPDF(downloadUrl, mHandler);
-                break;
-        }
-    }
-
-    @Override
-    public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
-
-    }
-
-    @Override
-    public void loadComplete(int nbPages) {
-
-    }
-
-    @Override
-    public void onPageChanged(int page, int pageCount) {
-
-    }
-
-    @Override
-    public void onPageScrolled(int page, float positionOffset) {
-
-    }
-
-    @Override
-    public void onError(Throwable t) {
-
-    }
-
-    @Override
-    public void onInitiallyRendered(int nbPages, float pageWidth, float pageHeight) {
-        mPDFView.fitToWidth();
-    }
-}

+ 7 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportQueryCriteriaActivity.java

@@ -318,13 +318,13 @@ public class ReportQueryCriteriaActivity extends BaseActivity implements View.On
         if (mCondition.length() == 0) {
         if (mCondition.length() == 0) {
             ToastMessage("请确认报表查询条件");
             ToastMessage("请确认报表查询条件");
         } else {
         } else {
-            Intent intent = new Intent();
-            intent.setClass(this, PDFDownloadActivity.class);
-            intent.putExtra("condition", mCondition);
-            if (mReportInfo != null)
-                intent.putExtra("reportName", mReportInfo.getReportName());
-
-            startActivity(intent);
+//            Intent intent = new Intent();
+//            intent.setClass(this, PDFDownloadActivity.class);
+//            intent.putExtra("condition", mCondition);
+//            if (mReportInfo != null)
+//                intent.putExtra("reportName", mReportInfo.getReportName());
+//
+//            startActivity(intent);
         }
         }
     }
     }
 
 

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormDetailActivity.java

@@ -749,8 +749,8 @@ public class DataFormDetailActivity extends BaseActivity implements View.OnClick
 
 
     @Override
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
     public boolean onPrepareOptionsMenu(Menu menu) {
-        if (CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "erp_master")
-                .equals("USOFTSYS")) {
+        if ("USOFTSYS".equals(CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "erp_master"))
+                ) {
             if (PreferenceUtils.getBoolean(AppConfig.IS_ADMIN, false)) {
             if (PreferenceUtils.getBoolean(AppConfig.IS_ADMIN, false)) {
                 menu.findItem(R.id.oa_signin_set).setVisible(true);
                 menu.findItem(R.id.oa_signin_set).setVisible(true);
             } else {
             } else {

+ 7 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java

@@ -364,8 +364,9 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                 }
                 }
                 LogUtil.i("url=" + url);
                 LogUtil.i("url=" + url);
                 String master = model.master == null ? CommonUtil.getSharedPreferences(ct, "erp_master") : model.master;
                 String master = model.master == null ? CommonUtil.getSharedPreferences(ct, "erp_master") : model.master;
-                if (CommonUtil.isReleaseVersion()) {
-                    CommonUtil.loadWebView(ct, url, title, master, null, null);
+            
+//                if (CommonUtil.isReleaseVersion()) {
+//                    CommonUtil.loadWebView(ct, url, title, master, null, null);
 //                    Intent intent = new Intent(ct, AppWebViewActivity.class);
 //                    Intent intent = new Intent(ct, AppWebViewActivity.class);
 //                    intent.putExtra("url", url);
 //                    intent.putExtra("url", url);
 //                    intent.putExtra("p", title);
 //                    intent.putExtra("p", title);
@@ -373,7 +374,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
 //                    intent.putExtra("nodeid", Integer.valueOf(model.JP_NODEID));
 //                    intent.putExtra("nodeid", Integer.valueOf(model.JP_NODEID));
 //                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 //                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 //                    startActivity(intent);
 //                    startActivity(intent);
-                } else {
+//                } else {
                     Intent intent = new Intent(ct, ApprovalActivity.class);
                     Intent intent = new Intent(ct, ApprovalActivity.class);
                     intent.putExtra("imid", d_imids);
                     intent.putExtra("imid", d_imids);
                     intent.putExtra("title", title);
                     intent.putExtra("title", title);
@@ -381,7 +382,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     intent.putExtra("master", master);
                     intent.putExtra("master", master);
                     intent.putExtra("nodeid", Integer.valueOf(model.JP_NODEID));
                     intent.putExtra("nodeid", Integer.valueOf(model.JP_NODEID));
                     startActivity(intent);
                     startActivity(intent);
-                }
+//                }
             }
             }
         });
         });
 
 
@@ -648,9 +649,9 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                         } else if (jn_dealresult.startsWith("变更处理人")) {
                         } else if (jn_dealresult.startsWith("变更处理人")) {
                             statusTextId = R.color.done_approval;
                             statusTextId = R.color.done_approval;
                             if (!StringUtils.isEmpty(jsonArray.getJSONObject(position).getString("JN_OPERATEDDESCRIPTION"))) {
                             if (!StringUtils.isEmpty(jsonArray.getJSONObject(position).getString("JN_OPERATEDDESCRIPTION"))) {
-                                model.status.setText("已变更处理人(" + jsonArray.getJSONObject(position).getString("JN_OPERATEDDESCRIPTION") + ")");
+                                jn_dealresult = "变更处理人(" + jsonArray.getJSONObject(position).getString("JN_OPERATEDDESCRIPTION") + ")";
                             } else {
                             } else {
-                                model.status.setText("已变更处理人");
+                                jn_dealresult = "变更处理人";
                             }
                             }
                         } else {
                         } else {
                             jn_dealresult = "已审批";
                             jn_dealresult = "已审批";

+ 32 - 14
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java

@@ -2,6 +2,7 @@ package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
 
 import android.content.Intent;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.text.Editable;
@@ -47,6 +48,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.RecognizerDialogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.RecognizerDialogUtil;
 import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.DisplayUtil;
+import com.xzjmyk.pm.activity.util.PermissionUtil;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
 import com.xzjmyk.pm.activity.view.CrashLinearLayoutManager;
 import com.xzjmyk.pm.activity.view.CrashLinearLayoutManager;
 
 
@@ -57,6 +59,7 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
+
 public class ApprovalActivity extends OABaseActivity implements IApproval, ApprovalAdapter.OnChangeClickListener, View.OnClickListener, RecognizerDialogListener {
 public class ApprovalActivity extends OABaseActivity implements IApproval, ApprovalAdapter.OnChangeClickListener, View.OnClickListener, RecognizerDialogListener {
     @ViewInject(R.id.opinionRL)
     @ViewInject(R.id.opinionRL)
     RelativeLayout opinionRL;//操作和意见输入
     RelativeLayout opinionRL;//操作和意见输入
@@ -71,6 +74,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
     private ApprovalAdapter mAdapter;
     private ApprovalAdapter mAdapter;
     private boolean isApprove;
     private boolean isApprove;
 
 
+
     @Override
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.oa_approval_set && mAdapter != null && !ListUtils.isEmpty(mAdapter.getApprovals())) {
         if (item.getItemId() == R.id.oa_approval_set && mAdapter != null && !ListUtils.isEmpty(mAdapter.getApprovals())) {
@@ -108,6 +112,20 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
         mPresenter.closeDB();
         mPresenter.closeDB();
     }
     }
 
 
+    @Override
+    protected void onResume() {
+        super.onResume();
+        String permission = android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
+        if (PermissionUtil.lacksPermissions(this, permission)) {
+            PermissionUtil.requestPermission(this, 0x12, permission);
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+    }
+
     @Override
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (data != null && requestCode == 0x20) {
         if (data != null && requestCode == 0x20) {
@@ -128,13 +146,12 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
                     mPresenter.loadNextProcess();
                     mPresenter.loadNextProcess();
                 }
                 }
             } else if (0x22 == requestCode) {
             } else if (0x22 == requestCode) {
-                if (StringUtils.isEmpty(name)) {
-                    name = "回退给制单人";
-                }
-                if (name.equals("回退给制单人")) {
-                    name = "RECORDER";
+                if (!StringUtils.isEmpty(name)) {
+                    if (name.equals("回退给制单人")) {
+                        name = "RECORDER";
+                    }
+                    mPresenter.disAgree(OACheckUtil.getText(opinionET), name);
                 }
                 }
-                mPresenter.disAgree(OACheckUtil.getText(opinionET), name);
             }
             }
         } else if (0x25 == requestCode && 0x25 == resultCode) {
         } else if (0x25 == requestCode && 0x25 == resultCode) {
             mPresenter.initLoad();
             mPresenter.initLoad();
@@ -318,21 +335,22 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, Appro
     public void endProcess() {
     public void endProcess() {
         new MaterialDialog.Builder(ct).title(MyApplication.getInstance().getString(R.string.app_dialog_title))
         new MaterialDialog.Builder(ct).title(MyApplication.getInstance().getString(R.string.app_dialog_title))
                 .content(R.string.end_approval)
                 .content(R.string.end_approval)
-                .positiveText(MyApplication.getInstance().getString(R.string.app_dialog_close)).autoDismiss(false)
+                .positiveText(MyApplication.getInstance().getString(R.string.common_sure)).autoDismiss(false)
                 .callback(new MaterialDialog.ButtonCallback() {
                 .callback(new MaterialDialog.ButtonCallback() {
                     @Override
                     @Override
                     public void onPositive(MaterialDialog dialog) {
                     public void onPositive(MaterialDialog dialog) {
-                        finish();
+//                        finish();
                         dialog.dismiss();
                         dialog.dismiss();
-                    }
-                })
-                .positiveText(R.string.load_tonext_approval)
-                .callback(new MaterialDialog.ButtonCallback() {
-                    @Override
-                    public void onPositive(MaterialDialog dialog) {
                         mPresenter.loadNextProcess();
                         mPresenter.loadNextProcess();
                     }
                     }
                 })
                 })
+//                .positiveText(R.string.load_tonext_approval)
+//                .callback(new MaterialDialog.ButtonCallback() {
+//                    @Override
+//                    public void onPositive(MaterialDialog dialog) {
+//                        mPresenter.loadNextProcess();
+//                    }
+//                })
                 .show();
                 .show();
     }
     }
 
 

+ 2 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java

@@ -31,6 +31,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.view.CustomProgressDialog;
 import com.xzjmyk.pm.activity.ui.erp.view.CustomProgressDialog;
 import com.xzjmyk.pm.activity.ui.tool.SingleImagePreviewActivity;
 import com.xzjmyk.pm.activity.ui.tool.SingleImagePreviewActivity;
 import com.xzjmyk.pm.activity.util.CalendarUtils;
 import com.xzjmyk.pm.activity.util.CalendarUtils;
+import com.xzjmyk.pm.activity.util.ToastUtil;
 import com.xzjmyk.pm.activity.view.wheel.DatePicker;
 import com.xzjmyk.pm.activity.view.wheel.DatePicker;
 
 
 import java.io.File;
 import java.io.File;
@@ -317,6 +318,7 @@ public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
                     @Override
                     @Override
                     public void onFailure(String exception) {
                     public void onFailure(String exception) {
                         LogUtil.i("exception=" + exception);
                         LogUtil.i("exception=" + exception);
+                        ToastUtil.showToast(ct,exception);
                     }
                     }
                 });
                 });
             }
             }

+ 3 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/WorksFragment.java

@@ -121,6 +121,8 @@ public class WorksFragment extends EasyFragment implements View.OnClickListener
         if (platform) {
         if (platform) {
             my_client_rl.setVisibility(View.GONE);
             my_client_rl.setVisibility(View.GONE);
         }
         }
+        
+
         UserRoleUtils.checkUserRole(this, getmRootView());
         UserRoleUtils.checkUserRole(this, getmRootView());
     }
     }
 
 
@@ -185,6 +187,7 @@ public class WorksFragment extends EasyFragment implements View.OnClickListener
                 startActivity(new Intent(getActivity(), StatisticsActivity.class));
                 startActivity(new Intent(getActivity(), StatisticsActivity.class));
                 break;
                 break;
             case R.id.work_data_inquiry_rl:
             case R.id.work_data_inquiry_rl:
+                
                 startActivity(new Intent(ct, DataInquiryActivity.class));
                 startActivity(new Intent(ct, DataInquiryActivity.class));
                 break;
                 break;
             case R.id.work_report_statistics_rl:
             case R.id.work_report_statistics_rl:

+ 6 - 11
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java

@@ -76,7 +76,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
 
 
     private List<Approval> historyNodes;//历史审批
     private List<Approval> historyNodes;//历史审批
 
 
-    //TODO
     private Approval titleApproval;
     private Approval titleApproval;
     private List<Approval> mainDetailList;//主从表
     private List<Approval> mainDetailList;//主从表
     private List<Approval> setuptasList;//历史审批要点
     private List<Approval> setuptasList;//历史审批要点
@@ -749,7 +748,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 if (!ListUtils.isEmpty(formconfigs)) {
                 if (!ListUtils.isEmpty(formconfigs)) {
                     final List<Approval> mainApproval = formandGriddata(OACheckUtil.getJSONObject(changeData, "change-new"), formdata, formconfigs, record.caller, true, true);
                     final List<Approval> mainApproval = formandGriddata(OACheckUtil.getJSONObject(changeData, "change-new"), formdata, formconfigs, record.caller, true, true);
                     mainDetailList.addAll(mainApproval);
                     mainDetailList.addAll(mainApproval);
-                    // TODO   setData2ListThread(Approval.MAIN, mainApproval);
                 }
                 }
             }
             }
             //计算从表
             //计算从表
@@ -804,7 +802,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
             }
             }
             mainDetailList.addAll(detailedList);
             mainDetailList.addAll(detailedList);
             ApprovaPresenter.this.mainDetailList = mainDetailList;
             ApprovaPresenter.this.mainDetailList = mainDetailList;
-            //TODO
             setData2ListThread();
             setData2ListThread();
             OAHttpHelper.getInstance().post(new Runnable() {
             OAHttpHelper.getInstance().post(new Runnable() {
                 @Override
                 @Override
@@ -821,7 +818,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
         }
         }
     }
     }
 
 
-    //TODO 1.隐藏字段明细表重复 2.不该显示字段被显示
     private List<Approval> formandGriddata(final JSONObject changeData,
     private List<Approval> formandGriddata(final JSONObject changeData,
                                            final JSONObject data,
                                            final JSONObject data,
                                            final JSONArray configs,
                                            final JSONArray configs,
@@ -957,7 +953,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
             }
             }
             if (!ListUtils.isEmpty(setuptasks)) {
             if (!ListUtils.isEmpty(setuptasks)) {
                 ApprovaPresenter.this.setuptasList = setuptasks;
                 ApprovaPresenter.this.setuptasList = setuptasks;
-                //TODO   setData2ListThread(DETAIL, setuptasks);
                 setData2ListThread();
                 setData2ListThread();
             }
             }
         }
         }
@@ -1050,7 +1045,8 @@ public class ApprovaPresenter implements OnHttpResultListener {
                  * 已结束
                  * 已结束
                  * 待审批
                  * 待审批
                  */
                  */
-                for (Approval a : approvals) {
+                for (int i = 0; i < approvals.size(); i++) {
+                    Approval a = approvals.get(i);
                     if (!a.getIdKey().startsWith("已审批")
                     if (!a.getIdKey().startsWith("已审批")
                             && !a.getIdKey().startsWith("未通过")
                             && !a.getIdKey().startsWith("未通过")
                             && !a.getIdKey().startsWith("不同意")
                             && !a.getIdKey().startsWith("不同意")
@@ -1058,6 +1054,8 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         hanNotApproval = true;
                         hanNotApproval = true;
                         if (a.getIdKey().startsWith("待审批"))
                         if (a.getIdKey().startsWith("待审批"))
                             a.setValues("");
                             a.setValues("");
+                    } else if (a.getIdKey().startsWith("未通过") && i == 0) {
+                        record.status = "未通过";
                     }
                     }
                     String emcode = null;
                     String emcode = null;
                     if (a.getDfType().contains(",")) {
                     if (a.getDfType().contains(",")) {
@@ -1086,7 +1084,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
 //                    }
 //                    }
                 }
                 }
 
 
-                if ("未通过".equals(record.status) || "已结束".equals(record.status)) {
+                if ("未通过".equals(record.status)) {
                     reId = R.drawable.unapproved;
                     reId = R.drawable.unapproved;
                 } else if (!hanNotApproval && !isApprovaling()) {//没有未审批的数据
                 } else if (!hanNotApproval && !isApprovaling()) {//没有未审批的数据
                     reId = R.drawable.approved;
                     reId = R.drawable.approved;
@@ -1097,7 +1095,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                     approvals.add(0, nodeTag);
                     approvals.add(0, nodeTag);
                 }
                 }
                 ApprovaPresenter.this.nodeList = approvals;
                 ApprovaPresenter.this.nodeList = approvals;
-                //TODO  setData2ListThread(Approval.NODES, approvals);
                 setData2ListThread();
                 setData2ListThread();
                 loading = false;
                 loading = false;
             }
             }
@@ -1149,7 +1146,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                     tag.setCaption("附件");
                     tag.setCaption("附件");
                     enclosureList.add(0, tag);
                     enclosureList.add(0, tag);
                     ApprovaPresenter.this.enclosureList = enclosureList;
                     ApprovaPresenter.this.enclosureList = enclosureList;
-                    //TODO setData2ListThread(Approval.ENCLOSURE, enclosureList);
                     setData2ListThread();
                     setData2ListThread();
                 }
                 }
             }
             }
@@ -1197,7 +1193,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
             setNodeStatus(status);
             setNodeStatus(status);
             for (int j = approvals.size() - 1; j >= 0; j--) {
             for (int j = approvals.size() - 1; j >= 0; j--) {
                 Approval a = approvals.get(j);
                 Approval a = approvals.get(j);
-                if (hanEnd) continue;
+                if (hanEnd && !equalsOne(status, "待审批")) continue;
                 if (a.getValuesKey().equals(record.nodeName)) {
                 if (a.getValuesKey().equals(record.nodeName)) {
                     hanEnd = true;
                     hanEnd = true;
                 }
                 }
@@ -1305,7 +1301,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         points.setCaption(OACheckUtil.getString(R.string.approval_points));
                         points.setCaption(OACheckUtil.getString(R.string.approval_points));
                         pointsList.add(0, points);
                         pointsList.add(0, points);
                         ApprovaPresenter.this.pointsList = pointsList;
                         ApprovaPresenter.this.pointsList = pointsList;
-                        //TODO  setData2ListThread(Approval.POINTS, pointsList);
                         setData2ListThread();
                         setData2ListThread();
                     }
                     }
                 }
                 }

+ 4 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/AutoErpService.java

@@ -65,8 +65,9 @@ public class AutoErpService extends Service {
     private NotificationManage notificationManage;//通知管理器
     private NotificationManage notificationManage;//通知管理器
 
 
     private final long INTERVAL = 2 * 60 * 1000;//每两分钟回来一次,防止时间太久出现回不来情况 通过 iter来判断是否进入判断
     private final long INTERVAL = 2 * 60 * 1000;//每两分钟回来一次,防止时间太久出现回不来情况 通过 iter来判断是否进入判断
+    private final long PLAN_INTERVAL = 10 * 60 * 1000;//每十分钟回来一次,iter来判断是否进入判断
     private final int WORK_ITER = 3;//计算循环的时间
     private final int WORK_ITER = 3;//计算循环的时间
-    private final int DNOTICE_ITER = 10; //TODO 测试用1 ,之后改为10
+    private final int DNOTICE_ITER = 2;
     private final int MISSION_ITER = 10;//外勤时间  2分钟的倍数
     private final int MISSION_ITER = 10;//外勤时间  2分钟的倍数
 
 
     private AutoErpSigninUitl signinUitl;
     private AutoErpSigninUitl signinUitl;
@@ -135,8 +136,8 @@ public class AutoErpService extends Service {
                     log(intent.getAction());
                     log(intent.getAction());
                     String falg = intent.getStringExtra("falg");
                     String falg = intent.getStringExtra("falg");
                     LogUtil.i("falg=" + falg);
                     LogUtil.i("falg=" + falg);
+                    CommonInterface.getInstance().judgeManager(null);
                     if (StringUtils.isEmpty(falg) || falg.equals("home")) {
                     if (StringUtils.isEmpty(falg) || falg.equals("home")) {
-                        CommonInterface.getInstance().judgeManager(null);
                         init();
                         init();
                     }
                     }
                 } else if (intent.getAction().equals(CHANGE_WORK_TASK)) {//自动打卡任务变更
                 } else if (intent.getAction().equals(CHANGE_WORK_TASK)) {//自动打卡任务变更
@@ -334,7 +335,7 @@ public class AutoErpService extends Service {
                         }
                         }
                         dnoticeIter++;
                         dnoticeIter++;
                         dnotice = false;
                         dnotice = false;
-                        Thread.sleep(INTERVAL);
+                        Thread.sleep(PLAN_INTERVAL);
                     } catch (InterruptedException e) {
                     } catch (InterruptedException e) {
                         if (e != null)
                         if (e != null)
                             log("startDNoticeTask InterruptedException=" + e.getMessage());
                             log("startDNoticeTask InterruptedException=" + e.getMessage());

+ 18 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XReconnectionManager.java

@@ -18,6 +18,7 @@ import org.jivesoftware.smack.AbstractConnectionListener;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPException.StreamErrorException;
 import org.jivesoftware.smack.XMPPException.StreamErrorException;
 import org.jivesoftware.smack.packet.StreamError;
 import org.jivesoftware.smack.packet.StreamError;
+import org.jivesoftware.smack.tcp.XMPPTCPConnection;
 import org.jivesoftware.smack.util.StringUtils;
 import org.jivesoftware.smack.util.StringUtils;
 
 
 import java.io.DataOutputStream;
 import java.io.DataOutputStream;
@@ -60,6 +61,8 @@ public class XReconnectionManager extends AbstractConnectionListener {
 	public void setNetWorkState(boolean isNetWorkActive) {
 	public void setNetWorkState(boolean isNetWorkActive) {
 		mIsNetWorkActive = isNetWorkActive;
 		mIsNetWorkActive = isNetWorkActive;
 		if (mIsNetWorkActive) {// 网络状态变为可用
 		if (mIsNetWorkActive) {// 网络状态变为可用
+			LogUtil.d("Xmpp","isReconnectionAllowed:"+isReconnectionAllowed()
+			+" user:"+mConnection.getUser());
 			if (isReconnectionAllowed()) {
 			if (isReconnectionAllowed()) {
 				reconnect();
 				reconnect();
 			}
 			}
@@ -85,8 +88,14 @@ public class XReconnectionManager extends AbstractConnectionListener {
 			// Since there is no thread running, creates a new one to attempt
 			// Since there is no thread running, creates a new one to attempt
 			// the reconnection.
 			// the reconnection.
 			// avoid to run duplicated reconnectionThread -- fd: 16/09/2010
 			// avoid to run duplicated reconnectionThread -- fd: 16/09/2010
-			if (mReconnectionThread != null && mReconnectionThread.isAlive())
-				return;
+			if (mReconnectionThread != null && mReconnectionThread.isAlive()){
+				LogUtil.d("Xmpp","mReconnectionThread 线程已存在");
+				return;	
+			}else{
+				LogUtil.d("Xmpp","mReconnectionThread 新线程:"+mConnection.getUser());
+			
+			}
+			
 			mReconnectionThread = new Thread() {
 			mReconnectionThread = new Thread() {
 
 
 				private int mRandomBase = new Random().nextInt(11) + 5; // between 5 and 15 seconds
 				private int mRandomBase = new Random().nextInt(11) + 5; // between 5 and 15 seconds
@@ -350,6 +359,8 @@ public class XReconnectionManager extends AbstractConnectionListener {
 
 
 	@Override
 	@Override
 	public void connectionClosedOnError(Exception e) {
 	public void connectionClosedOnError(Exception e) {
+		LogUtil.d("reconnect","<<connectionClosedOnError>> mConnection:"+((XMPPTCPConnection)mConnection).getUser()
+		+" isAuthenticated():"+mConnection.isAuthenticated());
 		doReconnecting = true;
 		doReconnecting = true;
 		if (e instanceof StreamErrorException) {// 有人重复登陆
 		if (e instanceof StreamErrorException) {// 有人重复登陆
 			StreamErrorException xmppEx = (StreamErrorException) e;
 			StreamErrorException xmppEx = (StreamErrorException) e;
@@ -372,4 +383,9 @@ public class XReconnectionManager extends AbstractConnectionListener {
 			this.reconnect();
 			this.reconnect();
 		}
 		}
 	}
 	}
+
+
+	public XMPPConnection getmConnection() {
+		return mConnection;
+	}
 }
 }

+ 7 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XmppConnectionManager.java

@@ -133,6 +133,7 @@ public class XmppConnectionManager {
 						login(mLoginUserId, mLoginPassword);
 						login(mLoginUserId, mLoginPassword);
 					}
 					}
 				}
 				}
+				LogUtil.d("Reconnect","mReconnectionManager connect:"+mReconnectionManager.getmConnection().getUser());
 				mReconnectionManager.setNetWorkState(mIsNetWorkActive);
 				mReconnectionManager.setNetWorkState(mIsNetWorkActive);
 			}
 			}
 		}
 		}
@@ -200,12 +201,12 @@ public class XmppConnectionManager {
 	private boolean doLogining = false;
 	private boolean doLogining = false;
 
 
 	private boolean isLoginAllowed() {
 	private boolean isLoginAllowed() {
-		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
-		LogUtil.d("Xmpp","doLogining:"+doLogining);
-		LogUtil.d("Xmpp","mIsNetWorkActive:"+mIsNetWorkActive);
-		LogUtil.d("Xmpp","!mConnection.isConnected():"+!mConnection.isConnected());
-		LogUtil.d("Xmpp","!mConnection.isAuthenticated():"+!mConnection.isAuthenticated());
-		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
+//		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
+//		LogUtil.d("Xmpp","doLogining:"+doLogining);
+//		LogUtil.d("Xmpp","mIsNetWorkActive:"+mIsNetWorkActive);
+//		LogUtil.d("Xmpp","!mConnection.isConnected():"+!mConnection.isConnected());
+//		LogUtil.d("Xmpp","!mConnection.isAuthenticated():"+!mConnection.isAuthenticated());
+//		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
 		return doLogining && mIsNetWorkActive && (!mConnection.isConnected() || !mConnection.isAuthenticated());
 		return doLogining && mIsNetWorkActive && (!mConnection.isConnected() || !mConnection.isAuthenticated());
 	}
 	}
 
 

+ 2 - 2
WeiChat/src/main/res/raw/versionconfiguration.properties

@@ -1,3 +1,3 @@
 #发布版本状态改为true,测试版本状态为false
 #发布版本状态改为true,测试版本状态为false
-release_version=false
-#release_version=true
+#release_version=false
+release_version=true

+ 17 - 0
app_modular/AppWorks/src/test/java/com/uas/appworks/ExampleUnitTest.java

@@ -0,0 +1,17 @@
+package com.uas.appworks;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 35 - 0
applogin/build.gradle

@@ -0,0 +1,35 @@
+apply plugin: 'com.android.application'
+
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion "25.0.3"
+
+
+    defaultConfig {
+        applicationId "com.uas.applogin"
+        minSdkVersion 16
+        targetSdkVersion 25
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+        exclude group: 'com.android.support', module: 'support-annotations'
+    })
+
+    compile 'com.android.support:appcompat-v7:25.3.1'
+    testCompile 'junit:junit:4.12'
+}

+ 26 - 0
applogin/src/androidTest/java/com/uas/applogin/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.uas.applogin;
+
+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.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getTargetContext();
+
+        assertEquals("com.uas.applogin", appContext.getPackageName());
+    }
+}

+ 5 - 0
applogin/src/main/AndroidManifest.xml

@@ -0,0 +1,5 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.uas.applogin">
+    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true" android:theme="@style/AppTheme" />
+</manifest>

+ 3 - 0
applogin/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">applogin</string>
+</resources>

+ 17 - 0
applogin/src/test/java/com/uas/applogin/ExampleUnitTest.java

@@ -0,0 +1,17 @@
+package com.uas.applogin;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 2 - 2
version.gradle

@@ -11,8 +11,8 @@ ext {
             minSdkVersion    : 14,
             minSdkVersion    : 14,
             targetSdkVersion : 24,
             targetSdkVersion : 24,
             javaVersion      : JavaVersion.VERSION_1_8,
             javaVersion      : JavaVersion.VERSION_1_8,
-            versionCode      : 111,
-            versionName      : '5.8.9',
+            versionCode      : 112,
+            versionName      : '5.9.0',
     ]
     ]
 
 
     depsVersion = [
     depsVersion = [