diff --git a/app/build.gradle b/app/build.gradle
index d0e2b81..898ef02 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.uiuios.aios"
minSdkVersion 24
targetSdkVersion 29
- versionCode 41
- versionName "5.0"
+ versionCode 42
+ versionName "5.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2383865..040bd19 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -128,7 +128,7 @@
android:name=".activity.main.PhoneMainActivity"
android:exported="true"
android:launchMode="singleTask"
- android:screenOrientation="userPortrait" />
+ android:screenOrientation="portrait" />
@@ -137,12 +137,12 @@
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+
+
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -88,7 +103,7 @@ public class ExpressActivity extends BaseDataBindingActivity {
}
mBinding.timelineLayout.setVisibility(View.VISIBLE);
mBinding.clNodata.setVisibility(View.GONE);
- }else {
+ } else {
mBinding.timelineLayout.setVisibility(View.GONE);
mBinding.clNodata.setVisibility(View.VISIBLE);
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/GoodsActivity.java b/app/src/main/java/com/uiuios/aios/activity/GoodsActivity.java
index 9802741..47f3fe4 100644
--- a/app/src/main/java/com/uiuios/aios/activity/GoodsActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/GoodsActivity.java
@@ -3,10 +3,7 @@ package com.uiuios.aios.activity;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -15,11 +12,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.tabs.TabLayout;
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.GoodsListAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
-import com.uiuios.aios.base.DataBindingActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsInfo;
import com.uiuios.aios.bean.GoodsList;
@@ -30,14 +25,13 @@ import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.util.HashMap;
import java.util.List;
-import java.util.function.Function;
import java.util.stream.Collectors;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
-public class GoodsActivity extends DataBindingActivity {
+public class GoodsActivity extends BaseDataBindingActivity {
private static final String TAG = GoodsActivity.class.getSimpleName();
private ActivityGoodsBinding mBinding;
@@ -47,16 +41,37 @@ public class GoodsActivity extends DataBindingActivity {
private HashMap mGoodsTypeMap;
+ /**
+ * 设置布局
+ */
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_goods;
+ }
+
+ /**
+ * @return 是否是黑色状态栏
+ */
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_goods);
+ mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.setListener(new Listener());
- UltimateBarX.statusBarOnly(this)
- .transparent()
- .apply();
+// UltimateBarX.statusBarOnly(this)
+// .transparent()
+// .apply();
UltimateBarX.addStatusBarTopPadding(mBinding.constraintLayout);
mRecyclerView = mBinding.recyclerView;
mGoodsAdapter = new GoodsListAdapter();
@@ -105,7 +120,7 @@ public class GoodsActivity extends DataBindingActivity {
private void getGoodsType() {
NetInterfaceManager.getInstance()
.getGoodsTypeListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -155,7 +170,7 @@ public class GoodsActivity extends DataBindingActivity {
private void getAllGoods(int type) {
NetInterfaceManager.getInstance()
.getGoodsListObservable(type)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getGoodsListObservable());
}
@@ -163,7 +178,7 @@ public class GoodsActivity extends DataBindingActivity {
private void getAllGoods() {
NetInterfaceManager.getInstance()
.getGoodsListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getGoodsListObservable());
}
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 eb0f4c6..69262a2 100644
--- a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java
@@ -52,6 +52,16 @@ public class InfoListActivity extends BaseActivity {
return R.layout.activity_info_list;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
@@ -69,7 +79,7 @@ public class InfoListActivity extends BaseActivity {
@Override
public void initData() {
NetInterfaceManager.getInstance().getArticleListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
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 dcdf42c..94a2a64 100644
--- a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
@@ -1,21 +1,20 @@
package com.uiuios.aios.activity;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-
import com.google.android.material.tabs.TabLayout;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.InformationAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
-import com.uiuios.aios.base.DataBindingActivity;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaseResponse;
@@ -26,7 +25,6 @@ import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.util.HashMap;
import java.util.List;
-import java.util.Objects;
import java.util.stream.Collectors;
import butterknife.BindView;
@@ -35,10 +33,9 @@ import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
-public class InformationActivity extends DataBindingActivity {
+public class InformationActivity extends BaseDataBindingActivity {
private static final String TAG = InformationActivity.class.getSimpleName();
-
@BindView(R.id.tabLayout)
TabLayout tabLayout;
@BindView(R.id.cl_bar)
@@ -53,14 +50,35 @@ public class InformationActivity extends DataBindingActivity {
private HashMap mCategoryMap;
+ /**
+ * 设置布局
+ */
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_information;
+ }
+
+ /**
+ * @return 是否是黑色状态栏
+ */
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+
+ @Override
+ protected boolean setfitWindow() {
+ return false;
+ }
+
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_information);
+ mBinding = DataBindingUtil.setContentView(this, getLayoutId());
ButterKnife.bind(this);
- UltimateBarX.statusBarOnly(this)
- .transparent()
- .apply();
-
+// UltimateBarX.statusBarOnly(this)
+// .transparent()
+// .apply();
UltimateBarX.addStatusBarTopPadding(cl_bar);
mInformationAdapter = new InformationAdapter();
@@ -100,7 +118,7 @@ public class InformationActivity extends DataBindingActivity {
private void getCategorys() {
NetInterfaceManager.getInstance().getCategorysObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -150,14 +168,14 @@ public class InformationActivity extends DataBindingActivity {
private void getArticleList() {
NetInterfaceManager.getInstance()
.getArticleListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
private void getArticleList(int id) {
NetInterfaceManager.getInstance()
.getArticleListObservable(id)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
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 c3ae9f6..e256cea 100644
--- a/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java
@@ -22,12 +22,27 @@ public class InformationDetailsActivity extends BaseDataBindingActivity {
private ActivityInfoDetailsBinding mBinding;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_info_details;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_info_details);
+ 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 9be8c6a..6e65768 100644
--- a/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/OrderActivity.java
@@ -62,12 +62,27 @@ public class OrderActivity extends BaseDataBindingActivity {
ActivityResultLauncher launcher;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_order;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_order);
+ mBinding = DataBindingUtil.setContentView(this, getLayoutId());
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
public void onActivityResult(ActivityResult result) {
@@ -209,7 +224,7 @@ public class OrderActivity extends BaseDataBindingActivity {
params.put("desktop_app_package", NetInterfaceManager.convertToRequestBody(BuildConfig.APPLICATION_ID));
params.put("address_id", NetInterfaceManager.convertToRequestBody(mAddressId));
NetInterfaceManager.getInstance().getGoodsBuyObservable(params)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
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 e83a86e..0c63d69 100644
--- a/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/OrderListActivity.java
@@ -30,12 +30,27 @@ public class OrderListActivity extends BaseDataBindingActivity {
private ActivityOrderListBinding mBinding;
private OrderAdapter mOrderAdapter;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_order_list;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_order_list);
+ mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mOrderAdapter = new OrderAdapter();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
@@ -100,13 +115,13 @@ public class OrderListActivity extends BaseDataBindingActivity {
private void getAllOrderList() {
NetInterfaceManager.getInstance().getAllOrderObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getOrderListObserver());
}
private void getOrderIndexList(int status) {
NetInterfaceManager.getInstance().getOrderIndexObservable(status)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getOrderListObserver());
}
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 44cff2d..2d2dfcc 100644
--- a/app/src/main/java/com/uiuios/aios/activity/PayActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/PayActivity.java
@@ -35,12 +35,27 @@ public class PayActivity extends BaseDataBindingActivity {
private OrderBean mOrderBean;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_pay;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@Override
public void initView() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pay);
+ mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.tvRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -74,7 +89,7 @@ public class PayActivity extends BaseDataBindingActivity {
if (orderBean == null) return;
NetInterfaceManager.getInstance()
.getOrderPayObservable(orderBean.getOrder_sn(), orderBean.getOrder_id())
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -112,7 +127,7 @@ public class PayActivity extends BaseDataBindingActivity {
mCountdownSubscribe.dispose();
}
mCountdownSubscribe = Observable.interval(1, TimeUnit.SECONDS)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@@ -142,7 +157,7 @@ public class PayActivity extends BaseDataBindingActivity {
mCheckOrderSubscribe.dispose();
}
mCheckOrderSubscribe = Observable.interval(5, TimeUnit.SECONDS)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@@ -150,7 +165,7 @@ public class PayActivity extends BaseDataBindingActivity {
public void accept(Long aLong) throws Exception {
NetInterfaceManager.getInstance()
.getOrderPayCheckObservable(wxpayBean.getOrder_sn(), wxpayBean.getOrder_id())
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
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 49ec0bd..89588a7 100644
--- a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java
@@ -38,6 +38,16 @@ public class QuickAppActivity extends BaseActivity {
return R.layout.activity_quick_app;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
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 47e6bf4..306ac97 100644
--- a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java
@@ -90,6 +90,16 @@ public class ScreenLockActivity extends BaseActivity {
return R.layout.activity_screen_lock;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
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 ae6f1ba..8a33f64 100644
--- a/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/SpikeListActivity.java
@@ -40,7 +40,7 @@ public class SpikeListActivity extends BaseActivity {
@Override
public int getLayoutId() {
- lifecycleSubject.onNext(ActivityEvent.CREATE);
+ getLifecycleSubject().onNext(ActivityEvent.CREATE);
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
@@ -54,6 +54,16 @@ public class SpikeListActivity extends BaseActivity {
return R.layout.activity_spike_list;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
@@ -76,7 +86,7 @@ public class SpikeListActivity extends BaseActivity {
private void getGoodsInfo() {
NetInterfaceManager.getInstance()
.getGoodsListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
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 d6a2f8c..56012b2 100644
--- a/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java
@@ -20,6 +20,16 @@ public class SplashActivity extends BaseActivity {
return R.layout.activity_splash;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
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 b17c27c..62a1bb2 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
@@ -81,6 +81,15 @@ public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmVie
return R.layout.activity_alarm;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
/**
* 初始化视图
*/
@@ -89,7 +98,7 @@ public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmVie
ButterKnife.bind(this);
mPresenter = new AlarmPresenter(this);
mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.setLifecycle(getLifecycleSubject());
mAlarmAdapter = new AlarmAdapter();
mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
@@ -236,7 +245,7 @@ public class AlarmActivity extends BaseActivity implements AlarmContact.AlarmVie
mPresenter.getAlarmClock(mType);
} else {
NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java
index 41d289f..73ec89c 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java
@@ -1,8 +1,8 @@
package com.uiuios.aios.activity.alarm;
import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import java.util.List;
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
new file mode 100644
index 0000000..560dfd8
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmActivity.java
@@ -0,0 +1,218 @@
+package com.uiuios.aios.activity.alarm.port;
+
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+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.activity.alarmclock.port.PortAlarmClockAddActivity;
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.alarm.AlarmUtils;
+import com.uiuios.aios.alarm.PortAlarmAdapter;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.databinding.ActivityAlarmPortBinding;
+import com.uiuios.aios.dialog.DeleteDialog;
+import com.uiuios.aios.network.NetInterfaceManager;
+import com.uiuios.aios.utils.ToastUtil;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class PortAlarmActivity extends BaseMvvmActivity {
+ private static final String TAG = PortAlarmActivity.class.getSimpleName();
+
+ private PortAlarmAdapter mAlarmAdapter;
+ private int mType = 0;
+
+ /**
+ * 设置布局
+ */
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_alarm_port;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewDataBinding.setClick(new Click());
+ }
+
+ /**
+ * 初始化视图
+ */
+ @Override
+ public void initView() {
+
+ mAlarmAdapter = new PortAlarmAdapter();
+ mAlarmAdapter.setOnLongClickListener(new PortAlarmAdapter.OnLongClickListener() {
+ @Override
+ public void onLongClick(AlarmClockData alarmClockData) {
+ showDialog(alarmClockData);
+ }
+ });
+ mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(PortAlarmActivity.this));
+ mViewDataBinding.rvData.setAdapter(mAlarmAdapter);
+ mViewDataBinding.rvData.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ switch (newState){
+ /*正在拖拽*/
+ case RecyclerView.SCROLL_STATE_DRAGGING:
+ break;
+ /*滑动停止*/
+ default:
+ case RecyclerView.SCROLL_STATE_IDLE:
+ break;
+ /*惯性滑动中*/
+ case RecyclerView.SCROLL_STATE_SETTLING:
+ break;
+ }
+ }
+
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ }
+ });
+ }
+
+ /**
+ * 初始化数据
+ */
+ @Override
+ public void initData() {
+ mViewModel.getAlarmClockData().observe(this, new androidx.lifecycle.Observer>() {
+ @Override
+ public void onChanged(List alarmClockData) {
+ setAlarmClock(alarmClockData);
+ }
+ });
+
+ mViewModel.getAlarmClock(mType);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+
+ private void showDialog(AlarmClockData alarmClockData) {
+ DeleteDialog dialog = new DeleteDialog(this);
+ dialog.setTitle("提醒")
+ .setMessage("是否要删除本次闹钟")
+ .setPositive("确定")
+ .setNegtive("取消")
+ .setOnClickBottomListener(new DeleteDialog.OnClickBottomListener() {
+ @Override
+ public void onPositiveClick() {
+ deleteAlarm(alarmClockData);
+ dialog.dismiss();
+ }
+
+ @Override
+ public void onNegtiveClick() {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ }
+
+ private void deleteAlarm(AlarmClockData alarmClockData) {
+ if (alarmClockData.isIs_local()) {
+ alarmClockData.setDeleted(true);
+ AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+ mViewModel.getAlarmClock(mType);
+ } else {
+ NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("deleteAlarm", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("deleteAlarm", "onNext: " + baseResponse);
+ if (baseResponse.code == 200) {
+ AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+ ToastUtil.show("删除成功");
+ } else {
+ ToastUtil.show("删除失败:" + baseResponse.msg);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("deleteAlarm", "onError: " + e.getMessage());
+ alarmClockData.setDeleted(true);
+ AlarmUtils.getInstance().updateAlarmClock(alarmClockData);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("deleteAlarm", "onComplete: ");
+ mViewModel.getAlarmClock(mType);
+ }
+ });
+ }
+ }
+
+
+ public void setAlarmClock(List alarmClockData) {
+ List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm();
+ Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm);
+ if (alarmClockData != null) {
+ localAddAlarm.addAll(alarmClockData);
+ }
+ if (localAddAlarm.size() == 0) {
+ mAlarmAdapter.setAlarmClockData(null);
+// swipeRefreshLayout.setRefreshing(false);
+ mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
+ mViewDataBinding.rvData.setVisibility(View.GONE);
+ ToastUtil.show("没有数据");
+ } else {
+ mAlarmAdapter.setAlarmClockData(localAddAlarm);
+// swipeRefreshLayout.setRefreshing(false);
+ mViewDataBinding.clNodata.setVisibility(View.GONE);
+ mViewDataBinding.rvData.setVisibility(View.VISIBLE);
+ }
+ }
+
+
+
+ public class Click {
+ public void exit(View view) {
+ finish();
+ }
+
+ public void add(View view) {
+ startActivity(new Intent(PortAlarmActivity.this, PortAlarmClockAddActivity.class));
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmViewModel.java
new file mode 100644
index 0000000..36d4b32
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/port/PortAlarmViewModel.java
@@ -0,0 +1,90 @@
+package com.uiuios.aios.activity.alarm.port;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.databinding.ActivityAlarmPortBinding;
+import com.uiuios.aios.network.NetInterfaceManager;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class PortAlarmViewModel extends BaseViewModel {
+
+ private static final String TAG = PortAlarmViewModel.class.getSimpleName();
+
+ @Override
+ public ActivityAlarmPortBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ private MutableLiveData> mAlarmClockData =new MutableLiveData<>();
+
+ public MutableLiveData> getAlarmClockData() {
+ return mAlarmClockData;
+ }
+
+ public void getAlarmClock() {
+ NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
+ @Override
+ public void setAlarmClock(List alarmClockList) {
+ if (alarmClockList.size() == 0) {
+ setAlarmClockEmpty();
+ } else {
+
+ }
+ }
+
+ @Override
+ public void setAlarmClockEmpty() {
+
+ }
+
+ @Override
+ public void onError() {
+
+ }
+ });
+ }
+
+ public void getAlarmClock(int type) {
+ Log.e(TAG, "getAlarmClock: " + type);
+ NetInterfaceManager.getInstance().getAlarmClockObservable(type)
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAlarmClock", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAlarmClock", "onNext: " + listBaseResponse);
+ mAlarmClockData.setValue(listBaseResponse.data);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAlarmClock", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAlarmClock", "onComplete: ");
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
index ec4a673..5813646 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
@@ -19,9 +19,9 @@ import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.alarm.AlarmAdapter;
-import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.base.BaseLifecycleActivity;
+import com.uiuios.aios.alarm.AlarmUtils;
+import com.uiuios.aios.base.mvp.BaseMvpActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.dialog.DeleteDialog;
import com.uiuios.aios.network.NetInterfaceManager;
@@ -37,7 +37,7 @@ import cn.jzvd.Jzvd;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
-public class AlarmClockActivity extends BaseLifecycleActivity implements AlarmClockContact.ClockView {
+public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockContact.ClockView {
private static final String TAG = AlarmClockActivity.class.getSimpleName();
@BindView(R.id.recyclerView)
@@ -59,6 +59,16 @@ public class AlarmClockActivity extends BaseLifecycleActivity implements AlarmCl
return R.layout.activity_alarm;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
UltimateBarX.statusBarOnly(this)
@@ -68,7 +78,7 @@ public class AlarmClockActivity extends BaseLifecycleActivity implements AlarmCl
ButterKnife.bind(this);
mPresenter = new AlarmClockPresenter(this);
mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.setLifecycle(getLifecycleSubject());
mAlarmAdapter = new AlarmAdapter();
mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
@@ -126,7 +136,7 @@ public class AlarmClockActivity extends BaseLifecycleActivity implements AlarmCl
AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
} else {
NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
index d8a02b2..6933cb5 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
@@ -34,8 +34,8 @@ import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
-import com.uiuios.aios.base.BaseLifecycleActivity;
import com.uiuios.aios.base.GlideEngine;
+import com.uiuios.aios.base.mvp.BaseMvpActivity;
import com.uiuios.aios.service.main.MainService;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.FileUtil;
@@ -63,7 +63,7 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
-public class AlarmClockAddActivity extends BaseLifecycleActivity {
+public class AlarmClockAddActivity extends BaseMvpActivity {
private static final String TAG = AlarmClockAddActivity.class.getSimpleName();
@BindView(R.id.cl_content)
@@ -114,9 +114,19 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
return R.layout.activity_add_alarm;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
- lifecycleSubject.onNext(ActivityEvent.CREATE);
+ getLifecycleSubject().onNext(ActivityEvent.CREATE);
UltimateBarX.statusBarOnly(this)
.colorRes(R.color.default_blue)
.fitWindow(true)
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
index e5bd46a..2a22e3a 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
@@ -1,8 +1,8 @@
package com.uiuios.aios.activity.alarmclock;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import java.util.List;
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java
new file mode 100644
index 0000000..10d43ca
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java
@@ -0,0 +1,320 @@
+package com.uiuios.aios.activity.alarmclock.port;
+
+import android.content.Intent;
+import android.content.res.ColorStateList;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.CompoundButton;
+
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
+import com.bigkoo.pickerview.listener.CustomListener;
+import com.bigkoo.pickerview.listener.OnTimeSelectListener;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.luck.picture.lib.basic.PictureSelector;
+import com.luck.picture.lib.config.SelectMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.interfaces.OnResultCallbackListener;
+import com.uiuios.aios.R;
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.alarm.AlarmUtils;
+import com.uiuios.aios.base.GlideEngine;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
+import com.uiuios.aios.databinding.ActivityAddAlarmPortBinding;
+import com.uiuios.aios.service.main.MainService;
+import com.uiuios.aios.utils.FFmpegUtils;
+import com.uiuios.aios.utils.FileUtil;
+import com.uiuios.aios.utils.ScreenUtil;
+import com.uiuios.aios.utils.TimeUtils;
+import com.uiuios.aios.utils.ToastUtil;
+import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.concurrent.ThreadLocalRandom;
+
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class PortAlarmClockAddActivity extends BaseMvvmActivity {
+ private static final String TAG = PortAlarmClockAddActivity.class.getSimpleName();
+
+ private TimePickerView pvTime;
+
+ private String mPictrueFilePath;
+ private Date mDate;
+ /*类型 1一次性 2每天 3周一到周五 4周六周日*/
+ private int mDayType = 1;
+ private int mClockType = 1;
+
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_add_alarm_port;
+ }
+
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return false;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewDataBinding.setClick(new Click());
+ }
+
+ @Override
+ public void initView() {
+ UltimateBarX.statusBarOnly(this)
+ .colorRes(R.color.default_blue)
+ .fitWindow(true)
+ .apply();
+
+ ButterKnife.bind(this);
+ initTimePicker();
+
+ mViewDataBinding.rb1.setChecked(true);
+ mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ if (isChecked) {
+ ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
+ mViewDataBinding.rb1.setTextColor(colorStateList);
+ mDayType = 1;
+ } else {
+ ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
+ mViewDataBinding.rb1.setTextColor(colorStateList);
+ }
+ }
+ });
+ mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ if (isChecked) {
+ ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
+ mViewDataBinding.rb2.setTextColor(colorStateList);
+ mDayType = 2;
+ } else {
+ ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
+ mViewDataBinding.rb2.setTextColor(colorStateList);
+ }
+ }
+ });
+
+ mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 1;
+ mViewDataBinding.etActivation.setText("用药闹钟");
+ } else {
+
+ }
+ }
+ });
+ mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 2;
+ mViewDataBinding.etActivation.setText("接送闹钟");
+ } else {
+
+ }
+ }
+ });
+ mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 3;
+ mViewDataBinding.etActivation.setText("预约闹钟");
+ } else {
+
+ }
+ }
+ });
+
+
+ }
+
+ @Override
+ public void initData() {
+
+ }
+
+
+ private void checkContent() {
+ pvTime.returnData();
+ if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) {
+ ToastUtil.show("请输入标题");
+ return;
+ }
+ if (TextUtils.isEmpty(mPictrueFilePath)) {
+ ToastUtil.show("请选择图片");
+ return;
+ }
+ String timeStamp = getTime(mDate);
+ Log.e(TAG, "checkContent: " + timeStamp);
+ Log.e(TAG, "checkContent: " + mPictrueFilePath);
+
+ AlarmClockData alarmClockData = new AlarmClockData();
+ alarmClockData.setFile(mPictrueFilePath);
+ alarmClockData.setType(mDayType);
+ alarmClockData.setTime(timeStamp);
+ alarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString());
+ alarmClockData.setRemind_type(0);
+ alarmClockData.setIs_onoff(1);
+ alarmClockData.setClazz(mClockType);
+
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ int fakeId = random.nextInt(Integer.MAX_VALUE);
+ Log.e(TAG, "checkContent: fakeId = " + fakeId);
+ alarmClockData.setId(fakeId);
+ alarmClockData.setIs_local(true);
+ Log.e(TAG, "checkContent: addAlarmClock = " + AlarmUtils.getInstance().addAlarmClock(alarmClockData));
+ ToastUtil.show("添加成功");
+ Intent intent = new Intent(MainService.uploadAlarmClockReceiver.UPLOAD_ALARM_RECEIVER_ACTION);
+ sendBroadcast(intent);
+ finish();
+ }
+
+ private void openSelector() {
+ PictureSelector.create(PortAlarmClockAddActivity.this)
+ .openGallery(SelectMimeType.ofAll())
+ .setSelectionMode(1)
+ .setImageEngine(GlideEngine.createGlideEngine())
+ .forResult(new OnResultCallbackListener() {
+ @Override
+ public void onResult(ArrayList result) {
+ mPictrueFilePath = result.get(0).getRealPath();
+ File file = new File(mPictrueFilePath);
+ if (file.exists()) {
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(PortAlarmClockAddActivity.this, 8F)));
+ Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic);
+ mViewDataBinding.nvPic.setVisibility(View.VISIBLE);
+ mViewDataBinding.clPic.setVisibility(View.GONE);
+ if (FileUtil.isVideoFile(mPictrueFilePath)) {
+ FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("openSelector", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull Integer integer) {
+ Log.e("openSelector", "onNext: " + integer);
+ mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer));
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("openSelector", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("openSelector", "onComplete: ");
+ }
+ });
+ } else {
+ mViewDataBinding.tvDuration.setText("");
+ }
+ } else {
+ mPictrueFilePath = "";
+ mViewDataBinding.nvPic.setVisibility(View.GONE);
+ mViewDataBinding.clPic.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onCancel() {
+ Log.e(TAG, "onCancel: ");
+ }
+ });
+ }
+
+ private void initTimePicker() {
+ //控制时间范围(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
+ //因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
+ Calendar selectedDate = Calendar.getInstance();
+
+ Calendar startDate = Calendar.getInstance();
+ startDate.set(2013, 0, 23);
+
+ Calendar endDate = Calendar.getInstance();
+ endDate.set(2019, 11, 28);
+
+ //时间选择器
+ pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
+ @Override
+ public void onTimeSelect(Date date, View v) {//选中事件回调
+ // 这里回调过来的v,就是show()方法里面所添加的 View 参数,如果show的时候没有添加参数,v则为null
+ /*btn_Time.setText(getTime(date));*/
+ mDate = date;
+ Log.e(TAG, "onTimeSelect: " + getTime(date));
+ }
+ })
+ .setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {
+ @Override
+ public void customLayout(View v) {
+
+ }
+ })
+ .setType(new boolean[]{false, false, false, true, true, false})
+ .setLabel("", "", "", "时", "分", "") //设置空字符串以隐藏单位提示 hide label
+ .setDividerColor(Color.GRAY)
+ .setContentTextSize(30)
+ .setDate(selectedDate)
+ .setRangDate(startDate, selectedDate)
+ .setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
+ .setOutSideColor(0x00000000)
+ .setOutSideCancelable(false)
+ .build();
+ pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉
+ pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
+
+ }
+
+ private String getTime(Date date) {
+ SimpleDateFormat format;
+ if (mDayType == 1) {
+ format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ } else {
+ format = new SimpleDateFormat("HH:mm");
+ }
+ return format.format(date);
+ }
+
+
+ public class Click {
+ public void exit(View view) {
+ finish();
+ }
+
+ public void openGallery(View view) {
+ openSelector();
+ }
+
+ public void submit(View view) {
+ checkContent();
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java
new file mode 100644
index 0000000..2ed5b08
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java
@@ -0,0 +1,17 @@
+package com.uiuios.aios.activity.alarmclock.port;
+
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.databinding.ActivityAddAlarmPortBinding;
+
+public class PortAlarmClockAddViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityAddAlarmPortBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceActivity.java b/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceActivity.java
index b8cf038..a4eb890 100644
--- a/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceActivity.java
@@ -43,12 +43,22 @@ public class FamilySpaceActivity extends BaseActivity implements FamilySpaceCont
return R.layout.activity_family_space;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new FamilySpacePresenter(this);
mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.setLifecycle(getLifecycleSubject());
iv_back.setOnClickListener(view -> finish());
mHealthCodeAdapter = new HealthCodeAdapter();
mViewPager.setAdapter(mHealthCodeAdapter);
diff --git a/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceContact.java b/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceContact.java
index dc38ebe..6c952f4 100644
--- a/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/code/FamilySpaceContact.java
@@ -1,7 +1,7 @@
package com.uiuios.aios.activity.code;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.HealthCode;
import java.util.List;
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
index 266e979..aba4e19 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
@@ -20,16 +20,14 @@ import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import com.shehuan.niv.NiceImageView;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
-
import com.uiuios.aios.R;
-import com.uiuios.aios.base.BaseLightActivity;
+import com.uiuios.aios.base.BaseActivity;
import com.uiuios.aios.base.GlideEngine;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.GlideLoadUtils;
import com.uiuios.aios.utils.ToastUtil;
-import com.uiuios.aios.utils.Utils;
import com.uiuios.aios.view.ToggleButton;
import java.io.File;
@@ -47,7 +45,7 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
-public class AddContactActivity extends BaseLightActivity {
+public class AddContactActivity extends BaseActivity {
private static final String TAG = AddContactActivity.class.getSimpleName();
@BindView(R.id.iv_cancel)
@@ -72,6 +70,16 @@ public class AddContactActivity extends BaseLightActivity {
return R.layout.activity_add_contact;
}
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
@@ -156,7 +164,7 @@ public class AddContactActivity extends BaseLightActivity {
params.put("is_urgent", String.valueOf(toggleButton.isToggleOn()));
NetInterfaceManager.getInstance()
.getMailListAddObservable(params, body)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
index db0d452..73b9cf9 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
@@ -48,12 +48,22 @@ public class ContactActivity extends BaseActivity implements ContactContact.Cont
return R.layout.activity_contact;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
mContactPresenter = new ContactPresenter(this);
mContactPresenter.attachView(this);
- mContactPresenter.setLifecycle(lifecycleSubject);
+ mContactPresenter.setLifecycle(getLifecycleSubject());
mContactAdapter = new ContactAdapter();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
rv_contact.setLayoutManager(new GridLayoutManager(this, 3));
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java
index 8aa65cb..6e74a17 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java
@@ -1,7 +1,7 @@
package com.uiuios.aios.activity.contact;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.Contact;
import java.util.List;
diff --git a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java
index 4f6c4d0..1466ad7 100644
--- a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java
@@ -68,6 +68,16 @@ public class DialerActivity extends BaseActivity {
return R.layout.activity_dialer;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
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 681cf0b..b5c6a3e 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
@@ -88,6 +88,16 @@ public class LocationAcivity extends BaseActivity implements LocationContact.Loc
return R.layout.activity_location;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
/**
* 初始化视图
*/
@@ -96,7 +106,7 @@ public class LocationAcivity extends BaseActivity implements LocationContact.Loc
ButterKnife.bind(this);
mPresenter = new LocationPresenter(this);
mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.setLifecycle(getLifecycleSubject());
bg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java
index 70cba09..7c69e30 100644
--- a/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java
@@ -1,7 +1,7 @@
package com.uiuios.aios.activity.location;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.AddressBean;
import java.util.List;
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 b676d78..2ab5d3b 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
@@ -87,13 +87,18 @@ 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 initView() {
ButterKnife.bind(this);
toggleNotificationListenerService(this);
mMainPresenter = new MainPresenter(this);
mMainPresenter.attachView(this);
- mMainPresenter.setLifecycle(lifecycleSubject);
+ mMainPresenter.setLifecycle(getLifecycleSubject());
if (BuildConfig.DEBUG) {
// SystemClock.setCurrentTimeMillis(1662123600000L);//09-02
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 6109531..952bc4b 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
@@ -16,6 +16,11 @@ public class MainActivity extends BaseMainActivity {
return R.layout.activity_main;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java b/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java
index 2c930a8..e4abda1 100644
--- a/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java
@@ -1,7 +1,7 @@
package com.uiuios.aios.activity.main;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
public class MainContact {
public interface Presenter extends BasePresenter {
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 46ff825..f223b02 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
@@ -9,4 +9,9 @@ public class PhoneMainActivity extends BaseMainActivity {
public int getLayoutId() {
return R.layout.phone_activity_main;
}
+
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
}
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 d0b75c5..f1c07b1 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
@@ -1,266 +1,251 @@
package com.uiuios.aios.activity.weather;
-import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.graphics.Color;
+import android.icu.util.Calendar;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import android.widget.ImageView;
-import android.widget.TextView;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
-import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
-import com.bigkoo.pickerview.view.OptionsPickerView;
+import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.Gson;
+import com.qweather.sdk.bean.base.Code;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
+import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.location.LocationAcivity;
-import com.uiuios.aios.adapter.WeatherDayApdapter;
-import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.adapter.WeatherDayApdapterPort;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.JsonBean;
import com.uiuios.aios.bean.MapGeoResult;
import com.uiuios.aios.config.CommonConfig;
-import com.uiuios.aios.gson.GetJsonDataUtil;
+import com.uiuios.aios.databinding.ActivityWeatherBinding;
import com.uiuios.aios.manager.RemoteManager;
+import com.uiuios.aios.utils.DataUtil;
+import com.uiuios.aios.utils.TimeUtils;
import com.uiuios.aios.utils.ToastUtil;
import com.uiuios.aios.view.HorizontalItemDecoration;
-
-import org.json.JSONArray;
-
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
-public class WeatherActivity extends BaseActivity implements WeatherContact.WeatherView {
+public class WeatherActivity extends BaseMvvmActivity
+ implements NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = WeatherActivity.class.getSimpleName();
- @BindView(R.id.rv_weather)
- RecyclerView rv_weather;
- @BindView(R.id.tv_location)
- TextView tv_location;
- @BindView(R.id.iv_back)
- ImageView iv_back;
- @BindView(R.id.tv_refresh)
- TextView tv_refresh;
- private WeatherPresenter mPresenter;
- private WeatherDayApdapter mWeatherDayApdapter;
+ private WeatherDayApdapterPort mWeatherDayApdapter;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private List options1Items = new ArrayList<>();
private ArrayList> options2Items = new ArrayList<>();
private ArrayList>> options3Items = new ArrayList<>();
- private Thread thread;
- private static final int MSG_LOAD_DATA = 0x0001;
- private static final int MSG_LOAD_SUCCESS = 0x0002;
- private static final int MSG_LOAD_FAILED = 0x0003;
- private static boolean isLoaded = false;
+ private boolean mLoaded = false;
- private String mProvince;
- private String mCity;
- private String mDistrict;
+ private ActivityResultLauncher register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
+ @Override
+ public void onActivityResult(ActivityResult result) {
+ Log.e(TAG, "onActivityResult: " + result);
+ if (result != null) {
+ Intent intent = result.getData();
+ if (intent != null && result.getResultCode() == Activity.RESULT_OK) {
+ Bundle bundle = intent.getExtras();
+ Log.e(TAG, "onActivityResult: " + bundle);
+ String address = bundle.getString("address");
+ String district = bundle.getString("district");
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, district);
+ mViewModel.decodeGeo(address);
+ mViewDataBinding.tvLocation.setText(district);
+ }
+ }
+ }
+ });
- private ActivityResultLauncher register;
+ @Override
+ public void onDisconnected() {
+
+ }
+
+ @Override
+ public void onConnected(NetworkUtils.NetworkType networkType) {
+
+ }
@Override
public int getLayoutId() {
return R.layout.activity_weather;
}
+ @Override
+ protected boolean setNightMode() {
+ return false;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+
+ mViewDataBinding.setClick(new ClickListener());
+ }
+
@Override
public void initView() {
- ButterKnife.bind(this);
- mPresenter = new WeatherPresenter(this);
- mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ NetworkUtils.registerNetworkStatusChangedListener(this);
+
RemoteManager.getInstance().getLocation();
+
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
Resources resources = getResources();
if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
- rv_weather.addItemDecoration(new HorizontalItemDecoration(30, this));//10表示10dp
+ mViewDataBinding.rvWeather.addItemDecoration(new HorizontalItemDecoration(30, this));//10表示10dp
} else {
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
}
- rv_weather.setLayoutManager(linearLayoutManager);
-// rv_weather.setLayoutManager(new GridLayoutManager(this, 3));
-// rv_weather.addItemDecoration(new RecyclerItemDecoration(ScreenUtils.dp2px(resources, 10), ScreenUtils.dp2px(resources, 10), 3));
- mWeatherDayApdapter = new WeatherDayApdapter();
- rv_weather.setAdapter(mWeatherDayApdapter);
- iv_back.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
- tv_refresh.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, "");
- String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, "");
- if (TextUtils.isEmpty(tude)) {
- mPresenter.getLocation();
- } else {
- tv_location.setText(district);
- mPresenter.getWeather(tude);
- }
- ToastUtil.show("刷新成功");
- }
- });
- tv_location.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hideSoftKeyBoard(v);
- if (!isLoaded) {
- ToastUtil.show("位置数据没有加载完成");
- } else {
-// showPickerView();
- register.launch(new Intent(WeatherActivity.this, LocationAcivity.class));
- }
- }
- });
- register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
- @Override
- public void onActivityResult(ActivityResult result) {
- Log.e(TAG, "onActivityResult: " + result);
- if (result != null) {
- Intent intent = result.getData();
- if (intent != null && result.getResultCode() == Activity.RESULT_OK) {
- Bundle bundle = intent.getExtras();
- Log.e(TAG, "onActivityResult: " + bundle);
- String address = bundle.getString("address");
- mDistrict = bundle.getString("district");
- mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
- mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mDistrict);
- mPresenter.decodeGeo(address);
- tv_location.setText(mDistrict);
- }
- }
- }
- });
- }
+ mViewDataBinding.rvWeather.setLayoutManager(linearLayoutManager);
+// mViewDataBinding.rvWeather.setLayoutManager(new GridLayoutManager(this, 3));
+// mViewDataBinding.rvWeather.addItemDecoration(new RecyclerItemDecoration(ScreenUtils.dp2px(resources, 10), ScreenUtils.dp2px(resources, 10), 3));
+ mWeatherDayApdapter = new WeatherDayApdapterPort();
+ mViewDataBinding.rvWeather.setAdapter(mWeatherDayApdapter);
- private void showPickerView() {// 弹出选择器
- OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
- @Override
- public void onOptionsSelect(int options1, int options2, int options3, View v) {
- //返回的分别是三个级别的选中位置
- mProvince = options1Items.size() > 0 ?
- options1Items.get(options1).getPickerViewText() : "";
+ mViewDataBinding.tvDate.setText(DataUtil.formatDateDay() + "\t" + TimeUtils.getWeek());
- mCity = options2Items.size() > 0
- && options2Items.get(options1).size() > 0 ?
- options2Items.get(options1).get(options2) : "";
-
- mDistrict = options2Items.size() > 0
- && options3Items.get(options1).size() > 0
- && options3Items.get(options1).get(options2).size() > 0 ?
- options3Items.get(options1).get(options2).get(options3) : "";
-
- String address = mProvince + mCity + mDistrict;
- Log.e(TAG, "onOptionsSelect: " + address);
- tv_location.setText(mDistrict);
- mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
- mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mDistrict);
- mPresenter.decodeGeo(address);
-
- }
- })
-
- .setTitleText("城市选择")
- .setDividerColor(Color.BLACK)
- .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
- .setContentTextSize(20)
- .setLineSpacingMultiplier(2.5f)
- .build();
-
-// pvOptions.setPicker(options1Items);//一级选择器
-// pvOptions.setPicker(options1Items, options2Items);//二级选择器
- pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
- pvOptions.show();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ if (6 < hour && hour < 18) {
+ mViewDataBinding.root.setBackground(getDrawable(R.drawable.weather_background_day));
+ } else {
+ mViewDataBinding.root.setBackground(getDrawable(R.drawable.weather_background_night));
+ }
}
@Override
public void initData() {
- mHandler.sendEmptyMessage(MSG_LOAD_DATA);
- String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, "");
- String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, "");
+
+ mViewModel.getOptions1ItemsData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List jsonBeans) {
+ options1Items = jsonBeans;
+ }
+ });
+ mViewModel.getOptions2ItemsData().observe(this, new Observer>>() {
+ @Override
+ public void onChanged(ArrayList> arrayLists) {
+ options2Items = arrayLists;
+ }
+ });
+ mViewModel.getOptions3ItemsData().observe(this, new Observer>>>() {
+ @Override
+ public void onChanged(ArrayList>> arrayLists) {
+ options3Items = arrayLists;
+ }
+ });
+ mViewModel.getBooleanData().observe(this, new Observer() {
+ @Override
+ public void onChanged(Boolean aBoolean) {
+ mLoaded = aBoolean;
+ }
+ });
+
+ mViewModel.getGeoResultData().observe(this, new Observer() {
+ @Override
+ public void onChanged(MapGeoResult mapGeoResult) {
+ if (mapGeoResult != null) {
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoResult.getLocation().toString());
+ mViewModel.getWeatherNow(mapGeoResult.getLocation().toString());
+ mViewModel.getWeather7D(mapGeoResult.getLocation().toString());
+ } else {
+ ToastUtil.show("获取位置信息失败");
+ }
+ }
+ });
+ mViewModel.getLocationData().observe(this, new Observer() {
+ @Override
+ public void onChanged(String s) {
+ mViewDataBinding.tvLocation.setText(s);
+ ToastUtil.show("刷新成功");
+ mViewModel.decodeGeo(s);
+ }
+ });
+ mViewModel.getWeatherNowData().observe(this, new Observer() {
+ @Override
+ public void onChanged(WeatherNowBean weatherNowBean) {
+ //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因
+ if (weatherNowBean != null) {
+ if (Code.OK == weatherNowBean.getCode()) {
+ WeatherNowBean.NowBaseBean now = weatherNowBean.getNow();
+ Log.d("getWeatherNow: ", "onSuccess: now " + new Gson().toJson(now));
+ mViewDataBinding.setNowBaseBean(now);
+ ToastUtil.show("刷新成功");
+ } else {
+ //在此查看返回数据失败的原因
+ Code code = weatherNowBean.getCode();
+ Log.d("getWeatherNow: ", "failed code: " + code);
+ }
+ } else {
+ Log.e(TAG, "getWeatherNow: weatherNowBean is null");
+ ToastUtil.show("获取天气失败");
+ mViewModel.getWeatherCache();
+ }
+ }
+ });
+ mViewModel.getWeatherDailyData().observe(this, new Observer() {
+ @Override
+ public void onChanged(WeatherDailyBean weatherDailyBean) {
+ if (weatherDailyBean != null) {
+ mWeatherDayApdapter.setDailyBeans(weatherDailyBean.getDaily());
+ WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
+ mViewDataBinding.tvMinMax.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
+ }
+ }
+ });
+
+
+// mViewModel.loadProvince();
+ getWeather();
+ }
+
+ private void getWeather() {
+ String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
+ String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, CommonConfig.DEFAULT_LOCATION_TUDE);
if (TextUtils.isEmpty(tude)) {
- mPresenter.getLocation();
+ mViewModel.getLocation();
} else {
- tv_location.setText(district);
- mPresenter.getWeather(tude);
+ mViewDataBinding.tvLocation.setText(district);
+ mViewModel.getWeatherNow(tude);
+ mViewModel.getWeather7D(tude);
}
}
- @Override
- public void setGeo(MapGeoResult mapGeoresult) {
- if (mapGeoresult != null) {
- mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoresult.getLocation().toString());
- mPresenter.getWeather(mapGeoresult.getLocation().toString());
- } else {
- ToastUtil.show("获取位置信息失败");
- }
- }
-
- @Override
- public void setLocation(String location) {
- tv_location.setText(location);
- ToastUtil.show("刷新成功");
- mPresenter.getWeatherCache();
- }
-
- @Override
- public void setWeatherCache(WeatherDailyBean weatherCache) {
- if (weatherCache != null) {
- mWeatherDayApdapter.setDailyBeans(weatherCache.getDaily());
- }
- mPresenter.getWeather(RemoteManager.getInstance().getLocationTude());
- }
-
- @Override
- public void setWeather(WeatherDailyBean weather) {
- if (weather != null) {
- mWeatherDayApdapter.setDailyBeans(weather.getDaily());
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- }
-
@Override
protected void onDestroy() {
super.onDestroy();
- mPresenter.detachView();
+ NetworkUtils.unregisterNetworkStatusChangedListener(this);
}
private void hideSoftKeyBoard(View view) {
@@ -270,105 +255,31 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
}
}
- @SuppressLint("HandlerLeak")
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_LOAD_DATA:
- if (thread == null) {//如果已创建就不再重新创建子线程了
- Log.e(TAG, "handleMessage: Begin Parse Data");
- thread = new Thread(new Runnable() {
- @Override
- public void run() {
- // 子线程中解析省市区数据
- initJsonData();
- }
- });
- thread.start();
- }
- break;
- case MSG_LOAD_SUCCESS:
- Log.e(TAG, "handleMessage: Parse Succeed");
- isLoaded = true;
- break;
-
- case MSG_LOAD_FAILED:
- Log.e(TAG, "handleMessage: Parse Failed");
- break;
- default:
- }
- }
- };
-
-
- private void initJsonData() {//解析数据
-
- /**
- * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
- * 关键逻辑在于循环体
- *
- * */
- String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
-
- ArrayList jsonBean = parseData(JsonData);//用Gson 转成实体
-
- /**
- * 添加省份数据
- *
- * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
- * PickerView会通过getPickerViewText方法获取字符串显示出来。
- */
- options1Items = jsonBean;
-
- for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
- ArrayList cityList = new ArrayList<>();//该省的城市列表(第二级)
- ArrayList> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
-
- for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
- String cityName = jsonBean.get(i).getCityList().get(c).getName();
- cityList.add(cityName);//添加城市
- ArrayList city_AreaList = new ArrayList<>();//该城市的所有地区列表
-
- //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
- /*if (jsonBean.get(i).getCityList().get(c).getArea() == null
- || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
- city_AreaList.add("");
- } else {
- city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
- }*/
- city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
- province_AreaList.add(city_AreaList);//添加该省所有地区数据
- }
-
- /**
- * 添加城市数据
- */
- options2Items.add(cityList);
-
- /**
- * 添加地区数据
- */
- options3Items.add(province_AreaList);
+ public class ClickListener {
+ public void exit(View view) {
+ finish();
}
- mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);
- }
-
- public ArrayList parseData(String result) {//Gson 解析
- ArrayList detail = new ArrayList<>();
- try {
- JSONArray data = new JSONArray(result);
- Gson gson = new Gson();
- for (int i = 0; i < data.length(); i++) {
- JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
- detail.add(entity);
- }
- } catch (Exception e) {
- e.printStackTrace();
- mHandler.sendEmptyMessage(MSG_LOAD_FAILED);
+ public void selectAddress(View view) {
+ hideSoftKeyBoard(view);
+// if (!mLoaded) {
+// ToastUtil.show("位置数据没有加载完成");
+// } else {
+ register.launch(new Intent(WeatherActivity.this, LocationAcivity.class));
+// }
+ }
+
+ public void refresh(View view) {
+ String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
+ String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, CommonConfig.DEFAULT_LOCATION_TUDE);
+ if (TextUtils.isEmpty(tude)) {
+ mViewModel.getLocation();
+ } else {
+ mViewDataBinding.tvLocation.setText(district);
+ mViewModel.getWeatherNow(tude);
+ mViewModel.getWeather7D(tude);
+ }
}
- return detail;
}
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java
deleted file mode 100644
index 4f53f4d..0000000
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.uiuios.aios.activity.weather;
-
-import com.qweather.sdk.bean.weather.WeatherDailyBean;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
-import com.uiuios.aios.bean.MapGeoResult;
-
-public class WeatherContact {
- public interface Presenter extends BasePresenter {
- void decodeGeo(String address);
- //获取定位缓存
- void getLocation();
- //获取天气缓存
- void getWeatherCache();
- //获取天气
- void getWeather(String locationTude);
- }
-
- public interface WeatherView extends BaseView {
- void setGeo(MapGeoResult mapGeoresult);
- //设置定位缓存
- void setLocation(String location);
- //设置天气缓存
- void setWeatherCache(WeatherDailyBean weatherCache);
- //设置天气
- void setWeather(WeatherDailyBean weather);
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java
deleted file mode 100644
index ab0c0e4..0000000
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package com.uiuios.aios.activity.weather;
-
-import android.content.Context;
-import android.util.Log;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.qweather.sdk.bean.weather.WeatherDailyBean;
-import com.qweather.sdk.view.QWeather;
-import com.tencent.mmkv.MMKV;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.uiuios.aios.bean.MapGeoBean;
-import com.uiuios.aios.config.CommonConfig;
-import com.uiuios.aios.manager.RemoteManager;
-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;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-/**
- * MainActivity和MainService 的 Presenter
- *
- * @author jgy02
- */
-public class WeatherPresenter implements WeatherContact.Presenter {
- private static final String TAG = WeatherPresenter.class.getSimpleName();
- public static final String WEATHER_DAILY_KEY = "WEATHER_DAILY_JSON_STRING";
- private WeatherContact.WeatherView mView;
- private Context mContext;
- private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
-
- private BehaviorSubject lifecycle;
-
- public void setLifecycle(BehaviorSubject lifecycle) {
- this.lifecycle = lifecycle;
- }
-
- public BehaviorSubject getLifecycle() {
- return lifecycle;
- }
-
- WeatherPresenter(Context context) {
- this.mContext = context;
- Log.e(TAG, "WeatherPresenter: " + context.getClass());
- }
-
- @Override
- public void attachView(@NonNull WeatherContact.WeatherView view) {
- this.mView = view;
- }
-
- @Override
- public void detachView() {
- this.mView = null;
- }
-
-
- @Override
- public void decodeGeo(String address) {
- Log.e(TAG, "decodeGeo: " + address);
- NetInterfaceManager.getInstance().getGeoObservable(address)
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("decodeGeo", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull MapGeoBean mapGeoBean) {
- Log.e("decodeGeo", "onNext: " + mapGeoBean);
- if (mapGeoBean.getStatus() == 0) {
- mView.setGeo(mapGeoBean.getResult());
- } else {
- mView.setGeo(null);
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("decodeGeo", "onError: " + e.getMessage());
- mView.setGeo(null);
- onComplete();
- }
-
- @Override
- public void onComplete() {
- Log.e("decodeGeo", "onComplete: ");
- }
- });
-
- }
-
- @Override
- public void getLocation() {
- String location = RemoteManager.getInstance().getDistrict();
- mView.setLocation(location);
- }
-
- @Override
- public void getWeatherCache() {
- // TODO: 2022/1/21 读取json,反序列化,排序
- String jsonString = mMMKV.decodeString(WEATHER_DAILY_KEY, "");
- Type type = new TypeToken() {
- }.getType();
- WeatherDailyBean weatherDailyBean = new Gson().fromJson(jsonString, type);
- mView.setWeatherCache(weatherDailyBean);
- }
-
- @Override
- public void getWeather(String locationTude) {
- QWeather.getWeather7D(mContext, locationTude, new QWeather.OnResultWeatherDailyListener() {
- @Override
- public void onError(Throwable throwable) {
- Log.e("getWeather", "onError: " + throwable.getMessage());
- if (mView != null) {
- mView.setWeather(null);
- }
- }
-
- @Override
- public void onSuccess(WeatherDailyBean weatherDailyBean) {
- String jsonString = new Gson().toJson(weatherDailyBean);
- Log.d("getWeather", "onSuccess: " + jsonString);
- mMMKV.encode(WEATHER_DAILY_KEY, jsonString);
- if (mView != null) {
- mView.setWeather(weatherDailyBean);
- }
- }
- });
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherViewModel.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherViewModel.java
new file mode 100644
index 0000000..318dbda
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherViewModel.java
@@ -0,0 +1,286 @@
+package com.uiuios.aios.activity.weather;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.qweather.sdk.bean.base.Lang;
+import com.qweather.sdk.bean.base.Unit;
+import com.qweather.sdk.bean.weather.WeatherDailyBean;
+import com.qweather.sdk.bean.weather.WeatherNowBean;
+import com.qweather.sdk.view.QWeather;
+import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.bean.JsonBean;
+import com.uiuios.aios.bean.MapGeoBean;
+import com.uiuios.aios.bean.MapGeoResult;
+import com.uiuios.aios.config.CommonConfig;
+import com.uiuios.aios.databinding.ActivityWeatherBinding;
+import com.uiuios.aios.gson.GetJsonDataUtil;
+import com.uiuios.aios.manager.RemoteManager;
+import com.uiuios.aios.network.NetInterfaceManager;
+
+import org.json.JSONArray;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+public class WeatherViewModel extends BaseViewModel {
+ private static final String TAG = WeatherViewModel.class.getSimpleName();
+
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
+
+ @Override
+ public ActivityWeatherBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ private MutableLiveData> mOptions1ItemsData = new MutableLiveData<>();
+ private MutableLiveData>> mOptions2ItemsData = new MutableLiveData<>();
+ private MutableLiveData>>> mOptions3ItemsData = new MutableLiveData<>();
+ private MutableLiveData mBooleanData = new MutableLiveData<>();
+
+
+ public MutableLiveData> getOptions1ItemsData() {
+ return mOptions1ItemsData;
+ }
+
+ public MutableLiveData>> getOptions2ItemsData() {
+ return mOptions2ItemsData;
+ }
+
+ public MutableLiveData>>> getOptions3ItemsData() {
+ return mOptions3ItemsData;
+ }
+
+ public MutableLiveData getBooleanData() {
+ return mBooleanData;
+ }
+
+ private MutableLiveData mGeoResultData = new MutableLiveData<>();
+ private MutableLiveData mLocationData = new MutableLiveData<>();
+ private MutableLiveData mWeatherNowData = new MutableLiveData<>();
+ private MutableLiveData mWeatherDailyData = new MutableLiveData<>();
+
+
+ public MutableLiveData getGeoResultData() {
+ return mGeoResultData;
+ }
+
+ public MutableLiveData getLocationData() {
+ return mLocationData;
+ }
+
+ public MutableLiveData getWeatherNowData() {
+ return mWeatherNowData;
+ }
+
+ public MutableLiveData getWeatherDailyData() {
+ return mWeatherDailyData;
+ }
+
+
+ public void loadProvince() {
+ Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable {
+ Log.e("loadProvince", "subscribe: ");
+ String JsonData = new GetJsonDataUtil().getJson(getCtx(), "province.json");//获取assets目录下的json文件数据
+ ArrayList detail = new ArrayList<>();
+ JSONArray data = new JSONArray(JsonData);
+ Gson gson = new Gson();
+ for (int i = 0; i < data.length(); i++) {
+ JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
+ detail.add(entity);
+ }
+ emitter.onNext(detail);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("loadProvince", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull ArrayList jsonBeans) {
+ Log.e("loadProvince", "onNext: ");
+ mOptions1ItemsData.setValue(jsonBeans);
+
+ ArrayList> options2Items = new ArrayList<>();
+ ArrayList>> options3Items = new ArrayList<>();
+
+ for (int i = 0; i < jsonBeans.size(); i++) {//遍历省份
+ ArrayList cityList = new ArrayList<>();//该省的城市列表(第二级)
+ ArrayList> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
+
+ for (int c = 0; c < jsonBeans.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
+ String cityName = jsonBeans.get(i).getCityList().get(c).getName();
+ cityList.add(cityName);//添加城市
+ ArrayList city_AreaList = new ArrayList<>();//该城市的所有地区列表
+
+ //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
+ /*if (jsonBean.get(i).getCityList().get(c).getArea() == null
+ || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
+ city_AreaList.add("");
+ } else {
+ city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
+ }*/
+ city_AreaList.addAll(jsonBeans.get(i).getCityList().get(c).getArea());
+ province_AreaList.add(city_AreaList);//添加该省所有地区数据
+ }
+ options2Items.add(cityList);
+ /**
+ * 添加地区数据
+ */
+ options3Items.add(province_AreaList);
+ }
+ mOptions2ItemsData.setValue(options2Items);
+ mOptions3ItemsData.setValue(options3Items);
+ mBooleanData.setValue(true);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("loadProvince", "onError: " + e.getMessage());
+ mBooleanData.setValue(false);
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("loadProvince", "onComplete: ");
+ }
+ });
+ }
+
+ public void decodeGeo(String address) {
+ Log.e(TAG, "decodeGeo: " + address);
+ NetInterfaceManager.getInstance().getGeoObservable(address)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("decodeGeo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull MapGeoBean mapGeoBean) {
+ Log.e("decodeGeo", "onNext: " + mapGeoBean);
+ if (mapGeoBean.getStatus() == 0) {
+ mGeoResultData.setValue(mapGeoBean.getResult());
+ } else {
+ mGeoResultData.setValue(null);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("decodeGeo", "onError: " + e.getMessage());
+ mGeoResultData.setValue(null);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("decodeGeo", "onComplete: ");
+ }
+ });
+ }
+
+
+ public void getWeatherCache() {
+ Log.e(TAG, "getWeatherCache: ");
+ String nowJsonString = mMMKV.decodeString(CommonConfig.WEATHER_NOW_KEY, "");
+ Type nowType = new TypeToken() {
+ }.getType();
+ try {
+ WeatherNowBean weatherNowBean = new Gson().fromJson(nowJsonString, nowType);
+ mWeatherNowData.setValue(weatherNowBean);
+ } catch (Exception e) {
+ Log.e(TAG, "getWeatherCache: now = " + e.getMessage());
+ }
+
+
+ String jsonString = mMMKV.decodeString(CommonConfig.WEATHER_DAILY_KEY, "");
+ Type type = new TypeToken() {
+ }.getType();
+ try {
+ WeatherDailyBean weatherDailyBean = new Gson().fromJson(jsonString, type);
+ mWeatherDailyData.setValue(weatherDailyBean);
+ } catch (Exception e) {
+ Log.e(TAG, "getWeatherCache: Daily = " + e.getMessage());
+ }
+ }
+
+ public void getLocation() {
+ String location = RemoteManager.getInstance().getDistrict();
+ mLocationData.setValue(location);
+ }
+
+ public void getWeatherNow(String locationTude) {
+ Log.e(TAG, "getweather: " + locationTude);
+ /**
+ * 实况天气数据
+ * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度
+ * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负)
+ * @param lang (选填)多语言,可以不使用该参数,默认为简体中文
+ * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位
+ * @param listener 网络访问结果回调
+ */
+ QWeather.getWeatherNow(getCtx(), locationTude, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() {
+ @Override
+ public void onError(Throwable e) {
+ Log.e("getWeatherNow", "onError: " + e);
+ mWeatherNowData.setValue(null);
+ }
+
+ @Override
+ public void onSuccess(WeatherNowBean weatherBean) {
+ Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean));
+ String jsonString = new Gson().toJson(weatherBean);
+ mMMKV.encode(CommonConfig.WEATHER_NOW_KEY, jsonString);
+ mWeatherNowData.setValue(weatherBean);
+ }
+ });
+ }
+
+ public void getWeather7D(String locationTude) {
+ QWeather.getWeather7D(getCtx(), locationTude, new QWeather.OnResultWeatherDailyListener() {
+ @Override
+ public void onError(Throwable throwable) {
+ Log.e("getWeather", "onError: " + throwable.getMessage());
+// mWeatherDailyData.setValue(null);
+ }
+
+ @Override
+ public void onSuccess(WeatherDailyBean weatherDailyBean) {
+ String jsonString = new Gson().toJson(weatherDailyBean);
+ Log.d("getWeather", "onSuccess: " + jsonString);
+ mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
+ mWeatherDailyData.setValue(weatherDailyBean);
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java
index 80235df..ce94a3f 100644
--- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java
@@ -1,7 +1,7 @@
package com.uiuios.aios.activity.wifi;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.WiFiInfo;
import java.util.List;
diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java
index 355d0ed..f85b5ce 100644
--- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java
@@ -16,7 +16,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.AvailableWiFiAdapter;
import com.uiuios.aios.adapter.SavedWiFiAdapter;
-import com.uiuios.aios.base.BaseLightActivity;
+import com.uiuios.aios.base.BaseActivity;
import com.uiuios.aios.bean.WiFiInfo;
import com.uiuios.aios.utils.ToastUtil;
import com.uiuios.aios.view.HorizontalItemDecoration;
@@ -26,7 +26,7 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
-public class WiFiManagerActivity extends BaseLightActivity implements WiFiContact.WiFiView {
+public class WiFiManagerActivity extends BaseActivity implements WiFiContact.WiFiView {
@BindView(R.id.iv_close)
@@ -49,12 +49,22 @@ public class WiFiManagerActivity extends BaseLightActivity implements WiFiContac
return R.layout.activity_wifi_manager;
}
+ @Override
+ protected boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected boolean setfitWindow() {
+ return true;
+ }
+
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new WiFiPresenter(this);
mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.setLifecycle(getLifecycleSubject());
iv_close.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/uiuios/aios/adapter/WeatherDayApdapterPort.java b/app/src/main/java/com/uiuios/aios/adapter/WeatherDayApdapterPort.java
new file mode 100644
index 0000000..1cf2e67
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/WeatherDayApdapterPort.java
@@ -0,0 +1,102 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.qweather.sdk.bean.weather.WeatherDailyBean;
+import com.uiuios.aios.R;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class WeatherDayApdapterPort extends RecyclerView.Adapter {
+ private static final String TAG = WeatherDayApdapterPort.class.getSimpleName();
+ private List mDailyBeans;
+ private Context mContext;
+
+ public void setDailyBeans(List dailyBeans) {
+ this.mDailyBeans = dailyBeans;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public WeatherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new WeatherHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_weather_port, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull WeatherHolder holder, int position) {
+ WeatherDailyBean.DailyBean dailyBean = mDailyBeans.get(position);
+ String dateString;
+ switch (position) {
+// case 0:
+// dateString = "今天";
+// break;
+// case 1:
+// dateString = "明天";
+// break;
+// case 2:
+// dateString = "后天";
+// break;
+ default:
+ dateString = dailyBean.getFxDate();
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = sdf.parse(dailyBean.getFxDate());
+ SimpleDateFormat now = new SimpleDateFormat("MM月dd日");
+ dateString = now.format(date);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+ holder.tv_date.setText(dateString);
+ holder.tv_temp.setText(dailyBean.getTempMin() + "℃ / " + dailyBean.getTempMax() + "℃");
+ holder.tv_weather.setText(dailyBean.getTextDay());
+ String iconDay = dailyBean.getIconDay();
+
+ holder.iv_weather.setImageDrawable(getWeatherDrawable(iconDay));
+ }
+
+ private Drawable getWeatherDrawable(String iconName) {
+ int resID = mContext.getResources().getIdentifier("he" + iconName, "drawable", "com.uiui.aios");
+ if (resID == 0) {
+ Log.e(TAG, "getView: not found src : " + iconName);
+ return mContext.getResources().getDrawable(R.drawable.he100);
+ } else {
+ return mContext.getResources().getDrawable(resID);
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mDailyBeans == null ? 0 : mDailyBeans.size();
+ }
+
+ static class WeatherHolder extends RecyclerView.ViewHolder {
+ TextView tv_date;
+ ImageView iv_weather;
+ TextView tv_weather;
+ TextView tv_temp;
+
+ public WeatherHolder(@NonNull View itemView) {
+ super(itemView);
+ tv_date = itemView.findViewById(R.id.tv_date);
+ iv_weather = itemView.findViewById(R.id.iv_weather);
+ tv_weather = itemView.findViewById(R.id.tv_weather);
+ tv_temp = itemView.findViewById(R.id.tv_temp);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/alarm/PortAlarmAdapter.java b/app/src/main/java/com/uiuios/aios/alarm/PortAlarmAdapter.java
new file mode 100644
index 0000000..db8c1be
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/alarm/PortAlarmAdapter.java
@@ -0,0 +1,287 @@
+package com.uiuios.aios.alarm;
+
+import android.graphics.Bitmap;
+import android.media.AudioAttributes;
+import android.media.MediaPlayer;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.FragmentActivity;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.uiuios.aios.R;
+import com.uiuios.aios.utils.FFmpegUtils;
+import com.uiuios.aios.utils.ScreenUtils;
+import com.uiuios.aios.utils.Utils;
+import com.uiuios.aios.view.JzvdStdRound;
+import com.uiuios.aios.view.ToggleButton;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class PortAlarmAdapter extends RecyclerView.Adapter {
+
+ private FragmentActivity mContext;
+ private List mAlarmClockData;
+ private OnLongClickListener mOnLongClickListener;
+
+ public void setAlarmClockData(List alarmClockData) {
+ this.mAlarmClockData = alarmClockData;
+ notifyDataSetChanged();
+ }
+
+ public void setOnLongClickListener(OnLongClickListener onLongClickListener) {
+ this.mOnLongClickListener = onLongClickListener;
+ }
+
+ public interface OnLongClickListener {
+ void onLongClick(AlarmClockData alarmClockData);
+ }
+
+ @NonNull
+ @Override
+ public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = (FragmentActivity) parent.getContext();
+ return new PortAlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm_port, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull holder holder, int position) {
+ AlarmClockData alarmClockData = mAlarmClockData.get(position);
+ switch (alarmClockData.getType()) {
+ case AlarmUtils.ONCE:
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ Date date = sdf.parse(alarmClockData.getTime());
+ SimpleDateFormat hours = new SimpleDateFormat("HH:mm");
+ String time = hours.format(date);
+ holder.tv_time.setText(time);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ holder.tv_remind_type.setText("一次");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_once);
+ break;
+ case AlarmUtils.LOOP:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("每天");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_loop);
+ break;
+ case AlarmUtils.WORKING_DAY:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("周一至周五");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_work);
+ break;
+ case AlarmUtils.OFF_DAY:
+ holder.tv_time.setText(alarmClockData.getTime());
+ holder.tv_remind_type.setText("周六至周日");
+ holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_offday);
+ break;
+ default:
+ }
+ String title = alarmClockData.getTitle();
+ if (TextUtils.isEmpty(title)) {
+ holder.tv_title.setText("无标题");
+ } else {
+ holder.tv_title.setText(title);
+ }
+ int is_onoff = alarmClockData.getIs_onoff();
+ holder.toggleButton2.setDisable(true);
+ if (is_onoff == 1) {
+ holder.tv_status.setText("已开启");
+ holder.toggleButton2.setToggleOn(false);
+ } else {
+ holder.tv_status.setText("已关闭");
+ holder.toggleButton2.setToggleOff(false);
+ }
+ int type = alarmClockData.getClazz();
+ switch (type){
+ case 1:
+ default:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_medicine_pressed));
+ break;
+ case 2:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_look_pressed));
+ break;
+ case 3:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_reserve_pressed));
+ break;
+ }
+ String voice = alarmClockData.getVoice();
+ if (TextUtils.isEmpty(voice)) {
+ holder.cl_voice.setVisibility(View.GONE);
+ } else {
+ holder.cl_voice.setVisibility(View.VISIBLE);
+ MediaPlayer mMediaPlayer = new MediaPlayer();
+ mMediaPlayer.setAudioAttributes(
+ new AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
+ .build()
+ );
+ mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: "));
+ mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: "));
+ mMediaPlayer.setOnErrorListener((mp, what, extra) -> false);
+ //设置音频文件到MediaPlayer对象中
+ try {
+ mMediaPlayer.setDataSource(voice);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr
+ mMediaPlayer.prepareAsync();
+ FFmpegUtils.getDurationInMilliseconds(voice, new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull Integer integer) {
+ holder.tv_voice.setText(integer + "秒");
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ holder.cl_voice.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mMediaPlayer.start();
+ }
+ });
+ }
+ String fileUrl = alarmClockData.getFile();
+ if (TextUtils.isEmpty(fileUrl)) {
+ holder.cl_vp.setVisibility(View.GONE);
+ } else {
+ holder.cl_vp.setVisibility(View.VISIBLE);
+ if (isImgUrl(fileUrl)) {
+ holder.imageView.setVisibility(View.VISIBLE);
+ holder.jz_video.setVisibility(View.GONE);
+ if (!mContext.isDestroyed()) {
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
+ Glide.with(mContext).load(fileUrl).apply(options).into(holder.imageView);
+ }
+ } else {
+ holder.imageView.setVisibility(View.GONE);
+ holder.jz_video.setVisibility(View.VISIBLE);
+ String fileName = Utils.getFileNamefromURL(fileUrl);
+ File file = new File(Utils.getDownLoadPath(mContext) + fileName);
+ String path;
+ if (file.exists() && !file.isDirectory()) {
+ path = file.getAbsolutePath();
+ } else {
+ path = fileUrl;
+ }
+ holder.jz_video.setUp(path, "");
+ holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
+ FFmpegUtils.loadVideoScreenshot(path, new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull Bitmap bitmap) {
+ if (!mContext.isDestroyed()) {
+ RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
+ Glide.with(mContext).load(bitmap).apply(options).into(holder.jz_video.posterImageView);
+// Glide.with(mContext).load(bitmap).into(holder.imageView);
+ }
+ holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+ }
+ holder.root.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ mOnLongClickListener.onLongClick(alarmClockData);
+ return false;
+ }
+ });
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+// Intent intent = new Intent(mContext, AlarmClockEditActivity.class);
+// intent.putExtra("id", alarmClockData.getId());
+// mContext.startActivity(intent);
+ }
+ });
+
+ }
+
+ private Pattern mCompile = Pattern.compile(".*?(gif|jpeg|png|jpg|bmp|webp)");
+
+ private boolean isImgUrl(String url) {
+ if (TextUtils.isEmpty(url) || url.trim().length() == 0) {
+ return false;
+ }
+ return mCompile.matcher(url).matches();
+ }
+
+ @Override
+ public int getItemCount() {
+ return mAlarmClockData == null ? 0 : mAlarmClockData.size();
+ }
+
+ class holder extends RecyclerView.ViewHolder {
+ TextView tv_time, tv_remind_type, tv_title, tv_voice, tv_status;
+ ConstraintLayout cl_voice, cl_vp, root;
+ JzvdStdRound jz_video;
+ ImageView imageView,iv_type;
+ ToggleButton toggleButton2;
+
+ public holder(@NonNull View itemView) {
+ super(itemView);
+ tv_time = itemView.findViewById(R.id.tv_time);
+ tv_remind_type = itemView.findViewById(R.id.tv_remind_type);
+ tv_title = itemView.findViewById(R.id.tv_title);
+ tv_voice = itemView.findViewById(R.id.tv_voice);
+ cl_voice = itemView.findViewById(R.id.cl_voice);
+ cl_vp = itemView.findViewById(R.id.cl_vp);
+ root = itemView.findViewById(R.id.root);
+ jz_video = itemView.findViewById(R.id.jz_video);
+ imageView = itemView.findViewById(R.id.imageView);
+ iv_type = itemView.findViewById(R.id.iv_type);
+ tv_status = itemView.findViewById(R.id.tv_status);
+ toggleButton2 = itemView.findViewById(R.id.toggleButton2);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseActivity.java
index 37e8ad3..5f0bc2b 100644
--- a/app/src/main/java/com/uiuios/aios/base/BaseActivity.java
+++ b/app/src/main/java/com/uiuios/aios/base/BaseActivity.java
@@ -3,127 +3,30 @@ package com.uiuios.aios.base;
import android.os.Bundle;
import androidx.annotation.CallSuper;
-import androidx.annotation.CheckResult;
-import androidx.annotation.ContentView;
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-import com.trello.rxlifecycle4.LifecycleProvider;
-import com.trello.rxlifecycle4.LifecycleTransformer;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
-import com.uiuios.aios.R;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-
-import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-
-public abstract class BaseActivity extends AppCompatActivity implements LifecycleProvider {
- public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+public abstract class BaseActivity extends BaseTransparentActivity {
public BaseActivity() {
super();
}
- @ContentView
- public BaseActivity(@LayoutRes int contentLayoutId) {
- super(contentLayoutId);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final Observable lifecycle() {
- return lifecycleSubject.hide();
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
- return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindToLifecycle() {
- return RxLifecycleAndroid.bindActivity(lifecycleSubject);
- }
-
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- lifecycleSubject.onNext(ActivityEvent.CREATE);
-// StatusBarUtil.init(this);
- UltimateBarX.statusBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
-// .light(true)
- .apply();
- UltimateBarX.navigationBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
-// .light(true)
- .apply();
- setContentView(this.getLayoutId());
+ setContentView(getLayoutId());
initView();
initData();
}
- /**
- * 设置布局
- */
- public abstract int getLayoutId();
-
/**
* 初始化视图
*/
- public abstract void initView();
-
+ protected abstract void initView();
/**
* 初始化数据
*/
- public abstract void initData();
-
- @Override
- @CallSuper
- protected void onStart() {
- super.onStart();
- lifecycleSubject.onNext(ActivityEvent.START);
- }
-
- @Override
- @CallSuper
- protected void onResume() {
- super.onResume();
- lifecycleSubject.onNext(ActivityEvent.RESUME);
- }
-
- @Override
- @CallSuper
- protected void onPause() {
- lifecycleSubject.onNext(ActivityEvent.PAUSE);
- super.onPause();
- }
-
- @Override
- @CallSuper
- protected void onStop() {
- lifecycleSubject.onNext(ActivityEvent.STOP);
- super.onStop();
- }
-
- @Override
- @CallSuper
- protected void onDestroy() {
- lifecycleSubject.onNext(ActivityEvent.DESTROY);
- super.onDestroy();
- }
-}
+ protected abstract void initData();
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java
index 5f88113..fcad6cc 100644
--- a/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java
+++ b/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java
@@ -3,121 +3,29 @@ package com.uiuios.aios.base;
import android.os.Bundle;
import androidx.annotation.CallSuper;
-import androidx.annotation.CheckResult;
-import androidx.annotation.ContentView;
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-import com.trello.rxlifecycle4.LifecycleProvider;
-import com.trello.rxlifecycle4.LifecycleTransformer;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
-import com.uiuios.aios.R;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-
-import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-public abstract class BaseDataBindingActivity extends AppCompatActivity implements LifecycleProvider {
- public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+public abstract class BaseDataBindingActivity extends BaseTransparentActivity {
public BaseDataBindingActivity() {
super();
}
- @ContentView
- public BaseDataBindingActivity(@LayoutRes int contentLayoutId) {
- super(contentLayoutId);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final Observable lifecycle() {
- return lifecycleSubject.hide();
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
- return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindToLifecycle() {
- return RxLifecycleAndroid.bindActivity(lifecycleSubject);
- }
-
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- lifecycleSubject.onNext(ActivityEvent.CREATE);
-// StatusBarUtil.init(this);
- UltimateBarX.statusBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
- .light(true)
- .apply();
- UltimateBarX.navigationBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
- .light(true)
- .apply();
initView();
initData();
}
-
/**
* 初始化视图
*/
- public abstract void initView();
-
+ protected abstract void initView();
/**
* 初始化数据
*/
- public abstract void initData();
-
- @Override
- @CallSuper
- protected void onStart() {
- super.onStart();
- lifecycleSubject.onNext(ActivityEvent.START);
- }
-
- @Override
- @CallSuper
- protected void onResume() {
- super.onResume();
- lifecycleSubject.onNext(ActivityEvent.RESUME);
- }
-
- @Override
- @CallSuper
- protected void onPause() {
- lifecycleSubject.onNext(ActivityEvent.PAUSE);
- super.onPause();
- }
-
- @Override
- @CallSuper
- protected void onStop() {
- lifecycleSubject.onNext(ActivityEvent.STOP);
- super.onStop();
- }
-
- @Override
- @CallSuper
- protected void onDestroy() {
- lifecycleSubject.onNext(ActivityEvent.DESTROY);
- super.onDestroy();
- }
-}
+ protected abstract void initData();
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseLifecycleActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseLifecycleActivity.java
deleted file mode 100644
index fe530da..0000000
--- a/app/src/main/java/com/uiuios/aios/base/BaseLifecycleActivity.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.uiuios.aios.base;
-
-import android.os.Bundle;
-
-import androidx.annotation.CallSuper;
-import androidx.annotation.CheckResult;
-import androidx.annotation.ContentView;
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.trello.rxlifecycle4.LifecycleProvider;
-import com.trello.rxlifecycle4.LifecycleTransformer;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
-
-import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-
-public abstract class BaseLifecycleActivity extends AppCompatActivity implements LifecycleProvider {
- public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
-
- public BaseLifecycleActivity() {
- super();
- }
-
- @ContentView
- public BaseLifecycleActivity(@LayoutRes int contentLayoutId) {
- super(contentLayoutId);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final Observable lifecycle() {
- return lifecycleSubject.hide();
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
- return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindToLifecycle() {
- return RxLifecycleAndroid.bindActivity(lifecycleSubject);
- }
-
- @Override
- @CallSuper
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- lifecycleSubject.onNext(ActivityEvent.CREATE);
- setContentView(this.getLayoutId());
- initView();
- initData();
- }
-
- /**
- * 设置布局
- */
- public abstract int getLayoutId();
-
- /**
- * 初始化视图
- */
- public abstract void initView();
-
-
- /**
- * 初始化数据
- */
- public abstract void initData();
-
- @Override
- @CallSuper
- protected void onStart() {
- super.onStart();
- lifecycleSubject.onNext(ActivityEvent.START);
- }
-
- @Override
- @CallSuper
- protected void onResume() {
- super.onResume();
- lifecycleSubject.onNext(ActivityEvent.RESUME);
- }
-
- @Override
- @CallSuper
- protected void onPause() {
- lifecycleSubject.onNext(ActivityEvent.PAUSE);
- super.onPause();
- }
-
- @Override
- @CallSuper
- protected void onStop() {
- lifecycleSubject.onNext(ActivityEvent.STOP);
- super.onStop();
- }
-
- @Override
- @CallSuper
- protected void onDestroy() {
- lifecycleSubject.onNext(ActivityEvent.DESTROY);
- super.onDestroy();
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseLightActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseLightActivity.java
deleted file mode 100644
index eea5aed..0000000
--- a/app/src/main/java/com/uiuios/aios/base/BaseLightActivity.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package com.uiuios.aios.base;
-
-import android.os.Bundle;
-
-import androidx.annotation.CallSuper;
-import androidx.annotation.CheckResult;
-import androidx.annotation.ContentView;
-import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-
-import com.trello.rxlifecycle4.LifecycleProvider;
-import com.trello.rxlifecycle4.LifecycleTransformer;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
-import com.uiuios.aios.R;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-
-import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-
-public abstract class BaseLightActivity extends AppCompatActivity implements LifecycleProvider {
- public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
-
- public BaseLightActivity() {
- super();
- }
-
- @ContentView
- public BaseLightActivity(@LayoutRes int contentLayoutId) {
- super(contentLayoutId);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final Observable lifecycle() {
- return lifecycleSubject.hide();
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
- return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
- }
-
- @Override
- @NonNull
- @CheckResult
- public final LifecycleTransformer bindToLifecycle() {
- return RxLifecycleAndroid.bindActivity(lifecycleSubject);
- }
-
- @Override
- @CallSuper
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- lifecycleSubject.onNext(ActivityEvent.CREATE);
-// StatusBarUtil.init(this);
- UltimateBarX.statusBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
- .light(true)
- .apply();
- UltimateBarX.navigationBar(this)
- .transparent()
- .colorRes(R.color.colorPrimaryDark)
- .light(true)
- .apply();
- setContentView(this.getLayoutId());
- initView();
- initData();
- }
-
- /**
- * 设置布局
- */
- public abstract int getLayoutId();
-
- /**
- * 初始化视图
- */
- public abstract void initView();
-
-
- /**
- * 初始化数据
- */
- public abstract void initData();
-
- @Override
- @CallSuper
- protected void onStart() {
- super.onStart();
- lifecycleSubject.onNext(ActivityEvent.START);
- }
-
- @Override
- @CallSuper
- protected void onResume() {
- super.onResume();
- lifecycleSubject.onNext(ActivityEvent.RESUME);
- }
-
- @Override
- @CallSuper
- protected void onPause() {
- lifecycleSubject.onNext(ActivityEvent.PAUSE);
- super.onPause();
- }
-
- @Override
- @CallSuper
- protected void onStop() {
- lifecycleSubject.onNext(ActivityEvent.STOP);
- super.onStop();
- }
-
- @Override
- @CallSuper
- protected void onDestroy() {
- lifecycleSubject.onNext(ActivityEvent.DESTROY);
- super.onDestroy();
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/base/BasePresenter.java b/app/src/main/java/com/uiuios/aios/base/BasePresenter.java
deleted file mode 100644
index 29ff126..0000000
--- a/app/src/main/java/com/uiuios/aios/base/BasePresenter.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.uiuios.aios.base;
-
-import androidx.annotation.NonNull;
-
-public interface BasePresenter {
-
- void attachView(@NonNull V view);
-
- void detachView();
-}
diff --git a/app/src/main/java/com/uiuios/aios/base/DataBindingActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java
similarity index 73%
rename from app/src/main/java/com/uiuios/aios/base/DataBindingActivity.java
rename to app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java
index 48a05df..001cef2 100644
--- a/app/src/main/java/com/uiuios/aios/base/DataBindingActivity.java
+++ b/app/src/main/java/com/uiuios/aios/base/BaseRxActivity.java
@@ -4,8 +4,6 @@ import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.CheckResult;
-import androidx.annotation.ContentView;
-import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -15,22 +13,19 @@ import com.trello.rxlifecycle4.LifecycleTransformer;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
-import com.uiuios.aios.R;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
-public abstract class DataBindingActivity extends AppCompatActivity implements LifecycleProvider {
- public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+/**
+ * {@link com.trello.rxlifecycle4.components.RxActivity}
+ * copied form RxActivity}
+ */
+public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider {
+ private final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
- public DataBindingActivity() {
- super();
- }
-
- @ContentView
- public DataBindingActivity(@LayoutRes int contentLayoutId) {
- super(contentLayoutId);
+ public BehaviorSubject getLifecycleSubject() {
+ return lifecycleSubject;
}
@Override
@@ -59,22 +54,8 @@ public abstract class DataBindingActivity extends AppCompatActivity implements L
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleSubject.onNext(ActivityEvent.CREATE);
- initView();
- initData();
}
-
- /**
- * 初始化视图
- */
- public abstract void initView();
-
-
- /**
- * 初始化数据
- */
- public abstract void initData();
-
@Override
@CallSuper
protected void onStart() {
@@ -110,3 +91,4 @@ public abstract class DataBindingActivity extends AppCompatActivity implements L
super.onDestroy();
}
}
+
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java
new file mode 100644
index 0000000..fa9bc71
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/BaseTransparentActivity.java
@@ -0,0 +1,50 @@
+package com.uiuios.aios.base;
+
+import android.os.Bundle;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.Nullable;
+
+import com.uiuios.aios.R;
+import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
+
+public abstract class BaseTransparentActivity extends BaseRxActivity {
+
+ public BaseTransparentActivity() {
+ super();
+ }
+
+ @Override
+ @CallSuper
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+// StatusBarUtil.init(this);
+ UltimateBarX.statusBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(setNightMode())
+ .fitWindow(setfitWindow())
+ .apply();
+ UltimateBarX.navigationBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(setNightMode())
+ .fitWindow(setfitWindow())
+ .apply();
+ }
+
+ /**
+ * 设置布局
+ */
+ protected abstract int getLayoutId();
+
+ /**
+ * @return 是否是黑色状态栏
+ */
+ protected abstract boolean setNightMode();
+
+ /**
+ * @return 是否是入侵
+ */
+ protected abstract boolean setfitWindow();
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseView.java b/app/src/main/java/com/uiuios/aios/base/BaseView.java
deleted file mode 100644
index 0fef6e2..0000000
--- a/app/src/main/java/com/uiuios/aios/base/BaseView.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.uiuios.aios.base;
-
-public interface BaseView {
-}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvp/BaseMvpActivity.java b/app/src/main/java/com/uiuios/aios/base/mvp/BaseMvpActivity.java
new file mode 100644
index 0000000..ed3350e
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvp/BaseMvpActivity.java
@@ -0,0 +1,34 @@
+package com.uiuios.aios.base.mvp;
+
+import android.os.Bundle;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.Nullable;
+
+import com.uiuios.aios.base.BaseTransparentActivity;
+
+public abstract class BaseMvpActivity extends BaseTransparentActivity {
+
+ public BaseMvpActivity() {
+ super();
+ }
+
+ @Override
+ @CallSuper
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(getLayoutId());
+ initView();
+ initData();
+ }
+
+ /**
+ * 初始化视图
+ */
+ protected abstract void initView();
+
+ /**
+ * 初始化数据
+ */
+ protected abstract void initData();
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvp/BasePresenter.java b/app/src/main/java/com/uiuios/aios/base/mvp/BasePresenter.java
new file mode 100644
index 0000000..75d7426
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvp/BasePresenter.java
@@ -0,0 +1,7 @@
+package com.uiuios.aios.base.mvp;
+
+public interface BasePresenter {
+ void attachView(V view);
+
+ void detachView();
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/base/mvp/BaseView.java b/app/src/main/java/com/uiuios/aios/base/mvp/BaseView.java
new file mode 100644
index 0000000..e4a67d1
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvp/BaseView.java
@@ -0,0 +1,5 @@
+package com.uiuios.aios.base.mvp;
+
+public interface BaseView {
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/base/mvvm/BaseMvvmActivity.java b/app/src/main/java/com/uiuios/aios/base/mvvm/BaseMvvmActivity.java
new file mode 100644
index 0000000..ede9309
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvvm/BaseMvvmActivity.java
@@ -0,0 +1,54 @@
+package com.uiuios.aios.base.mvvm;
+
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.uiuios.aios.base.BaseTransparentActivity;
+
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+
+public abstract class BaseMvvmActivity extends BaseTransparentActivity {
+
+ private static final String TAG = BaseMvvmActivity.class.getSimpleName();
+
+ protected VM mViewModel;
+ protected VDB mViewDataBinding;
+ protected Class vmClass;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //ViewDataBinding
+ mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId());
+ mViewDataBinding.setLifecycleOwner(this);
+ //ViewModel
+ vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ boolean isAbstract = Modifier.isAbstract(vmClass.getModifiers());
+ Log.e(TAG, "isLocalClass:" + vmClass.getSimpleName().equals(ViewModel.class.getSimpleName()) + " isAbstract:" + isAbstract);
+ if (!isAbstract) {//不是一个抽象类
+ mViewModel = new ViewModelProvider(this).get(vmClass);
+ }
+ initDataBinding();
+ initView();
+ initData();
+ }
+
+ protected abstract void initDataBinding();
+
+ /**
+ * 初始化视图
+ */
+ protected abstract void initView();
+
+ /**
+ * 初始化数据
+ */
+ protected abstract void initData();
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvvm/BaseViewModel.java b/app/src/main/java/com/uiuios/aios/base/mvvm/BaseViewModel.java
new file mode 100644
index 0000000..3415461
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvvm/BaseViewModel.java
@@ -0,0 +1,73 @@
+package com.uiuios.aios.base.mvvm;
+
+import android.content.Context;
+
+import androidx.databinding.ViewDataBinding;
+import androidx.lifecycle.ViewModel;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+
+import java.lang.ref.WeakReference;
+
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+/**
+ * 所有viewmodel的基类
+ */
+public abstract class BaseViewModel extends ViewModel implements ViewDataBindingCallback {
+
+ /**
+ * 当前viewmodel对应的页面binding
+ */
+ protected VDB binding;
+
+ @Override
+ public void setVDBinding(ViewDataBinding vdBinding) {
+
+ binding = (VDB)vdBinding;
+ }
+
+ @Override
+ public VDB getVDBinding() {
+ if (binding == null) {
+ throw new NullPointerException("BaseViewModel >> getVDBinding >> null!!!");
+ }
+ return binding;
+ }
+
+
+ /**
+ * 上下文
+ */
+ private WeakReference ctx;
+
+ @Override
+ public void setCtx(Context context) {
+ if(ctx == null) {
+ ctx = new WeakReference<>(context);
+ }
+ }
+
+ @Override
+ public Context getCtx() {
+ if (ctx == null) {
+ throw new NullPointerException("BaseViewModel >> getCtx >> null!!!");
+ }
+ return ctx.get();
+ }
+
+
+ public abstract void onDestroy();
+
+ private BehaviorSubject mBehaviorSubject;
+
+ @Override
+ public void setLifecycle(BehaviorSubject subject) {
+ this.mBehaviorSubject =subject;
+ }
+
+ @Override
+ public BehaviorSubject getLifecycle() {
+ return mBehaviorSubject;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvvm/ViewDataBindingCallback.java b/app/src/main/java/com/uiuios/aios/base/mvvm/ViewDataBindingCallback.java
new file mode 100644
index 0000000..aa6660a
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvvm/ViewDataBindingCallback.java
@@ -0,0 +1,26 @@
+package com.uiuios.aios.base.mvvm;
+
+import android.content.Context;
+
+import androidx.databinding.ViewDataBinding;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public interface ViewDataBindingCallback {
+
+
+ void setVDBinding(VDB binding);
+
+ VDB getVDBinding() throws NullPointerException;
+
+
+ void setCtx(Context context);
+
+ Context getCtx() throws NullPointerException;
+
+ void setLifecycle(BehaviorSubject subject);
+
+ BehaviorSubject getLifecycle();
+}
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 c9572a2..cde96bb 100644
--- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
+++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
@@ -34,8 +34,12 @@ public class CommonConfig {
public static final String MANUALLY_SELECT_LOCATION_ADDRESS = "map_manually_select_location";
/*手动选择位置 区*/
public static final String MANUALLY_SELECT_LOCATION_DISTRICT = "map_manually_select_district";
+ /*默认地址北京*/
+ public static final String DEFAULT_LOCATION_DISTRICT = "北京";
/*手动选择位置 经纬度*/
public static final String MANUALLY_SELECT_LOCATION_TUDE = "map_manually_select_tude";
+ /*默认北京原点*/
+ public static final String DEFAULT_LOCATION_TUDE = "116.40529,39.90499";
/*默认地址id*/
@@ -43,4 +47,8 @@ public class CommonConfig {
/*默认地址json*/
public static final String MAP_DEFAULT_ADDRESS_JSON_KEY = "amap_default_address_json_key";
+
+
+ public static final String WEATHER_NOW_KEY = "WEATHER_NOW_JSON_STRING";
+ public static final String WEATHER_DAILY_KEY = "WEATHER_DAILY_JSON_STRING";
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java
index f79b142..f485b70 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomContact.java
@@ -1,8 +1,7 @@
package com.uiuios.aios.fragment.custom;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
-import com.uiuios.aios.bean.SnInfo;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.UserAvatarInfo;
public class CustomContact {
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 9f431f2..be0a7d3 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
@@ -52,16 +52,15 @@ import com.uiuios.aios.R;
import com.uiuios.aios.activity.ControlActivity;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.QuickAppActivity;
-import com.uiuios.aios.activity.alarm.AlarmActivity;
+import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
import com.uiuios.aios.activity.code.FamilySpaceActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
-import com.uiuios.aios.activity.weather.WeatherPresenter;
import com.uiuios.aios.adapter.NotificationAdapter;
import com.uiuios.aios.adapter.SOSNnmberAdapter;
+import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.base.BaseFragment;
-import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.bean.AlarmItem;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.HealthCode;
@@ -883,7 +882,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
}
private void getAlarm() {
- startActivity(new Intent(mContext, AlarmActivity.class));
+ startActivity(new Intent(mContext, PortAlarmActivity.class));
// NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() {
// @Override
// public void setAlarmClock(List alarmClockList) {
@@ -1086,7 +1085,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
public void onSuccess(WeatherDailyBean weatherDailyBean) {
String jsonString = new Gson().toJson(weatherDailyBean);
Log.d("getWeather", "onSuccess: " + jsonString);
- mMMKV.encode(WeatherPresenter.WEATHER_DAILY_KEY, jsonString);
+ mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
List dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java
index 97fff91..2a59203 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java
@@ -1,8 +1,8 @@
package com.uiuios.aios.fragment.home;
import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.DesktopIcon;
import java.util.ArrayList;
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 36d0c17..4c227d2 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
@@ -35,10 +35,9 @@ import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
-import com.uiuios.aios.activity.alarm.AlarmActivity;
+import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
-import com.uiuios.aios.activity.weather.WeatherPresenter;
import com.uiuios.aios.adapter.HomeAppAdapter;
import com.uiuios.aios.adapter.NotificationAdapter;
import com.uiuios.aios.alarm.AlarmClockData;
@@ -292,7 +291,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
iv_note_nodata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- startActivity(new Intent(mContext, AlarmActivity.class));
+ startActivity(new Intent(mContext, PortAlarmActivity.class));
}
});
}
@@ -400,7 +399,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
}
private void getAlarm() {
- startActivity(new Intent(mContext, AlarmActivity.class));
+ startActivity(new Intent(mContext, PortAlarmActivity.class));
}
private void checkSosNumber() {
@@ -617,7 +616,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
public void onSuccess(WeatherDailyBean weatherDailyBean) {
String jsonString = new Gson().toJson(weatherDailyBean);
Log.d("getWeather", "onSuccess: " + jsonString);
- mMMKV.encode(WeatherPresenter.WEATHER_DAILY_KEY, jsonString);
+ mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
List dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
index 00d09db..62890c4 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
@@ -1,8 +1,8 @@
package com.uiuios.aios.fragment.second;
import com.uiui.video.bean.VideoInfo;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.GoodsInfo;
diff --git a/app/src/main/java/com/uiuios/aios/service/main/MainSContact.java b/app/src/main/java/com/uiuios/aios/service/main/MainSContact.java
index 55573e6..9b7ab3b 100644
--- a/app/src/main/java/com/uiuios/aios/service/main/MainSContact.java
+++ b/app/src/main/java/com/uiuios/aios/service/main/MainSContact.java
@@ -1,8 +1,8 @@
package com.uiuios.aios.service.main;
-import com.uiuios.aios.base.BasePresenter;
-import com.uiuios.aios.base.BaseView;
import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.base.mvp.BasePresenter;
+import com.uiuios.aios.base.mvp.BaseView;
import java.util.List;
diff --git a/app/src/main/java/com/uiuios/aios/utils/DataUtil.java b/app/src/main/java/com/uiuios/aios/utils/DataUtil.java
new file mode 100644
index 0000000..3ab573c
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/utils/DataUtil.java
@@ -0,0 +1,42 @@
+package com.uiuios.aios.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 作者 mjsheng
+ * 日期 2018/8/31 09:50
+ * 邮箱 501802639@qq.com
+ * 来自:
+ */
+
+public class DataUtil {
+ private static SimpleDateFormat day = new SimpleDateFormat("MM月dd日");
+ private static SimpleDateFormat hour = new SimpleDateFormat("HH:mm");
+ private static SimpleDateFormat minute = new SimpleDateFormat("mm");
+
+ /**
+ * 格式化日期(精确到天)
+ */
+ public static String formatDateDay() {
+ return day.format(new Date());
+ }
+
+ public static String formatDateTime() {
+ return hour.format(new Date());
+ }
+
+ /**
+ * 格式化日期(hour)
+ */
+ public static String formatDateHour() {
+ return hour.format(new Date());
+ }
+
+ /**
+ * 格式化日期(minute)
+ */
+ public static String formatDateMinute() {
+ return minute.format(new Date());
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/utils/GlideLoadUtils.java b/app/src/main/java/com/uiuios/aios/utils/GlideLoadUtils.java
index 02828be..d8e0cc9 100644
--- a/app/src/main/java/com/uiuios/aios/utils/GlideLoadUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/GlideLoadUtils.java
@@ -43,11 +43,19 @@ public class GlideLoadUtils {
* @param context
* @param url 加载图片的url地址 String
* @param imageView 加载图片的ImageView 控件
- * @param default_image 图片展示错误的本地图片 id
+ * @param defaultImage 图片展示错误的本地图片 id
*/
- public void glideLoad(Context context, String url, ImageView imageView, int default_image) {
+ public void glideLoad(Context context, String url, ImageView imageView, int defaultImage) {
if (context != null) {
- Glide.with(context).load(url).centerCrop().error(default_image).into(imageView);
+ Glide.with(context).load(url).centerCrop().error(defaultImage).into(imageView);
+ } else {
+ Log.i(TAG, "Picture loading failed,context is null");
+ }
+ }
+
+ public void glideLoad(Context context, int resId, ImageView imageView, int defaultImage) {
+ if (context != null) {
+ Glide.with(context).load(resId).centerCrop().error(defaultImage).into(imageView);
} else {
Log.i(TAG, "Picture loading failed,context is null");
}
@@ -90,7 +98,7 @@ public class GlideLoadUtils {
if (fragment != null && fragment.getActivity() != null) {
Glide.with(fragment).load(url).centerCrop().error(default_image).into(imageView);
} else {
- Log.i(TAG, "Picture loading failed,android.app.SecondFragment is null");
+ Log.i(TAG, "Picture loading failed,android.app.Fragment is null");
}
}
}
diff --git a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
index b850326..34e7a9d 100644
--- a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
@@ -8,6 +8,7 @@ import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
import java.util.Date;
public class TimeUtils {
@@ -46,4 +47,17 @@ public class TimeUtils {
String timeString = String.format("%02d:%02d:%02d", hours, minutes, seconds);
return timeString;
}
+
+ // 根据日期取得星期几
+ public static String getWeek() {
+ Date date = new Date();
+ String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1;
+ if (weekIndex < 0) {
+ weekIndex = 0;
+ }
+ return weeks[weekIndex];
+ }
}
diff --git a/app/src/main/java/com/uiuios/aios/view/FAB_Float_on_Scroll.java b/app/src/main/java/com/uiuios/aios/view/FAB_Float_on_Scroll.java
new file mode 100644
index 0000000..6a65856
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/view/FAB_Float_on_Scroll.java
@@ -0,0 +1,38 @@
+package com.uiuios.aios.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import androidx.core.view.ViewCompat;
+
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+
+public class FAB_Float_on_Scroll extends FloatingActionButton.Behavior {
+
+ public FAB_Float_on_Scroll(Context context, AttributeSet attrs) {
+ super();
+ }
+
+ @Override
+ public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
+ super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
+
+ //child -> Floating Action Button
+ if (dyConsumed > 0) {
+ CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
+ int fab_bottomMargin = layoutParams.bottomMargin;
+ child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start();
+ } else if (dyConsumed < 0) {
+ child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start();
+ }
+ }
+
+ @Override
+ public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
+ return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;
+ }
+}
+
diff --git a/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java b/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
index fd442db..85abf75 100644
--- a/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
@@ -1,51 +1,38 @@
package com.uiuios.aios.view;
+import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.databinding.BindingAdapter;
import com.bumptech.glide.Glide;
+import com.uiuios.aios.R;
+import com.uiuios.aios.utils.GlideLoadUtils;
import com.uiuios.aios.utils.TimeUtils;
public class ImageViewAdapter {
-// @BindingAdapter("android:src")
-// public static void setSrc(ImageView view, Bitmap bitmap) {
-// view.setImageBitmap(bitmap);
-// }
-//
-// @BindingAdapter("android:src")
-// public static void setSrc(ImageView view, int resId) {
-// view.setImageResource(resId);
-// }
-//
-// @BindingAdapter("imageUrl")
-// public static void setSrc(ImageView imageView, String url) {
-// Glide.with(imageView.getContext())
-// .load(url)
-// .error(R.mipmap.ic_launcher)
-// .into(imageView);
-// }
-//
-// @BindingAdapter({"app:imageUrl", "app:placeHolder", "app:error"})
-// public static void loadImage(ImageView imageView, String url, Drawable holderDrawable, Drawable errorDrawable) {
-// Glide.with(imageView.getContext())
-// .load(url)
-// .placeholder(holderDrawable)
-// .error(errorDrawable)
-// .into(imageView);
-// }
-//
-// @BindingAdapter({"app:imageUrl", "app:errorDrawableId", "app:placeDrawableId"})
-// public static void loadImage(ImageView imageView, String url, int errorDrawableId, int placeDrawableId) {
-// Glide.with(imageView.getContext())
-// .load(url)
-// .error(errorDrawableId)
-// .placeholder(placeDrawableId)
-// .into(imageView);
-// }
+ @BindingAdapter("android:src")
+ public static void setSrc(ImageView view, Bitmap bitmap) {
+ view.setImageBitmap(bitmap);
+ }
+
+ @BindingAdapter("android:src")
+ public static void setSrc(ImageView view, int resId) {
+ view.setImageResource(resId);
+ }
+
+ @BindingAdapter("imageUrl")
+ public static void setSrc(ImageView imageView, String url) {
+ Glide.with(imageView.getContext())
+ .load(url)
+ .error(R.mipmap.ic_launcher)
+ .centerCrop()
+ .into(imageView);
+ }
/**
* 自定义设置图片属性 - 在匹配时自定义命名空间会被忽略
@@ -57,10 +44,26 @@ public class ImageViewAdapter {
.error(error)
.into(imageView);
}
+
@BindingAdapter({"setTime"})
public static void setTime(TextView textView, long timestamp) {
textView.setText(TimeUtils.transferSecondgToDate(timestamp));
}
+ @BindingAdapter({"setTemp"})
+ public static void setTemp(TextView textView, String temp) {
+ if (TextUtils.isEmpty(temp)) {
+ textView.setText("N/A ℃");
+ } else {
+ textView.setText(temp + " ℃");
+ }
+ }
+ @BindingAdapter({"setTempIcon"})
+ public static void setTempIcon(ImageView imageView, String code) {
+ String imageName = "he" + code;
+ Context context = imageView.getContext();
+ int resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
+ GlideLoadUtils.getInstance().glideLoad(context, resId, imageView, R.drawable.he999);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/com_android_appstore2.png b/app/src/main/res/drawable-hdpi/com_android_appstore2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_appstore2.png
rename to app/src/main/res/drawable-hdpi/com_android_appstore2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_aweme2.png b/app/src/main/res/drawable-hdpi/com_android_aweme2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_aweme2.png
rename to app/src/main/res/drawable-hdpi/com_android_aweme2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_browser2.png b/app/src/main/res/drawable-hdpi/com_android_browser2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_browser2.png
rename to app/src/main/res/drawable-hdpi/com_android_browser2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_camera2.png b/app/src/main/res/drawable-hdpi/com_android_camera2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_camera2.png
rename to app/src/main/res/drawable-hdpi/com_android_camera2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_dialer2.png b/app/src/main/res/drawable-hdpi/com_android_dialer2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_dialer2.png
rename to app/src/main/res/drawable-hdpi/com_android_dialer2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_gallery3d_app2.png b/app/src/main/res/drawable-hdpi/com_android_gallery3d_app2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_gallery3d_app2.png
rename to app/src/main/res/drawable-hdpi/com_android_gallery3d_app2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_mms_ui2.png b/app/src/main/res/drawable-hdpi/com_android_mms_ui2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_mms_ui2.png
rename to app/src/main/res/drawable-hdpi/com_android_mms_ui2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_news2.png b/app/src/main/res/drawable-hdpi/com_android_news2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_news2.png
rename to app/src/main/res/drawable-hdpi/com_android_news2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_android_settings2.png b/app/src/main/res/drawable-hdpi/com_android_settings2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_android_settings2.png
rename to app/src/main/res/drawable-hdpi/com_android_settings2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_tencent_mm2.png b/app/src/main/res/drawable-hdpi/com_tencent_mm2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_tencent_mm2.png
rename to app/src/main/res/drawable-hdpi/com_tencent_mm2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_uiui_sn2.png b/app/src/main/res/drawable-hdpi/com_uiui_sn2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_uiui_sn2.png
rename to app/src/main/res/drawable-hdpi/com_uiui_sn2.png
diff --git a/app/src/main/res/drawable-xhdpi/com_uiui_weather2.png b/app/src/main/res/drawable-hdpi/com_uiui_weather2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/com_uiui_weather2.png
rename to app/src/main/res/drawable-hdpi/com_uiui_weather2.png
diff --git a/app/src/main/res/drawable-hdpi/fb_alarm_add.png b/app/src/main/res/drawable-hdpi/fb_alarm_add.png
new file mode 100644
index 0000000..7d3f513
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/fb_alarm_add.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_add.png b/app/src/main/res/drawable-hdpi/icon_add.png
index f952fc5..0ee1422 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_add.png and b/app/src/main/res/drawable-hdpi/icon_add.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_exit.png b/app/src/main/res/drawable-hdpi/icon_exit.png
new file mode 100644
index 0000000..a84eb0e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_exit.png differ
diff --git a/app/src/main/res/drawable-xhdpi/weather2.png b/app/src/main/res/drawable-hdpi/weather2.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/weather2.png
rename to app/src/main/res/drawable-hdpi/weather2.png
diff --git a/app/src/main/res/drawable-xxhdpi/he100.png b/app/src/main/res/drawable-xxhdpi/he100.png
new file mode 100644
index 0000000..faf04c8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he100.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he101.png b/app/src/main/res/drawable-xxhdpi/he101.png
new file mode 100644
index 0000000..17841e4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he101.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he102.png b/app/src/main/res/drawable-xxhdpi/he102.png
new file mode 100644
index 0000000..51bc5a8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he102.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he103.png b/app/src/main/res/drawable-xxhdpi/he103.png
new file mode 100644
index 0000000..5fd9957
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he103.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he104.png b/app/src/main/res/drawable-xxhdpi/he104.png
new file mode 100644
index 0000000..9628fbd
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he104.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he150.png b/app/src/main/res/drawable-xxhdpi/he150.png
new file mode 100644
index 0000000..eaee769
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he150.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he153.png b/app/src/main/res/drawable-xxhdpi/he153.png
new file mode 100644
index 0000000..346a2c2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he153.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he154.png b/app/src/main/res/drawable-xxhdpi/he154.png
new file mode 100644
index 0000000..358be1a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he154.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he300.png b/app/src/main/res/drawable-xxhdpi/he300.png
new file mode 100644
index 0000000..24ba9bc
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he300.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he301.png b/app/src/main/res/drawable-xxhdpi/he301.png
new file mode 100644
index 0000000..ad65de8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he301.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he302.png b/app/src/main/res/drawable-xxhdpi/he302.png
new file mode 100644
index 0000000..4a018ee
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he302.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he303.png b/app/src/main/res/drawable-xxhdpi/he303.png
new file mode 100644
index 0000000..aa8d273
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he303.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he304.png b/app/src/main/res/drawable-xxhdpi/he304.png
new file mode 100644
index 0000000..3155a49
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he304.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he305.png b/app/src/main/res/drawable-xxhdpi/he305.png
new file mode 100644
index 0000000..f76f6e3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he305.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he306.png b/app/src/main/res/drawable-xxhdpi/he306.png
new file mode 100644
index 0000000..ffb6804
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he306.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he307.png b/app/src/main/res/drawable-xxhdpi/he307.png
new file mode 100644
index 0000000..1e33073
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he307.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he308.png b/app/src/main/res/drawable-xxhdpi/he308.png
new file mode 100644
index 0000000..2586187
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he308.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he309.png b/app/src/main/res/drawable-xxhdpi/he309.png
new file mode 100644
index 0000000..9beebe3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he309.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he310.png b/app/src/main/res/drawable-xxhdpi/he310.png
new file mode 100644
index 0000000..624b04e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he310.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he311.png b/app/src/main/res/drawable-xxhdpi/he311.png
new file mode 100644
index 0000000..5fcc3fc
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he311.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he312.png b/app/src/main/res/drawable-xxhdpi/he312.png
new file mode 100644
index 0000000..0e93ff7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he312.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he313.png b/app/src/main/res/drawable-xxhdpi/he313.png
new file mode 100644
index 0000000..ba783d6
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he313.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he314.png b/app/src/main/res/drawable-xxhdpi/he314.png
new file mode 100644
index 0000000..9e93846
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he314.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he315.png b/app/src/main/res/drawable-xxhdpi/he315.png
new file mode 100644
index 0000000..527e6fe
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he315.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he316.png b/app/src/main/res/drawable-xxhdpi/he316.png
new file mode 100644
index 0000000..8309afb
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he316.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he317.png b/app/src/main/res/drawable-xxhdpi/he317.png
new file mode 100644
index 0000000..2e9a702
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he317.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he318.png b/app/src/main/res/drawable-xxhdpi/he318.png
new file mode 100644
index 0000000..b99b851
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he318.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he350.png b/app/src/main/res/drawable-xxhdpi/he350.png
new file mode 100644
index 0000000..a9a0c52
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he350.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he351.png b/app/src/main/res/drawable-xxhdpi/he351.png
new file mode 100644
index 0000000..f7bdda3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he351.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he399.png b/app/src/main/res/drawable-xxhdpi/he399.png
new file mode 100644
index 0000000..321233b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he399.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he400.png b/app/src/main/res/drawable-xxhdpi/he400.png
new file mode 100644
index 0000000..532879b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he400.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he401.png b/app/src/main/res/drawable-xxhdpi/he401.png
new file mode 100644
index 0000000..4a92fc7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he401.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he402.png b/app/src/main/res/drawable-xxhdpi/he402.png
new file mode 100644
index 0000000..ccc2dab
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he402.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he403.png b/app/src/main/res/drawable-xxhdpi/he403.png
new file mode 100644
index 0000000..da32ebe
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he403.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he404.png b/app/src/main/res/drawable-xxhdpi/he404.png
new file mode 100644
index 0000000..99a3d9d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he404.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he405.png b/app/src/main/res/drawable-xxhdpi/he405.png
new file mode 100644
index 0000000..c3ac8d4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he405.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he406.png b/app/src/main/res/drawable-xxhdpi/he406.png
new file mode 100644
index 0000000..01348b1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he406.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he407.png b/app/src/main/res/drawable-xxhdpi/he407.png
new file mode 100644
index 0000000..37cdd78
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he407.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he408.png b/app/src/main/res/drawable-xxhdpi/he408.png
new file mode 100644
index 0000000..f8d216c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he408.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he409.png b/app/src/main/res/drawable-xxhdpi/he409.png
new file mode 100644
index 0000000..e7e729b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he409.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he410.png b/app/src/main/res/drawable-xxhdpi/he410.png
new file mode 100644
index 0000000..3e4dcf2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he410.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he456.png b/app/src/main/res/drawable-xxhdpi/he456.png
new file mode 100644
index 0000000..1b080c7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he456.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he457.png b/app/src/main/res/drawable-xxhdpi/he457.png
new file mode 100644
index 0000000..1b610d2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he457.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he499.png b/app/src/main/res/drawable-xxhdpi/he499.png
new file mode 100644
index 0000000..c486a59
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he499.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he500.png b/app/src/main/res/drawable-xxhdpi/he500.png
new file mode 100644
index 0000000..dcecc31
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he500.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he501.png b/app/src/main/res/drawable-xxhdpi/he501.png
new file mode 100644
index 0000000..41fba52
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he501.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he502.png b/app/src/main/res/drawable-xxhdpi/he502.png
new file mode 100644
index 0000000..6ffda43
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he502.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he503.png b/app/src/main/res/drawable-xxhdpi/he503.png
new file mode 100644
index 0000000..f7e2296
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he503.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he504.png b/app/src/main/res/drawable-xxhdpi/he504.png
new file mode 100644
index 0000000..b26ea7b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he504.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he507.png b/app/src/main/res/drawable-xxhdpi/he507.png
new file mode 100644
index 0000000..43b1e6e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he507.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he508.png b/app/src/main/res/drawable-xxhdpi/he508.png
new file mode 100644
index 0000000..f932cd9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he508.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he509.png b/app/src/main/res/drawable-xxhdpi/he509.png
new file mode 100644
index 0000000..b1a8adb
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he509.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he510.png b/app/src/main/res/drawable-xxhdpi/he510.png
new file mode 100644
index 0000000..eecaf5d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he510.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he511.png b/app/src/main/res/drawable-xxhdpi/he511.png
new file mode 100644
index 0000000..b0bcd8e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he511.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he512.png b/app/src/main/res/drawable-xxhdpi/he512.png
new file mode 100644
index 0000000..0d98a13
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he512.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he513.png b/app/src/main/res/drawable-xxhdpi/he513.png
new file mode 100644
index 0000000..e1128ff
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he513.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he514.png b/app/src/main/res/drawable-xxhdpi/he514.png
new file mode 100644
index 0000000..cb9adbc
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he514.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he515.png b/app/src/main/res/drawable-xxhdpi/he515.png
new file mode 100644
index 0000000..2faa917
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he515.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he900.png b/app/src/main/res/drawable-xxhdpi/he900.png
new file mode 100644
index 0000000..cbdb3e7
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he900.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he901.png b/app/src/main/res/drawable-xxhdpi/he901.png
new file mode 100644
index 0000000..bc6d105
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he901.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/he999.png b/app/src/main/res/drawable-xxhdpi/he999.png
new file mode 100644
index 0000000..4ce8569
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/he999.png differ
diff --git a/app/src/main/res/drawable/tv_add_alarm_background.xml b/app/src/main/res/drawable/tv_add_alarm_background.xml
new file mode 100644
index 0000000..435a83c
--- /dev/null
+++ b/app/src/main/res/drawable/tv_add_alarm_background.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/weather_background.xml b/app/src/main/res/drawable/weather_background.xml
new file mode 100644
index 0000000..ef61d8e
--- /dev/null
+++ b/app/src/main/res/drawable/weather_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/weather_background_day.xml b/app/src/main/res/drawable/weather_background_day.xml
new file mode 100644
index 0000000..3f5fd03
--- /dev/null
+++ b/app/src/main/res/drawable/weather_background_day.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/weather_background_night.xml b/app/src/main/res/drawable/weather_background_night.xml
new file mode 100644
index 0000000..98fd85f
--- /dev/null
+++ b/app/src/main/res/drawable/weather_background_night.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_weather.xml b/app/src/main/res/layout-land/activity_weather.xml
deleted file mode 100644
index 4f310e0..0000000
--- a/app/src/main/res/layout-land/activity_weather.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-port/activity_weather.xml b/app/src/main/res/layout-port/activity_weather.xml
deleted file mode 100644
index 50a2526..0000000
--- a/app/src/main/res/layout-port/activity_weather.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_alarm_port.xml b/app/src/main/res/layout/activity_add_alarm_port.xml
new file mode 100644
index 0000000..ab430ab
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_alarm_port.xml
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_alarm_port.xml b/app/src/main/res/layout/activity_alarm_port.xml
new file mode 100644
index 0000000..49ceab0
--- /dev/null
+++ b/app/src/main/res/layout/activity_alarm_port.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_info.xml b/app/src/main/res/layout/activity_notice_info.xml
index c8f7e93..8aaafad 100644
--- a/app/src/main/res/layout/activity_notice_info.xml
+++ b/app/src/main/res/layout/activity_notice_info.xml
@@ -21,10 +21,10 @@
@@ -67,10 +67,10 @@
+ android:src="@drawable/icon_nodata" />