diff --git a/app/build.gradle b/app/build.gradle index 2e942a4..e04528c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.uiuios.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 46 - versionName "5.5" + versionCode 47 + versionName "5.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -27,8 +27,7 @@ android { } manifestPlaceholders = [ - XG_ACCESS_ID : "1500033697", - XG_ACCESS_KEY: "A0PFUHEPEKKM", + AMAP_KEY : "372937d213ff288dc150c31967a200cd" ] } @@ -59,89 +58,9 @@ android { keyPassword "123456" v2SigningEnabled false } - - zhanRui { - storeFile file("keystore/zhanxun.keystore") - storePassword "123456" - keyAlias "zhanxun" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } - - mtk { - storeFile file("keystore/xueshibaoos.jks") - storePassword "123456" - keyAlias "xueshibaoos" - keyPassword "123456" - v2SigningEnabled false - } - - mtk12 { - storeFile file("keystore/mtkAndroid12.keystore") - storePassword "123456" - keyAlias "mtk12" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } - - MTK8183 { - storeFile file("keystore/TeclastMTK12.jks") - storePassword "123456" - keyAlias "teclastmtk12" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } - - G10P { - storeFile file("keystore/G10PMTK11.jks") - storePassword "123456" - keyAlias "G10PMTK11" - keyPassword "123456" - v1SigningEnabled true - v2SigningEnabled true - } } buildTypes { -// MTK8183Debug.initWith(debug) -// MTK8183Debug { -// versionNameSuffix "-debug" -// debuggable true -// signingConfig signingConfigs.MTK8183 -// } -// -// MTK8183Release.initWith(release) -// MTK8183Release { -// signingConfig signingConfigs.MTK8183 -// } -// -// G10PDebug.initWith(debug) -// G10PDebug { -// versionNameSuffix "-debug" -// debuggable true -// signingConfig signingConfigs.G10P -// } -// -// G10PRelease.initWith(release) -// G10PRelease { -// signingConfig signingConfigs.G10P -// } -// -// zhanRuiRelease.initWith(release) -// zhanRuiRelease { -// signingConfig signingConfigs.zhanRui -// } -// -// zhanRuiDebug.initWith(debug) -// zhanRuiDebug { -// versionNameSuffix "-debug" -// debuggable true -// signingConfig signingConfigs.zhanRui -// } - debug { // 显示Log versionNameSuffix "-debug" @@ -237,8 +156,12 @@ dependencies { //bindView implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' + implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0' + implementation 'com.jeremyliao:live-event-bus-x:1.7.3' implementation 'com.facebook.rebound:rebound:0.3.8' + //高德地图定位 + implementation 'com.amap.api:location:5.1.0' //百度地图 // implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8' //MMKV diff --git a/app/keystore/G10PMTK11.jks b/app/keystore/G10PMTK11.jks deleted file mode 100644 index 324fa31..0000000 Binary files a/app/keystore/G10PMTK11.jks and /dev/null differ diff --git a/app/keystore/TeclastMTK12.jks b/app/keystore/TeclastMTK12.jks deleted file mode 100644 index 669cfa9..0000000 Binary files a/app/keystore/TeclastMTK12.jks and /dev/null differ diff --git a/app/keystore/mtkAndroid12.keystore b/app/keystore/mtkAndroid12.keystore deleted file mode 100644 index 860f30f..0000000 Binary files a/app/keystore/mtkAndroid12.keystore and /dev/null differ diff --git a/app/keystore/xueshibaoos.jks b/app/keystore/xueshibaoos.jks deleted file mode 100644 index b94a626..0000000 Binary files a/app/keystore/xueshibaoos.jks and /dev/null differ diff --git a/app/keystore/zhanxun.keystore b/app/keystore/zhanxun.keystore deleted file mode 100644 index 7c46fbc..0000000 Binary files a/app/keystore/zhanxun.keystore and /dev/null differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 040bd19..cae341c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,6 +28,8 @@ + + @@ -68,6 +70,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + android:name="com.amap.api.v2.apikey" + android:value="${AMAP_KEY}" /> + + + + + + + + + + + + + mGoodsTypeMap; - /** - * 设置布局 - */ - @Override - protected int getLayoutId() { - return R.layout.activity_goods; - } - /** - * @return 是否是黑色状态栏 - */ @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_goods); } /** @@ -67,7 +57,6 @@ public class GoodsActivity extends BaseDataBindingActivity { */ @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); mBinding.setListener(new Listener()); // UltimateBarX.statusBarOnly(this) // .transparent() diff --git a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java b/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java index 69262a2..28cc641 100644 --- a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java @@ -4,15 +4,15 @@ import android.util.Log; import android.view.View; import android.widget.ImageView; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; -import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiuios.aios.R; import com.uiuios.aios.adapter.ArticleAdapter; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.ArticleList; import com.uiuios.aios.bean.BaseResponse; @@ -27,7 +27,7 @@ import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class InfoListActivity extends BaseActivity { +public class InfoListActivity extends BaseDataBindingActivity { @BindView(R.id.iv_back) ImageView iv_back; @BindView(R.id.iv1) @@ -38,28 +38,8 @@ public class InfoListActivity extends BaseActivity { private ArticleAdapter mArticleAdapter; @Override - public int getLayoutId() { - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - return R.layout.activity_info_list; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this,R.layout.activity_info_list); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java index 94a2a64..ca3b016 100644 --- a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java @@ -50,31 +50,18 @@ public class InformationActivity extends BaseDataBindingActivity { private HashMap mCategoryMap; - /** - * 设置布局 - */ @Override - protected int getLayoutId() { - return R.layout.activity_information; - } - - /** - * @return 是否是黑色状态栏 - */ - @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } - @Override - protected boolean setfitWindow() { - return false; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_information); } @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); ButterKnife.bind(this); // UltimateBarX.statusBarOnly(this) // .transparent() diff --git a/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java b/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java index c67d91f..29edaad 100644 --- a/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java @@ -11,30 +11,17 @@ import com.uiuios.aios.databinding.ActivityInfoDetailsBinding; public class InformationDetailsActivity extends BaseDataBindingActivity { -// @BindView(R.id.tv_title) -// TextView tv_title; -// @BindView(R.id.tv_time) -// TextView tv_time; -// @BindView(R.id.niceImageView) -// NiceImageView niceImageView; -// @BindView(R.id.tv_content) -// TextView tv_content; - private ActivityInfoDetailsBinding mBinding; - @Override - protected int getLayoutId() { - return R.layout.activity_info_details; - } @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_info_details); } /** @@ -42,7 +29,6 @@ public class InformationDetailsActivity extends BaseDataBindingActivity { */ @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); } diff --git a/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java b/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java index 602988d..e4d7709 100644 --- a/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java @@ -63,19 +63,15 @@ public class OrderActivity extends BaseDataBindingActivity { ActivityResultLauncher launcher; - @Override - protected int getLayoutId() { - return R.layout.activity_order; - } @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_order); } /** @@ -83,7 +79,6 @@ public class OrderActivity extends BaseDataBindingActivity { */ @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { @Override public void onActivityResult(ActivityResult result) { @@ -186,19 +181,6 @@ public class OrderActivity extends BaseDataBindingActivity { GoodsInfo goodsInfo = (GoodsInfo) intent.getSerializableExtra("GoodsInfo"); if (goodsInfo == null) return; - mAddressId = mMMKV.decodeInt(CommonConfig.MAP_DEFAULT_ADDRESS_ID_KEY, -1); - Log.e(TAG, "initData: mAddressId = " + mAddressId); - String addressJson = mMMKV.decodeString(CommonConfig.MAP_DEFAULT_ADDRESS_JSON_KEY, ""); - Gson gson = new Gson(); - Type type = new TypeToken() { - }.getType(); - mAddressInfo = gson.fromJson(addressJson, type); - if (mAddressInfo != null) { - mBinding.setAddressInfo(mAddressInfo); - String area = mAddressInfo.getArea(); - List areaList = new ArrayList<>(Arrays.asList(area.split(","))); - mBinding.tvAddress.setText(String.join(" ", areaList) + " " + mAddressInfo.getAddress()); - } mGoodsInfo = goodsInfo; mBinding.setGoodsInfo(mGoodsInfo); mBinding.tvPrice.setText("券后¥" + mGoodsInfo.getBuying_price()); @@ -212,6 +194,69 @@ public class OrderActivity extends BaseDataBindingActivity { creactOrder(); } }); + getAdrress(); + } + + @Override + protected void onResume() { + super.onResume(); + mAddressId = mMMKV.decodeInt(CommonConfig.MAP_DEFAULT_ADDRESS_ID_KEY, -1); + Log.e(TAG, "initData: mAddressId = " + mAddressId); + String addressJson = mMMKV.decodeString(CommonConfig.MAP_DEFAULT_ADDRESS_JSON_KEY, ""); + Gson gson = new Gson(); + Type type = new TypeToken() { + }.getType(); + mAddressInfo = gson.fromJson(addressJson, type); + if (mAddressInfo != null) { + mBinding.setAddressInfo(mAddressInfo); + String area = mAddressInfo.getArea(); + List areaList = new ArrayList<>(Arrays.asList(area.split(","))); + mBinding.tvAddress.setText(String.join(" ", areaList) + " " + mAddressInfo.getAddress()); + } + + } + + private void getAdrress() { + NetInterfaceManager.getInstance().getAddressIndexObservable() + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getAddressIndexObservable", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getAddressIndexObservable", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List addressInfos = listBaseResponse.data; + if (addressInfos != null && addressInfos.size() != 0) { + AddressInfo defaultAddressInfo = addressInfos.get(0); + mMMKV.encode(CommonConfig.MAP_DEFAULT_ADDRESS_ID_KEY, defaultAddressInfo.getId()); + mMMKV.encode(CommonConfig.MAP_DEFAULT_ADDRESS_JSON_KEY, GsonUtils.toJSONString(defaultAddressInfo)); + mAddressInfo = defaultAddressInfo; + mAddressId = mAddressInfo.getId(); + mBinding.setAddressInfo(mAddressInfo); + String area = mAddressInfo.getArea(); + List areaList = new ArrayList<>(Arrays.asList(area.split(","))); + mBinding.tvAddress.setText(String.join(" ", areaList) + " " + mAddressInfo.getAddress()); + } else { + Toaster.show("没有获取到收货地址"); + } + } else { + Toaster.show("没有获取到收货地址"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getAddressIndexObservable", "onError: "); + } + + @Override + public void onComplete() { + Log.e("getAddressIndexObservable", "onComplete: "); + } + }); } private void creactOrder() { @@ -241,7 +286,7 @@ public class OrderActivity extends BaseDataBindingActivity { intent1.putExtra("OrderBean", orderBean); startActivity(intent1); } else { - Toaster.show("下单失败"); + Toaster.show(baseResponse.msg); } } diff --git a/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java b/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java index c87c0d7..2b8ac63 100644 --- a/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java @@ -31,18 +31,13 @@ public class OrderListActivity extends BaseDataBindingActivity { private OrderAdapter mOrderAdapter; @Override - protected int getLayoutId() { - return R.layout.activity_order_list; - } - - @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_order_list); } /** @@ -50,7 +45,6 @@ public class OrderListActivity extends BaseDataBindingActivity { */ @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); mOrderAdapter = new OrderAdapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); diff --git a/app/src/main/java/com/uiuios/aios/activity/PayActivity.java b/app/src/main/java/com/uiuios/aios/activity/PayActivity.java index be883a8..c95f6ff 100644 --- a/app/src/main/java/com/uiuios/aios/activity/PayActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/PayActivity.java @@ -36,19 +36,15 @@ public class PayActivity extends BaseDataBindingActivity { private OrderBean mOrderBean; - @Override - protected int getLayoutId() { - return R.layout.activity_pay; - } @Override - protected boolean setNightMode() { + public boolean setNightMode() { return true; } @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pay); } /** @@ -56,7 +52,6 @@ public class PayActivity extends BaseDataBindingActivity { */ @Override public void initView() { - mBinding = DataBindingUtil.setContentView(this, getLayoutId()); mBinding.tvRefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java index 89588a7..90fdc04 100644 --- a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java @@ -5,13 +5,14 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; import com.uiuios.aios.adapter.AppSelectedAdapter; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.bean.AppSelectBean; import com.uiuios.aios.view.GridSpaceItemDecoration; @@ -21,7 +22,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class QuickAppActivity extends BaseActivity { +public class QuickAppActivity extends BaseDataBindingActivity { private static final String TAG = QuickAppActivity.class.getSimpleName(); public static final String QUICK_APP_KEY = "QuickAppPackageKey"; @@ -34,18 +35,8 @@ public class QuickAppActivity extends BaseActivity { RecyclerView recyclerView; @Override - public int getLayoutId() { - return R.layout.activity_quick_app; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this,R.layout.activity_quick_app); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java b/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java index 306ac97..3f9ba75 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java @@ -16,17 +16,18 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; import com.tuo.customview.VerificationCodeView; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.manager.RemoteManager; import butterknife.BindView; import butterknife.ButterKnife; -public class ScreenLockActivity extends BaseActivity { +public class ScreenLockActivity extends BaseDataBindingActivity { private static final String TAG = ScreenLockActivity.class.getSimpleName(); @@ -86,18 +87,8 @@ public class ScreenLockActivity extends BaseActivity { } @Override - public int getLayoutId() { - return R.layout.activity_screen_lock; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this,R.layout.activity_screen_lock); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java b/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java index 8a33f64..6f3e478 100644 --- a/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java @@ -4,15 +4,15 @@ import android.util.Log; import android.view.View; import android.widget.ImageView; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; -import com.uiuios.aios.adapter.GoodsAdapter; import com.uiuios.aios.adapter.GoodsListAdapter; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.GoodsInfo; import com.uiuios.aios.bean.GoodsList; @@ -27,7 +27,7 @@ import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class SpikeListActivity extends BaseActivity { +public class SpikeListActivity extends BaseDataBindingActivity { @BindView(R.id.recyclerView) RecyclerView recyclerView; @BindView(R.id.iv1) @@ -37,31 +37,9 @@ public class SpikeListActivity extends BaseActivity { private GoodsListAdapter mGoodsAdapter; - @Override - public int getLayoutId() { - getLifecycleSubject().onNext(ActivityEvent.CREATE); - UltimateBarX.statusBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - UltimateBarX.navigationBar(this) - .transparent() - .colorRes(R.color.colorPrimaryDark) - .light(true) - .apply(); - return R.layout.activity_spike_list; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this,R.layout.activity_spike_list); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java b/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java index 56012b2..816921a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java @@ -3,31 +3,20 @@ package com.uiuios.aios.activity; import android.content.Intent; import android.os.Handler; +import androidx.databinding.DataBindingUtil; + import com.uiuios.aios.R; import com.uiuios.aios.activity.main.MainActivity; import com.uiuios.aios.activity.main.PhoneMainActivity; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.utils.Utils; -public class SplashActivity extends BaseActivity { - - /** - * 设置布局 - */ - @Override - public int getLayoutId() { - return R.layout.activity_splash; - } +public class SplashActivity extends BaseDataBindingActivity { @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this, R.layout.activity_splash); } /** diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java index 69e5481..bf72e7f 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java @@ -7,6 +7,7 @@ import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -18,12 +19,11 @@ import com.uiuios.aios.activity.alarmclock.AlarmClockAddActivity; import com.uiuios.aios.alarm.AlarmAdapter; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.dialog.DeleteDialog; import com.uiuios.aios.network.NetInterfaceManager; - import java.util.List; import butterknife.BindView; @@ -31,7 +31,7 @@ import butterknife.ButterKnife; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmView { +public class AlarmActivity extends BaseDataBindingActivity implements AlarmContact.AlarmView { private static final String TAG = AlarmActivity.class.getSimpleName(); @BindView(R.id.cl_exit) @@ -74,23 +74,11 @@ public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmVie private AlarmAdapter mAlarmAdapter; private int mType = 0; - /** - * 设置布局 - */ @Override - public int getLayoutId() { - return R.layout.activity_alarm; + protected void initDataBinding() { + DataBindingUtil.setContentView(this, R.layout.activity_alarm); } - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; - } /** * 初始化视图 */ diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java index 3173b12..a76643b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java @@ -43,12 +43,7 @@ public class PortAlarmActivity extends BaseMvvmActivity soundMap = new HashMap<>(); @Override - public int getLayoutId() { - return R.layout.activity_dialer; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this,R.layout.activity_dialer); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java index b5c6a3e..0c37220 100644 --- a/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java @@ -15,17 +15,17 @@ import android.widget.EditText; import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; - import com.uiuios.aios.R; import com.uiuios.aios.adapter.CityAdapter; import com.uiuios.aios.adapter.DistrictAdapter; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.bean.AddressBean; -import com.uiuios.aios.manager.RemoteManager; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; import java.util.ArrayList; @@ -37,7 +37,7 @@ import java.util.stream.Collectors; import butterknife.BindView; import butterknife.ButterKnife; -public class LocationAcivity extends BaseActivity implements LocationContact.LocationView, CityAdapter.CityCallback, DistrictAdapter.DistrictCallback { +public class LocationAcivity extends BaseDataBindingActivity implements LocationContact.LocationView, CityAdapter.CityCallback, DistrictAdapter.DistrictCallback { @BindView(R.id.bg) ConstraintLayout bg; @@ -80,22 +80,9 @@ public class LocationAcivity extends BaseActivity implements LocationContact.Loc private List mDistrict; private AddressBean mAddressBean; - /** - * 设置布局 - */ @Override - public int getLayoutId() { - return R.layout.activity_location; - } - - @Override - protected boolean setNightMode() { - return false; - } - - @Override - protected boolean setfitWindow() { - return true; + protected void initDataBinding() { + DataBindingUtil.setContentView(this, R.layout.activity_location); } /** @@ -122,7 +109,7 @@ public class LocationAcivity extends BaseActivity implements LocationContact.Loc cl_location.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mAddressBean = new AddressBean(RemoteManager.getInstance().getDistrict()); + mAddressBean = new AddressBean(AmapManager.getInstance().getDistrict()); setIntent(); } }); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java index d3be8a3..f6acd3d 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java @@ -36,7 +36,7 @@ import com.hjq.permissions.XXPermissions; import com.hjq.toast.Toaster; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseActivity; +import com.uiuios.aios.base.BaseDataBindingActivity; import com.uiuios.aios.base.BaseFragmentPagerAdapter; import com.uiuios.aios.bean.AlarmItem; import com.uiuios.aios.bean.DesktopIcon; @@ -45,6 +45,7 @@ import com.uiuios.aios.fragment.AppListFragment; import com.uiuios.aios.fragment.ControlFragment; import com.uiuios.aios.fragment.home.HomeFragment; import com.uiuios.aios.fragment.second.SecondFragment; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.service.NotificationService; import com.uiuios.aios.utils.ApkUtils; @@ -62,7 +63,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public abstract class BaseMainActivity extends BaseActivity implements MainContact.MainView ,RemoteManager.ConnectedListener{ +public abstract class BaseMainActivity extends BaseDataBindingActivity implements MainContact.MainView, RemoteManager.ConnectedListener { private static final String TAG = BaseMainActivity.class.getSimpleName(); private MainPresenter mMainPresenter; @@ -88,11 +89,6 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta private int appListIndex = 3; private int defaultCurrent = 2; - @Override - protected boolean setfitWindow() { - return false; - } - @Override public void onConnected() { setDefaultDesktop(); @@ -100,6 +96,8 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta @Override public void initView() { + getLocationPermission(); + ButterKnife.bind(this); toggleNotificationListenerService(this); mMainPresenter = new MainPresenter(this); @@ -205,9 +203,8 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta @Override public void initData() { - registmNewAppReceiver(); - registerSOSNumberReceiver(); - registerUpdateDesktopReceiver(); + registReceiver(); + mAlarmServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { @@ -386,45 +383,86 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta Permission.WRITE_SETTINGS, Permission.READ_CALL_LOG, Permission.WRITE_CALL_LOG, + Permission.READ_CONTACTS, + Permission.WRITE_CONTACTS, }; private void getPermission() { XXPermissions.with(this) // 申请单个权限 -// .permission(Permission.RECORD_AUDIO) - // 申请多个权限 .permission(permission) + // 申请多个权限 +// .permission(Permission.Group.STORAGE) // 设置权限请求拦截器(局部设置) //.interceptor(new PermissionInterceptor()) // 设置不触发错误检测机制(局部设置) //.unchecked() .request(new OnPermissionCallback() { - @Override public void onGranted(@NonNull List permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); if (!allGranted) { Toaster.show("获取部分权限成功,但部分权限未正常授予"); return; } -// Toaster.show("获取录音和日历权限成功"); - Log.e(TAG, "onGranted: 获取存储权限成功"); + Log.e(TAG, "onGranted: 获取权限成功"); addData(); } @Override public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); if (doNotAskAgain) { - Toaster.show("被永久拒绝授权,请手动授予存储权限"); + Toaster.show("被永久拒绝授权,请手动授予权限"); // 如果是被永久拒绝就跳转到应用权限系统设置页面 XXPermissions.startPermissionActivity(BaseMainActivity.this, permissions); } else { -// Toaster.show("获取录音和日历权限失败"); - Log.e(TAG, "onGranted: 获取存储权限权限失败"); + Log.e(TAG, "onGranted: 获取权限失败"); } } }); } + private String[] mLocationPermission = new String[]{ + Permission.ACCESS_COARSE_LOCATION, + Permission.ACCESS_FINE_LOCATION, + Permission.ACCESS_BACKGROUND_LOCATION, + }; + + private void getLocationPermission() { + XXPermissions.with(this) + // 申请单个权限 + .permission(mLocationPermission) + // 申请多个权限 +// .permission(Permission.Group.STORAGE) + // 设置权限请求拦截器(局部设置) + //.interceptor(new PermissionInterceptor()) + // 设置不触发错误检测机制(局部设置) + //.unchecked() + .request(new OnPermissionCallback() { + @Override + public void onGranted(@NonNull List permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); + if (!allGranted) { + Toaster.show("获取部分权限成功,但部分权限未正常授予"); + return; + } + Log.e(TAG, "onGranted: 获取定位权限成功"); + } + + @Override + public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); +// if (doNotAskAgain) { +// Toaster.show("被永久拒绝授权,请手动授予定位权限"); +// // 如果是被永久拒绝就跳转到应用权限系统设置页面 +// XXPermissions.startPermissionActivity(BaseMainActivity.this, permissions); +// } else { +// Log.e(TAG, "onGranted: 获取定位权限失败"); +// } + } + }); + } private static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners"; @@ -474,8 +512,8 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta @Override protected void onRestart() { super.onRestart(); - mMainPresenter.sendAPPUsage(); - mMainPresenter.sendRunningInfo(); +// mMainPresenter.sendAPPUsage(); +// mMainPresenter.sendRunningInfo(); } @Override @@ -493,16 +531,11 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta protected void onDestroy() { super.onDestroy(); mMainPresenter.detachView(); - if (mNewAppReceiver != null) { - unregisterReceiver(mNewAppReceiver); - } - if (updateDesktopReceiver != null) { - unregisterReceiver(updateDesktopReceiver); - } + unregisterAllReceiver(); RemoteManager.removeListener(this); } - @Override + @Override protected void onSaveInstanceState(@NonNull Bundle outState) { // super.onSaveInstanceState(outState); } @@ -512,7 +545,29 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta // super.onRestoreInstanceState(savedInstanceState); } - private void registmNewAppReceiver() { + private void registReceiver() { + registNewAppReceiver(); + registerSOSNumberReceiver(); + registerUpdateDesktopReceiver(); + registmUpdateAddressReceiver(); + } + + private void unregisterAllReceiver() { + if (mNewAppReceiver != null) { + unregisterReceiver(mNewAppReceiver); + } + if (mSOSNumberReceiver != null) { + unregisterReceiver(mSOSNumberReceiver); + } + if (mUpdateDesktopReceiver != null) { + unregisterReceiver(mUpdateDesktopReceiver); + } + if (mUpdateAddressReceiver != null) { + unregisterReceiver(mUpdateAddressReceiver); + } + } + + private void registNewAppReceiver() { mNewAppReceiver = new NewAppReceiver(); IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); @@ -539,16 +594,16 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta } } - private SOSNumberReceiver sosNumberReceiver; + private SOSNumberReceiver mSOSNumberReceiver; private void registerSOSNumberReceiver() { - if (sosNumberReceiver == null) { - sosNumberReceiver = new SOSNumberReceiver(); + if (mSOSNumberReceiver == null) { + mSOSNumberReceiver = new SOSNumberReceiver(); } IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction("setting_sos"); - registerReceiver(sosNumberReceiver, filter); + registerReceiver(mSOSNumberReceiver, filter); } class SOSNumberReceiver extends BroadcastReceiver { @@ -563,17 +618,17 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta public static final String ACTION_PACKAGE_HIDE = "com.uiui.aios.ACTION_PACKAGE_HIDE"; - private UpdateDesktopReceiver updateDesktopReceiver; + private UpdateDesktopReceiver mUpdateDesktopReceiver; private void registerUpdateDesktopReceiver() { - if (updateDesktopReceiver == null) { - updateDesktopReceiver = new UpdateDesktopReceiver(); + if (mUpdateDesktopReceiver == null) { + mUpdateDesktopReceiver = new UpdateDesktopReceiver(); } IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction("UPDATE_DESKTOP_ICON"); filter.addAction(ACTION_PACKAGE_HIDE); - registerReceiver(updateDesktopReceiver, filter); + registerReceiver(mUpdateDesktopReceiver, filter); } class UpdateDesktopReceiver extends BroadcastReceiver { @@ -585,6 +640,25 @@ public abstract class BaseMainActivity extends BaseActivity implements MainConta } } + private UpdateAddressReceiver mUpdateAddressReceiver; + + private void registmUpdateAddressReceiver() { + mUpdateAddressReceiver = new UpdateAddressReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction(CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION); + registerReceiver(mUpdateAddressReceiver, filter); + } + + class UpdateAddressReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION.equals(action)) { + AmapManager.getInstance().startLocation(); + } + } + } + @Override public void setSystemSettings() { // mMainPresenter.getDesktopLayout(); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java index 952bc4b..6b34f8e 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java @@ -5,28 +5,24 @@ import android.os.Bundle; import android.util.Log; import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; public class MainActivity extends BaseMainActivity { private static final String TAG = MainActivity.class.getSimpleName(); - @Override - public int getLayoutId() { - return R.layout.activity_main; - } - - @Override - protected boolean setNightMode() { - return false; - } - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG, "onCreate: "); } + @Override + protected void initDataBinding() { + DataBindingUtil.setContentView(this, R.layout.activity_main); + } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java index f223b02..d933893 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java @@ -1,17 +1,14 @@ package com.uiuios.aios.activity.main; +import androidx.databinding.DataBindingUtil; + import com.uiuios.aios.R; public class PhoneMainActivity extends BaseMainActivity { private static final String TAG = PhoneMainActivity.class.getSimpleName(); @Override - public int getLayoutId() { - return R.layout.phone_activity_main; - } - - @Override - protected boolean setNightMode() { - return false; + protected void initDataBinding() { + DataBindingUtil.setContentView(this, R.layout.phone_activity_main); } } diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java index ddcdadf..7807d8b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java @@ -34,6 +34,7 @@ import com.uiuios.aios.bean.JsonBean; import com.uiuios.aios.bean.MapGeoResult; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivityWeatherBinding; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.utils.DataUtil; import com.uiuios.aios.utils.TimeUtils; @@ -94,16 +95,6 @@ public class WeatherActivity extends BaseMvvmActivity { - public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); +public abstract class BaseFragment extends BaseRxFragment { protected boolean isViewInitiated; protected boolean isVisibleToUser; protected boolean isDataInitiated; - @Override - @NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); - } - - @Override - @NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindFragment(lifecycleSubject); - } - - @Override - @CallSuper - public void onAttach(android.app.Activity activity) { - super.onAttach(activity); - lifecycleSubject.onNext(FragmentEvent.ATTACH); - } - - @Override - @CallSuper - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE); - } @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -83,65 +34,11 @@ public abstract class BaseFragment extends Fragment implements LifecycleProvider public boolean prepareFetchData(boolean forceUpdate) { if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) { fetchData(); + //注释掉保证每次都更新数据 // isDataInitiated = true; return true; } return false; } - @Override - @CallSuper - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); - } - - @Override - @CallSuper - public void onStart() { - super.onStart(); - lifecycleSubject.onNext(FragmentEvent.START); - } - - @Override - @CallSuper - public void onResume() { - super.onResume(); - lifecycleSubject.onNext(FragmentEvent.RESUME); - } - - @Override - @CallSuper - public void onPause() { - lifecycleSubject.onNext(FragmentEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - public void onStop() { - lifecycleSubject.onNext(FragmentEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - public void onDestroyView() { - lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); - super.onDestroyView(); - } - - @Override - @CallSuper - public void onDestroy() { - lifecycleSubject.onNext(FragmentEvent.DESTROY); - super.onDestroy(); - } - - @Override - @CallSuper - public void onDetach() { - lifecycleSubject.onNext(FragmentEvent.DETACH); - super.onDetach(); - } } diff --git a/app/src/main/java/com/uiuios/aios/base/BaseLazyFragment.java b/app/src/main/java/com/uiuios/aios/base/BaseLazyFragment.java new file mode 100644 index 0000000..46d6253 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/base/BaseLazyFragment.java @@ -0,0 +1,100 @@ +package com.uiuios.aios.base; + + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +/** + * Author: wangjie + * Email: tiantian.china.2@gmail.com + * Date: 1/23/15. + */ +public abstract class BaseLazyFragment extends Fragment { + private static final String TAG = BaseLazyFragment.class.getSimpleName(); + private boolean isPrepared; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + initPrepare(); + } + + + /** + * 第一次onResume中的调用onUserVisible避免操作与onFirstUserVisible操作重复 + */ + private boolean isFirstResume = true; + + @Override + public void onResume() { + super.onResume(); + if (isFirstResume) { + isFirstResume = false; + return; + } + if (getUserVisibleHint()) { + onUserVisible(); + } + } + + @Override + public void onPause() { + super.onPause(); + if (getUserVisibleHint()) { + onUserInvisible(); + } + } + + private boolean isFirstVisible = true; + private boolean isFirstInvisible = true; + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (isVisibleToUser) { + if (isFirstVisible) { + isFirstVisible = false; + initPrepare(); + } else { + onUserVisible(); + } + } else { + if (isFirstInvisible) { + isFirstInvisible = false; + onFirstUserInvisible(); + } else { + onUserInvisible(); + } + } + } + + public synchronized void initPrepare() { + if (isPrepared) { + onFirstUserVisible(); + } else { + isPrepared = true; + } + } + + /** + * 第一次fragment可见(进行初始化工作) + */ + public abstract void onFirstUserVisible(); + + /** + * fragment可见(切换回来或者onResume) + */ + public abstract void onUserVisible(); + + /** + * 第一次fragment不可见(不建议在此处理事件) + */ + public abstract void onFirstUserInvisible(); + + /** + * fragment不可见(切换掉或者onPause) + */ + public abstract void onUserInvisible(); + +} diff --git a/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java index fa9bc71..caea2ec 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java +++ b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java @@ -6,6 +6,7 @@ import androidx.annotation.CallSuper; import androidx.annotation.Nullable; import com.uiuios.aios.R; +import com.uiuios.aios.base.rx.BaseRxActivity; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; public abstract class BaseTransparentActivity extends BaseRxActivity { @@ -41,10 +42,16 @@ public abstract class BaseTransparentActivity extends BaseRxActivity { /** * @return 是否是黑色状态栏 */ - protected abstract boolean setNightMode(); +// protected abstract boolean setNightMode(); + public boolean setNightMode() { + return false; + } /** * @return 是否是入侵 */ - protected abstract boolean setfitWindow(); +// protected abstract boolean setNightMode(); + public boolean setfitWindow() { + return false; + } } \ No newline at end of file diff --git a/app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxActivity.java similarity index 98% rename from app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java rename to app/src/main/java/com/uiuios/aios/base/rx/BaseRxActivity.java index 001cef2..a4bcf7b 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java +++ b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.base; +package com.uiuios.aios.base.rx; import android.os.Bundle; diff --git a/app/src/main/java/com/uiuios/aios/base/rx/BaseRxFragment.java b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxFragment.java new file mode 100644 index 0000000..a5b837a --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxFragment.java @@ -0,0 +1,123 @@ +package com.uiuios.aios.base.rx; + +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.CallSuper; +import androidx.annotation.CheckResult; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.trello.rxlifecycle4.LifecycleProvider; +import com.trello.rxlifecycle4.LifecycleTransformer; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.trello.rxlifecycle4.android.RxLifecycleAndroid; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +/** + * {@link com.trello.rxlifecycle4.components.RxFragment} + * copied form RxFragment} + */ +public class BaseRxFragment extends Fragment implements LifecycleProvider { + private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + + public BehaviorSubject getLifecycleSubject() { + return lifecycleSubject; + } + + @Override + @NonNull + @CheckResult + public final Observable lifecycle() { + return lifecycleSubject.hide(); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) { + return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + } + + @Override + @NonNull + @CheckResult + public final LifecycleTransformer bindToLifecycle() { + return RxLifecycleAndroid.bindFragment(lifecycleSubject); + } + + @Override + @CallSuper + public void onAttach(android.app.Activity activity) { + super.onAttach(activity); + lifecycleSubject.onNext(FragmentEvent.ATTACH); + } + + @Override + @CallSuper + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE); + } + + @Override + @CallSuper + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW); + } + + @Override + @CallSuper + public void onStart() { + super.onStart(); + lifecycleSubject.onNext(FragmentEvent.START); + } + + @Override + @CallSuper + public void onResume() { + super.onResume(); + lifecycleSubject.onNext(FragmentEvent.RESUME); + } + + @Override + @CallSuper + public void onPause() { + lifecycleSubject.onNext(FragmentEvent.PAUSE); + super.onPause(); + } + + @Override + @CallSuper + public void onStop() { + lifecycleSubject.onNext(FragmentEvent.STOP); + super.onStop(); + } + + @Override + @CallSuper + public void onDestroyView() { + lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW); + super.onDestroyView(); + } + + @Override + @CallSuper + public void onDestroy() { + lifecycleSubject.onNext(FragmentEvent.DESTROY); + super.onDestroy(); + } + + @Override + @CallSuper + public void onDetach() { + lifecycleSubject.onNext(FragmentEvent.DETACH); + super.onDetach(); + } +} + diff --git a/app/src/main/java/com/uiuios/aios/base/BaseService.java b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxService.java similarity index 90% rename from app/src/main/java/com/uiuios/aios/base/BaseService.java rename to app/src/main/java/com/uiuios/aios/base/rx/BaseRxService.java index 82c0345..effe69d 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseService.java +++ b/app/src/main/java/com/uiuios/aios/base/rx/BaseRxService.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.base; +package com.uiuios.aios.base.rx; import android.app.Service; import android.content.Intent; @@ -15,10 +15,10 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.subjects.BehaviorSubject; -public abstract class BaseService extends Service implements LifecycleProvider { +public abstract class BaseRxService extends Service implements LifecycleProvider { public final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); - public BaseService() { + public BaseRxService() { super(); } diff --git a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java index bc22dfd..f879222 100644 --- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java +++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java @@ -17,6 +17,9 @@ public class CommonConfig { public static final String LOCK_SCREEN_PASSWORD = "aios_lockScreenPasswordKey"; public static final String DEFAULT_PASSWORD = "6666"; + /*让桌面更新定位信息*/ + public static final String UIUIAIOS_UPDATE_ADDRESS_ACTION = "UIUIAIOS_UPDATE_ADDRESS"; + /*应用市场所有包名*/ public static final String UIUI_APPSTORE_PACKAGE_LIST = "UIUI_APPSTORE_PACKAGE_LIST_KEY"; /*首次进入桌面*/ diff --git a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java index 6bc6cc1..ddebac8 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java @@ -257,7 +257,7 @@ public class AppListFragment extends BaseFragment { ApkUtils.openPackage(v.getContext(), desktopIcon.getPackage(), desktopIcon.getClazz()); AppUsedTimeUtils.getInstance().setAppPackageName(desktopIcon.getPackage()); AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - SendRunningApp(getActivity()); +// SendRunningApp(getActivity()); // } break; case "com.uiuios.aios": @@ -267,7 +267,7 @@ public class AppListFragment extends BaseFragment { ApkUtils.openPackage(v.getContext(), desktopIcon.getPackage(), desktopIcon.getClazz()); AppUsedTimeUtils.getInstance().setAppPackageName(desktopIcon.getPackage()); AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - SendRunningApp(getActivity()); +// SendRunningApp(getActivity()); break; default: int setting_other_appInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1); @@ -279,7 +279,7 @@ public class AppListFragment extends BaseFragment { ApkUtils.openPackage(v.getContext(), desktopIcon.getPackage(), desktopIcon.getClazz()); AppUsedTimeUtils.getInstance().setAppPackageName(desktopIcon.getPackage()); AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis()); - SendRunningApp(getActivity()); +// SendRunningApp(getActivity()); } } } @@ -311,7 +311,7 @@ public class AppListFragment extends BaseFragment { private void updateAppDisableStatus(String pkg, String label) { AppManager.getInstance().addAddPakcage(pkg); NetInterfaceManager.getInstance().getUpdateAppIconObservable(pkg, label, 0) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), FragmentEvent.DESTROY)) .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { diff --git a/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java b/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java index 6c5ac7f..697805d 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java @@ -49,6 +49,7 @@ import com.uiuios.aios.activity.main.PhoneMainActivity; import com.uiuios.aios.base.BaseFragment; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.disklrucache.CacheHelper; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.utils.BrightnessUtils; @@ -106,7 +107,6 @@ public class ControlFragment extends BaseFragment { private View rootView; private Context mContext; private ContentResolver mCRv; - private CacheHelper mCacheHelper; // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -180,7 +180,6 @@ public class ControlFragment extends BaseFragment { } mContext = rootView.getContext(); mCRv = mContext.getContentResolver(); - mCacheHelper = new CacheHelper(mContext); ButterKnife.bind(this, rootView); initView(); initData(); @@ -845,7 +844,7 @@ public class ControlFragment extends BaseFragment { cl_location.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - RemoteManager.getInstance().getLocation(); + AmapManager.getInstance().startLocation(); } }); } diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java index f36ca2e..f1c2cb8 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java @@ -71,6 +71,7 @@ import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.dialog.PasswordDialog; import com.uiuios.aios.dialog.SingleDialog; import com.uiuios.aios.disklrucache.CacheHelper; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.network.UrlAddress; @@ -161,6 +162,8 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom ImageView iv_battery; private static final String TAG = CustomFragment.class.getSimpleName(); + private MMKV mMMKV= MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + // private int[] mShaderColors = new int[]{0xFFfa3db5, 0xFFF8867E, 0xFFF79F6B, 0xFFF79F6B, 0xFFF79F6B, 0xFFF8867E, 0xFFfa3db5}; private int[] mShaderColors = new int[]{0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192}; private int[] mShaderColorsRed = new int[]{0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000}; @@ -169,7 +172,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom private NotificationAdapter notificationAdapter; // private AlarmClockAdapter alarmClockAdapter; private SOSNnmberAdapter sosNnmberAdapter; - private MMKV mMMKV; private Activity mContext; private ContentResolver mCRv; private CacheHelper mCacheHelper; @@ -219,14 +221,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } - mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); } @Override public void fetchData() { Log.e(TAG, "fetchData: "); initData(); - RemoteManager.getInstance().getLocation(); + AmapManager.getInstance().startLocation(); } @Override @@ -376,26 +377,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom iv_battery.setImageBitmap(bitmap); } - private BroadcastReceiver mbatteryReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - Log.i(TAG, "onReceive: " + action); - if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { - int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN); - if (status == BatteryManager.BATTERY_STATUS_CHARGING) { - if (rootView != null) { -// iv_charging.setVisibility(View.VISIBLE); - } - } else { - if (rootView != null) { -// iv_charging.setVisibility(View.GONE); - } - } - } - } - }; - //监听时间和日期变化 public void registerTimeReceiver() { mTimeChangedReceiver = new TimeChangedReceiver(); @@ -460,7 +441,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom mContext = (Activity) rootView.getContext(); mCustomPresenter = new CustomPresenter(mContext); mCustomPresenter.attachView(this); - mCustomPresenter.setLifecycle(lifecycleSubject); + mCustomPresenter.setLifecycle(getLifecycleSubject()); mCacheHelper = new CacheHelper(mContext); mCRv = mContext.getContentResolver(); ButterKnife.bind(this, rootView); @@ -476,7 +457,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom registerTimeReceiver(); wifi_ssid.requestFocus(); setTiem(); - mContext.registerReceiver(mbatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); if (Settings.Global.getInt(mCRv, "is_aihealth", 0) == 1) { cl_appstore.setVisibility(View.GONE); cl_ai.setVisibility(View.VISIBLE); @@ -484,19 +464,12 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom cl_appstore.setVisibility(View.VISIBLE); cl_ai.setVisibility(View.GONE); } -// tv_battery.setText(Utils.getBatteryLevel(mContext) + "%"); cpv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { killBackgroundApp(); } }); -// cl_alarm.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// ApkUtils.openPackage(mContext, "com.alarmclock.uiui"); -// } -// }); cl_guard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -548,20 +521,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom @Override public void onClick(View v) { killBackgroundApp(); -// SingleDialog dialog = new SingleDialog(mContext); -// dialog.setTitle("温馨提示") -// .setMessage("此功能暂未上线") -// .setPositive("确定") -//// .setNegtive("拒绝") -//// .setSingle(true) -// -// .setOnClickBottomListener(new SingleDialog.OnClickBottomListener() { -// @Override -// public void onPositiveClick() { -// dialog.dismiss(); -// } -// }); -// dialog.show(); } }); cl_health.setOnClickListener(new View.OnClickListener() { @@ -610,7 +569,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom cl_appstore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { -// ApkUtils.openPackage(mContext, "com.uiuios.appstore"); ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.MainActivity"); } }); @@ -620,7 +578,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); -// startActivity(new Intent(mContext, WiFiManagerActivity.class)); } }); cl_activation.setOnClickListener(new View.OnClickListener() { @@ -629,12 +586,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom ApkUtils.openPackage(mContext, "com.uiuios.sn"); } }); -// cl_exit.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View view) { -// showPassword(); -// } -// }); cl_control.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -714,42 +665,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } private void checkContact() { -// int aole_call_forbid = Settings.System.getInt(mContext.getContentResolver(), "aole_call_forbid", 0); -// if (aole_call_forbid == 1) { -// Toaster.show("电话功能被禁用"); -// return; -// } startActivity(new Intent(mContext, ContactActivity.class)); } private void initData() { -// NetInterfaceManager.getInstance().getUserAvatarInfoControl() -// .subscribe(new Observer>() { -// @Override -// public void onSubscribe(@NonNull Disposable d) { -// Log.e("getUserAvatarInfoControl", "onSubscribe: "); -// } -// -// @Override -// public void onNext(@NonNull BaseResponse userAvatarInfoBaseResponse) { -// Log.e("getUserAvatarInfoControl", "onNext: " + userAvatarInfoBaseResponse); -// if (userAvatarInfoBaseResponse.code == 200) { -// if (!mContext.isDestroyed()) { -//// Glide.with(iv_head).load(userAvatarInfoBaseResponse.data.getAvatar()).into(iv_head); -// } -// } -// } -// -// @Override -// public void onError(@NonNull Throwable e) { -// Log.e("getUserAvatarInfoControl", "onError: " + e.getMessage()); -// } -// -// @Override -// public void onComplete() { -// Log.e("getUserAvatarInfoControl", "onComplete: "); -// } -// }); mCustomPresenter.getSnInfo(); initAmap(); getAlarmCache(); @@ -768,19 +687,9 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom @Override public void onResume() { super.onResume(); -// setAlarm(); + initAmap(); setSosNumber(); setQuickApp(); - checkActivation(); - } - - private void checkActivation() { - int activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); - if (activation == 0) { -// tv_name.setText("未激活"); - } else { -// tv_name.setText("已激活"); - } } private String quickAppPackagesName; @@ -864,44 +773,14 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } } - private void setAlarm() { - if (rootView == null) return; - if (alarmItemList == null) { -// tv_add.setVisibility(View.VISIBLE); -// rv_clock.setVisibility(View.GONE); - } else { -// tv_add.setVisibility(View.GONE); -// rv_clock.setVisibility(View.VISIBLE); -// alarmClockAdapter.setAlarmItemList(alarmItemList); - } - } - private void initAmap() { - String city = RemoteManager.getInstance().getCity(); + String city = AmapManager.getInstance().getCity(); tv_location.setText(city); - getweather(RemoteManager.getInstance().getLongitude(), RemoteManager.getInstance().getLatitude()); + getweather(AmapManager.getInstance().getLocationTude()); } private void getAlarm() { startActivity(new Intent(mContext, PortAlarmActivity.class)); -// NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() { -// @Override -// public void setAlarmClock(List alarmClockList) { -// startActivity(new Intent(mContext, AlarmClockActivity.class)); -// } -// -// @Override -// public void setAlarmClockEmpty() { -// showNoData("温馨提示", "请在小程序上设置爱心闹钟"); -// rv_noti.setVisibility(View.GONE); -// iv_note_nodata.setVisibility(View.VISIBLE); -// } -// -// @Override -// public void onError() { -// -// } -// }); } private void getAlarmCache() { @@ -988,8 +867,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom private String nowString; - private void getweather(double longitude, double latitude) { - String location = longitude + "," + latitude; + private void getweather(String location) { Log.e(TAG, "getweather: " + location); /** * 实况天气数据 @@ -1114,20 +992,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom } private void killBackgroundProcesses(String packageName) { -// ActivityManager activityManager; -// try { -// activityManager = (ActivityManager) -// mContext.getSystemService(Context.ACTIVITY_SERVICE); -// activityManager.killBackgroundProcesses(packageName); -// Method forceStopPackage = activityManager.getClass() -// .getDeclaredMethod("forceStopPackage", String.class); -//// Log.e(TAG, "killBackgroundProcesses: " + packageName); -// forceStopPackage.setAccessible(true); -// forceStopPackage.invoke(activityManager, packageName); -// } catch (Exception e) { -// Log.e(TAG, "killBackgroundProcesses: " + e.getMessage()); -// e.printStackTrace(); -// } RemoteManager.getInstance().killBackgroundProcesses(packageName); } @@ -1152,9 +1016,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom if (batteryReceiver != null) { mContext.unregisterReceiver(batteryReceiver); } - if (mbatteryReceiver != null) { - mContext.unregisterReceiver(mbatteryReceiver); - } if (mAlarmClockReceiver != null) { mContext.unregisterReceiver(mAlarmClockReceiver); } diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java index 4c227d2..8c8f43b 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java @@ -48,6 +48,7 @@ import com.uiuios.aios.bean.Contact; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.dialog.SingleDialog; +import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.push.PushManager; @@ -187,7 +188,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV mContext = (FragmentActivity) rootView.getContext(); mHomePresenter = new HomePresenter(mContext); mHomePresenter.attachView(this); - mHomePresenter.setLifecycle(lifecycleSubject); + mHomePresenter.setLifecycle(getLifecycleSubject()); ButterKnife.bind(this, rootView); initView(); @@ -499,9 +500,9 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV } private void initAmap() { - String city = RemoteManager.getInstance().getCity(); + String city = AmapManager.getInstance().getCity(); tv_location.setText(city); - getweather(RemoteManager.getInstance().getLongitude(), RemoteManager.getInstance().getLatitude()); + getweather(AmapManager.getInstance().getLocationTude()); } @@ -515,8 +516,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV private String nowString; - private void getweather(double longitude, double latitude) { - String location = longitude + "," + latitude; + private void getweather(String location) { Log.e(TAG, "getweather: " + location); /** * 实况天气数据 diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java index 775d978..2b8e532 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java @@ -165,7 +165,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, ButterKnife.bind(this, rootView); mPresenter = new SecondPresenter(mContext); mPresenter.attachView(this); - mPresenter.setLifecycle(lifecycleSubject); + mPresenter.setLifecycle(getLifecycleSubject()); initView(); initData(); } diff --git a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java new file mode 100644 index 0000000..53f81fb --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java @@ -0,0 +1,217 @@ +package com.uiuios.aios.manager; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.amap.api.location.AMapLocation; +import com.amap.api.location.AMapLocationClient; +import com.amap.api.location.AMapLocationClientOption; +import com.amap.api.location.AMapLocationListener; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.bean.MapBean; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.gson.GsonUtils; +import com.uiuios.aios.network.NetInterfaceManager; + +import java.lang.reflect.Type; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; + +public class AmapManager { + private static final String TAG = AmapManager.class.getSimpleName(); + + MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @SuppressLint("StaticFieldLeak") + private static AmapManager sInstance; + private Context mContext; + + private AMapLocationClient mAMapLocationClient; + private AMapLocationClientOption mAMapLocationClientOption; + private MapBean mMapBean; + + private AmapManager(Context context) { + this.mContext = context; + initAmap(); + } + + public static void init(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + if (sInstance == null) { + sInstance = new AmapManager(context); + } + } + + public static AmapManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init AmapManager first"); + } + + return sInstance; + } + + private AMapLocationClientOption getDefaultOption() { + if (mAMapLocationClientOption == null) { + mAMapLocationClientOption = new AMapLocationClientOption(); + } + mAMapLocationClientOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn); + //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。 + mAMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); + mAMapLocationClientOption.setNeedAddress(true); + //获取一次定位结果: + //该方法默认为false。 + mAMapLocationClientOption.setOnceLocation(true); + //获取最近3s内精度最高的一次定位结果: + //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。 + // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。 + mAMapLocationClientOption.setOnceLocationLatest(true); + return mAMapLocationClientOption; + } + + public void initAmap() { + if (mAMapLocationClient == null) { + mAMapLocationClient = new AMapLocationClient(mContext); + } + mAMapLocationClient.setLocationOption(getDefaultOption()); + + //设置定位监听 + mAMapLocationClient.setLocationListener(mAMapLocationListener); + //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效 + + startLocation(); + + String jsonString = mMMKV.decodeString(CommonConfig.MAP_LOCATION_JSON_KEY, ""); + if (!TextUtils.isEmpty(jsonString)) { + Gson gson = new Gson(); + Type type = new TypeToken() { + }.getType(); + mMapBean = gson.fromJson(jsonString, type); + } else { + Log.e(TAG, "initAmap: jsonString is empty"); + } + + } + + public void startLocation() { + mAMapLocationClient.stopLocation(); + mAMapLocationClient.startLocation(); + Log.e(TAG, "initAmap: " + "startLocation"); + } + + private AMapLocationListener mAMapLocationListener = new AMapLocationListener() { + @Override + public void onLocationChanged(AMapLocation aMapLocation) { + StringBuilder sb = new StringBuilder(); + //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 + if (aMapLocation.getErrorCode() == 0) { + Log.e(TAG, "onLocationChanged: " + "定位成功"); + updateAddress(aMapLocation); + mMapBean = getMapBean(aMapLocation); + saveMapResult(mMapBean); + LiveEventBus + .get("MapBean") + .post(mMapBean); + Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress()); + sb.append(aMapLocation.getAddress()).append("\n"); + + } else { + //定位失败 + sb.append("定位失败" + "\n"); + sb.append(aMapLocation.getErrorInfo()); + Log.e(TAG, "onLocationChanged: " + "定位失败"); + } + Log.e(TAG, "amap: " + sb.toString()); + } + }; + + private void updateAddress(AMapLocation aMapLocation) { + NetInterfaceManager.getInstance().getUpdateAddressObservable(aMapLocation.getAddress() + , aMapLocation.getLongitude(), aMapLocation.getLatitude() + ) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("updateAddress", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("updateAddress", "onNext: " + baseResponse); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("updateAddress", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("updateAddress", "onComplete: "); + } + }); + } + + public String getLocationTude() { + if (mMapBean != null) { + return mMapBean.getLongitude() + "," + mMapBean.getLatitude(); + } else { + startLocation(); + return CommonConfig.DEFAULT_LOCATION_TUDE; + } + } + + public String getDistrict() { + if (mMapBean != null) { + return mMapBean.getDistrict(); + } else { + startLocation(); + return CommonConfig.DEFAULT_LOCATION_DISTRICT; + } + } + + public String getCity() { + if (mMapBean != null) { + return mMapBean.getCity(); + } else { + startLocation(); + return CommonConfig.DEFAULT_LOCATION_DISTRICT; + } + } + + private MapBean getMapBean(AMapLocation location) { + MapBean mapBean = new MapBean(); + mapBean.setLongitude(location.getLongitude()); + mapBean.setLatitude(location.getLatitude()); + mapBean.setAdcode(location.getAdCode()); + mapBean.setAddress(location.getAddress()); + mapBean.setCity(location.getCity()); + mapBean.setCityCode(location.getCityCode()); + mapBean.setCountry(location.getCountry()); + mapBean.setCountryCode(location.getAdCode()); + mapBean.setDistrict(location.getDistrict()); + mapBean.setProvince(location.getProvince()); + mapBean.setStreet(location.getStreet()); + mapBean.setStreetNumber(location.getStreetNum()); + mapBean.setTown(location.getStreet()); + mapBean.setLocationDescribe(location.getLocationDetail()); + Log.e(TAG, "getMapBean: " + GsonUtils.toJSONString(mapBean)); + return mapBean; + + } + + private void saveMapResult(MapBean mapBean) { + Log.e(TAG, "saveMapResult: " + GsonUtils.toJSONString(mapBean)); + mMMKV.encode(CommonConfig.MAP_LOCATION_JSON_KEY, GsonUtils.toJSONString(mapBean)); + } + +} diff --git a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java index 2fc2dd1..a125a86 100644 --- a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java @@ -7,39 +7,28 @@ import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; import android.os.RemoteException; -import android.text.TextUtils; import android.util.Log; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; -import com.uiuios.aios.BuildConfig; -import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.disklrucache.CacheHelper; import com.uiuios.sn.IGetInfoInterface; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; public class RemoteManager { private static final String TAG = RemoteManager.class.getSimpleName(); - private static final String SN_KEY = "sn_serial_key"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @SuppressLint("StaticFieldLeak") private static RemoteManager sInstance; private Context mContext; - private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private static boolean mServiceConnected = false; - private CacheHelper mCacheHelper; - private IGetInfoInterface mGetInfoInterface; + private IGetInfoInterface mIGetInfoInterface; private ServiceConnection mIGetInfoConnection; private RemoteManager(Context context) { @@ -47,12 +36,11 @@ public class RemoteManager { throw new RuntimeException("Context is NULL"); } this.mContext = context; - this.mCacheHelper = new CacheHelper(context); mIGetInfoConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.e(TAG, "onServiceConnected: mIGetInfoConnection"); - mGetInfoInterface = IGetInfoInterface.Stub.asInterface(service); + mIGetInfoInterface = IGetInfoInterface.Stub.asInterface(service); mServiceConnected = true; for (ConnectedListener listener : mListeners) { if (listener != null) { @@ -60,20 +48,19 @@ public class RemoteManager { } } try { - String sn = mGetInfoInterface.getSerial(); + String sn = mIGetInfoInterface.getSerial(); CrashReport.setDeviceModel(mContext, sn); mMMKV.encode(SN_KEY, sn); Log.e(TAG, "onServiceConnected: sn = " + sn); } catch (RemoteException e) { e.printStackTrace(); } - getLocation(); } @Override public void onServiceDisconnected(ComponentName name) { Log.e(TAG, "onServiceDisconnected: mIGetInfoConnection"); - mGetInfoInterface = null; + mIGetInfoInterface = null; mServiceConnected = false; bindInfoService(); } @@ -117,7 +104,7 @@ public class RemoteManager { } private void bindInfoService() { - if (mGetInfoInterface == null) { + if (mIGetInfoInterface == null) { //这是连接aidl服务的代码 Intent intent = new Intent(); intent.setAction("com.uiuios.sn.IGetInfoInterface"); @@ -132,9 +119,9 @@ public class RemoteManager { */ public String getSerial() { // if (BuildConfig.DEBUG) return "MTK0002306120556370"; - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - return mGetInfoInterface.getSerial(); + return mIGetInfoInterface.getSerial(); } catch (Exception e) { Log.e(TAG, "getSerial: " + e.getMessage()); } @@ -144,105 +131,10 @@ public class RemoteManager { return mMMKV.decodeString(SN_KEY, ""); } - public void getLocation() { - if (mGetInfoInterface != null) { - try { - String jsonString = mGetInfoInterface.getMapResult(); - mMMKV.encode(CommonConfig.MAP_LOCATION_JSON_KEY, jsonString); - } catch (Exception e) { - Log.e(TAG, "getMapResult: " + e.getMessage()); - } - } else { - bindInfoService(); - } - } - - public MapBean getMapBean() { - String jsonString = mMMKV.decodeString(CommonConfig.MAP_LOCATION_JSON_KEY); - if (TextUtils.isEmpty(jsonString)) { - return null; - } else { - Gson gson = new Gson(); - Type type = new TypeToken() { - }.getType(); - MapBean mapBean = gson.fromJson(jsonString, type); - mMMKV.encode(CommonConfig.MAP_ADDRESS_KEY, mapBean.getAddress() + mapBean.getLocationDescribe()); - mMMKV.encode(CommonConfig.MAP_LONGITUDE_KEY, String.valueOf(mapBean.getLongitude())); - mMMKV.encode(CommonConfig.MAP_LATITUDE_KEY, String.valueOf(mapBean.getLatitude())); - mMMKV.encode(CommonConfig.MAP_PROVINCE_KEY, mapBean.getProvince()); - mMMKV.encode(CommonConfig.MAP_CITY_KEY, mapBean.getCity()); - mMMKV.encode(CommonConfig.MAP_DISTRICT_KEY, mapBean.getDistrict()); - mMMKV.encode(CommonConfig.MAP_STREET_KEY, mapBean.getTown() + mapBean.getStreet()); - mMMKV.encode(CommonConfig.MAP_LOCATION_DESCRIBE_KEY, mapBean.getStreet() + mapBean.getLocationDescribe()); - return mapBean; - } - } - - public String getCity() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "北京"; - } else { - return mapBean.getCity(); - } - } - - - public String getCityDistrict() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "北京"; - } else { - return mapBean.getCity() + "\t" + mapBean.getDistrict(); - } - } - - public String getDistrict() { - getLocation(); - MapBean mapBean = getMapBean(); - if (mapBean == null) { - return "北京"; - } else { - return mapBean.getDistrict(); - } - } - - public double getLongitude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return 0.0; - } else { - return mapBean.getLongitude(); - } - } - - public double getLatitude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return 0.0; - } else { - return mapBean.getLatitude(); - } - } - - public String getLocationTude() { - MapBean mapBean = getMapBean(); - if (mapBean == null) { - getLocation(); - return "0.0"; - } else { - return mapBean.getLongitude() + "," + mapBean.getLatitude(); - } - } - public boolean putSystemInt(String name, int value) { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - return mGetInfoInterface.SystemPutInt(name, value); + return mIGetInfoInterface.SystemPutInt(name, value); } catch (Exception e) { Log.e(TAG, "putSystemInt: " + e.getMessage()); } @@ -253,9 +145,9 @@ public class RemoteManager { } public void killBackgroundProcesses(String pkg) { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - mGetInfoInterface.killBackgroundProcesses(pkg); + mIGetInfoInterface.killBackgroundProcesses(pkg); } catch (Exception e) { Log.e(TAG, "killBackgroundProcesses: " + e.getMessage()); } @@ -265,9 +157,9 @@ public class RemoteManager { } public String getConnectWifiSsid() { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - return mGetInfoInterface.getWifiSsid(); + return mIGetInfoInterface.getWifiSsid(); } catch (Exception e) { Log.e(TAG, "killBackgroundProcesses: " + e.getMessage()); } @@ -278,9 +170,9 @@ public class RemoteManager { } public String getBluetoothDeviceName() { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - return mGetInfoInterface.getBluetoothSsid(); + return mIGetInfoInterface.getBluetoothSsid(); } catch (Exception e) { Log.e(TAG, "killBackgroundProcesses: " + e.getMessage()); } @@ -291,9 +183,9 @@ public class RemoteManager { } public void openLauncher3() { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - mGetInfoInterface.openLauncher3(); + mIGetInfoInterface.openLauncher3(); } catch (Exception e) { Log.e(TAG, "openLauncher3: " + e.getMessage()); } @@ -303,9 +195,9 @@ public class RemoteManager { } public void setDefaultDesktop(String pkgName, String className) { - if (mGetInfoInterface != null) { + if (mIGetInfoInterface != null) { try { - mGetInfoInterface.setDefaultDesktop(pkgName, className); + mIGetInfoInterface.setDefaultDesktop(pkgName, className); } catch (Exception e) { Log.e(TAG, "setDefaultDesktop: " + e.getMessage()); } diff --git a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java index 4f45630..896e5b5 100644 --- a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java @@ -77,6 +77,7 @@ import com.uiuios.aios.network.api.sn.SnInfoApi; import com.uiuios.aios.network.api.sn.SosRecordApi; import com.uiuios.aios.network.api.sn.SendScreenshotApi; import com.uiuios.aios.network.api.sn.SettingApi; +import com.uiuios.aios.network.api.sn.UpdateAddressApi; import com.uiuios.aios.network.api.sn.UpdateAlarmClockApi; import com.uiuios.aios.network.api.UpdateAppIconApi; import com.uiuios.aios.network.api.desktop.UpdateDesktopApi; @@ -511,6 +512,13 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable getUpdateAddressObservable(String address, double longitude, double latitude) { + return mRetrofit.create(UpdateAddressApi.class) + .updateAddress(RemoteManager.getInstance().getSerial(), address, longitude, latitude) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public RegionListApi getRegionListApi() { return mRetrofit.create(RegionListApi.class); diff --git a/app/src/main/java/com/uiuios/aios/network/UrlAddress.java b/app/src/main/java/com/uiuios/aios/network/UrlAddress.java index 18a9aad..2135c45 100644 --- a/app/src/main/java/com/uiuios/aios/network/UrlAddress.java +++ b/app/src/main/java/com/uiuios/aios/network/UrlAddress.java @@ -24,6 +24,8 @@ public class UrlAddress { public final static String GET_SETTINGS = "control/getSetting"; /*sos记录*/ public static final String SOS_RECORD = "sosRecord"; + /*上传地址信息*/ + public static final String UPDATE_ADDRESS = "sn/update-address"; /*获取抢购列表*/ public static final String GET_GOODS_LIST = "getGoodsList"; diff --git a/app/src/main/java/com/uiuios/aios/network/api/sn/UpdateAddressApi.java b/app/src/main/java/com/uiuios/aios/network/api/sn/UpdateAddressApi.java new file mode 100644 index 0000000..5a1f6d9 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/network/api/sn/UpdateAddressApi.java @@ -0,0 +1,20 @@ +package com.uiuios.aios.network.api.sn; + +import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface UpdateAddressApi { + @FormUrlEncoded + @POST(UrlAddress.UPDATE_ADDRESS) + Observable updateAddress( + @Field("sn") String sn, + @Field("address") String address, + @Field("longitude") double longitude, + @Field("latitude") double latitude + ); +} diff --git a/app/src/main/java/com/uiuios/aios/service/main/MainService.java b/app/src/main/java/com/uiuios/aios/service/main/MainService.java index 90202a4..dc332e5 100644 --- a/app/src/main/java/com/uiuios/aios/service/main/MainService.java +++ b/app/src/main/java/com/uiuios/aios/service/main/MainService.java @@ -8,7 +8,6 @@ import android.content.IntentFilter; import android.os.IBinder; import android.os.PowerManager; import android.text.TextUtils; -import android.text.format.Formatter; import android.util.Log; import com.arialyy.annotations.Download; @@ -18,7 +17,7 @@ import com.blankj.utilcode.util.NetworkUtils; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.activity.NoticeActivity; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.base.BaseService; +import com.uiuios.aios.base.rx.BaseRxService; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.manager.RemoteManager; @@ -28,8 +27,6 @@ import com.uiuios.aios.utils.AppUsedTimeUtils; import com.uiuios.aios.utils.CmdUtil; import com.uiuios.aios.utils.ForegroundAppUtil; -import com.uiuios.aios.utils.Utils; - import java.io.File; import java.io.FileNotFoundException; import java.util.Calendar; @@ -49,7 +46,7 @@ import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -public class MainService extends BaseService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { +public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainService.class.getSimpleName(); @SuppressLint("StaticFieldLeak") public MainSPresenter mPresenter; @@ -407,7 +404,7 @@ public class MainService extends BaseService implements MainSContact.MainSView, break; case Intent.ACTION_SCREEN_OFF: //关闭屏幕上传数据 - sendAppUsed(context); +// sendAppUsed(context); break; } } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 10d4dc3..33ebe22 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -28,7 +28,8 @@ true - false + + true true @@ -37,6 +38,7 @@ @android:style/Animation.Dialog true + true