version:5.1

fix:
update:更改天气闹钟等为竖屏
This commit is contained in:
2024-04-15 14:30:06 +08:00
parent 6fcb68d76e
commit 3db9b703ac
166 changed files with 3518 additions and 1298 deletions

View File

@@ -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"

View File

@@ -128,7 +128,7 @@
android:name=".activity.main.PhoneMainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity android:name=".activity.ControlActivity" />
<activity android:name=".activity.QuickAppActivity" />
@@ -137,12 +137,12 @@
<activity android:name=".activity.ArticleActivity" />
<activity
android:name=".activity.DetailsActivity"
android:screenOrientation="userPortrait"
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
<activity
android:name=".activity.contact.AddContactActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.wifi.WiFiManagerActivity"
android:launchMode="singleTask"
@@ -161,15 +161,15 @@
<activity
android:name=".activity.code.FamilySpaceActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.weather.WeatherActivity"
android:launchMode="singleTask"
android:screenOrientation="landscape" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.location.LocationAcivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
android:screenOrientation="portrait"
android:theme="@style/activity_styles" />
<activity
android:name=".activity.EmergencyActivity"
@@ -178,19 +178,23 @@
android:name=".activity.NoticeActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:screenOrientation="userPortrait"
android:screenOrientation="portrait"
android:theme="@style/FloatingWindow" />
<activity
android:name=".activity.NoticeInfoActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:screenOrientation="userPortrait"
android:screenOrientation="portrait"
android:theme="@style/activity_styles" />
<activity android:name=".activity.APPListActivity" />
<activity
android:name=".activity.alarm.AlarmActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape" />
<activity
android:name=".activity.alarm.port.PortAlarmActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.alarmclock.AlarmClockActivity"
android:screenOrientation="portrait"
@@ -199,6 +203,10 @@
android:name=".activity.alarmclock.AlarmClockAddActivity"
android:launchMode="singleTask"
android:screenOrientation="userLandscape" />
<activity
android:name=".activity.alarmclock.port.PortAlarmClockAddActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.alarmclock.AlarmClockEditActivity"
android:launchMode="singleTask"
@@ -214,36 +222,36 @@
<activity
android:name=".activity.InformationActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.InformationDetailsActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.GoodsActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".activity.OrderActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.PayActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.OrderListActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.ExpressActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<activity
android:name=".activity.AddressActivity"
android:launchMode="singleTask"
android:screenOrientation="userPortrait" />
android:screenOrientation="portrait" />
<!-- Intent received used to install shortcuts from other applications -->
<receiver

View File

@@ -37,6 +37,16 @@ public class APPListActivity extends BaseActivity {
return R.layout.activity_applist;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
@Override
public void initView() {
back = findViewById(R.id.iv_back);

View File

@@ -40,6 +40,16 @@ public class AddIconActivity extends BaseActivity {
return R.layout.activity_add_icon;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
@Override
public void initView() {
ButterKnife.bind(this);

View File

@@ -62,6 +62,15 @@ public class AddItemActivity extends BaseActivity {
return R.layout.add_item_confirmation_activity;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
/**
* 初始化视图
*/

View File

@@ -31,12 +31,26 @@ public class AddressActivity extends BaseDataBindingActivity {
private AddressAdapter mAddressAdapter;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override
protected int getLayoutId() {
return R.layout.activity_address;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
/**
* 初始化视图
*/
@Override
public void initView() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_address);
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.setListener(new Listener());
mAddressAdapter = new AddressAdapter();

View File

@@ -50,6 +50,16 @@ public class ArticleActivity extends BaseActivity {
return R.layout.activity_articl;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
@Override
public void initView() {
ButterKnife.bind(this);

View File

@@ -113,6 +113,16 @@ public class ControlActivity extends BaseActivity {
return R.layout.activity_control;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
@Override
public void initView() {
ButterKnife.bind(this);

View File

@@ -37,6 +37,16 @@ public class DailyAppActivity extends BaseActivity {
return R.layout.activity_dailyapp;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
@Override
public void initView() {
ButterKnife.bind(this);

View File

@@ -90,12 +90,27 @@ public class DetailsActivity extends BaseDataBindingActivity {
private ActivityDetailsBinding mBinding;
private GoodsInfo mGoodsInfo;
@Override
protected int getLayoutId() {
return R.layout.activity_details;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
/**
* 初始化视图
*/
@Override
public void initView() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_details);
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
ButterKnife.bind(this);
Intent intent = getIntent();
if (intent == null) return;
@@ -120,8 +135,8 @@ public class DetailsActivity extends BaseDataBindingActivity {
}
});
tv_stock.setText("库存:" + mGoodsInfo.getStock());
BigDecimal d =new BigDecimal(mGoodsInfo.getOriginal_price());
BigDecimal d2 =new BigDecimal(mGoodsInfo.getBuying_price());
BigDecimal d = new BigDecimal(mGoodsInfo.getOriginal_price());
BigDecimal d2 = new BigDecimal(mGoodsInfo.getBuying_price());
tv_subsidy.setText("官方补贴" + d.subtract(d2).toString());
tv_buying_price.setText("" + mGoodsInfo.getBuying_price());
tv_original_price.setText("原价:" + mGoodsInfo.getOriginal_price() + "");

View File

@@ -32,12 +32,27 @@ public class ExpressActivity extends BaseDataBindingActivity {
private ActivityExpressBinding mBinding;
@Override
protected int getLayoutId() {
return R.layout.activity_express;
}
@Override
protected boolean setNightMode() {
return false;
}
@Override
protected boolean setfitWindow() {
return true;
}
/**
* 初始化视图
*/
@Override
public void initView() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_express);
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
}
@@ -63,7 +78,7 @@ public class ExpressActivity extends BaseDataBindingActivity {
private void getOrderExpress(String orderSn, String orderId) {
NetInterfaceManager.getInstance()
.getOrderExpressObservable(orderSn, orderId)
.compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<ExpressData>>() {
@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);
}

View File

@@ -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<String, GoodsType> 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<BaseResponse<List<GoodsType>>>() {
@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());
}

View File

@@ -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<BaseResponse<ArticleList>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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<String, CategoryBean> 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<BaseResponse<List<CategoryBean>>>() {
@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());
}

View File

@@ -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());
}

View File

@@ -62,12 +62,27 @@ public class OrderActivity extends BaseDataBindingActivity {
ActivityResultLauncher<Intent> 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<ActivityResult>() {
@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<BaseResponse<OrderBean>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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());
}

View File

@@ -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<BaseResponse<WxpayBean>>() {
@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<Long>() {
@@ -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<Long>() {
@@ -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<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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<BaseResponse<GoodsList>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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;
}
/**
* 初始化视图
*/

View File

@@ -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<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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;

View File

@@ -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<PortAlarmViewModel, ActivityAlarmPortBinding> {
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<List<AlarmClockData>>() {
@Override
public void onChanged(List<AlarmClockData> 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<BaseResponse>() {
@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> alarmClockData) {
List<AlarmClockData> 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));
}
}
}

View File

@@ -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<ActivityAlarmPortBinding> {
private static final String TAG = PortAlarmViewModel.class.getSimpleName();
@Override
public ActivityAlarmPortBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<List<AlarmClockData>> mAlarmClockData =new MutableLiveData<>();
public MutableLiveData<List<AlarmClockData>> getAlarmClockData() {
return mAlarmClockData;
}
public void getAlarmClock() {
NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
@Override
public void setAlarmClock(List<AlarmClockData> 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<BaseResponse<List<AlarmClockData>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getAlarmClock", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<AlarmClockData>> 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: ");
}
});
}
}

View File

@@ -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<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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)

View File

@@ -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;

View File

@@ -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<PortAlarmClockAddViewModel, ActivityAddAlarmPortBinding> {
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<LocalMedia>() {
@Override
public void onResult(ArrayList<LocalMedia> 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<Integer>() {
@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();
}
}
}

View File

@@ -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<ActivityAddAlarmPortBinding> {
@Override
public ActivityAddAlarmPortBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -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));

View File

@@ -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;

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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

View File

@@ -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);

View File

@@ -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<MainView> {

View File

@@ -9,4 +9,9 @@ public class PhoneMainActivity extends BaseMainActivity {
public int getLayoutId() {
return R.layout.phone_activity_main;
}
@Override
protected boolean setNightMode() {
return false;
}
}

View File

@@ -1,147 +1,63 @@
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<WeatherViewModel, ActivityWeatherBinding>
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<JsonBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<String>>> 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<Intent> register;
@Override
public int getLayoutId() {
return R.layout.activity_weather;
}
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new WeatherPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(lifecycleSubject);
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
} 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<ActivityResult>() {
private ActivityResultLauncher<Intent> register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Log.e(TAG, "onActivityResult: " + result);
@@ -151,116 +67,185 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
Bundle bundle = intent.getExtras();
Log.e(TAG, "onActivityResult: " + bundle);
String address = bundle.getString("address");
mDistrict = bundle.getString("district");
String district = 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);
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, district);
mViewModel.decodeGeo(address);
mViewDataBinding.tvLocation.setText(district);
}
}
}
});
}
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() : "";
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);
public void onDisconnected() {
}
})
.setTitleText("城市选择")
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.setLineSpacingMultiplier(2.5f)
.build();
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
// pvOptions.setPicker(options1Items);//一级选择器
// pvOptions.setPicker(options1Items, options2Items);//二级选择器
pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
pvOptions.show();
}
@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() {
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);
mViewDataBinding.rvWeather.addItemDecoration(new HorizontalItemDecoration(30, this));//10表示10dp
} else {
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
}
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);
mViewDataBinding.tvDate.setText(DataUtil.formatDateDay() + "\t" + TimeUtils.getWeek());
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, "");
if (TextUtils.isEmpty(tude)) {
mPresenter.getLocation();
} else {
tv_location.setText(district);
mPresenter.getWeather(tude);
}
}
mViewModel.getOptions1ItemsData().observe(this, new Observer<List<JsonBean>>() {
@Override
public void setGeo(MapGeoResult mapGeoresult) {
if (mapGeoresult != null) {
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoresult.getLocation().toString());
mPresenter.getWeather(mapGeoresult.getLocation().toString());
public void onChanged(List<JsonBean> jsonBeans) {
options1Items = jsonBeans;
}
});
mViewModel.getOptions2ItemsData().observe(this, new Observer<ArrayList<ArrayList<String>>>() {
@Override
public void onChanged(ArrayList<ArrayList<String>> arrayLists) {
options2Items = arrayLists;
}
});
mViewModel.getOptions3ItemsData().observe(this, new Observer<ArrayList<ArrayList<ArrayList<String>>>>() {
@Override
public void onChanged(ArrayList<ArrayList<ArrayList<String>>> arrayLists) {
options3Items = arrayLists;
}
});
mViewModel.getBooleanData().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
mLoaded = aBoolean;
}
});
mViewModel.getGeoResultData().observe(this, new Observer<MapGeoResult>() {
@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<String>() {
@Override
public void setLocation(String location) {
tv_location.setText(location);
public void onChanged(String s) {
mViewDataBinding.tvLocation.setText(s);
ToastUtil.show("刷新成功");
mPresenter.getWeatherCache();
mViewModel.decodeGeo(s);
}
});
mViewModel.getWeatherNowData().observe(this, new Observer<WeatherNowBean>() {
@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<WeatherDailyBean>() {
@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();
}
@Override
public void setWeatherCache(WeatherDailyBean weatherCache) {
if (weatherCache != null) {
mWeatherDayApdapter.setDailyBeans(weatherCache.getDaily());
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)) {
mViewModel.getLocation();
} else {
mViewDataBinding.tvLocation.setText(district);
mViewModel.getWeatherNow(tude);
mViewModel.getWeather7D(tude);
}
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();
public class ClickListener {
public void exit(View view) {
finish();
}
});
thread.start();
public void selectAddress(View view) {
hideSoftKeyBoard(view);
// if (!mLoaded) {
// ToastUtil.show("位置数据没有加载完成");
// } else {
register.launch(new Intent(WeatherActivity.this, LocationAcivity.class));
// }
}
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> jsonBean = parseData(JsonData);//用Gson 转成实体
/**
* 添加省份数据
*
* 注意如果是添加的JavaBean实体则实体类需要实现 IPickerViewData 接口,
* PickerView会通过getPickerViewText方法获取字符串显示出来。
*/
options1Items = jsonBean;
for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
ArrayList<ArrayList<String>> 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<String> 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("");
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 {
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);//添加该省所有地区数据
mViewDataBinding.tvLocation.setText(district);
mViewModel.getWeatherNow(tude);
mViewModel.getWeather7D(tude);
}
/**
* 添加城市数据
*/
options2Items.add(cityList);
/**
* 添加地区数据
*/
options3Items.add(province_AreaList);
}
mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);
}
public ArrayList<JsonBean> parseData(String result) {//Gson 解析
ArrayList<JsonBean> 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);
}
return detail;
}
}

View File

@@ -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<WeatherView> {
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);
}
}

View File

@@ -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<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> 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<MapGeoBean>() {
@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<WeatherDailyBean>() {
}.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);
}
}
});
}
}

View File

@@ -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<ActivityWeatherBinding> {
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<List<JsonBean>> mOptions1ItemsData = new MutableLiveData<>();
private MutableLiveData<ArrayList<ArrayList<String>>> mOptions2ItemsData = new MutableLiveData<>();
private MutableLiveData<ArrayList<ArrayList<ArrayList<String>>>> mOptions3ItemsData = new MutableLiveData<>();
private MutableLiveData<Boolean> mBooleanData = new MutableLiveData<>();
public MutableLiveData<List<JsonBean>> getOptions1ItemsData() {
return mOptions1ItemsData;
}
public MutableLiveData<ArrayList<ArrayList<String>>> getOptions2ItemsData() {
return mOptions2ItemsData;
}
public MutableLiveData<ArrayList<ArrayList<ArrayList<String>>>> getOptions3ItemsData() {
return mOptions3ItemsData;
}
public MutableLiveData<Boolean> getBooleanData() {
return mBooleanData;
}
private MutableLiveData<MapGeoResult> mGeoResultData = new MutableLiveData<>();
private MutableLiveData<String> mLocationData = new MutableLiveData<>();
private MutableLiveData<WeatherNowBean> mWeatherNowData = new MutableLiveData<>();
private MutableLiveData<WeatherDailyBean> mWeatherDailyData = new MutableLiveData<>();
public MutableLiveData<MapGeoResult> getGeoResultData() {
return mGeoResultData;
}
public MutableLiveData<String> getLocationData() {
return mLocationData;
}
public MutableLiveData<WeatherNowBean> getWeatherNowData() {
return mWeatherNowData;
}
public MutableLiveData<WeatherDailyBean> getWeatherDailyData() {
return mWeatherDailyData;
}
public void loadProvince() {
Observable.create(new ObservableOnSubscribe<ArrayList<JsonBean>>() {
@Override
public void subscribe(@NonNull ObservableEmitter<ArrayList<JsonBean>> emitter) throws Throwable {
Log.e("loadProvince", "subscribe: ");
String JsonData = new GetJsonDataUtil().getJson(getCtx(), "province.json");//获取assets目录下的json文件数据
ArrayList<JsonBean> 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<ArrayList<JsonBean>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("loadProvince", "onSubscribe: ");
}
@Override
public void onNext(@NonNull ArrayList<JsonBean> jsonBeans) {
Log.e("loadProvince", "onNext: ");
mOptions1ItemsData.setValue(jsonBeans);
ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();
for (int i = 0; i < jsonBeans.size(); i++) {//遍历省份
ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
ArrayList<ArrayList<String>> 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<String> 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<MapGeoBean>() {
@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<WeatherNowBean>() {
}.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<WeatherDailyBean>() {
}.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);
}
});
}
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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<WeatherDayApdapterPort.WeatherHolder> {
private static final String TAG = WeatherDayApdapterPort.class.getSimpleName();
private List<WeatherDailyBean.DailyBean> mDailyBeans;
private Context mContext;
public void setDailyBeans(List<WeatherDailyBean.DailyBean> 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);
}
}
}

View File

@@ -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<PortAlarmAdapter.holder> {
private FragmentActivity mContext;
private List<AlarmClockData> mAlarmClockData;
private OnLongClickListener mOnLongClickListener;
public void setAlarmClockData(List<AlarmClockData> 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<Integer>() {
@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<Bitmap>() {
@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);
}
}
}

View File

@@ -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<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> 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<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> 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();
}

View File

@@ -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<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> 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<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> 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();
}

View File

@@ -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<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
public BaseLifecycleActivity() {
super();
}
@ContentView
public BaseLifecycleActivity(@LayoutRes int contentLayoutId) {
super(contentLayoutId);
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> 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();
}
}

View File

@@ -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<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
public BaseLightActivity() {
super();
}
@ContentView
public BaseLightActivity(@LayoutRes int contentLayoutId) {
super(contentLayoutId);
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> 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();
}
}

View File

@@ -1,10 +0,0 @@
package com.uiuios.aios.base;
import androidx.annotation.NonNull;
public interface BasePresenter<V extends BaseView> {
void attachView(@NonNull V view);
void detachView();
}

View File

@@ -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<ActivityEvent> {
public final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
/**
* {@link com.trello.rxlifecycle4.components.RxActivity}
* copied form RxActivity}
*/
public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider<ActivityEvent> {
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
public DataBindingActivity() {
super();
}
@ContentView
public DataBindingActivity(@LayoutRes int contentLayoutId) {
super(contentLayoutId);
public BehaviorSubject<ActivityEvent> 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();
}
}

View File

@@ -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();
}

View File

@@ -1,4 +0,0 @@
package com.uiuios.aios.base;
public interface BaseView {
}

View File

@@ -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();
}

View File

@@ -0,0 +1,7 @@
package com.uiuios.aios.base.mvp;
public interface BasePresenter<V extends BaseView> {
void attachView(V view);
void detachView();
}

View File

@@ -0,0 +1,5 @@
package com.uiuios.aios.base.mvp;
public interface BaseView {
}

View File

@@ -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<VM extends ViewModel, VDB extends ViewDataBinding> extends BaseTransparentActivity {
private static final String TAG = BaseMvvmActivity.class.getSimpleName();
protected VM mViewModel;
protected VDB mViewDataBinding;
protected Class<VM> vmClass;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//ViewDataBinding
mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId());
mViewDataBinding.setLifecycleOwner(this);
//ViewModel
vmClass = (Class<VM>) ((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();
}

View File

@@ -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<VDB extends ViewDataBinding> 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<Context> 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<ActivityEvent> mBehaviorSubject;
@Override
public void setLifecycle(BehaviorSubject subject) {
this.mBehaviorSubject =subject;
}
@Override
public BehaviorSubject<ActivityEvent> getLifecycle() {
return mBehaviorSubject;
}
}

View File

@@ -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<VDB extends ViewDataBinding> {
void setVDBinding(VDB binding);
VDB getVDBinding() throws NullPointerException;
void setCtx(Context context);
Context getCtx() throws NullPointerException;
void setLifecycle(BehaviorSubject<ActivityEvent> subject);
BehaviorSubject<ActivityEvent> getLifecycle();
}

View File

@@ -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";
}

View File

@@ -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 {

View File

@@ -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<AlarmClockData> 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<WeatherDailyBean.DailyBean> dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);

View File

@@ -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;

View File

@@ -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<WeatherDailyBean.DailyBean> dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());
}
}

View File

@@ -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");
}
}
}

View File

@@ -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];
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 949 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Some files were not shown because too many files have changed in this diff Show More