Bläddra i källkod

添加版本更新功能
添加引导页

ZhangXinYu 6 år sedan
förälder
incheckning
64aad9b520
44 ändrade filer med 909 tillägg och 19 borttagningar
  1. 3 3
      app/build.gradle
  2. 2 2
      app/server_url.properties
  3. 5 0
      app/src/hbpro/res/values/strings.xml
  4. 5 0
      app/src/hbtest/res/values/strings.xml
  5. 21 0
      app/src/main/AndroidManifest.xml
  6. 49 0
      app/src/main/java/com/tongyu/luck/happywork/bean/VersionBean.java
  7. 24 0
      app/src/main/java/com/tongyu/luck/happywork/bean/api/ApiCheckVersion.java
  8. 31 0
      app/src/main/java/com/tongyu/luck/happywork/broadcast/DownLoadBroadcastReceiver.java
  9. 4 0
      app/src/main/java/com/tongyu/luck/happywork/http/Api.java
  10. 13 0
      app/src/main/java/com/tongyu/luck/happywork/http/subscribe/MessageSubscribe.java
  11. 114 0
      app/src/main/java/com/tongyu/luck/happywork/ui/activity/GuideActivity.java
  12. 1 0
      app/src/main/java/com/tongyu/luck/happywork/ui/activity/MainActivity.java
  13. 2 2
      app/src/main/java/com/tongyu/luck/happywork/ui/activity/StartActivity.java
  14. 2 3
      app/src/main/java/com/tongyu/luck/happywork/ui/activity/job/WelfareJobDetailActivity.java
  15. 6 4
      app/src/main/java/com/tongyu/luck/happywork/ui/activity/mine/SettingActivity.java
  16. 51 0
      app/src/main/java/com/tongyu/luck/happywork/ui/adapter/viewpager/GuidePageAdapter.java
  17. 5 0
      app/src/main/java/com/tongyu/luck/happywork/ui/contacts/MainContacts.java
  18. 21 0
      app/src/main/java/com/tongyu/luck/happywork/ui/contacts/SettingContacts.java
  19. 36 1
      app/src/main/java/com/tongyu/luck/happywork/ui/model/MainModel.java
  20. 45 0
      app/src/main/java/com/tongyu/luck/happywork/ui/model/SettingModel.java
  21. 20 1
      app/src/main/java/com/tongyu/luck/happywork/ui/presenter/MainPresenter.java
  22. 42 0
      app/src/main/java/com/tongyu/luck/happywork/ui/presenter/SettingPresenter.java
  23. 239 0
      app/src/main/java/com/tongyu/luck/happywork/ui/widget/dialog/UpdateAppDialog.java
  24. 5 0
      app/src/main/res/drawable/corners_blue_17_5dp.xml
  25. 8 0
      app/src/main/res/drawable/corners_guide_banner_type.xml
  26. 70 0
      app/src/main/res/layout/activity_guide.xml
  27. 1 1
      app/src/main/res/layout/activity_welfare_job_detail.xml
  28. 56 0
      app/src/main/res/layout/dialog_update_app.xml
  29. 2 1
      app/src/main/res/layout/view_welfare_position_desc.xml
  30. BIN
      app/src/main/res/mipmap-hdpi/ic_guide_1.png
  31. BIN
      app/src/main/res/mipmap-hdpi/ic_guide_2.png
  32. BIN
      app/src/main/res/mipmap-hdpi/ic_guide_3.png
  33. BIN
      app/src/main/res/mipmap-xhdpi/ic_guide_1.png
  34. BIN
      app/src/main/res/mipmap-xhdpi/ic_guide_2.png
  35. BIN
      app/src/main/res/mipmap-xhdpi/ic_guide_3.png
  36. BIN
      app/src/main/res/mipmap-xxhdpi/ic_guide_1.png
  37. BIN
      app/src/main/res/mipmap-xxhdpi/ic_guide_2.png
  38. BIN
      app/src/main/res/mipmap-xxhdpi/ic_guide_3.png
  39. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_guide_1.png
  40. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_guide_2.png
  41. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_guide_3.png
  42. 8 0
      app/src/main/res/values/strings.xml
  43. 8 0
      app/src/main/res/xml/file_paths.xml
  44. 10 1
      baselibrary/src/main/java/com/tongyu/luck/happywork/baselibrary/utils/SharedPreferencesUtils.java

+ 3 - 3
app/build.gradle

@@ -23,8 +23,8 @@ android {
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
         multiDexEnabled true
-        versionCode 9999999
-        versionName "3.0.0"
+        versionCode 300
+        versionName "3.0.1"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         flavorDimensions "versionCode"
 //        ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "arm64-v8a", "x86_64" }
@@ -67,7 +67,7 @@ android {
     //自动生成指定名称的release发布版的 apk文件
     android.applicationVariants.all { variant ->
         variant.outputs.all { output ->
-            outputFileName = "happyJob_${variant.productFlavors[0].name}_${buildType.getName()}_${defaultConfig.versionCode}.apk"
+            outputFileName = "happyJob_${variant.productFlavors[0].name}_${buildType.getName()}_${defaultConfig.versionName}.apk"
         }
     }
     buildTypes {

+ 2 - 2
app/server_url.properties

@@ -1,2 +1,2 @@
-proApiUrl="http://kf.hap-job.com/happyjob/"
-testApiUrl="http://kf.hap-job.com/happyjob/"
+proApiUrl="https://kf.hap-job.com/happyjob/"
+testApiUrl="https://kf.hap-job.com/happyjob/"

+ 5 - 0
app/src/hbpro/res/values/strings.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">开心工作</string>
+    <string name="install_name">hbpro_install</string>
+</resources>

+ 5 - 0
app/src/hbtest/res/values/strings.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">开心工作_T</string>
+    <string name="install_name">hbtest_install</string>
+</resources>

+ 21 - 0
app/src/main/AndroidManifest.xml

@@ -25,6 +25,8 @@
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <!-- 获取相机权限 -->
     <uses-permission android:name="android.permission.CAMERA" />
+    <!--下载通知权限-->
+    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
 
 
     <application
@@ -59,6 +61,9 @@
             android:name=".ui.activity.TipsActivity"
             android:screenOrientation="portrait" />
         <activity
+            android:name=".ui.activity.GuideActivity"
+            android:screenOrientation="portrait" />
+        <activity
             android:name=".ui.activity.BindingPhoneActivity"
             android:screenOrientation="portrait"
             android:windowSoftInputMode="stateHidden|adjustPan" />
@@ -181,6 +186,22 @@
         <meta-data
             android:name="WX_APPID"
             android:value="${WX_APPID_VALUE}" />
+        <!--app 更新-->
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="${applicationId}.update"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <!--元数据-->
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+        <receiver android:name=".broadcast.DownLoadBroadcastReceiver">
+            <intent-filter>
+                <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
+            </intent-filter>
+        </receiver>
     </application>
 
 </manifest>

+ 49 - 0
app/src/main/java/com/tongyu/luck/happywork/bean/VersionBean.java

@@ -0,0 +1,49 @@
+package com.tongyu.luck.happywork.bean;
+
+public class VersionBean {
+    private String title;
+    private String version;
+    private String description;
+    private String downUrl;
+    private boolean isForceUpdate;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getDownUrl() {
+        return downUrl;
+    }
+
+    public void setDownUrl(String downUrl) {
+        this.downUrl = downUrl;
+    }
+
+    public boolean isForceUpdate() {
+        return isForceUpdate;
+    }
+
+    public void setIsForceUpdate(boolean isForceUpdate) {
+        this.isForceUpdate = isForceUpdate;
+    }
+}

+ 24 - 0
app/src/main/java/com/tongyu/luck/happywork/bean/api/ApiCheckVersion.java

@@ -0,0 +1,24 @@
+package com.tongyu.luck.happywork.bean.api;
+
+import com.tongyu.luck.happywork.bean.VersionBean;
+
+public class ApiCheckVersion {
+    private boolean isLatest;
+    private VersionBean hpVersion;
+
+    public boolean isLatest() {
+        return isLatest;
+    }
+
+    public void setLatest(boolean latest) {
+        isLatest = latest;
+    }
+
+    public VersionBean getHpVersion() {
+        return hpVersion;
+    }
+
+    public void setHpVersion(VersionBean hpVersion) {
+        this.hpVersion = hpVersion;
+    }
+}

+ 31 - 0
app/src/main/java/com/tongyu/luck/happywork/broadcast/DownLoadBroadcastReceiver.java

@@ -0,0 +1,31 @@
+package com.tongyu.luck.happywork.broadcast;
+
+import android.annotation.SuppressLint;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+
+import com.tongyu.luck.happywork.baselibrary.utils.SharedPreferencesUtils;
+
+/**
+ * 监听下载广播如果是本APP更新版本下载则跳出安装界面
+ */
+public class DownLoadBroadcastReceiver extends BroadcastReceiver {
+
+    @SuppressLint("NewApi")
+    public void onReceive(Context context, Intent intent) {
+        long myDwonloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
+        long refernece = SharedPreferencesUtils.getAppUpdateDownloadId(context);
+        if (refernece == myDwonloadID) {
+            String serviceString = Context.DOWNLOAD_SERVICE;
+            DownloadManager dManager = (DownloadManager) context.getSystemService(serviceString);
+            Intent install = new Intent(Intent.ACTION_VIEW);
+            Uri downloadFileUri = dManager.getUriForDownloadedFile(myDwonloadID);
+            install.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");
+            install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(install);
+        }
+    }
+}

+ 4 - 0
app/src/main/java/com/tongyu/luck/happywork/http/Api.java

@@ -6,6 +6,7 @@ import com.tongyu.luck.happywork.bean.api.ApiApplyListBean;
 import com.tongyu.luck.happywork.bean.api.ApiApproveBean;
 import com.tongyu.luck.happywork.bean.api.ApiAssembleDetailBean;
 import com.tongyu.luck.happywork.bean.api.ApiAssembleRequestBean;
+import com.tongyu.luck.happywork.bean.api.ApiCheckVersion;
 import com.tongyu.luck.happywork.bean.api.ApiFavoriteBean;
 import com.tongyu.luck.happywork.bean.api.ApiFavoriteListBean;
 import com.tongyu.luck.happywork.bean.api.ApiFullListBean;
@@ -152,6 +153,9 @@ public class Api {
         @POST("f/api/message/clearMyMessage")
         Observable<ApiResultBean<ApiNormalBean>> clearMessage(@Body Map<String, Object> args);
 
+        //检查更新
+        @GET("f/api/message/checkVersion")
+        Observable<ApiResultBean<ApiCheckVersion>> checkVersion(@QueryMap Map<String, Object> args);
     }
 
     public interface UserInterface {

+ 13 - 0
app/src/main/java/com/tongyu/luck/happywork/http/subscribe/MessageSubscribe.java

@@ -2,6 +2,7 @@ package com.tongyu.luck.happywork.http.subscribe;
 
 import android.content.Context;
 
+import com.tongyu.luck.happywork.bean.api.ApiCheckVersion;
 import com.tongyu.luck.happywork.bean.api.ApiMsgBean;
 import com.tongyu.luck.happywork.bean.api.ApiMsgDetailBean;
 import com.tongyu.luck.happywork.bean.api.ApiNormalBean;
@@ -56,5 +57,17 @@ public class MessageSubscribe extends BaseSubscribe {
         subscribe(observable, mObservable);
     }
 
+    /**
+     * 清理消息
+     *
+     * @param args
+     * @param mObservable
+     */
+    public void requestCheckVersion(Map<String, Object> args, ApiObserver<ApiCheckVersion> mObservable) {
+        Api.MessageInterface apiService = ServiceGenerator.createService(Api.MessageInterface.class);
+        Observable<ApiResultBean<ApiCheckVersion>> observable = apiService.checkVersion(args);
+        subscribe(observable, mObservable);
+    }
+
 
 }

+ 114 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/activity/GuideActivity.java

@@ -0,0 +1,114 @@
+package com.tongyu.luck.happywork.ui.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.TextView;
+
+import com.tongyu.luck.happywork.AppCacheManager;
+import com.tongyu.luck.happywork.R;
+import com.tongyu.luck.happywork.ui.adapter.viewpager.GuidePageAdapter;
+import com.tongyu.luck.happywork.ui.base.BaseActivity;
+import com.tongyu.luck.happywork.ui.base.IPresenter;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+import butterknife.OnPageChange;
+
+/**
+ * 引导页-MVC
+ */
+public class GuideActivity extends BaseActivity {
+    @BindView(R.id.vp_guide)
+    ViewPager vpGuide;
+    @BindView(R.id.tv_jump)
+    TextView tvJump;
+    @BindView(R.id.tv_next)
+    TextView tvNext;
+    @BindView(R.id.v_1)
+    View v1;
+    @BindView(R.id.v_2)
+    View v2;
+    @BindView(R.id.v_3)
+    View v3;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_guide;
+    }
+
+    @Override
+    public IPresenter bindPresenter() {
+        return null;
+    }
+
+    @Override
+    public boolean isShowActionBar() {
+        return false;
+    }
+
+    @Override
+    public boolean isShowStatusTitle() {
+        return false;
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initView();
+    }
+
+    private void initView() {
+        vpGuide.setAdapter(new GuidePageAdapter(mContext));
+        initPageStrip();
+    }
+
+    @OnClick({R.id.tv_jump, R.id.tv_next})
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_jump:
+                goJump();
+                break;
+            case R.id.tv_next:
+                if (vpGuide.getCurrentItem() < 2) {
+                    vpGuide.setCurrentItem(vpGuide.getCurrentItem() + 1);
+                } else {
+                    goJump();
+                }
+                break;
+        }
+    }
+
+
+    @OnPageChange(R.id.vp_guide)
+    public void onPageSelected(int i) {
+        initPageStrip();
+    }
+
+    /**
+     * 指示条状态
+     */
+    private void initPageStrip() {
+        int position = vpGuide.getCurrentItem();
+        v1.setSelected(false);
+        v2.setSelected(false);
+        v3.setSelected(false);
+        if (position == 0)
+            v1.setSelected(true);
+        else if (position == 1)
+            v2.setSelected(true);
+        else
+            v3.setSelected(true);
+
+    }
+
+    private void goJump() {
+        if (AppCacheManager.getInstance().isLogin()) {
+            startActivity(new Intent(mContext, MainActivity.class));
+        } else {
+            startActivity(new Intent(mContext, LoginActivity.class));
+        }
+        finish();
+    }
+}

+ 1 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/activity/MainActivity.java

@@ -41,6 +41,7 @@ public class MainActivity extends BaseActivity<MainPresenter> implements MainCon
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         EventBus.getDefault().register(this);
+        mvpPresenter.checkUpdate();
         mvpPresenter.getTabItem(rlHome, rlAssemble, rlMsg, rlMe);
     }
 

+ 2 - 2
app/src/main/java/com/tongyu/luck/happywork/ui/activity/StartActivity.java

@@ -68,12 +68,12 @@ public class StartActivity extends BaseActivity {
         if (isJump)
             return;
         isJump = true;
+        startActivity(new Intent(mContext, GuideActivity.class));
         if (AppCacheManager.getInstance().isLogin()) {
             startActivity(new Intent(mContext, MainActivity.class));
         } else {
             if (SharedPreferencesUtils.isHistoryFirstLogin(mContext)) {
-                //TODO 引导页
-                startActivity(new Intent(mContext, LoginActivity.class));
+                startActivity(new Intent(mContext, GuideActivity.class));
             } else {
                 startActivity(new Intent(mContext, LoginActivity.class));
             }

+ 2 - 3
app/src/main/java/com/tongyu/luck/happywork/ui/activity/job/WelfareJobDetailActivity.java

@@ -12,7 +12,6 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.tongyu.luck.happywork.BuildConfig;
 import com.tongyu.luck.happywork.R;
 import com.tongyu.luck.happywork.baselibrary.IntentConstant;
 import com.tongyu.luck.happywork.baselibrary.imageloader.ImageLoaderUtil;
@@ -92,7 +91,7 @@ public class WelfareJobDetailActivity extends BaseActivity<WelfareJobDetailPrese
             setErrorVisible(false);
             //头图片
             if (!TextUtils.isEmpty(bean.getTitleImg())) {
-                ImageLoaderUtil.getInstance().loadCircleImage(BuildConfig.baseApiUrl + bean.getTitleImg(), ivHeader);
+                ImageLoaderUtil.getInstance().loadImage(bean.getTitleImg(), ivHeader);
             } else {
                 ivHeader.setVisibility(View.GONE);
             }
@@ -264,7 +263,7 @@ public class WelfareJobDetailActivity extends BaseActivity<WelfareJobDetailPrese
                 wvDesc.setVisibility(View.GONE);
             }
             if (!TextUtils.isEmpty(imgUrl)) {
-                ImageLoaderUtil.getInstance().loadImage(BuildConfig.baseApiUrl + imgUrl, ivDesc);
+                ImageLoaderUtil.getInstance().loadRoundImage(imgUrl, 8, ivDesc);
             } else {
                 ivDesc.setVisibility(View.GONE);
             }

+ 6 - 4
app/src/main/java/com/tongyu/luck/happywork/ui/activity/mine/SettingActivity.java

@@ -17,7 +17,8 @@ import com.tongyu.luck.happywork.baselibrary.utils.ToastUtils;
 import com.tongyu.luck.happywork.event.StringEvent;
 import com.tongyu.luck.happywork.ui.activity.StartActivity;
 import com.tongyu.luck.happywork.ui.base.BaseActivity;
-import com.tongyu.luck.happywork.ui.base.IPresenter;
+import com.tongyu.luck.happywork.ui.contacts.SettingContacts;
+import com.tongyu.luck.happywork.ui.presenter.SettingPresenter;
 import com.tongyu.luck.happywork.ui.widget.dialog.ClearDialog;
 import com.tongyu.luck.happywork.ui.widget.dialog.SureDialog;
 import com.tongyu.luck.happywork.utils.FileUtils;
@@ -32,7 +33,7 @@ import butterknife.OnClick;
 /**
  * 设置类
  */
-public class SettingActivity extends BaseActivity {
+public class SettingActivity extends BaseActivity<SettingPresenter> implements SettingContacts.ISettingView {
     @BindView(R.id.ll_clear_cache)
     LinearLayout llClearCache;
     @BindView(R.id.tv_version)
@@ -55,8 +56,8 @@ public class SettingActivity extends BaseActivity {
     }
 
     @Override
-    public IPresenter bindPresenter() {
-        return null;
+    public SettingPresenter bindPresenter() {
+        return new SettingPresenter(this);
     }
 
     @OnClick({R.id.ll_clear_cache, R.id.ll_about_us, R.id.ll_msg, R.id.ll_version_update, R.id.btn_logout})
@@ -76,6 +77,7 @@ public class SettingActivity extends BaseActivity {
                 startActivity(new Intent(mContext, MsgSettingActivity.class));
                 break;
             case R.id.ll_version_update:
+                mvpPresenter.checkUpdate();
                 break;
             case R.id.btn_logout:
                 if (mSureDialog == null) {

+ 51 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/adapter/viewpager/GuidePageAdapter.java

@@ -0,0 +1,51 @@
+package com.tongyu.luck.happywork.ui.adapter.viewpager;
+
+import android.content.Context;
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.tongyu.luck.happywork.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GuidePageAdapter extends PagerAdapter {
+    List<ImageView> viewList;
+
+    public GuidePageAdapter(Context context) {
+        viewList = new ArrayList<>();
+        ImageView imageView1 = new ImageView(context);
+        imageView1.setImageResource(R.mipmap.ic_guide_1);
+        ImageView imageView2 = new ImageView(context);
+        imageView2.setImageResource(R.mipmap.ic_guide_2);
+        ImageView imageView3 = new ImageView(context);
+        imageView3.setImageResource(R.mipmap.ic_guide_3);
+        viewList.add(imageView1);
+        viewList.add(imageView2);
+        viewList.add(imageView3);
+    }
+
+    @Override
+    public Object instantiateItem(ViewGroup container, int position) {//当前滑动到的ViewPager页面
+        View view = viewList.get(position);
+        container.addView(view);
+        return view;
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {//每次划出当前页面的时候就销毁
+        container.removeView(viewList.get(position));
+    }
+
+    @Override
+    public int getCount() {//设置ViewPager有几个滑动页面
+        return viewList.size();
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object object) {
+        return view == object;//官方固定写法
+    }
+}

+ 5 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/contacts/MainContacts.java

@@ -4,6 +4,8 @@ import android.content.Context;
 import android.view.View;
 
 import com.tongyu.luck.happywork.bean.TabItemBean;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
 import com.tongyu.luck.happywork.ui.base.IPresenter;
 import com.tongyu.luck.happywork.ui.base.IView;
 
@@ -20,10 +22,13 @@ public class MainContacts {
         void getTabItem(View... mLayoutViews);//获取首页的TabItemBean
 
         void checkQuit();//检查退出
+
+        void checkUpdate();
     }
 
     public interface IMainModel {
         List<TabItemBean> getTabItem(Context mContext, View... mLayoutViews);
 
+        void httpCheckUpdate(MvpDataCallBack<VersionBean> callBack);
     }
 }

+ 21 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/contacts/SettingContacts.java

@@ -0,0 +1,21 @@
+package com.tongyu.luck.happywork.ui.contacts;
+
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
+import com.tongyu.luck.happywork.ui.base.IPresenter;
+import com.tongyu.luck.happywork.ui.base.IView;
+
+public class SettingContacts {
+    public interface ISettingView extends IView {
+
+    }
+
+    public interface ISettingPresenter extends IPresenter {
+        void checkUpdate();
+    }
+
+    public interface ISettingModel {
+
+        void httpCheckUpdate(MvpDataCallBack<VersionBean> callBack);
+    }
+}

+ 36 - 1
app/src/main/java/com/tongyu/luck/happywork/ui/model/MainModel.java

@@ -4,16 +4,28 @@ import android.content.Context;
 import android.view.View;
 
 import com.tongyu.luck.happywork.R;
+import com.tongyu.luck.happywork.baselibrary.utils.AppUtils;
 import com.tongyu.luck.happywork.bean.TabItemBean;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.bean.api.ApiCheckVersion;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
+import com.tongyu.luck.happywork.http.ApiObserver;
+import com.tongyu.luck.happywork.http.RetrofitHttpParams;
+import com.tongyu.luck.happywork.http.subscribe.MessageSubscribe;
+import com.tongyu.luck.happywork.ui.base.BaseModel;
 import com.tongyu.luck.happywork.ui.contacts.MainContacts;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class MainModel implements MainContacts.IMainModel {
+public class MainModel extends BaseModel implements MainContacts.IMainModel {
 
     private List<TabItemBean> mTabList;
 
+    public MainModel(Context mContext) {
+        super(mContext);
+    }
+
     @Override
     public List<TabItemBean> getTabItem(Context mContext, View... mLayoutViews) {
         if (mTabList == null) {
@@ -28,4 +40,27 @@ public class MainModel implements MainContacts.IMainModel {
         return mTabList;
     }
 
+    /**
+     * 检查最新版本号
+     *
+     * @param callBack
+     */
+    @Override
+    public void httpCheckUpdate(final MvpDataCallBack<VersionBean> callBack) {
+        RetrofitHttpParams params = new RetrofitHttpParams(mContext);
+        params.put("version", AppUtils.getVersionName(mContext));
+        params.put("app_system", 0);//表示Android系统
+        new MessageSubscribe(mContext).requestCheckVersion(params.getRequestParams(), new ApiObserver<ApiCheckVersion>(mContext, true) {
+            @Override
+            public void onSuccess(ApiCheckVersion data) {
+                if (data != null && !data.isLatest() && data.getHpVersion() != null) {
+                    callBack.onData(data.getHpVersion());
+                }
+            }
+
+            @Override
+            public void onFinish() {
+            }
+        });
+    }
 }

+ 45 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/model/SettingModel.java

@@ -0,0 +1,45 @@
+package com.tongyu.luck.happywork.ui.model;
+
+import android.content.Context;
+
+import com.tongyu.luck.happywork.baselibrary.utils.AppUtils;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.bean.api.ApiCheckVersion;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
+import com.tongyu.luck.happywork.http.ApiObserver;
+import com.tongyu.luck.happywork.http.RetrofitHttpParams;
+import com.tongyu.luck.happywork.http.subscribe.MessageSubscribe;
+import com.tongyu.luck.happywork.ui.base.BaseModel;
+import com.tongyu.luck.happywork.ui.contacts.SettingContacts;
+
+public class SettingModel extends BaseModel implements SettingContacts.ISettingModel {
+    public SettingModel(Context mContext) {
+        super(mContext);
+    }
+
+    /**
+     * 检查最新版本号
+     *
+     * @param callBack
+     */
+    @Override
+    public void httpCheckUpdate(final MvpDataCallBack<VersionBean> callBack) {
+        RetrofitHttpParams params = new RetrofitHttpParams(mContext);
+        params.put("version", AppUtils.getVersionName(mContext));
+        params.put("app_system", 0);//表示Android系统
+        new MessageSubscribe(mContext).requestCheckVersion(params.getRequestParams(), new ApiObserver<ApiCheckVersion>(mContext, true) {
+            @Override
+            public void onSuccess(ApiCheckVersion data) {
+                if (data != null && !data.isLatest() && data.getHpVersion() != null) {
+                    callBack.onData(data.getHpVersion());
+                } else {
+                    callBack.onError();
+                }
+            }
+
+            @Override
+            public void onFinish() {
+            }
+        });
+    }
+}

+ 20 - 1
app/src/main/java/com/tongyu/luck/happywork/ui/presenter/MainPresenter.java

@@ -5,10 +5,13 @@ import android.view.View;
 
 import com.tongyu.luck.happywork.R;
 import com.tongyu.luck.happywork.baselibrary.utils.ToastUtils;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
 import com.tongyu.luck.happywork.ui.activity.MainActivity;
 import com.tongyu.luck.happywork.ui.base.BasePresenter;
 import com.tongyu.luck.happywork.ui.contacts.MainContacts;
 import com.tongyu.luck.happywork.ui.model.MainModel;
+import com.tongyu.luck.happywork.ui.widget.dialog.UpdateAppDialog;
 
 import java.util.concurrent.TimeUnit;
 
@@ -24,7 +27,7 @@ public class MainPresenter extends BasePresenter<MainActivity> implements MainCo
 
     public MainPresenter(MainActivity view) {
         super(view);
-        this.mMainModel = new MainModel();
+        this.mMainModel = new MainModel(mvpReference.get());
     }
 
     @Override
@@ -71,4 +74,20 @@ public class MainPresenter extends BasePresenter<MainActivity> implements MainCo
                         });
             }
     }
+
+    /**
+     * 检查更新
+     */
+    @Override
+    public void checkUpdate() {
+        if (isViewAttach()) {
+            mMainModel.httpCheckUpdate(new MvpDataCallBack<VersionBean>() {
+                @Override
+                public void onData(VersionBean data) {
+                    if (isViewAttach())
+                        new UpdateAppDialog(mvpReference.get(), data).show();
+                }
+            });
+        }
+    }
 }

+ 42 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/presenter/SettingPresenter.java

@@ -0,0 +1,42 @@
+package com.tongyu.luck.happywork.ui.presenter;
+
+import com.tongyu.luck.happywork.R;
+import com.tongyu.luck.happywork.baselibrary.utils.ToastUtils;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.callback.MvpDataCallBack;
+import com.tongyu.luck.happywork.ui.activity.mine.SettingActivity;
+import com.tongyu.luck.happywork.ui.base.BasePresenter;
+import com.tongyu.luck.happywork.ui.contacts.SettingContacts;
+import com.tongyu.luck.happywork.ui.model.SettingModel;
+import com.tongyu.luck.happywork.ui.widget.dialog.UpdateAppDialog;
+
+public class SettingPresenter extends BasePresenter<SettingActivity> implements SettingContacts.ISettingPresenter {
+    private SettingModel mSettingModel;
+
+    public SettingPresenter(SettingActivity view) {
+        super(view);
+        this.mSettingModel = new SettingModel(mvpReference.get());
+    }
+
+    /**
+     * 检查更新
+     */
+    @Override
+    public void checkUpdate() {
+        if (isViewAttach()) {
+            mSettingModel.httpCheckUpdate(new MvpDataCallBack<VersionBean>() {
+                @Override
+                public void onData(VersionBean data) {
+                    if (isViewAttach())
+                        new UpdateAppDialog(mvpReference.get(), data).show();
+                }
+
+                @Override
+                public void onError() {
+                    if (isViewAttach())
+                        ToastUtils.show(mvpReference.get(), R.string.toast_is_new_version);
+                }
+            });
+        }
+    }
+}

+ 239 - 0
app/src/main/java/com/tongyu/luck/happywork/ui/widget/dialog/UpdateAppDialog.java

@@ -0,0 +1,239 @@
+package com.tongyu.luck.happywork.ui.widget.dialog;
+
+import android.app.Dialog;
+import android.app.DownloadManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.os.Handler;
+import android.support.v4.content.FileProvider;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.webkit.MimeTypeMap;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.tongyu.luck.happywork.R;
+import com.tongyu.luck.happywork.baselibrary.utils.AppUtils;
+import com.tongyu.luck.happywork.baselibrary.utils.SharedPreferencesUtils;
+import com.tongyu.luck.happywork.baselibrary.utils.ToastUtils;
+import com.tongyu.luck.happywork.bean.VersionBean;
+import com.tongyu.luck.happywork.ui.base.BaseViewHolder;
+import com.tongyu.luck.happywork.utils.FileUtils;
+
+import java.io.File;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class UpdateAppDialog {
+    private Context mContext;
+    private Dialog mDialog;
+    private ViewHolder mViewHolder;
+
+    /**
+     * 构造函数(初始化ViewHolder,Dialog)
+     *
+     * @param context 上下文
+     */
+    public UpdateAppDialog(final Context context, VersionBean mBean) {
+        this.mContext = context;
+        mDialog = new Dialog(mContext, R.style.HappyJobDialog);
+        mViewHolder = new ViewHolder(mContext, mBean);
+        mDialog.setContentView(mViewHolder.getView());
+
+    }
+
+    /**
+     * 显示弹窗
+     */
+    public void show() {
+        if (mDialog != null && !mDialog.isShowing())
+            mDialog.show();
+    }
+
+    /**
+     * Dialog ViewHolder
+     */
+    class ViewHolder extends BaseViewHolder {
+
+
+        @BindView(R.id.tv_content)
+        TextView tvContent;
+        @BindView(R.id.btn_update)
+        Button btnUpdate;
+
+        private VersionBean mBean;
+        private String mDownloadFileName;
+        private DownloadManager mManager;
+        private DownloadChangeObserver downloadObserver;
+        private final String DOWNLOAD_DIR_TYPE = Environment.DIRECTORY_DOWNLOADS;
+        private final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads");
+
+        public ViewHolder(Context context, VersionBean mBean) {
+            super(context);
+            this.mBean = mBean;
+            initView();
+        }
+
+        @Override
+        public int bindViewLayoutId() {
+            return R.layout.dialog_update_app;
+        }
+
+        @OnClick(R.id.btn_update)
+        void onClick(View view) {
+            updateApk();
+            if (!mBean.isForceUpdate())
+                mDialog.dismiss();
+        }
+
+        public void initView() {
+            if (mBean != null) {
+                mDialog.setCancelable(!mBean.isForceUpdate());
+                mDialog.setCanceledOnTouchOutside(!mBean.isForceUpdate());
+                if (!TextUtils.isEmpty(mBean.getDescription()))
+                    tvContent.setText(Html.fromHtml(mBean.getDescription()));
+                else
+                    tvContent.setText("");
+            }
+        }
+
+
+        /**
+         * 安装
+         *
+         * @param file
+         */
+        public void doInstall(File file) {
+            if (Build.VERSION.SDK_INT >= 24) {
+                Uri apkUri = FileProvider.getUriForFile(mContext, AppUtils.getPackageName(mContext) + ".update", file);
+                Intent intent = new Intent(Intent.ACTION_VIEW);
+                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                mContext.grantUriPermission(AppUtils.getPackageName(mContext), Uri.fromFile(file), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
+                mContext.startActivity(intent);
+            } else {
+                Intent intent = new Intent(Intent.ACTION_VIEW);
+                intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
+                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                mContext.startActivity(intent);
+            }
+        }
+
+        /**
+         * 检查文件是否下载
+         *
+         * @param file
+         * @param isInstall
+         * @return
+         */
+        private boolean doCheckFile(File file, boolean isInstall) {
+            PackageManager pm = mContext.getPackageManager();
+            String packageName = mContext.getPackageName();
+            PackageInfo piNew = pm.getPackageArchiveInfo(file.getPath(), 0);
+            if (piNew != null) {
+                if (piNew.packageName.equals(packageName)
+                        && piNew.versionName.equals(mBean.getVersion())) {
+                    if (isInstall)
+                        doInstall(file);
+                    return true;
+                }
+            }
+            file.delete();
+            return false;
+        }
+
+        /**
+         * 更新APK
+         */
+        private void updateApk() {
+            mDownloadFileName = mContext.getString(R.string.install_name) + ".apk";
+            String url = mBean.getDownUrl();
+            if (!TextUtils.isEmpty(mBean.getDownUrl())) {
+                String file = getDownloadFileName();
+                if (FileUtils.isFileExit(file)) {
+                    if (doCheckFile(new File(file), true)) {
+                        return;
+                    }
+                }
+                if (TextUtils.isEmpty(url)) {
+                    return;
+                }
+                mManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
+                downloadObserver = new DownloadChangeObserver(null);
+                long downloadId = SharedPreferencesUtils.getAppUpdateDownloadId(mContext);
+                if (downloadId != 0) {
+                    if (mManager != null) {
+                        mManager.remove(downloadId);
+                    }
+                    SharedPreferencesUtils.remove(mContext, SharedPreferencesUtils.APP_UPDATE_DOWNLOAD_ID);
+                }
+                Uri res = Uri.parse(url);
+                DownloadManager.Request request = new DownloadManager.Request(res);
+                request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
+                request.setAllowedOverRoaming(false);
+
+                // 设置文件类型
+                MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
+                String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap
+                        .getFileExtensionFromUrl(url));
+                request.setMimeType(mimeString);
+                // 在通知栏中显示
+                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
+                request.setVisibleInDownloadsUi(true);
+                request.allowScanningByMediaScanner();
+                // sdcard的目录下的download文件夹
+                request.setDestinationInExternalPublicDir(DOWNLOAD_DIR_TYPE,
+                        mDownloadFileName);
+                String title = mContext.getString(R.string.app_name);
+                request.setTitle(title);
+                try {
+                    long id = mManager.enqueue(request);
+                    SharedPreferencesUtils.setAppUpdateDownloadId(mContext, id);
+                    ToastUtils.show(mContext, R.string.download_start);
+                } catch (IllegalArgumentException e) {
+                    ToastUtils.show(mContext, R.string.download_disabled_hint);
+                }
+                mContext.getContentResolver().registerContentObserver(CONTENT_URI, true, downloadObserver);
+            }
+        }
+
+        /**
+         * 下载文件名
+         *
+         * @return
+         */
+        private String getDownloadFileName() {
+            File f = Environment
+                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+            if (!f.exists()) {
+                f.mkdirs();
+            }
+            return f.getAbsolutePath() + File.separator + mContext.getString(R.string.install_name) + ".apk";
+        }
+
+        /**
+         * 下载状态改变回调
+         */
+        class DownloadChangeObserver extends ContentObserver {
+
+            public DownloadChangeObserver(Handler handler) {
+                super(handler);
+            }
+
+            @Override
+            public void onChange(boolean selfChange) {
+            }
+        }
+
+    }
+
+}

+ 5 - 0
app/src/main/res/drawable/corners_blue_17_5dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="17.5dp" />
+    <solid android:color="@color/text_blue" />
+</shape>

+ 8 - 0
app/src/main/res/drawable/corners_guide_banner_type.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/corners_blue_3dp" android:state_pressed="true" />
+    <item android:drawable="@drawable/corners_blue_3dp" android:state_checked="true" />
+    <item android:drawable="@drawable/corners_blue_3dp" android:state_selected="true" />
+    <item android:drawable="@drawable/corners_gray_text_3dp" android:state_enabled="false" />
+    <item android:drawable="@drawable/corners_gray_text_3dp"/>
+</selector>

+ 70 - 0
app/src/main/res/layout/activity_guide.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/white">
+
+
+    <android.support.v4.view.ViewPager
+        android:id="@+id/vp_guide"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="48dp"
+        android:paddingLeft="35dp"
+        android:paddingRight="35dp">
+
+        <TextView
+            android:id="@+id/tv_jump"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="10dp"
+            android:text="@string/jump"
+            android:textColor="@color/text_dark_gray2"
+            android:textSize="@dimen/px39_13sp" />
+
+        <TextView
+            android:id="@+id/tv_next"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:padding="10dp"
+            android:text="@string/next"
+            android:textColor="@color/text_blue"
+            android:textSize="@dimen/px39_13sp" />
+
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:orientation="horizontal">
+
+            <View
+                android:id="@+id/v_1"
+                android:layout_width="6dp"
+                android:layout_height="6dp"
+                android:background="@drawable/corners_guide_banner_type" />
+
+            <View
+                android:id="@+id/v_2"
+                android:layout_width="6dp"
+                android:layout_height="6dp"
+                android:layout_marginLeft="11dp"
+                android:background="@drawable/corners_guide_banner_type" />
+
+            <View
+                android:id="@+id/v_3"
+                android:layout_width="6dp"
+                android:layout_height="6dp"
+                android:layout_marginLeft="11dp"
+                android:background="@drawable/corners_guide_banner_type" />
+
+        </LinearLayout>
+    </RelativeLayout>
+
+</RelativeLayout>

+ 1 - 1
app/src/main/res/layout/activity_welfare_job_detail.xml

@@ -19,7 +19,7 @@
             <ImageView
                 android:id="@+id/iv_header"
                 android:layout_width="match_parent"
-                android:layout_height="197dp" />
+                android:layout_height="wrap_content" />
 
             <TextView
                 android:id="@+id/tv_title"

+ 56 - 0
app/src/main/res/layout/dialog_update_app.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_horizontal"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="302dp"
+        android:layout_height="wrap_content"
+        android:background="@drawable/corners_white_12dp"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="30dp"
+            android:text="@string/have_new_version"
+            android:textColor="@color/text_blue"
+            android:textSize="@dimen/px63_21sp" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="69dp"
+            android:layout_marginTop="34dp"
+            android:text="@string/version_content"
+            android:textColor="@color/text_dark_black"
+            android:textSize="@dimen/px42_14sp" />
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="69dp"
+            android:layout_marginTop="5dp"
+            android:layout_marginRight="69dp"
+            android:textColor="@color/text_light_black"
+            android:textSize="@dimen/px42_14sp" />
+
+        <Button
+            android:id="@+id/btn_update"
+            android:layout_width="223dp"
+            android:layout_height="35dp"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="48dp"
+            android:layout_marginBottom="25dp"
+            android:background="@drawable/corners_blue_17_5dp"
+            android:text="@string/update_now"
+            android:textColor="@color/white"
+            android:textSize="@dimen/px45_15sp" />
+
+
+    </LinearLayout>
+</LinearLayout>

+ 2 - 1
app/src/main/res/layout/view_welfare_position_desc.xml

@@ -27,7 +27,8 @@
 
     <ImageView
         android:id="@+id/iv_desc"
+        android:scaleType="fitXY"
         android:layout_width="match_parent"
-        android:layout_height="180dp"
+        android:layout_height="wrap_content"
         android:layout_marginTop="18dp" />
 </LinearLayout>

BIN
app/src/main/res/mipmap-hdpi/ic_guide_1.png


BIN
app/src/main/res/mipmap-hdpi/ic_guide_2.png


BIN
app/src/main/res/mipmap-hdpi/ic_guide_3.png


BIN
app/src/main/res/mipmap-xhdpi/ic_guide_1.png


BIN
app/src/main/res/mipmap-xhdpi/ic_guide_2.png


BIN
app/src/main/res/mipmap-xhdpi/ic_guide_3.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_guide_1.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_guide_2.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_guide_3.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_guide_1.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_guide_2.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_guide_3.png


+ 8 - 0
app/src/main/res/values/strings.xml

@@ -12,6 +12,8 @@
     <string name="save">保存</string>
     <string name="back">返回</string>
     <string name="submit">提交</string>
+    <string name="jump">跳过</string>
+    <string name="next">下一个</string>
     <string name="start_user">开启加薪之旅</string>
     <string name="submit_feed_back">提交意见反馈</string>
     <string name="submit_data_success">资料提交成功</string>
@@ -88,6 +90,11 @@
     <string name="init_now">立刻填写</string>
     <string name="wait_a_moment">稍后再说</string>
     <string name="cache_clear">已清除缓存</string>
+    <string name="have_new_version">现已有新的可用版本</string>
+    <string name="version_content">更新内容:</string>
+    <string name="download_disabled_hint">系统下载管理不可用,请打开后重试</string>
+    <string name="download_start">开始下载</string>
+    <string name="update_now">立即升级</string>
 
     <string name="hint_click_input_name">点击输入姓名</string>
     <string name="hint_choose_gender">选择性别</string>
@@ -271,6 +278,7 @@
     <string name="toast_had_join_assemble">您已加入拼工,不能重复加入</string>
     <string name="toast_real_name_success">已认证</string>
     <string name="toast_request_success">申请成功</string>
+    <string name="toast_is_new_version">已是最新版本</string>
 
     <string name="tab_home">首页</string>
     <string name="tab_assemble">拼工</string>

+ 8 - 0
app/src/main/res/xml/file_paths.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <paths>
+        <external-path
+            name="download"
+            path="" />
+    </paths>
+</resources>

+ 10 - 1
baselibrary/src/main/java/com/tongyu/luck/happywork/baselibrary/utils/SharedPreferencesUtils.java

@@ -14,6 +14,7 @@ public class SharedPreferencesUtils {
     public static final String LOCATION_CITY_JSON_DATA = "location_city_json_data";//选择所在城市Json数据
     public static final String HISTORY_SEARCH_POSITION = "history_search_position";//岗位搜索历史
     public static final String HISTORY_APP_VERSION = "history_app_version";//历史版本号
+    public static final String APP_UPDATE_DOWNLOAD_ID = "app_update_download_id";//app更新下载ID
 
     public static void setCameraImageFile(Context context, String tag) {
         saveData(context, CAMERA_IMAGE_FILE, tag);
@@ -56,6 +57,14 @@ public class SharedPreferencesUtils {
         return (String) getData(context, HISTORY_SEARCH_POSITION, "");
     }
 
+    public static void setAppUpdateDownloadId(Context context, long id) {
+        saveData(context, APP_UPDATE_DOWNLOAD_ID, id);
+    }
+
+    public static long getAppUpdateDownloadId(Context context) {
+        return (long) getData(context, APP_UPDATE_DOWNLOAD_ID, 0L);
+    }
+
     /**
      * 设置登录版本号
      *
@@ -162,7 +171,7 @@ public class SharedPreferencesUtils {
      * @param key
      * @return
      */
-    private static boolean remove(Context context, String key) {
+    public static boolean remove(Context context, String key) {
         return context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE).edit().remove(key).commit();
     }
 }