From cd4ba088fc6e964d2ac585dd1cd8790131707648 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Sat, 11 Feb 2023 20:41:36 +0800 Subject: [PATCH] =?UTF-8?q?version:1.1=20fix:=20update:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +- app/keystore/TeclastMTK12.jks | Bin 2553 -> 0 bytes app/keystore/tuixin.jks | Bin 0 -> 2064 bytes app/src/main/AndroidManifest.xml | 48 ++- ...MainPresenter.java => MainAPresenter.java} | 8 +- .../uiui/zyos/activity/main/MainActivity.java | 99 +----- .../com/uiui/zyos/base/BaseApplication.java | 26 +- .../com/uiui/zyos/bean/UserAvatarInfo.java | 48 ++- .../zyos/fragment/chinese/ChineseContact.java | 4 +- .../fragment/chinese/ChineseFragment.java | 27 +- .../fragment/chinese/ChinesePresenter.java | 4 +- .../uiui/zyos/fragment/main/MainContact.java | 14 + .../zyos/fragment/main/MainFPresenter.java | 39 +++ .../uiui/zyos/fragment/main/MainFragment.java | 159 +++++++++ .../uiui/zyos/fragment/user/UserFragment.java | 65 ++++ .../com/uiui/zyos/manager/RemoteManager.java | 36 ++- .../com/uiui/zyos/network/UrlAddress.java | 7 +- .../com/uiui/zyos/network/api/SNInfoApi.java | 16 + .../zyos/network/api/UserInfoControl.java | 18 ++ .../java/com/uiui/zyos/push/PushManager.java | 60 ++++ .../push/alipush/AliMessageIntentService.java | 99 ++++++ .../push/alipush/AliyunMessageReceiver.java | 116 +++++++ .../uiui/zyos/{ => push}/tpush/Constants.java | 2 +- .../{ => push}/tpush/MessageReceiver.java | 23 +- .../{ => push}/tpush/common/DBOpenHelper.java | 2 +- .../tpush/common/NotificationService.java | 4 +- .../{ => push}/tpush/po/XGNotification.java | 2 +- .../main/java/com/uiui/zyos/utils/Utils.java | 48 +-- .../main/res/drawable-hdpi/default_avatar.png | Bin 0 -> 7777 bytes .../main/res/layout-land/activity_main.xml | 286 +---------------- .../main/res/layout-land/fragment_main.xml | 302 ++++++++++++++++++ .../main/res/layout-land/fragment_user.xml | 60 ++++ .../main/res/layout-port/activity_main.xml | 30 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3781 -> 5136 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3781 -> 5136 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 3781 -> 5136 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 3781 -> 5136 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 3781 -> 5136 bytes app/src/main/res/values/strings.xml | 7 +- build.gradle | 5 +- 40 files changed, 1170 insertions(+), 505 deletions(-) delete mode 100644 app/keystore/TeclastMTK12.jks create mode 100644 app/keystore/tuixin.jks rename app/src/main/java/com/uiui/zyos/activity/main/{MainPresenter.java => MainAPresenter.java} (76%) create mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java create mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java create mode 100644 app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java create mode 100644 app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java create mode 100644 app/src/main/java/com/uiui/zyos/network/api/SNInfoApi.java create mode 100644 app/src/main/java/com/uiui/zyos/network/api/UserInfoControl.java create mode 100644 app/src/main/java/com/uiui/zyos/push/PushManager.java create mode 100644 app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java create mode 100644 app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java rename app/src/main/java/com/uiui/zyos/{ => push}/tpush/Constants.java (93%) rename app/src/main/java/com/uiui/zyos/{ => push}/tpush/MessageReceiver.java (94%) rename app/src/main/java/com/uiui/zyos/{ => push}/tpush/common/DBOpenHelper.java (93%) rename app/src/main/java/com/uiui/zyos/{ => push}/tpush/common/NotificationService.java (98%) rename app/src/main/java/com/uiui/zyos/{ => push}/tpush/po/XGNotification.java (97%) create mode 100644 app/src/main/res/drawable-hdpi/default_avatar.png create mode 100644 app/src/main/res/layout-land/fragment_main.xml create mode 100644 app/src/main/res/layout-land/fragment_user.xml diff --git a/app/build.gradle b/app/build.gradle index 487864b..4002cee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiui.zyos" minSdkVersion 24 targetSdkVersion 29 - versionCode 1 - versionName "1.0" + versionCode 2 + versionName "1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -50,9 +50,9 @@ android { signingConfigs { mtk12 { - storeFile file("keystore/TeclastMTK12.jks") + storeFile file("keystore/tuixin.jks") storePassword "123456" - keyAlias "TeclastMTK12" + keyAlias "universal" keyPassword "123456" v2SigningEnabled false } @@ -154,7 +154,10 @@ dependencies { annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' //MMKV implementation 'com.tencent:mmkv-static:1.2.14' + //腾讯移动推送 TPNS implementation 'com.tencent.tpns:tpns:1.3.7.0-release' + //阿里云推送 + implementation 'com.aliyun.ams:alicloud-android-push:3.8.0' //状态栏透明 implementation 'com.gitee.zackratos:UltimateBarX:0.8.0' //指示器 diff --git a/app/keystore/TeclastMTK12.jks b/app/keystore/TeclastMTK12.jks deleted file mode 100644 index 669cfa92936634484a135ca9a0486d5ad89899d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2553 zcmd6o`8U-2AIE3K3}YM7hztf1<1_Y>7G#M?GM0;MBkRbTBF2p-M9MPu zy-{|;MTX2Rl1bd$>3;9``|X_X_Yb%~yw3Z)9`E=2oY(7pp6}=DJL@|O1Oh=g0sbra zLP+j@uE8PxA-)7P4y57x+qyv@I0&G^b^v}ZdP{PL1PzsknLCq!akT8`qN3wZjo1Y@X`yKtUqA?5SM!r;5GknM&VirR<) z&y0}1z-@Hxr-@GXGxDukm>nh?!&Rf}C;WuI(qyG{eK>m2bC-6g7)#{rVAEdn(p-vWfZjWw6|Mbp$%!EMujP53lgd@CfN? zVV_kP()x~sN^fnobK7)2s4=vgJ(6;Ho9wXG)V>*J?$e&+{@OUlFz%|_!^?%4SikjG zSrZD{kDZOgFio(}nQ~G~Z=T54wBXzF;f6shCt4CTxUXJ&vYsf_|b4)sWLyD>K!A9s{ z^GNZ91BMkz2QH`@PsvBzzx7$+WZR(^D^*EY>yd+Tn8XL8HWV?9>7?+PHc_{0&Lgep0eLc&&*yB2a$T_~tcG=Y6pHY-%sPGwE~1~c!o*38!+jn`|>*<&qo+6Vy~+`5)H z(K;%Y`%_s^(HMIpH~1N2^_$1LO^3}VZ|KoyEM}DE)l%%GQ4o82CepU)8C7@+bzAP6 zrq0bE1R@vbG^BZxF{roKHm|y7zEdx(vPjXONR=Vn*;XA_h0Cv?CpPEpaa_u3mRjd> z*WbR+?(mIiFd4YMgV(Yy9@lP*WM%k!67US?pXPFzyh{ZQux*!4#n0wR)o+6|K@_e^9r zp0q%Z_%b1TsQjPW59sdq{)J1-F^y8EeExRElO?y8P57yL5UK8jxHAM_>n6z5xs-P~ zjFzoy=+aZzfb28MQdRmj{uy~rNn3_BljyU+LXgHYSzr7VuZ!) zJH`q&f76Qhq~w{IL!U-XIji^L7P%CEA*B{4k(~qwxkYfhQ#jf~`sV(Z{)u<7b@CM^ z5p$LDt6J5!D#9C&ua2ye@^b872zYIrGAyR|?k6&4qxB`aVFtdR9L1i0nYo+N&|KoO zq4$?N!tL;yz#$L_R?4x%#{dK=vmnmG6kKye|IXeKl^3JivETr(z( zzzZO_pf)frG{nZ5fChwqBs^%OfvcalXFw3y+m#>+i2Q)uXw>O|P;!W?HyKOxCS4*3 zatxQlk!bD{WRIW#Z;yWy-v1%c{}LGh`=1&RU{SQ|zwRFYd&Rp4_yhaJP=F4gLC{oF z(*QI92Qid7r!j!=clu8)n+nGM{J@+M1f_yeoY@5Cfl$FaUR^tT9nh7)-S;xvyI{QyYOv>YQZ&3W?tIW`$vIVJLGN!O8 zu<6lACU ze=PdjHI6YSM7Q!?5ZT&~HHv0f&ugns!5(twdG8D=pG#jK)EYUxh15+-*2sTRV*W)v zutXv7zHVXMxiUWM9g(@olf(OEEgP1P+%I5l4V;rlpINmgayNPB?VifHTEkw!q7X$b z)eohQt0u67QW6fAINYYJon@-V7T8)3o^MGBZ2!GW0Ro2R$Ls(xTYw}-IFkG@QJ9G3 zLQd6m_6tR}WKdk&Qfo4nM!yHdbpP0wg~hZ0F^!b}dnPv~s~{%hAF2fEPd|?DM=NL; z9DstsyFbf=^Zz*V0E2Ahtm?)OO9j6Z@Hcuyn;5w$0#ZB@pVJ>X8vb0bq7M^Y682si zPi*OQ9c)t_ReyK39XT5>GO&Zxbr3f&f}f^7lB8B2#F{k4*Dy>KKgMqIPYaK#*pQ-R z=9x~gF2V?!aZjfqfr^XHmzML*Rgv^bPF<0#Yz-zvpGw^wO2c9lAh`a8{u12|2*$U31I;IY_i+A>=NryR_?hD%Xnx#xm+R-5oG$Iq# zZY~_%d|YXx&e~p1c;#a?-x|r{Etg-VqtiM7ek+~%!J*jq i3k%n*Z`M^-*)|E%3NhLDTX{PpKhi;3+Qwyp5q|=Hqc`OM diff --git a/app/keystore/tuixin.jks b/app/keystore/tuixin.jks new file mode 100644 index 0000000000000000000000000000000000000000..d7ecbaddf51da17b510f17b9af9af2ce7f322b53 GIT binary patch literal 2064 zcmV+r2=Dj)?f&fm00062000310003133YC1c4cyNVQc^Z0ez?#GQ|J@1pzRE1pP1$ z1_~<%0R#am0uccL1pows1nIRBg-VAu4G2mo9ioLrNLQ`!IS_mND{EXtBN%CNSJ+@2 z`>_1cvWBy-VoZ((n+P%B#OJE%Y=3WD~dt@~uz*WP%tYX)}gG^6=p z{aeOdaZgbs>4s(ul(7)0%OcD05t)}f>qk?LtBXCgD5@7@VHfa5F;^iVyUd6Ebac88 z$ncuRJ$JO7mVnSOT#Fl_gFo`droaqSCXQdi9o)>G>0N2^Q7@`FgY@^EsHNykKn*jj zqryd=jya4Ze_8Kxk`lnZ68zVTTa)SYxB0MK@O~0=>Pm^~GY8U*=1XPu{P2Nt6|bYa zPvzl1k-NDkD?ciXg_7*fS6Smeb4({KMe2yf3TV0tF(9DnIyyQzD?DhT=S_`x=9J%2 zU1`QO@Ia@%SH3k4o3xaT7r>f+=l}@_akCVR&9c0o;m=ArUfyD$Ai#{!=ANt&8l>LT zzTwVu-nN7yEs%NWFK23hV|sxprm6_BIh*ESD^AHBWKN#V@xs^{G%YVt#sBj5n)DzW zQfw0~gxbS)aWlE?9fjX2O}O1wfo?JbW4Z(dUZ}MJQ?RY`!-s^tvLu9#9$V6fW^18K z&Kk>)Wbv!9BCktcCv%dt@N-rN{1kz%he-*ea4*680P@Uk;Dl234C!0k0xm^g9rv#f z<6RKe`j9Xic@y%v#*Eb^JYPw_KLUy7GS3?K5l3i!8EN!s&vnunPrYUbIF+04jOXwE zLXQO;vSda}r%&9`*8W>PmTo8vxnX0TXhtAvCA|?0`Csi5HX%rUF+A_r`{8GCpO@b$ z-r#Pf>&^b@h{^*ETF9xHB z2RPD6N0c0OP%d*Mj~VY000311z0XMFgXAK0>vLnX0jZz^ z0s#U71X-$Lh%gNX2`Yw2hW8Bt0Sg5HFcC2iFbxI+RRjYQ26T04cxi4h9v2NVF)=bR zF)%hTG&MI`7Y#HvF)}bUFg7qWH8)x?5it)i4F&^M1OpQWbaiQXX>Krr0U|IB1_>&L zNQUcrJJ#c{7RP%rt!#z_3S7m8@brz}-M}>LtZ? zVa$ySBBL7npvgdsllL<9;gnQ2j!P+Sm&oKCz_4-Ih)l9T?$ zSJ@IN#naMLb^Ld6-V-ZoT(s-oh^#x=y`eTZO5{U4f+313^ZCXJfld3q>nL!>-} z#`ms!cSDoHBFl@6nd~jpjN{x^%PUqp;U>~`0;x`C$g99h6hH;&%68z`bt>F6NjDCR zn@pV^k<)ojD`uwR{LcC_wq+lePv*8c?-Pl+!CnL1nZtfOSqMsQc=XaV(i|L2V0bHf z4g0LZye-^O<0|5X5qaiRKFdYU1RUHll76cR;pOIp1>|tHLR+XOf zy6a`M+GZgz4F(A+hDe6@4FLfQ1potr0RaGR>Q$QZ8e855tVvA0w)t^oUgG7=^(WcL zBd>j_W0L;^@i^ZH*Alu&#Ct-#8W<7nn!$TTGw!~^gH%jxD2HQJ^b42FR(Gt zrwgYa5nHN$hX2s~Bc|%f4?BQ$cs~2IDe`pxLWLE&3%(8Qu!^YV`7BjQH)Wb2S{eAP uOyB7;`6(54XIW_W-=cSmt%JsqFeQ?PhEIXqA`L;8^2DH{KIyb*MXVt{9j|o& literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 26d5317..e4694dc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -251,7 +251,7 @@ android:exported="true" tools:replace="android:exported" /> - + @@ -259,7 +259,8 @@ - + + + android:exported="false" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java similarity index 76% rename from app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java rename to app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java index f3c7cf9..5ddda4a 100644 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainPresenter.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainAPresenter.java @@ -7,8 +7,8 @@ import com.trello.rxlifecycle4.android.ActivityEvent; import io.reactivex.rxjava3.subjects.BehaviorSubject; -public class MainPresenter implements MainContact.Presenter { - private static final String TAG = MainPresenter.class.getSimpleName(); +public class MainAPresenter implements MainContact.Presenter { + private static final String TAG = MainAPresenter.class.getSimpleName(); private MainContact.MainView mView; private Context mContext; @@ -22,9 +22,9 @@ public class MainPresenter implements MainContact.Presenter { return lifecycle; } - MainPresenter(Context context) { + MainAPresenter(Context context) { this.mContext = context; - Log.e(TAG, "MainPresenter: " + context.getClass()); + Log.e(TAG, "MainAPresenter: " + context.getClass()); } @Override diff --git a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java index 127d161..bb5ac6b 100644 --- a/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/main/MainActivity.java @@ -8,7 +8,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Configuration; -import android.graphics.Color; import android.os.Bundle; import android.provider.Settings; import android.text.TextUtils; @@ -20,27 +19,16 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.viewpager.widget.ViewPager; -import com.flyco.tablayout.SlidingTabLayout; import com.tencent.mmkv.MMKV; -import com.uiui.zyos.BuildConfig; import com.uiui.zyos.R; import com.uiui.zyos.base.BaseActivity; import com.uiui.zyos.base.BaseFragmentPagerAdapter; -import com.uiui.zyos.config.CommonConfig; import com.uiui.zyos.dialog.PrivacyPolicyDialog; -import com.uiui.zyos.fragment.biology.BiologyFragment; -import com.uiui.zyos.fragment.chemical.ChemicalFragment; -import com.uiui.zyos.fragment.chinese.ChineseFragment; -import com.uiui.zyos.fragment.english.EnglishFragment; -import com.uiui.zyos.fragment.math.MathFragment; -import com.uiui.zyos.fragment.physics.PhysicsFragment; +import com.uiui.zyos.fragment.main.MainFragment; +import com.uiui.zyos.fragment.user.UserFragment; import com.uiui.zyos.service.NotificationService; import com.uiui.zyos.utils.HomeWatcher; import com.uiui.zyos.utils.ToastUtil; -import com.uiui.zyos.view.ScaleCircleNavigator; - -import net.lucode.hackware.magicindicator.MagicIndicator; -import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.util.ArrayList; import java.util.List; @@ -51,29 +39,21 @@ import butterknife.ButterKnife; public class MainActivity extends BaseActivity implements MainContact.MainView { private static final String TAG = MainActivity.class.getSimpleName(); - @BindView(R.id.main_sliding_tab_layout) - SlidingTabLayout main_sliding_tab_layout; @BindView(R.id.viewPager) ViewPager mViewPager; - @BindView(R.id.magicIndicator) - MagicIndicator mMagicIndicator; - private MainPresenter mMainPresenter; + private MMKV mMMKV = MMKV.defaultMMKV(); - private ScaleCircleNavigator scaleCircleNavigator; + private MainAPresenter mMainAPresenter; + private HomeWatcher mHomeWatcher; private FragmentManager mFragmentManager; // private FragmentTransaction mFragmentTransaction; private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter; - private List mFragments; - private int defaultCurrent = 0; - private String[] title = new String[]{"语文","数学","英语","物理","化学","生物","其他",}; + private int defaultCurrent = 1; - private MMKV mMMKV = MMKV.defaultMMKV(); - - private HomeWatcher mHomeWatcher; @Override public int getLayoutId() { @@ -84,9 +64,9 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { public void initView() { ButterKnife.bind(this); toggleNotificationListenerService(this); - mMainPresenter = new MainPresenter(this); - mMainPresenter.attachView(this); - mMainPresenter.setLifecycle(lifecycleSubject); + mMainAPresenter = new MainAPresenter(this); + mMainAPresenter.attachView(this); + mMainAPresenter.setLifecycle(lifecycleSubject); mFragmentManager = getSupportFragmentManager(); // mFragmentTransaction = mFragmentManager.beginTransaction(); @@ -95,39 +75,18 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { // fragmentTransaction.add(R.id.viewPager, appListFragment); // fragmentTransaction.commit(); - mFragments.add(new ChineseFragment()); - mFragments.add(new MathFragment()); - mFragments.add(new EnglishFragment()); - mFragments.add(new PhysicsFragment()); - mFragments.add(new ChemicalFragment()); - mFragments.add(new BiologyFragment()); - mFragments.add(new ChineseFragment()); - - scaleCircleNavigator = new ScaleCircleNavigator(this); - scaleCircleNavigator.setCircleCount(mFragments.size()); - scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY); - scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY); - scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() { - @Override - public void onClick(int index) { - - } - }); - + mFragments.add(new UserFragment()); + mFragments.add(new MainFragment()); mViewPager.setAdapter(mBaseFragmentPagerAdapter); - mViewPager.setOffscreenPageLimit(4); - mMagicIndicator.setNavigator(scaleCircleNavigator); - ViewPagerHelper.bind(mMagicIndicator, mViewPager); - if (mFragments.size() > 1) { - mViewPager.setCurrentItem(defaultCurrent); - } - main_sliding_tab_layout.setViewPager(mViewPager,title); + mViewPager.setOffscreenPageLimit(1); + mViewPager.setCurrentItem(defaultCurrent); } + + @Override public void initData() { registmNewAppReceiver(); - registerSOSNumberReceiver(); registerUpdateDesktopReceiver(); } @@ -227,13 +186,10 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { @Override protected void onDestroy() { super.onDestroy(); - mMainPresenter.detachView(); + mMainAPresenter.detachView(); if (mNewAppReceiver != null) { unregisterReceiver(mNewAppReceiver); } - if (sosNumberReceiver != null) { - unregisterReceiver(sosNumberReceiver); - } if (updateDesktopReceiver != null) { unregisterReceiver(updateDesktopReceiver); } @@ -372,29 +328,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { } } - private SOSNumberReceiver sosNumberReceiver; - - private void registerSOSNumberReceiver() { - if (sosNumberReceiver == null) { - sosNumberReceiver = new SOSNumberReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction("setting_sos"); - registerReceiver(sosNumberReceiver, filter); - } - - static class SOSNumberReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - Log.e(TAG, "onReceive: " + intent.getAction()); - String setting_sos = intent.getStringExtra("setting_sos"); - if (TextUtils.isEmpty(setting_sos)) { - return; - } - } - } - private UpdateDesktopReceiver updateDesktopReceiver; private void registerUpdateDesktopReceiver() { diff --git a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java index 1c5615b..4f75013 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java @@ -6,6 +6,9 @@ import android.os.Handler; import android.os.Looper; import android.util.Log; +import com.alibaba.sdk.android.push.CloudPushService; +import com.alibaba.sdk.android.push.CommonCallback; +import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.arialyy.aria.core.Aria; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushConfig; @@ -15,6 +18,7 @@ import com.uiui.zyos.BuildConfig; import com.uiui.zyos.manager.ConnectManager; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.network.NetInterfaceManager; +import com.uiui.zyos.push.PushManager; import com.uiui.zyos.service.main.MainService; import com.uiui.zyos.utils.SystemUtils; import com.uiui.zyos.utils.Utils; @@ -41,8 +45,11 @@ public class BaseApplication extends Application { Aria.init(this); Aria.get(this).getDownloadConfig().setMaxTaskNum(1); Aria.get(this).getDownloadConfig().setConvertSpeed(true); + PushManager.init(this); tpushInit(); + aliyunPushInit(); RemoteManager.init(this); + RemoteManager.getInstance().aliyunPushInit(); ConnectManager.init(this); NetInterfaceManager.init(this); startService(new Intent(this, MainService.class)); @@ -57,7 +64,7 @@ public class BaseApplication extends Application { //token在设备卸载重装的时候有可能会变 Log.e("TPush", "注册成功,设备token为:" + data); List accountInfoList = new ArrayList<>(); - accountInfoList.add(new XGPushManager.AccountInfo(XGPushManager.AccountType.CUSTOM.getValue(), Utils.getSerial())); + accountInfoList.add(new XGPushManager.AccountInfo(XGPushManager.AccountType.CUSTOM.getValue(), RemoteManager.getInstance().getSerial())); XGPushManager.upsertAccounts(getApplicationContext(), accountInfoList, new XGIOperateCallback() { @Override public void onSuccess(Object data, int flag) { @@ -78,6 +85,23 @@ public class BaseApplication extends Application { }); } + public void aliyunPushInit() { + PushServiceFactory.init(this); + final CloudPushService pushService = PushServiceFactory.getCloudPushService(); + pushService.setLogLevel(CloudPushService.LOG_DEBUG); + pushService.register(this, new CommonCallback() { + @Override + public void onSuccess(String response) { + Log.e("AliyunPush", "init cloudchannel success"); + Log.e("AliyunPush", "init cloudchannel success " + pushService.getDeviceId()); + } + + @Override + public void onFailed(String errorCode, String errorMessage) { + Log.e("AliyunPush", "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage); + } + }); + } private void catchException() { Thread.setDefaultUncaughtExceptionHandler( diff --git a/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java b/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java index babc434..8cb3b49 100644 --- a/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java +++ b/app/src/main/java/com/uiui/zyos/bean/UserAvatarInfo.java @@ -5,17 +5,19 @@ import java.io.Serializable; public class UserAvatarInfo implements Serializable { private static final long serialVersionUID = 7700643058775210597L; - String username; - String avatar; - String gread; int id; + String avatar; + String mobile; + String sn_name; + String class_name; + String username; - public String getUsername() { - return username; + public int getId() { + return id; } - public void setUsername(String username) { - this.username = username; + public void setId(int id) { + this.id = id; } public String getAvatar() { @@ -26,19 +28,35 @@ public class UserAvatarInfo implements Serializable { this.avatar = avatar; } - public String getGread() { - return gread; + public String getMobile() { + return mobile; } - public void setGread(String gread) { - this.gread = gread; + public void setMobile(String mobile) { + this.mobile = mobile; } - public int getId() { - return id; + public String getSn_name() { + return sn_name; } - public void setId(int id) { - this.id = id; + public void setSn_name(String sn_name) { + this.sn_name = sn_name; + } + + public String getClass_name() { + return class_name; + } + + public void setClass_name(String class_name) { + this.class_name = class_name; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java index 584b62e..7d7cfa0 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseContact.java @@ -5,11 +5,11 @@ import com.uiui.zyos.base.BasePresenter; import com.uiui.zyos.base.BaseView; public class ChineseContact { - public interface Presenter extends BasePresenter { + public interface Presenter extends BasePresenter { } - public interface CustomView extends BaseView { + public interface ChineseView extends BaseView { } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java index 4f7f2df..44fa95d 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChineseFragment.java @@ -20,7 +20,6 @@ import com.blankj.utilcode.util.NetworkUtils; import com.uiui.zyos.R; import com.uiui.zyos.base.BaseFragment; import com.uiui.zyos.manager.RemoteManager; -import com.uiui.zyos.tpush.MessageReceiver; import com.uiui.zyos.utils.Utils; import java.util.Calendar; @@ -34,7 +33,7 @@ import butterknife.ButterKnife; * Use the {@link ChineseFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ChineseFragment extends BaseFragment implements ChineseContact.CustomView, NetworkUtils.OnNetworkStatusChangedListener { +public class ChineseFragment extends BaseFragment implements ChineseContact.ChineseView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = ChineseFragment.class.getSimpleName(); @@ -121,7 +120,6 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Cust private void initView() { Log.e(TAG, "initView: " + Utils.getBatteryLevel(mContext)); registerBatteryReceiver(); - registerAlarmClockReceiver(); registTimeReceiver(); mContext.registerReceiver(mbatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } @@ -149,26 +147,6 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Cust private void initAmap() { } - private void registerAlarmClockReceiver() { - if (null == mAlarmClockReceiver) { - mAlarmClockReceiver = new AlarmClockReceiver(); - } - IntentFilter filter = new IntentFilter(); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - filter.addAction(MessageReceiver.SET_ALARMCLOCK); - mContext.registerReceiver(mAlarmClockReceiver, filter); - } - - private AlarmClockReceiver mAlarmClockReceiver; - - private class AlarmClockReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - Log.e(TAG, "onReceive: " + action); - } - } - private void registerBatteryReceiver() { if (null == batteryReceiver) { batteryReceiver = new BatteryReceiver(); @@ -286,9 +264,6 @@ public class ChineseFragment extends BaseFragment implements ChineseContact.Cust if (mbatteryReceiver != null) { mContext.unregisterReceiver(mbatteryReceiver); } - if (mAlarmClockReceiver != null) { - mContext.unregisterReceiver(mAlarmClockReceiver); - } unRegistTimeReceiver(); } } diff --git a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java index e5c34b0..8b11e49 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/chinese/ChinesePresenter.java @@ -10,7 +10,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; public class ChinesePresenter implements ChineseContact.Presenter { private static final String TAG = ChinesePresenter.class.getSimpleName(); private Context mContext; - private ChineseContact.CustomView mView; + private ChineseContact.ChineseView mView; public ChinesePresenter(Context context) { this.mContext = context; @@ -27,7 +27,7 @@ public class ChinesePresenter implements ChineseContact.Presenter { } @Override - public void attachView(@NonNull ChineseContact.CustomView view) { + public void attachView(@NonNull ChineseContact.ChineseView view) { this.mView = view; } diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java new file mode 100644 index 0000000..1609efd --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainContact.java @@ -0,0 +1,14 @@ +package com.uiui.zyos.fragment.main; + +import com.uiui.zyos.base.BasePresenter; +import com.uiui.zyos.base.BaseView; + +public class MainContact { + public interface Presenter extends BasePresenter { + + } + + public interface MainView extends BaseView { + + } +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java new file mode 100644 index 0000000..90d1bef --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainFPresenter.java @@ -0,0 +1,39 @@ +package com.uiui.zyos.fragment.main; + +import android.content.Context; + +import com.trello.rxlifecycle4.android.FragmentEvent; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public class MainFPresenter implements MainContact.Presenter { + private static final String TAG = MainFPresenter.class.getSimpleName(); + private Context mContext; + private MainContact.MainView mView; + + public MainFPresenter(Context context) { + this.mContext = context; + } + + private BehaviorSubject lifecycle; + + void setLifecycle(BehaviorSubject lifecycle) { + this.lifecycle = lifecycle; + } + + public BehaviorSubject getLifecycle() { + return lifecycle; + } + + @Override + public void attachView(@NonNull MainContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java new file mode 100644 index 0000000..0631e16 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/main/MainFragment.java @@ -0,0 +1,159 @@ +package com.uiui.zyos.fragment.main; + +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.viewpager.widget.ViewPager; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.flyco.tablayout.SlidingTabLayout; +import com.uiui.zyos.R; +import com.uiui.zyos.base.BaseFragment; +import com.uiui.zyos.base.BaseFragmentPagerAdapter; +import com.uiui.zyos.fragment.biology.BiologyFragment; +import com.uiui.zyos.fragment.chemical.ChemicalFragment; +import com.uiui.zyos.fragment.chinese.ChineseFragment; +import com.uiui.zyos.fragment.english.EnglishFragment; +import com.uiui.zyos.fragment.math.MathFragment; +import com.uiui.zyos.fragment.physics.PhysicsFragment; +import com.uiui.zyos.view.ScaleCircleNavigator; + +import net.lucode.hackware.magicindicator.MagicIndicator; +import net.lucode.hackware.magicindicator.ViewPagerHelper; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link MainFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class MainFragment extends BaseFragment implements MainContact.MainView { + + @BindView(R.id.main_sliding_tab_layout) + SlidingTabLayout main_sliding_tab_layout; + @BindView(R.id.viewPager) + ViewPager mViewPager; + @BindView(R.id.magicIndicator) + MagicIndicator mMagicIndicator; + + private MainFPresenter mPresenter; + + private View rootView; + private FragmentActivity mContext; + private ScaleCircleNavigator scaleCircleNavigator; + private FragmentManager mFragmentManager; + // private FragmentTransaction mFragmentTransaction; + private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter; + private List mFragments; + private int defaultCurrent = 0; + private String[] title = new String[]{"语文", "数学", "英语", "物理", "化学", "生物", "其他",}; + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public MainFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MainFragment. + */ + // TODO: Rename and change types and number of parameters + public static MainFragment newInstance(String param1, String param2) { + MainFragment fragment = new MainFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + rootView = inflater.inflate(R.layout.fragment_main, container, false); + mContext = (FragmentActivity) rootView.getContext(); + mPresenter = new MainFPresenter(mContext); + ButterKnife.bind(this, rootView); + initView(); + return rootView; + } + + @Override + public void fetchData() { + initData(); + } + + private void initView() { + mFragmentManager = getChildFragmentManager(); +// mFragmentTransaction = mFragmentManager.beginTransaction(); + mFragments = new ArrayList<>(); + mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments); +// fragmentTransaction.add(R.id.viewPager, appListFragment); +// fragmentTransaction.commit(); + mFragments.add(new ChineseFragment()); + mFragments.add(new MathFragment()); + mFragments.add(new EnglishFragment()); + mFragments.add(new PhysicsFragment()); + mFragments.add(new ChemicalFragment()); + mFragments.add(new BiologyFragment()); + mFragments.add(new ChineseFragment()); + + scaleCircleNavigator = new ScaleCircleNavigator(mContext); + scaleCircleNavigator.setCircleCount(mFragments.size()); + scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY); + scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY); + scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() { + @Override + public void onClick(int index) { + + } + }); + + mViewPager.setAdapter(mBaseFragmentPagerAdapter); + mViewPager.setOffscreenPageLimit(4); + mMagicIndicator.setNavigator(scaleCircleNavigator); + ViewPagerHelper.bind(mMagicIndicator, mViewPager); + if (mFragments.size() > 1) { + mViewPager.setCurrentItem(defaultCurrent); + } + main_sliding_tab_layout.setViewPager(mViewPager, title); + } + + private void initData() { + + } +} diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java new file mode 100644 index 0000000..72083ce --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java @@ -0,0 +1,65 @@ +package com.uiui.zyos.fragment.user; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.uiui.zyos.R; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link UserFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class UserFragment extends Fragment { + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public UserFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment UserFragment. + */ + // TODO: Rename and change types and number of parameters + public static UserFragment newInstance(String param1, String param2) { + UserFragment fragment = new UserFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_user, container, false); + } +} diff --git a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java index 19f6c0b..06d16ce 100644 --- a/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java +++ b/app/src/main/java/com/uiui/zyos/manager/RemoteManager.java @@ -9,6 +9,9 @@ import android.os.IBinder; import android.text.TextUtils; import android.util.Log; +import com.alibaba.sdk.android.push.CloudPushService; +import com.alibaba.sdk.android.push.CommonCallback; +import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.tencent.mmkv.MMKV; @@ -45,6 +48,7 @@ public class RemoteManager { mGetInfoInterface = IGetInfoInterface.Stub.asInterface(service); getLocation(); Log.e(TAG, "onServiceConnected: " + getSerial()); + aliyunPushInit(); } @Override @@ -72,6 +76,36 @@ public class RemoteManager { return sInstance; } + public void aliyunPushInit() { + CloudPushService pushService = PushServiceFactory.getCloudPushService(); + String account = getSerial(); + pushService.bindAccount(account, new CommonCallback() { + @Override + public void onSuccess(String s) { + Log.e("AliyunPush", "bind account " + account + " success\n"); + } + + @Override + public void onFailed(String errorCode, String errorMsg) { + Log.e("AliyunPush", "bind account " + account + " failed." + + "errorCode: " + errorCode + ", errorMsg:" + errorMsg); + } + }); + String alias = getSerial(); + pushService.addAlias(account, new CommonCallback() { + @Override + public void onSuccess(String s) { + Log.e("AliyunPush", "add alias " + alias + " success\n"); + } + + @Override + public void onFailed(String errorCode, String errorMsg) { + Log.e("AliyunPush", "add alias " + alias + " failed." + + "errorCode: " + errorCode + ", errorMsg:" + errorMsg + "\n"); + } + }); + } + private void bindInfoService() { if (mGetInfoInterface == null) { //这是连接aidl服务的代码 @@ -96,7 +130,7 @@ public class RemoteManager { } else { bindInfoService(); } - return "unknown"; + return ""; } public void getLocation() { diff --git a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java index 942cfc4..a508315 100644 --- a/app/src/main/java/com/uiui/zyos/network/UrlAddress.java +++ b/app/src/main/java/com/uiui/zyos/network/UrlAddress.java @@ -1,7 +1,10 @@ package com.uiui.zyos.network; public class UrlAddress { - public static final String ROOT_URL = "https://led.zuoyepad.com/android/"; - + public static final String ROOT_URL = "https://led.aolelearn.com/android/"; + /*设备信息接口*/ + public static final String SNINFO = "sn/getSnInfo"; + /*获取用户头像和信息*/ + public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo"; } diff --git a/app/src/main/java/com/uiui/zyos/network/api/SNInfoApi.java b/app/src/main/java/com/uiui/zyos/network/api/SNInfoApi.java new file mode 100644 index 0000000..cd85d0d --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/api/SNInfoApi.java @@ -0,0 +1,16 @@ +package com.uiui.zyos.network.api; + +import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.bean.SnInfo; +import com.uiui.zyos.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface SNInfoApi { + @GET(UrlAddress.SNINFO) + Observable> getsninfo( + @Query("sn") String sn + ); +} diff --git a/app/src/main/java/com/uiui/zyos/network/api/UserInfoControl.java b/app/src/main/java/com/uiui/zyos/network/api/UserInfoControl.java new file mode 100644 index 0000000..c346819 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/network/api/UserInfoControl.java @@ -0,0 +1,18 @@ +package com.uiui.zyos.network.api; + +import com.uiui.zyos.bean.BaseResponse; +import com.uiui.zyos.bean.UserAvatarInfo; +import com.uiui.zyos.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface UserInfoControl { + @FormUrlEncoded + @POST(UrlAddress.GET_USER_AVATAR_INFO) + Observable> getUserAvatarInfo( + @Field("sn") String sn + ); +} diff --git a/app/src/main/java/com/uiui/zyos/push/PushManager.java b/app/src/main/java/com/uiui/zyos/push/PushManager.java new file mode 100644 index 0000000..702587a --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/push/PushManager.java @@ -0,0 +1,60 @@ +package com.uiui.zyos.push; + +import android.annotation.SuppressLint; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; + +import com.uiui.zyos.disklrucache.CacheHelper; +import com.uiui.zyos.utils.ToastUtil; + +public class PushManager { + private static final String TAG = PushManager.class.getSimpleName(); + + public static final String SET_ALARMCLOCK = "zuoyeos.action.change.alarmclaock"; + + + @SuppressLint("StaticFieldLeak") + private static PushManager sInstance; + private Context mContext; + private ContentResolver mResolver; + private CacheHelper mCacheHelper; + + private PushManager(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + this.mContext = context; + this.mResolver = context.getContentResolver(); + this.mCacheHelper = new CacheHelper(context); + } + + public static void init(Context context) { + if (sInstance == null) { + sInstance = new PushManager(context); + } + } + + public static PushManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init PushManager first"); + } + return sInstance; + } + + //闹钟 + private static final String JIGUANG_ALARM_CLOCK = "57"; + + public void setPushContent(String title, String extras) { + switch (title) { + case JIGUANG_ALARM_CLOCK: + ToastUtil.betaShow("收到推送消息: 设置闹钟"); + Intent intent = new Intent(SET_ALARMCLOCK); + mContext.sendBroadcast(intent); + break; + default: + } + } + + +} diff --git a/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java b/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java new file mode 100644 index 0000000..892f198 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/push/alipush/AliMessageIntentService.java @@ -0,0 +1,99 @@ +package com.uiui.zyos.push.alipush; + +import android.content.Context; +import android.util.Log; + +import com.alibaba.sdk.android.push.AliyunMessageIntentService; +import com.alibaba.sdk.android.push.notification.CPushMessage; + +import java.util.Map; + +/** + * Created by liyazhou on 17/8/22. + * 为避免推送广播被系统拦截的小概率事件,我们推荐用户通过IntentService处理消息互调,接入步骤: + * 1. 创建IntentService并继承AliyunMessageIntentService + * 2. 覆写相关方法,并在Manifest的注册该Service + * 3. 调用接口CloudPushService.setPushIntentService + * 详细用户可参考:https://help.aliyun.com/document_detail/30066.html#h2-2-messagereceiver-aliyunmessageintentservice + */ + +public class AliMessageIntentService extends AliyunMessageIntentService { + private static final String TAG = AliyunMessageIntentService.class.getSimpleName(); + + /** + * 推送通知的回调方法 + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + protected void onNotification(Context context, String title, String summary, Map extraMap) { + Log.i(TAG, "收到一条推送通知 : " + title + ", summary:" + summary); + } + + /** + * 推送消息的回调方法 + * + * @param context + * @param cPushMessage + */ + @Override + protected void onMessage(Context context, CPushMessage cPushMessage) { + Log.i(TAG, "收到一条推送消息 : " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent()); + } + + /** + * 从通知栏打开通知的扩展处理 + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + protected void onNotificationOpened(Context context, String title, String summary, String extraMap) { + Log.i(TAG, "onNotificationOpened : " + " : " + title + " : " + summary + " : " + extraMap); + } + + /** + * 无动作通知点击回调。当在后台或阿里云控制台指定的通知动作为无逻辑跳转时,通知点击回调为onNotificationClickedWithNoAction而不是onNotificationOpened + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) { + Log.i(TAG, "onNotificationClickedWithNoAction : " + " : " + title + " : " + summary + " : " + extraMap); + } + + /** + * 通知删除回调 + * + * @param context + * @param messageId + */ + @Override + protected void onNotificationRemoved(Context context, String messageId) { + Log.i(TAG, "onNotificationRemoved : " + messageId); + } + + /** + * 应用处于前台时通知到达回调。注意:该方法仅对自定义样式通知有效,相关详情请参考https://help.aliyun.com/document_detail/30066.html#h3-3-4-basiccustompushnotification-api + * + * @param context + * @param title + * @param summary + * @param extraMap + * @param openType + * @param openActivity + * @param openUrl + */ + @Override + protected void onNotificationReceivedInApp(Context context, String title, String summary, Map extraMap, int openType, String openActivity, String openUrl) { + Log.i(TAG, "onNotificationReceivedInApp : " + " : " + title + " : " + summary + " " + extraMap + " : " + openType + " : " + openActivity + " : " + openUrl); + } +} diff --git a/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java b/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java new file mode 100644 index 0000000..9278c24 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/push/alipush/AliyunMessageReceiver.java @@ -0,0 +1,116 @@ +package com.uiui.zyos.push.alipush; + +import android.content.Context; +import android.util.Log; + +import com.alibaba.sdk.android.push.MessageReceiver; +import com.alibaba.sdk.android.push.notification.CPushMessage; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.uiui.zyos.push.PushManager; + +import java.util.Map; + +/** + * @author: 正纬 + * @since: 15/4/9 + * @version: 1.1 + * @feature: 用于接收推送的通知和消息 + */ +public class AliyunMessageReceiver extends MessageReceiver { + // 消息接收部分的LOG_TAG + public static final String TAG = AliyunMessageReceiver.class.getSimpleName(); + + /** + * 推送通知的回调方法 + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + public void onNotification(Context context, String title, String summary, Map extraMap) { + // TODO 处理推送通知 + if (null != extraMap) { + for (Map.Entry entry : extraMap.entrySet()) { + Log.i(TAG, "@Get diy param : Key=" + entry.getKey() + " , Value=" + entry.getValue()); + } + } else { + Log.i(TAG, "@收到通知 && 自定义消息为空"); + } + Log.i(TAG, "收到一条推送通知 : " + title + ", summary:" + summary); + } + + /** + * 应用处于前台时通知到达回调。注意:该方法仅对自定义样式通知有效,相关详情请参考https://help.aliyun.com/document_detail/30066.html?spm=5176.product30047.6.620.wjcC87#h3-3-4-basiccustompushnotification-api + * + * @param context + * @param title + * @param summary + * @param extraMap + * @param openType + * @param openActivity + * @param openUrl + */ + @Override + protected void onNotificationReceivedInApp(Context context, String title, String summary, Map extraMap, int openType, String openActivity, String openUrl) { + Log.i(TAG, "onNotificationReceivedInApp : " + " : " + title + " : " + summary + " " + extraMap + " : " + openType + " : " + openActivity + " : " + openUrl); + } + + /** + * 推送消息的回调方法 + * + * @param context + * @param cPushMessage + */ + @Override + public void onMessage(Context context, CPushMessage cPushMessage) { + Log.e(TAG, "收到一条推送消息 : " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent()); + String title = cPushMessage.getTitle(); + String content = cPushMessage.getContent(); + JsonObject extrasJson = JsonParser.parseString(content).getAsJsonObject(); + String extras = ""; + if (extrasJson.get("extras") != null) { + extras = extrasJson.get("extras").toString(); + } + PushManager.getInstance().setPushContent(title, extras); + } + + /** + * 从通知栏打开通知的扩展处理 + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + public void onNotificationOpened(Context context, String title, String summary, String extraMap) { + Log.i(TAG, "onNotificationOpened : " + " : " + title + " : " + summary + " : " + extraMap); + } + + /** + * 通知删除回调 + * + * @param context + * @param messageId + */ + @Override + public void onNotificationRemoved(Context context, String messageId) { + Log.i(TAG, "onNotificationRemoved : " + messageId); + } + + /** + * 无动作通知点击回调。当在后台或阿里云控制台指定的通知动作为无逻辑跳转时,通知点击回调为onNotificationClickedWithNoAction而不是onNotificationOpened + * + * @param context + * @param title + * @param summary + * @param extraMap + */ + @Override + protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) { + Log.i(TAG, "onNotificationClickedWithNoAction : " + " : " + title + " : " + summary + " : " + extraMap); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/tpush/Constants.java b/app/src/main/java/com/uiui/zyos/push/tpush/Constants.java similarity index 93% rename from app/src/main/java/com/uiui/zyos/tpush/Constants.java rename to app/src/main/java/com/uiui/zyos/push/tpush/Constants.java index 4a0ed25..82b2a09 100644 --- a/app/src/main/java/com/uiui/zyos/tpush/Constants.java +++ b/app/src/main/java/com/uiui/zyos/push/tpush/Constants.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.tpush; +package com.uiui.zyos.push.tpush; /** * Created by chacewang on 2019/7/5. diff --git a/app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java b/app/src/main/java/com/uiui/zyos/push/tpush/MessageReceiver.java similarity index 94% rename from app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java rename to app/src/main/java/com/uiui/zyos/push/tpush/MessageReceiver.java index e3a4b27..543b7a9 100644 --- a/app/src/main/java/com/uiui/zyos/tpush/MessageReceiver.java +++ b/app/src/main/java/com/uiui/zyos/push/tpush/MessageReceiver.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.tpush; +package com.uiui.zyos.push.tpush; import android.content.ContentResolver; import android.content.Context; @@ -16,9 +16,9 @@ import com.tencent.android.tpush.XGPushClickedResult; import com.tencent.android.tpush.XGPushRegisterResult; import com.tencent.android.tpush.XGPushShowedResult; import com.tencent.android.tpush.XGPushTextMessage; -import com.uiui.zyos.network.NetInterfaceManager; -import com.uiui.zyos.tpush.common.NotificationService; -import com.uiui.zyos.tpush.po.XGNotification; +import com.uiui.zyos.push.PushManager; +import com.uiui.zyos.push.tpush.common.NotificationService; +import com.uiui.zyos.push.tpush.po.XGNotification; import com.uiui.zyos.utils.ToastUtil; import java.text.SimpleDateFormat; @@ -31,7 +31,6 @@ public class MessageReceiver extends XGPushBaseReceiver { public static final String TEST_ACTION = "com.qq.xgdemo.activity.TEST_ACTION"; public static final String LogTag = "xg.test"; - public static final String SET_ALARMCLOCK = "zuoyeos.action.change.alarmclaock"; private Context mContext; private ContentResolver mResolver; @@ -215,7 +214,6 @@ public class MessageReceiver extends XGPushBaseReceiver { context.sendBroadcast(testIntent); } - /** * 删除账号回调 * @@ -289,9 +287,6 @@ public class MessageReceiver extends XGPushBaseReceiver { // Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } - //闹钟 - private static final String JIGUANG_ALARM_CLOCK = "57"; - private void processCustomMessage(Context context, XGPushTextMessage message) { if (context == null || message == null) { return; @@ -305,14 +300,6 @@ public class MessageReceiver extends XGPushBaseReceiver { if (extrasJson.get("extras") != null) { extras = extrasJson.get("extras").toString(); } - - switch (title) { - case JIGUANG_ALARM_CLOCK: - ToastUtil.betaShow("收到推送消息: 设置闹钟"); - Intent intent = new Intent(SET_ALARMCLOCK); - mContext.sendBroadcast(intent); - break; - default: - } + PushManager.getInstance().setPushContent(title, extras); } } diff --git a/app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java b/app/src/main/java/com/uiui/zyos/push/tpush/common/DBOpenHelper.java similarity index 93% rename from app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java rename to app/src/main/java/com/uiui/zyos/push/tpush/common/DBOpenHelper.java index b7b3ca0..a5c0569 100644 --- a/app/src/main/java/com/uiui/zyos/tpush/common/DBOpenHelper.java +++ b/app/src/main/java/com/uiui/zyos/push/tpush/common/DBOpenHelper.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.tpush.common; +package com.uiui.zyos.push.tpush.common; import android.content.Context; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java b/app/src/main/java/com/uiui/zyos/push/tpush/common/NotificationService.java similarity index 98% rename from app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java rename to app/src/main/java/com/uiui/zyos/push/tpush/common/NotificationService.java index 58e0b55..e8adde5 100644 --- a/app/src/main/java/com/uiui/zyos/tpush/common/NotificationService.java +++ b/app/src/main/java/com/uiui/zyos/push/tpush/common/NotificationService.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.tpush.common; +package com.uiui.zyos.push.tpush.common; import android.content.ContentValues; import android.content.Context; @@ -6,7 +6,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import com.uiui.zyos.tpush.po.XGNotification; +import com.uiui.zyos.push.tpush.po.XGNotification; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java b/app/src/main/java/com/uiui/zyos/push/tpush/po/XGNotification.java similarity index 97% rename from app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java rename to app/src/main/java/com/uiui/zyos/push/tpush/po/XGNotification.java index 9c6eef2..a5641d2 100644 --- a/app/src/main/java/com/uiui/zyos/tpush/po/XGNotification.java +++ b/app/src/main/java/com/uiui/zyos/push/tpush/po/XGNotification.java @@ -1,4 +1,4 @@ -package com.uiui.zyos.tpush.po; +package com.uiui.zyos.push.tpush.po; public class XGNotification { private Integer id; diff --git a/app/src/main/java/com/uiui/zyos/utils/Utils.java b/app/src/main/java/com/uiui/zyos/utils/Utils.java index 9e54885..1d09f72 100644 --- a/app/src/main/java/com/uiui/zyos/utils/Utils.java +++ b/app/src/main/java/com/uiui/zyos/utils/Utils.java @@ -30,30 +30,30 @@ public class Utils { /** * 获取设备序列号 * - * @return - */ - @SuppressLint("MissingPermission") - public static String getSerial() { - String serial = "unknow"; - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+ - serial = Build.getSerial(); - } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+ - serial = Build.SERIAL; - } else {//8.0- - Class c = Class.forName("android.os.SystemProperties"); - Method get = c.getMethod("get", String.class); - serial = (String) get.invoke(c, "ro.serialno"); - } - } catch (Exception e) { - e.printStackTrace(); - Log.e("e", "读取设备序列号异常:" + e.toString()); - } - if (BuildConfig.DEBUG) { -// return "QNG2DKB00463"; - } - return serial; - } +// * @return +// */ +// @SuppressLint("MissingPermission") +// public static String getSerial() { +// String serial = "unknow"; +// try { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+ +// serial = Build.getSerial(); +// } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+ +// serial = Build.SERIAL; +// } else {//8.0- +// Class c = Class.forName("android.os.SystemProperties"); +// Method get = c.getMethod("get", String.class); +// serial = (String) get.invoke(c, "ro.serialno"); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// Log.e("e", "读取设备序列号异常:" + e.toString()); +// } +// if (BuildConfig.DEBUG) { +//// return "QNG2DKB00463"; +// } +// return serial; +// } public static String getDeviceSN() { String serial = null; diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8bb946ea751e2a420aca541040db8bfa8fd26c GIT binary patch literal 7777 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index b2332fe..c2b3ebd 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -7,292 +7,12 @@ android:background="@drawable/main_background" tools:context=".activity.main.MainActivity"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_main.xml b/app/src/main/res/layout-land/fragment_main.xml new file mode 100644 index 0000000..ca48831 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_main.xml @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_user.xml b/app/src/main/res/layout-land/fragment_user.xml new file mode 100644 index 0000000..48cfdb3 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_user.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index dd6ee48..72c1894 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -6,36 +6,12 @@ android:layout_height="match_parent" tools:context=".activity.main.MainActivity"> - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index b924a46f4a3496a6ca12b4385a64ba34b1b80d29..114475986ae7c4488bcacd219eeb5c48766f04f4 100644 GIT binary patch delta 4556 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 C)BMZ; diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index b924a46f4a3496a6ca12b4385a64ba34b1b80d29..114475986ae7c4488bcacd219eeb5c48766f04f4 100644 GIT binary patch delta 4556 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 C)BMZ; diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index b924a46f4a3496a6ca12b4385a64ba34b1b80d29..114475986ae7c4488bcacd219eeb5c48766f04f4 100644 GIT binary patch delta 4556 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 C)BMZ; diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index b924a46f4a3496a6ca12b4385a64ba34b1b80d29..114475986ae7c4488bcacd219eeb5c48766f04f4 100644 GIT binary patch delta 4556 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 C)BMZ; diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index b924a46f4a3496a6ca12b4385a64ba34b1b80d29..114475986ae7c4488bcacd219eeb5c48766f04f4 100644 GIT binary patch delta 4556 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 C)BMZ; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 90ab9f2..95170af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,13 +1,14 @@ 学习桌面 - - Hello blank fragment - 隐私协议 服务协议和隐私政策 请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向你提供即时通讯,内容分享等服务, 我们需要收集你的设备信息、操作日志等个人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。 \n你可阅读《服务协议》,《隐私政策》了解详细信息。如你同意,请点击“同意”开始接受我们的服务 + + 未绑定 + 未设置 + diff --git a/build.gradle b/build.gradle index af488a4..ce43d63 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - repositories { google() mavenCentral() maven { url "https://jitpack.io" } maven { url 'http://developer.huawei.com/repo/' } maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } } + dependencies { classpath 'com.android.tools.build:gradle:3.6.4' classpath "com.tencent.android.tpns:tpnsplugin:1.8.0" @@ -25,7 +26,9 @@ allprojects { maven { url "https://jitpack.io" } maven { url 'http://developer.huawei.com/repo/' } maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } } + gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar')