version:6.1

fix:
update:修改联系人,修复联系人上传失败
This commit is contained in:
2024-07-04 09:48:12 +08:00
parent a466c70784
commit f06f51c5a7
109 changed files with 2700 additions and 995 deletions

View File

@@ -7,6 +7,7 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
@@ -28,6 +29,7 @@ import com.uiuios.aios.receiver.BootReceiver;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -42,23 +44,29 @@ import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class EmergencyActivity extends AppCompatActivity {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@BindView(R.id.tv_countdown)
TextView tv_countdown;
@BindView(R.id.iv_finish)
ImageView iv_finish;
private Disposable subscribe;
private String TAG = EmergencyActivity.class.getSimpleName();
private boolean needDial = false;
private boolean isCalling = false;
private List<Contact> phoneListSet;
private CacheHelper mCacheHelper;
// private List<Contact> phoneListSet;
// private CacheHelper mCacheHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.e(TAG, "onCreate: ");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_emergency);
mCacheHelper = new CacheHelper(this);
// mCacheHelper = new CacheHelper(this);
ButterKnife.bind(this);
//发送紧急广播
@@ -75,20 +83,22 @@ public class EmergencyActivity extends AppCompatActivity {
// return;
// }
String jsonString = mCacheHelper.getAsString(UrlAddress.GET_MAIL_LIST);
//为 "" 是已经请求成功的
if (jsonString == null) {
return;
}
Gson gson = new Gson();
Type type = new TypeToken<List<Contact>>() {
}.getType();
List<Contact> contactList = gson.fromJson(jsonString, type);
if (contactList == null || contactList.size() == 0) {
return;
}
phoneListSet = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
Log.e(TAG, "onCreate: " + phoneListSet);
// String jsonString = mCacheHelper.getAsString(UrlAddress.GET_MAIL_LIST);
// //为 "" 是已经请求成功的
// if (jsonString == null) {
// return;
// }
// Gson gson = new Gson();
// Type type = new TypeToken<List<Contact>>() {
// }.getType();
// List<Contact> contactList = gson.fromJson(jsonString, type);
// if (contactList == null || contactList.size() == 0) {
// return;
// }
String phone = mMMKV.decodeString(CommonConfig.EMERGENCY_CONTACT_KEY, "");
// phoneListSet = new ArrayList<String>();
// Log.e(TAG, "onCreate: " + phoneListSet);
final Long time = 3L;
subscribe = Observable.interval(1, TimeUnit.SECONDS)
@@ -100,10 +110,9 @@ public class EmergencyActivity extends AppCompatActivity {
tv_countdown.setText("倒计时(" + (time - aLong - 1) + ")秒");
Log.e(TAG, "accept: " + (time - aLong - 1));
} else {
MMKV mmkv = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
String longitude = mCacheHelper.getAsString(CommonConfig.MAP_LONGITUDE_KEY);
String latitude = mCacheHelper.getAsString(CommonConfig.MAP_LATITUDE_KEY);
String address = mCacheHelper.getAsString(CommonConfig.MAP_ADDRESS_KEY);
String longitude = mMMKV.decodeString(CommonConfig.MAP_LONGITUDE_KEY, "");
String latitude = mMMKV.decodeString(CommonConfig.MAP_LATITUDE_KEY, "");
String address = mMMKV.decodeString(CommonConfig.MAP_ADDRESS_KEY, "");
NetInterfaceManager.getInstance()
.getSOSRecordObservable(longitude, latitude, address)
.subscribe(new Observer<BaseResponse>() {
@@ -128,15 +137,21 @@ public class EmergencyActivity extends AppCompatActivity {
Log.e("SosRecordApi", "onComplete: ");
}
});
needDial = true;
if (TextUtils.isEmpty(phone)) {
Toaster.show("没有设置紧急联系人");
finish();
}
Intent intent1 = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + phoneListSet.get(0).getMobile());
Uri data = Uri.parse("tel:" + phone);
intent1.setData(data);
startActivity(intent1);
isCalling = true;
phoneListSet.remove(0);
// finish();
// phoneListSet.remove(0);
subscribe.dispose();
finish();
}
});
iv_finish.setOnClickListener(new View.OnClickListener() {
@@ -166,36 +181,36 @@ public class EmergencyActivity extends AppCompatActivity {
protected void onStart() {
super.onStart();
Log.e(TAG, "onResume: ");
Log.e(TAG, "onResume: " + phoneListSet);
if (needDial) {
if (phoneListSet == null || phoneListSet.size() == 0) {
return;
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent1 = new Intent(Intent.ACTION_CALL);
String phone = phoneListSet.get(0).getMobile();
Uri data = Uri.parse("tel:" + phone);
intent1.setData(data);
startActivity(intent1);
isCalling = true;
phoneListSet.remove(0);
}
}, 2000);
} else {
if (phoneListSet == null) {
Toaster.show("没有设置紧急联系人");
finish();
}
}
// Log.e(TAG, "onResume: " + phoneListSet);
// if (needDial) {
// if (phoneListSet == null || phoneListSet.size() == 0) {
// return;
// }
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// Intent intent1 = new Intent(Intent.ACTION_CALL);
// String phone = phoneListSet.get(0).getMobile();
// Uri data = Uri.parse("tel:" + phone);
// intent1.setData(data);
// startActivity(intent1);
// isCalling = true;
// phoneListSet.remove(0);
// }
// }, 2000);
// } else {
// if (phoneListSet == null) {
// Toaster.show("没有设置紧急联系人");
// finish();
// }
// }
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "onDestroy: ");
if (subscribe != null) {
if (subscribe != null && !subscribe.isDisposed()) {
subscribe.dispose();
subscribe = null;
}

View File

@@ -1,208 +0,0 @@
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 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.bean.ArticleInfo;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.databinding.ActivityInformationBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class InformationActivity extends BaseDataBindingActivity {
private static final String TAG = InformationActivity.class.getSimpleName();
@BindView(R.id.tabLayout)
TabLayout tabLayout;
@BindView(R.id.cl_bar)
ConstraintLayout cl_bar;
@BindView(R.id.rv_video)
RecyclerView rv_video;
@BindView(R.id.cl_nodata)
ConstraintLayout cl_nodata;
private ActivityInformationBinding mBinding;
private InformationAdapter mInformationAdapter;
private HashMap<String, CategoryBean> mCategoryMap;
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_information);
}
@Override
public void initView() {
ButterKnife.bind(this);
// UltimateBarX.statusBarOnly(this)
// .transparent()
// .apply();
UltimateBarX.addStatusBarTopPadding(cl_bar);
mInformationAdapter = new InformationAdapter();
LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this);
linearLayoutManager1.setOrientation(LinearLayoutManager.VERTICAL);
rv_video.setLayoutManager(linearLayoutManager1);
rv_video.setAdapter(mInformationAdapter);
mBinding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.e(TAG, "onTabSelected: " + tab.getText());
if (tab.getText() != null && !TextUtils.isEmpty(tab.getText())) {
String text = tab.getText().toString();
if (mCategoryMap.get(text) != null) {
getArticleList(mCategoryMap.get(text).getId());
}
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.e(TAG, "onTabUnselected: " + tab.getText());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.e(TAG, "onTabReselected: " + tab.getText());
}
});
}
@Override
public void initData() {
getCategorys();
}
private void getCategorys() {
NetInterfaceManager.getInstance().getCategorysObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<CategoryBean>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getCategorys", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<CategoryBean>> listBaseResponse) {
Log.e("getCategorys", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
mBinding.tabLayout.setVisibility(View.VISIBLE);
List<CategoryBean> categoryList = listBaseResponse.data;
List<String> typeString = categoryList.stream().map(CategoryBean::getName).collect(Collectors.toList());
String[] type = new String[categoryList.size()];
type = typeString.toArray(type);
mCategoryMap = new HashMap<>();
for (int i = 0; i < type.length; i++) {
mCategoryMap.put(type[i], categoryList.get(i));
TabLayout.Tab tab = mBinding.tabLayout.newTab();//关键的创建一个Tab,注意这里使用的是已经实例的mTablayout创建的Tab,很容易疏忽使用new Tablayout().new Tab()的方式创建,这个是会报错的.
tab.setText(type[i]);
if (i == 0) {
mBinding.tabLayout.addTab(tab, 0, true);//设置选择的item
} else {
mBinding.tabLayout.addTab(tab);
}
}
getArticleList(categoryList.get(0).getId());
} else {
mBinding.tabLayout.setVisibility(View.GONE);
getArticleList();
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getCategorys", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getCategorys", "onComplete: ");
}
});
}
private void getArticleList() {
NetInterfaceManager.getInstance()
.getArticleListObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
private void getArticleList(int id) {
NetInterfaceManager.getInstance()
.getArticleListObservable(id)
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
private Observer<BaseResponse<ArticleList>> getArticleListObserver() {
return new Observer<BaseResponse<ArticleList>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getArticle", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<ArticleList> listBaseResponse) {
Log.e("getArticle", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
ArticleList articleList = listBaseResponse.data;
List<ArticleInfo> articleInfoList = articleList.getData();
if (articleInfoList != null && articleInfoList.size() != 0) {
articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
mInformationAdapter.setArticleInfos(articleInfoList);
rv_video.setVisibility(View.VISIBLE);
cl_nodata.setVisibility(android.view.View.GONE);
} else {
rv_video.setVisibility(android.view.View.GONE);
cl_nodata.setVisibility(android.view.View.VISIBLE);
}
} else {
rv_video.setVisibility(android.view.View.GONE);
cl_nodata.setVisibility(android.view.View.VISIBLE);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getArticle", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getArticle", "onComplete: ");
}
};
}
}

View File

@@ -4,65 +4,71 @@ import android.graphics.Color;
import android.view.View;
import android.widget.ImageView;
import androidx.databinding.DataBindingUtil;
import androidx.viewpager.widget.ViewPager;
import androidx.lifecycle.Observer;
import com.bumptech.glide.Glide;
import com.hjq.toast.Toaster;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.HealthCodeAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.HealthCode;
import com.uiuios.aios.databinding.ActivityFamilySpaceBinding;
import com.uiuios.aios.view.ScaleCircleNavigator;
import net.lucode.hackware.magicindicator.MagicIndicator;
import net.lucode.hackware.magicindicator.ViewPagerHelper;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class FamilySpaceActivity extends BaseDataBindingActivity implements FamilySpaceContact.CodeView {
public class FamilySpaceActivity extends BaseMvvmActivity<FamilySpaceViewModel, ActivityFamilySpaceBinding> {
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.viewPager)
ViewPager mViewPager;
@BindView(R.id.magicIndicator)
MagicIndicator mMagicIndicator;
@BindView(R.id.iv_nodata)
ImageView iv_nodata;
private FamilySpacePresenter mPresenter;
private HealthCodeAdapter mHealthCodeAdapter;
private ScaleCircleNavigator scaleCircleNavigator;
@Override
protected int getLayoutId() {
return R.layout.activity_family_space;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.activity_family_space);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new Click());
}
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new FamilySpacePresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(getLifecycleSubject());
iv_back.setOnClickListener(view -> finish());
mHealthCodeAdapter = new HealthCodeAdapter();
mViewPager.setAdapter(mHealthCodeAdapter);
mViewDataBinding.viewPager.setAdapter(mHealthCodeAdapter);
scaleCircleNavigator = new ScaleCircleNavigator(this);
}
@Override
public void initData() {
mPresenter.getHealthCode();
mViewModel.getHealthCodeListData().observe(this, new Observer<List<HealthCode>>() {
@Override
public void onChanged(List<HealthCode> healthCodes) {
if (healthCodes==null||healthCodes.isEmpty()){
mViewDataBinding.viewPager.setVisibility(View.GONE);
mViewDataBinding.magicIndicator.setVisibility(View.GONE);
mViewDataBinding.ivNodata.setVisibility(View.VISIBLE);
}else {
setImageViews(healthCodes);
mViewDataBinding.viewPager.setVisibility(View.VISIBLE);
mViewDataBinding.magicIndicator.setVisibility(View.VISIBLE);
mViewDataBinding.ivNodata.setVisibility(View.GONE);
}
}
});
mViewModel.getHealthCode();
}
private void setImageViews(List<HealthCode> healthCodes) {
mMagicIndicator.setNavigator(scaleCircleNavigator);
mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator);
scaleCircleNavigator.setCircleCount(healthCodes.size());
scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
@@ -72,7 +78,7 @@ public class FamilySpaceActivity extends BaseDataBindingActivity implements Fami
}
});
ViewPagerHelper.bind(mMagicIndicator, mViewPager);
ViewPagerHelper.bind(mViewDataBinding.magicIndicator, mViewDataBinding.viewPager);
List<ImageView> imageViews = new ArrayList<>();
for (HealthCode healthCode : healthCodes) {
ImageView image = new ImageView(this);
@@ -85,23 +91,10 @@ public class FamilySpaceActivity extends BaseDataBindingActivity implements Fami
mHealthCodeAdapter.notifyDataSetChanged();
}
@Override
public void setHealthCode(List<HealthCode> codeList) {
setImageViews(codeList);
mViewPager.setVisibility(View.VISIBLE);
mMagicIndicator.setVisibility(View.VISIBLE);
iv_nodata.setVisibility(View.GONE);
}
public class Click {
public void exit(View view) {
finish();
}
@Override
public void setHealthCodeNodata() {
mViewPager.setVisibility(View.GONE);
mMagicIndicator.setVisibility(View.GONE);
iv_nodata.setVisibility(View.VISIBLE);
}
@Override
public void onError() {
Toaster.show("连接服务器失败,请检查网络连接");
}
}

View File

@@ -1,19 +0,0 @@
package com.uiuios.aios.activity.code;
import com.uiuios.aios.base.mvp.BasePresenter;
import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.HealthCode;
import java.util.List;
public class FamilySpaceContact {
public interface Presenter extends BasePresenter<CodeView> {
void getHealthCode();
}
public interface CodeView extends BaseView {
void setHealthCode(List<HealthCode> codeList);
void setHealthCodeNodata();
void onError();
}
}

View File

@@ -1,68 +0,0 @@
package com.uiuios.aios.activity.code;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.bean.HealthCode;
import com.uiuios.aios.network.NetInterfaceManager;
import java.util.List;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class FamilySpacePresenter implements FamilySpaceContact.Presenter {
private static final String TAG = FamilySpacePresenter.class.getSimpleName();
private FamilySpaceContact.CodeView mView;
private Context mContext;
private BehaviorSubject<ActivityEvent> lifecycle;
void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
FamilySpacePresenter(Context context) {
this.mContext = context;
Log.e(TAG, "MainPresenter: " + context.getClass());
}
@Override
public void attachView(@NonNull FamilySpaceContact.CodeView view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
}
@Override
public void getHealthCode() {
NetInterfaceManager.getInstance().getHealthCode(true, getLifecycle(), new NetInterfaceManager.HealthCodeCallback() {
@Override
public void setHealthCode(List<HealthCode> healthCode) {
mView.setHealthCode(healthCode);
}
@Override
public void noData() {
mView.setHealthCodeNodata();
}
@Override
public void onError() {
mView.onError();
}
});
}
}

View File

@@ -0,0 +1,50 @@
package com.uiuios.aios.activity.code;
import androidx.lifecycle.MutableLiveData;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.HealthCode;
import com.uiuios.aios.databinding.ActivityFamilySpaceBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import java.util.List;
public class FamilySpaceViewModel extends BaseViewModel<ActivityFamilySpaceBinding, ActivityEvent> {
@Override
public ActivityFamilySpaceBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<List<HealthCode>> mHealthCodeListData = new MutableLiveData<>();
public MutableLiveData<List<HealthCode>> getHealthCodeListData() {
return mHealthCodeListData;
}
public void getHealthCode() {
NetInterfaceManager.getInstance().getHealthCode(true, getLifecycle(), new NetInterfaceManager.HealthCodeCallback() {
@Override
public void setHealthCode(List<HealthCode> healthCode) {
mHealthCodeListData.setValue(healthCode);
}
@Override
public void noData() {
mHealthCodeListData.setValue(null);
}
@Override
public void onError() {
Toaster.show("连接服务器失败,请检查网络连接");
}
});
}
}

View File

@@ -181,7 +181,7 @@ public class AddWechatContactActivity extends BaseMvvmActivity<AddWechatContactV
try {
file.createNewFile();
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 20, fOut);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
// is.close();
fOut.flush();
fOut.close();
@@ -231,7 +231,8 @@ public class AddWechatContactActivity extends BaseMvvmActivity<AddWechatContactV
return new File(path);
} else {
//Log.i(TAG, "Uri Scheme:" + uri.getScheme());
Log.e(TAG, "uriToFile uriString:" + uri.toString());
return new File(uri.toString());
}
return null;
}

View File

@@ -55,6 +55,10 @@ public class AddWechatContactViewModel extends BaseViewModel<ActivityAddWechatCo
@Override
public void onError(@NonNull Throwable e) {
Log.e("addContact", "onError: " + e.getMessage());
BaseResponse baseResponse = new BaseResponse();
baseResponse.code = 404;
baseResponse.msg = "网络连接失败";
mBaseResponseMutableLiveData.setValue(baseResponse);
}
@Override

View File

@@ -0,0 +1,308 @@
package com.uiuios.aios.activity.contact;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.hjq.toast.Toaster;
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.base.GlideEngine;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.databinding.ActivityEditContactBinding;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.utils.ScreenUtil;
import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class EditContactActivity extends BaseMvvmActivity<EditContactViewModel, ActivityEditContactBinding> {
private static final String TAG = EditContactActivity.class.getSimpleName();
private LoadingDialog mLoadingDialog;
private String mPictrueFilePath;
private Contact mContact;
@Override
protected int getLayoutId() {
return R.layout.activity_edit_contact;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
mLoadingDialog = new LoadingDialog(this);
mLoadingDialog.setLoadingText("正在上传")
.setSuccessText("添加成功")
.setFailedText("添加失败")
.setInterceptBack(true)
.setLoadSpeed(LoadingDialog.Speed.SPEED_TWO)
.closeSuccessAnim()
.closeFailedAnim();
}
@Override
protected void initData() {
mViewModel.getBaseResponseMutableLiveData().observe(this, new Observer<BaseResponse>() {
@Override
public void onChanged(BaseResponse baseResponse) {
if (baseResponse.code == 200) {
mLoadingDialog.loadSuccess();
mLoadingDialog.close();
finish();
} else {
mLoadingDialog.setFailedText(baseResponse.msg);
mLoadingDialog.loadFailed();
mLoadingDialog.close();
}
}
});
getContactData();
}
private void getContactData() {
Intent intent = getIntent();
if (intent == null) {
return;
}
mContact = (Contact) intent.getSerializableExtra("Contact");
if (mContact == null) {
return;
}
if (mContact.getIs_urgent() == 1) {
mViewDataBinding.toggleButton.setToggleOn(false);
} else {
mViewDataBinding.toggleButton.setToggleOff(false);
}
Glide.with(this).asBitmap().load(mContact.getAvatar()).error(R.drawable.default_avatar).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
mPictrueFilePath = bitmapToFile(resource, "avatar").getAbsolutePath();
Log.e(TAG, "onResourceReady: " + mPictrueFilePath);
}
});
mViewDataBinding.setContact(mContact);
}
/**
* bitmap
*
* @param bitmap bitmap
* @param fileName 转换后的文件名
* @return
*/
public File bitmapToFile(Bitmap bitmap, String fileName) {
String defaultPath = getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
File file = new File(defaultPath);
if (!file.exists()) {
file.mkdirs();
}
String defaultImgPath = defaultPath + "/" + fileName;
file = new File(defaultImgPath);
try {
file.createNewFile();
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
// is.close();
fOut.flush();
fOut.close();
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
private void openSelector() {
PictureSelector.create(EditContactActivity.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(EditContactActivity.this, 8F)));
Glide.with(mViewDataBinding.nvAvatar).load(file).apply(options).into(mViewDataBinding.nvAvatar);
} else {
mPictrueFilePath = "";
}
}
@Override
public void onCancel() {
Log.e(TAG, "onCancel: ");
}
});
}
private void checkContact() {
String name = mViewDataBinding.etName.getText().toString();
if (TextUtils.isEmpty(name)) {
Toaster.show("请输入联系人姓名");
return;
}
String phone = mViewDataBinding.etPhone.getText().toString();
if (TextUtils.isEmpty(phone)) {
Toaster.show("请输入手机号码");
return;
}
String groupTag = mViewDataBinding.etGroup.getText().toString();
if (TextUtils.isEmpty(groupTag)) {
Toaster.show("请输入微信群组标签");
return;
}
File avatarFile;
Log.e("checkContact", "mPictrueFilePath: " + mPictrueFilePath);
if (TextUtils.isEmpty(mPictrueFilePath)) {
avatarFile = drawableToFile(R.drawable.default_avatar, "avatar");
} else {
Uri uri = Uri.parse(mPictrueFilePath);
avatarFile = uriToFile(uri, EditContactActivity.this);
}
MediaType mediaType = MediaType.Companion.parse("image/png");
RequestBody requestBody = RequestBody.Companion.create(avatarFile, mediaType);
MultipartBody.Part body = MultipartBody.Part.createFormData("avatar", avatarFile.getName(), requestBody);
Map<String, String> params = new HashMap<>();
params.put("sn", RemoteManager.getInstance().getSerial());
params.put("id", mContact.getId());
params.put("name", name);
params.put("mobile", phone);
params.put("tag", groupTag);
params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn()));
mViewModel.editContact(params, body);
mLoadingDialog.show();
}
/**
* drawable转为file
*
* @param drawableId drawable的ID
* @param fileName 转换后的文件名
* @return
*/
public File drawableToFile(int drawableId, String fileName) {
// InputStream is = view.getContext().getResources().openRawResource(R.drawable.logo);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawableId);
// Bitmap bitmap = BitmapFactory.decodeStream(is);
String defaultPath = getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
File file = new File(defaultPath);
if (!file.exists()) {
file.mkdirs();
}
String defaultImgPath = defaultPath + "/" + fileName;
file = new File(defaultImgPath);
try {
file.createNewFile();
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
// is.close();
fOut.flush();
fOut.close();
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
public static File uriToFile(Uri uri, Context context) {
String path = null;
if ("file".equals(uri.getScheme())) {
path = uri.getEncodedPath();
if (path != null) {
path = Uri.decode(path);
ContentResolver cr = context.getContentResolver();
StringBuffer buff = new StringBuffer();
buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");
Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}, buff.toString(), null, null);
int index = 0;
int dataIdx = 0;
for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
index = cur.getInt(index);
dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
path = cur.getString(dataIdx);
}
cur.close();
if (index == 0) {
} else {
Uri u = Uri.parse("content://media/external/images/media/" + index);
System.out.println("temp uri is :" + u);
}
}
if (path != null) {
return new File(path);
}
} else if ("content".equals(uri.getScheme())) {
// 4.2.2以后
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
if (cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
path = cursor.getString(columnIndex);
}
cursor.close();
return new File(path);
} else {
Log.e(TAG, "uriToFile uriString:" + uri.toString());
return new File(uri.toString());
}
return null;
}
public class BtnClick {
public void exit(View view) {
finish();
}
public void selectPic(View v) {
openSelector();
}
public void confirm(View v) {
checkContact();
}
}
}

View File

@@ -0,0 +1,70 @@
package com.uiuios.aios.activity.contact;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.databinding.ActivityEditContactBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import okhttp3.MultipartBody;
public class EditContactViewModel extends BaseViewModel<ActivityEditContactBinding, ActivityEvent> {
@Override
public ActivityEditContactBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<BaseResponse> mBaseResponseMutableLiveData = new MutableLiveData<>();
public MutableLiveData<BaseResponse> getBaseResponseMutableLiveData() {
return mBaseResponseMutableLiveData;
}
public void editContact(Map<String, String> params, MultipartBody.Part body) {
NetInterfaceManager.getInstance()
.getMailListEditObservable(params, body)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("editContact", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("editContact", "onNext: " + baseResponse);
mBaseResponseMutableLiveData.setValue(baseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("editContact", "onError: " + e.getMessage());
BaseResponse baseResponse = new BaseResponse();
baseResponse.code = 404;
baseResponse.msg = "网络连接失败";
mBaseResponseMutableLiveData.setValue(baseResponse);
}
@Override
public void onComplete() {
Log.e("editContact", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,160 @@
package com.uiuios.aios.activity.information;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
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.uiuios.aios.R;
import com.uiuios.aios.adapter.InformationAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.databinding.ActivityInformationBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.disposables.Disposable;
public class InformationActivity extends BaseMvvmActivity<InformationViewModel, ActivityInformationBinding> {
private static final String TAG = InformationActivity.class.getSimpleName();
private InformationAdapter mInformationAdapter;
private HashMap<String, CategoryBean> mCategoryMap;
@Override
public boolean setNightMode() {
return true;
}
@Override
protected int getLayoutId() {
return R.layout.activity_information;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new Click());
}
@Override
public void initView() {
// UltimateBarX.statusBarOnly(this)
// .transparent()
// .apply();
UltimateBarX.addStatusBarTopPadding(mViewDataBinding.clBar);
mInformationAdapter = new InformationAdapter();
LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this);
linearLayoutManager1.setOrientation(LinearLayoutManager.VERTICAL);
mViewDataBinding.rvVideo.setLayoutManager(linearLayoutManager1);
mViewDataBinding.rvVideo.setAdapter(mInformationAdapter);
mViewDataBinding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.e(TAG, "onTabSelected: " + tab.getText());
if (tab.getText() != null && !TextUtils.isEmpty(tab.getText())) {
String text = tab.getText().toString();
if (mCategoryMap.get(text) != null) {
mViewModel.getArticleList(mCategoryMap.get(text).getId());
}
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.e(TAG, "onTabUnselected: " + tab.getText());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.e(TAG, "onTabReselected: " + tab.getText());
}
});
}
@Override
public void initData() {
mViewModel.getCategoryBeanListData().observe(this, new Observer<List<CategoryBean>>() {
@Override
public void onChanged(List<CategoryBean> categoryBeans) {
if (categoryBeans != null && !categoryBeans.isEmpty()) {
mViewDataBinding.tabLayout.setVisibility(View.VISIBLE);
List<String> typeString = categoryBeans.stream().map(CategoryBean::getName).collect(Collectors.toList());
String[] type = new String[categoryBeans.size()];
type = typeString.toArray(type);
mCategoryMap = new HashMap<>();
for (int i = 0; i < type.length; i++) {
mCategoryMap.put(type[i], categoryBeans.get(i));
TabLayout.Tab tab = mViewDataBinding.tabLayout.newTab();//关键的创建一个Tab,注意这里使用的是已经实例的mTablayout创建的Tab,很容易疏忽使用new Tablayout().new Tab()的方式创建,这个是会报错的.
tab.setText(type[i]);
if (i == 0) {
mViewDataBinding.tabLayout.addTab(tab, 0, true);//设置选择的item
} else {
mViewDataBinding.tabLayout.addTab(tab);
}
}
mViewModel.getArticleList(categoryBeans.get(0).getId());
} else {
mViewDataBinding.tabLayout.setVisibility(View.GONE);
mViewModel. getArticleList();
}
}
});
mViewModel.getArticleListData().observe(this, new Observer<ArticleList>() {
@Override
public void onChanged(ArticleList articleList) {
if (articleList!=null) {
List<ArticleInfo> articleInfoList = articleList.getData();
if (articleInfoList != null && articleInfoList.size() != 0) {
articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
mInformationAdapter.setArticleInfos(articleInfoList);
mViewDataBinding.rvVideo.setVisibility(View.VISIBLE);
mViewDataBinding.clNodata.setVisibility(android.view.View.GONE);
} else {
mViewDataBinding.rvVideo.setVisibility(android.view.View.GONE);
mViewDataBinding.clNodata.setVisibility(android.view.View.VISIBLE);
}
} else {
mViewDataBinding.rvVideo.setVisibility(android.view.View.GONE);
mViewDataBinding.clNodata.setVisibility(android.view.View.VISIBLE);
}
}
});
mViewModel.getCategorys();
}
public class Click {
public void exit(View view) {
finish();
}
}
}

View File

@@ -0,0 +1,122 @@
package com.uiuios.aios.activity.information;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.databinding.ActivityInformationBinding;
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 InformationViewModel extends BaseViewModel<ActivityInformationBinding, ActivityEvent> {
@Override
public ActivityInformationBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<List<CategoryBean>> mCategoryBeanListData = new MutableLiveData<>();
public MutableLiveData<List<CategoryBean>> getCategoryBeanListData() {
return mCategoryBeanListData;
}
public void getCategorys() {
NetInterfaceManager.getInstance().getCategorysObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<CategoryBean>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getCategorys", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<CategoryBean>> listBaseResponse) {
Log.e("getCategorys", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
List<CategoryBean> categoryList = listBaseResponse.data;
mCategoryBeanListData.setValue(categoryList);
} else {
mCategoryBeanListData.setValue(null);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getCategorys", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getCategorys", "onComplete: ");
}
});
}
public void getArticleList() {
NetInterfaceManager.getInstance()
.getArticleListObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
public void getArticleList(int id) {
NetInterfaceManager.getInstance()
.getArticleListObservable(id)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(getArticleListObserver());
}
private MutableLiveData<ArticleList> mArticleListData = new MutableLiveData<>();
public MutableLiveData<ArticleList> getArticleListData() {
return mArticleListData;
}
private Observer<BaseResponse<ArticleList>> getArticleListObserver() {
return new Observer<BaseResponse<ArticleList>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getArticleListObserver", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<ArticleList> listBaseResponse) {
Log.e("getArticleListObserver", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
ArticleList articleList = listBaseResponse.data;
mArticleListData.setValue(articleList);
} else {
mArticleListData.setValue(null);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getArticleListObserver", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getArticleListObserver", "onComplete: ");
}
};
}
}

View File

@@ -11,20 +11,18 @@ import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.CityAdapter;
import com.uiuios.aios.adapter.DistrictAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.AddressBean;
import com.uiuios.aios.databinding.ActivityLocationBinding;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration;
@@ -34,24 +32,7 @@ import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.ButterKnife;
public class LocationAcivity extends BaseDataBindingActivity implements LocationContact.LocationView, CityAdapter.CityCallback, DistrictAdapter.DistrictCallback {
@BindView(R.id.bg)
ConstraintLayout bg;
@BindView(R.id.root)
ConstraintLayout root;
@BindView(R.id.rv_area)
RecyclerView rv_area;
@BindView(R.id.edit_search)
EditText edit_search;
@BindView(R.id.rv_city)
RecyclerView rv_city;
@BindView(R.id.cl_location)
ConstraintLayout cl_location;
public class LocationAcivity extends BaseMvvmActivity<LocationViewModel, ActivityLocationBinding> implements CityAdapter.CityCallback, DistrictAdapter.DistrictCallback {
private List<AddressBean> popularCities = new ArrayList<AddressBean>() {{
this.add(new AddressBean("北京"));
@@ -73,16 +54,24 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
this.add(new AddressBean("厦门"));
}};
private LocationPresenter mPresenter;
private CityAdapter mCityAdapter;
private DistrictAdapter mDistrictAdapter;
private List<AddressBean> mDistrict;
private AddressBean mAddressBean;
@Override
protected int getLayoutId() {
return R.layout.activity_location;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.activity_location);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new Click());
}
/**
@@ -90,32 +79,9 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
*/
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new LocationPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(getLifecycleSubject());
bg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rv_area.setVisibility(View.GONE);
}
});
cl_location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAddressBean = new AddressBean(AmapManager.getInstance().getDistrict());
setIntent();
}
});
edit_search.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
edit_search.setInputType(EditorInfo.TYPE_CLASS_TEXT);
edit_search.setOnEditorActionListener(new TextView.OnEditorActionListener() {
mViewDataBinding.editSearch.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
mViewDataBinding.editSearch.setInputType(EditorInfo.TYPE_CLASS_TEXT);
mViewDataBinding.editSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEND ||
@@ -128,7 +94,7 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(LocationAcivity.this.getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
String text = edit_search.getText().toString();
String text = mViewDataBinding.editSearch.getText().toString();
checkContent(text);
}
return true;
@@ -139,13 +105,36 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
return false;
}
});
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
float density = dm.density; // 屏幕密度0.75 / 1.0 / 1.5
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 4));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 4));//底部间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 4));//左间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 4));//右间距
mViewDataBinding.rvCity.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mCityAdapter = new CityAdapter();
mCityAdapter.setCityList(popularCities);
mCityAdapter.setCityCallback(this::onCitySelected);
mViewDataBinding.rvCity.setLayoutManager(new GridLayoutManager(this, 3));
mViewDataBinding.rvCity.setAdapter(mCityAdapter);
mDistrictAdapter = new DistrictAdapter();
mDistrictAdapter.setDistrictCallback(this::onDistrictSelected);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mViewDataBinding.rvArea.setLayoutManager(linearLayoutManager);
mViewDataBinding.rvArea.setAdapter(mDistrictAdapter);
}
private void checkContent(String text) {
if (TextUtils.isEmpty(text)) {
rv_area.setVisibility(View.GONE);
mViewDataBinding.rvArea.setVisibility(View.GONE);
} else {
rv_area.setVisibility(View.VISIBLE);
mViewDataBinding.rvArea.setVisibility(View.VISIBLE);
List<AddressBean> area = mDistrict.stream().filter(new Predicate<AddressBean>() {
@Override
public boolean test(AddressBean addressBean) {
@@ -161,42 +150,19 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
*/
@Override
public void initData() {
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
float density = dm.density; // 屏幕密度0.75 / 1.0 / 1.5
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 4));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 4));//底部间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 4));//左间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 4));//右间距
rv_city.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mCityAdapter = new CityAdapter();
mCityAdapter.setCityList(popularCities);
mCityAdapter.setCityCallback(this::onCitySelected);
rv_city.setLayoutManager(new GridLayoutManager(this, 3));
rv_city.setAdapter(mCityAdapter);
mDistrictAdapter = new DistrictAdapter();
mDistrictAdapter.setDistrictCallback(this::onDistrictSelected);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_area.setLayoutManager(linearLayoutManager);
rv_area.setAdapter(mDistrictAdapter);
mPresenter.initJsonData();
mViewModel.getAddressBeanListData().observe(this, new Observer<List<AddressBean>>() {
@Override
public void onChanged(List<AddressBean> addressBeans) {
mDistrict = addressBeans;
mDistrictAdapter.setDistrict(addressBeans);
}
});
mViewModel.initJsonData();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
@Override
public void setJsonData(List<AddressBean> area) {
this.mDistrict = area;
mDistrictAdapter.setDistrict(area);
}
@Override
@@ -222,4 +188,21 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
// 结束当前页面
finish();
}
public class Click {
public void exit(View view) {
finish();
}
public void hideArea(View view){
mViewDataBinding.rvArea.setVisibility(View.GONE);
}
public void setLocal(View view){
mAddressBean = new AddressBean(AmapManager.getInstance().getDistrict());
setIntent();
}
}
}

View File

@@ -1,17 +0,0 @@
package com.uiuios.aios.activity.location;
import com.uiuios.aios.base.mvp.BasePresenter;
import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.AddressBean;
import java.util.List;
public class LocationContact {
interface Presenter extends BasePresenter<LocationView> {
void initJsonData();
}
public interface LocationView extends BaseView {
void setJsonData(List<AddressBean> area);
}
}

View File

@@ -1,12 +1,15 @@
package com.uiuios.aios.activity.location;
import android.content.Context;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.google.gson.Gson;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.AddressBean;
import com.uiuios.aios.bean.JsonBean;
import com.uiuios.aios.databinding.ActivityLocationBinding;
import com.uiuios.aios.gson.GetJsonDataUtil;
import org.json.JSONArray;
@@ -22,54 +25,40 @@ import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class LocationPresenter implements LocationContact.Presenter {
private Context mContext;
public class LocationViewModel extends BaseViewModel<ActivityLocationBinding, ActivityEvent> {
LocationPresenter(Context context) {
this.mContext = context;
}
private LocationContact.LocationView mView;
private BehaviorSubject<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
@Override
public ActivityLocationBinding getVDBinding() {
return binding;
}
@Override
public void attachView(LocationContact.LocationView view) {
this.mView = view;
public void onDestroy() {
}
@Override
public void detachView() {
this.mView = null;
private MutableLiveData<List<AddressBean>> mAddressBeanListData =new MutableLiveData<>();
public MutableLiveData<List<AddressBean>> getAddressBeanListData() {
return mAddressBeanListData;
}
@Override
public void initJsonData() {
if (getCtx() == null) return;
long time = System.currentTimeMillis();
Observable.create(new ObservableOnSubscribe<List<AddressBean>>() {
@Override
public void subscribe(@NonNull ObservableEmitter<List<AddressBean>> emitter) throws Throwable {
List<AddressBean> areaList = new ArrayList<>();
String JsonData = new GetJsonDataUtil().getJson(mContext, "province.json");//获取assets目录下的json文件数据
String JsonData = new GetJsonDataUtil().getJson(getCtx(), "province.json");//获取assets目录下的json文件数据
ArrayList<JsonBean> jsonBeanList = parseData(JsonData);//用Gson 转成实体
for (JsonBean jsonBean : jsonBeanList) {//遍历省份
String province = jsonBean.getName();
for (JsonBean.CityBean cityBean : jsonBean.getCityList()) {//遍历该省份的所有城市
String city = cityBean.getName();
for (String district : cityBean.getArea()) {//遍历该省份的所有城市
areaList.add(new AddressBean(province , city , district));
areaList.add(new AddressBean(province, city, district));
}
}
}
@@ -87,7 +76,7 @@ public class LocationPresenter implements LocationContact.Presenter {
public void onNext(List<AddressBean> s) {
Log.e("initJsonData", "onNext: ");
Log.e("initJsonData", "initdatetime = " + (System.currentTimeMillis() - time) + "ms");
mView.setJsonData(s);
mAddressBeanListData.setValue(s);
}
@Override

View File

@@ -28,6 +28,7 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer;
import com.alarmclock.uiui.IAlarmAidlInterface;
import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hjq.permissions.OnPermissionCallback;
@@ -81,7 +82,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
private int defaultCurrent = 2;
@Override
public void onConnected() {
public void onRemoteConnected() {
setDefaultDesktop();
}
@@ -101,6 +102,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
mViewModel.getSnInfo();
}
@@ -149,10 +151,10 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
x = i;
} else if (i == desktopIcons.size()) {
} else if (i != 0 &&i == desktopIcons.size()) {
AppListFragment appListFragment = new AppListFragment();
mFragments.add(appListFragment);
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
}
}
@@ -217,10 +219,10 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
x = i;
} else if (i == desktopIcons.size()) {
} else if (i != 0 &&i == desktopIcons.size()) {
AppListFragment appListFragment = new AppListFragment();
mFragments.add(appListFragment);
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
}
}
}
@@ -310,7 +312,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
fragmentList.add(appListFragment);
x = i;
} else if (i == applicationInfoList.size()) {
} else if (i != 0 &&i == applicationInfoList.size()) {
Log.e(TAG, "addData: i == size");
AppListFragment appListFragment = new AppListFragment();
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));

View File

@@ -6,6 +6,7 @@ import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.google.gson.JsonObject;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.BuildConfig;
@@ -13,6 +14,8 @@ import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.bean.NetDesktopIcon;
import com.uiuios.aios.bean.SnInfo;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.PhoneActivityMainBinding;
import com.uiuios.aios.manager.AppManager;
import com.uiuios.aios.manager.RemoteManager;
@@ -35,6 +38,8 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainViewModel extends BaseViewModel<PhoneActivityMainBinding, ActivityEvent> {
private static final String TAG = MainViewModel.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override
public PhoneActivityMainBinding getVDBinding() {
return binding;
@@ -45,6 +50,44 @@ public class MainViewModel extends BaseViewModel<PhoneActivityMainBinding, Activ
}
private MutableLiveData<SnInfo> mSnInfoData = new MutableLiveData<>();
public MutableLiveData<SnInfo> getSnInfoData() {
return mSnInfoData;
}
public void getSnInfo() {
NetInterfaceManager.getInstance().getSnInfoControl()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<SnInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getSnInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<SnInfo> snInfoBaseResponse) {
Log.e("getSnInfo", "onNext: " + snInfoBaseResponse);
if (snInfoBaseResponse.code == 200) {
SnInfo snInfo = snInfoBaseResponse.data;
mMMKV.encode(CommonConfig.EMERGENCY_CONTACT_KEY, snInfo.getMobile());
}
mSnInfoData.setValue(snInfoBaseResponse.data);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getSnInfo", "onError: ");
onComplete();
}
@Override
public void onComplete() {
Log.e("getSnInfo", "onComplete: ");
}
});
}
private MutableLiveData<ArrayList<DesktopIcon>> mDesktopIconData = new MutableLiveData<>();
public MutableLiveData<ArrayList<DesktopIcon>> getDesktopIconData() {

View File

@@ -32,6 +32,7 @@ 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.bean.QweatherLocation;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivityWeatherBinding;
import com.uiuios.aios.manager.AmapManager;
@@ -72,7 +73,7 @@ public class WeatherActivity extends BaseMvvmActivity<WeatherViewModel, Activity
String district = bundle.getString("district");
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, district);
mViewModel.decodeGeo(address);
mViewModel.cityLookup(address);
mViewDataBinding.tvLocation.setText(district);
}
}
@@ -137,12 +138,24 @@ public class WeatherActivity extends BaseMvvmActivity<WeatherViewModel, Activity
@Override
public void initData() {
mViewModel.getGeoResultData().observe(this, new Observer<MapGeoResult>() {
// 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.getWeather(mapGeoResult.getLocation().toString());
// } else {
// Toaster.show("获取位置信息失败");
// }
// }
// });
mViewModel.getQweatherLocationData().observe(this, new Observer<QweatherLocation>() {
@Override
public void onChanged(MapGeoResult mapGeoResult) {
if (mapGeoResult != null) {
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoResult.getLocation().toString());
mViewModel.getWeather(mapGeoResult.getLocation().toString());
public void onChanged(QweatherLocation qweatherLocation) {
if (qweatherLocation != null) {
String tude = qweatherLocation.getLon() + "," + qweatherLocation.getLat();
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, tude);
mViewModel.getWeather(tude);
} else {
Toaster.show("获取位置信息失败");
}
@@ -153,7 +166,7 @@ public class WeatherActivity extends BaseMvvmActivity<WeatherViewModel, Activity
public void onChanged(String s) {
mViewDataBinding.tvLocation.setText(s);
Toaster.show("刷新成功");
mViewModel.decodeGeo(s);
mViewModel.cityLookup(s);
}
});
mViewModel.getWeatherNowData().observe(this, new Observer<WeatherNowBean>() {

View File

@@ -16,31 +16,22 @@ 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.BaiduMapGeoBean;
import com.uiuios.aios.bean.MapGeoResult;
import com.uiuios.aios.bean.QweatherLocation;
import com.uiuios.aios.bean.QweatherLookup;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivityWeatherBinding;
import com.uiuios.aios.gson.GetJsonDataUtil;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.ActivationUtil;
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, ActivityEvent> {
private static final String TAG = WeatherViewModel.class.getSimpleName();
@@ -59,62 +50,87 @@ public class WeatherViewModel extends BaseViewModel<ActivityWeatherBinding, Acti
}
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;
}
@Deprecated
public void decodeGeo(String address) {
Log.e(TAG, "decodeGeo: " + address);
NetInterfaceManager.getInstance().getGeoObservable(address)
// NetInterfaceManager.getInstance().getGeoObservable(address)
// .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
// .subscribe(new Observer<BaiduMapGeoBean>() {
// @Override
// public void onSubscribe(@NonNull Disposable d) {
// Log.e("decodeGeo", "onSubscribe: ");
// }
//
// @Override
// public void onNext(@NonNull BaiduMapGeoBean baiduMapGeoBean) {
// Log.e("decodeGeo", "onNext: " + baiduMapGeoBean);
// if (baiduMapGeoBean.getStatus() == 0) {
// mGeoResultData.setValue(baiduMapGeoBean.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: ");
// }
// });
}
private MutableLiveData<QweatherLocation> mQweatherLocationData = new MutableLiveData<>();
public MutableLiveData<QweatherLocation> getQweatherLocationData() {
return mQweatherLocationData;
}
public void cityLookup(String city) {
NetInterfaceManager.getInstance().getLookupObservable(city)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<MapGeoBean>() {
.subscribe(new Observer<QweatherLookup>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("decodeGeo", "onSubscribe: ");
Log.e("cityLookup", "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);
public void onNext(@NonNull QweatherLookup qweatherLookup) {
Log.e("cityLookup", "onNext: " + qweatherLookup);
if (qweatherLookup.getCode() == 200) {
List<QweatherLocation> qweatherLocationList = qweatherLookup.getLocation();
if (qweatherLocationList == null || qweatherLocationList.isEmpty()) {
mQweatherLocationData.setValue(null);
} else {
mQweatherLocationData.setValue(qweatherLocationList.get(0));
}
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("decodeGeo", "onError: " + e.getMessage());
mGeoResultData.setValue(null);
onComplete();
Log.e("cityLookup", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("decodeGeo", "onComplete: ");
Log.e("cityLookup", "onComplete: ");
}
});
}
public void getWeatherCache() {
Log.e(TAG, "getWeatherCache: ");
String nowJsonString = mMMKV.decodeString(CommonConfig.WEATHER_NOW_KEY, "");
@@ -127,7 +143,6 @@ public class WeatherViewModel extends BaseViewModel<ActivityWeatherBinding, Acti
Log.e(TAG, "getWeatherCache: now = " + e.getMessage());
}
String jsonString = mMMKV.decodeString(CommonConfig.WEATHER_DAILY_KEY, "");
Type type = new TypeToken<WeatherDailyBean>() {
}.getType();
@@ -139,6 +154,12 @@ public class WeatherViewModel extends BaseViewModel<ActivityWeatherBinding, Acti
}
}
private MutableLiveData<String> mLocationData = new MutableLiveData<>();
public MutableLiveData<String> getLocationData() {
return mLocationData;
}
public void getLocation() {
String location = AmapManager.getInstance().getDistrict();
mLocationData.setValue(location);
@@ -158,6 +179,12 @@ public class WeatherViewModel extends BaseViewModel<ActivityWeatherBinding, Acti
getWeather7D(location);
}
private MutableLiveData<WeatherNowBean> mWeatherNowData = new MutableLiveData<>();
public MutableLiveData<WeatherNowBean> getWeatherNowData() {
return mWeatherNowData;
}
public void getWeatherNow(String locationTude) {
Log.e(TAG, "getweather: " + locationTude);
/**
@@ -185,6 +212,12 @@ public class WeatherViewModel extends BaseViewModel<ActivityWeatherBinding, Acti
});
}
private MutableLiveData<WeatherDailyBean> mWeatherDailyData = new MutableLiveData<>();
public MutableLiveData<WeatherDailyBean> getWeatherDailyData() {
return mWeatherDailyData;
}
public void getWeather7D(String locationTude) {
QWeather.getWeather7D(getCtx(), locationTude, new QWeather.OnResultWeatherDailyListener() {
@Override

View File

@@ -36,6 +36,16 @@ public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactH
notifyDataSetChanged();
}
private WechatContactAdapter.OnLongClick mOnLongClick;
public void setOnLongClick(WechatContactAdapter.OnLongClick onLongClick) {
mOnLongClick = onLongClick;
}
public interface OnLongClick {
void setOnLongClickListener(Contact contact);
}
@NonNull
@Override
public ContactHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -79,6 +89,15 @@ public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactH
}
}
});
contactHolder.root.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mOnLongClick != null) {
mOnLongClick.setOnLongClickListener(contact);
}
return false;
}
});
contactHolder.tv_name.setText(contact.getName());
if (DIALER_PACKAGE.equals(contact.getMobile())) {
contactHolder.cl_contact.setVisibility(View.GONE);

View File

@@ -14,8 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.ArticleActivity;
import com.uiuios.aios.activity.InformationActivity;
import com.uiuios.aios.activity.information.InformationActivity;
import com.uiuios.aios.bean.ArticleInfo;
import java.util.List;

View File

@@ -7,7 +7,7 @@ import com.google.gson.JsonParser;
import java.io.Serializable;
public class MapGeoBean implements Serializable {
public class BaiduMapGeoBean implements Serializable {
private static final long serialVersionUID = 3502542257994267517L;
int status;

View File

@@ -10,7 +10,7 @@ import java.io.Serializable;
public class Contact implements Serializable {
private static final long serialVersionUID = 8814155739557674021L;
int id;
String id;
String name;//名称
int is_urgent;//是否紧急联系人 0否1是
String mobile;//手机号
@@ -28,11 +28,11 @@ public class Contact implements Serializable {
this.simContact = sim;
}
public int getId() {
public String getId() {
return id;
}
public void setId(int id) {
public void setId(String id) {
this.id = id;
}

View File

@@ -0,0 +1,16 @@
package com.uiuios.aios.bean;
import java.io.Serializable;
public class FamilyAddress implements Serializable {
private static final long serialVersionUID = 6029825322662748631L;
String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

View File

@@ -0,0 +1,137 @@
package com.uiuios.aios.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
public class QweatherLocation implements Serializable {
private static final long serialVersionUID = -3782071476006017055L;
String name;
String id;
String lat;
String lon;
String adm2;
String adm1;
String country;
String tz;
String utcOffset;
int isDst;
String type;
long rank;
String fxLink;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getLon() {
return lon;
}
public void setLon(String lon) {
this.lon = lon;
}
public String getAdm2() {
return adm2;
}
public void setAdm2(String adm2) {
this.adm2 = adm2;
}
public String getAdm1() {
return adm1;
}
public void setAdm1(String adm1) {
this.adm1 = adm1;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getTz() {
return tz;
}
public void setTz(String tz) {
this.tz = tz;
}
public String getUtcOffset() {
return utcOffset;
}
public void setUtcOffset(String utcOffset) {
this.utcOffset = utcOffset;
}
public int getIsDst() {
return isDst;
}
public void setIsDst(int isDst) {
this.isDst = isDst;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public long getRank() {
return rank;
}
public void setRank(long rank) {
this.rank = rank;
}
public String getFxLink() {
return fxLink;
}
public void setFxLink(String fxLink) {
this.fxLink = fxLink;
}
@NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -0,0 +1,39 @@
package com.uiuios.aios.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
import java.util.List;
public class QweatherLookup implements Serializable {
private static final long serialVersionUID = -150539309924701702L;
int code;
List<QweatherLocation> location;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public List<QweatherLocation> getLocation() {
return location;
}
public void setLocation(List<QweatherLocation> location) {
this.location = location;
}
@NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -70,4 +70,8 @@ public class CommonConfig {
public static final String SETTING_CALL_TYPE_KEY = "setting_call_type_key";
public static final String SETTING_AUTOMATIC_ANSWER_KEY = "setting_automatic_answer_key";
public static final String EMERGENCY_CONTACT_KEY = "emergency_contact_phone";
public static final String FAMILY_ADDRESS_KEY = "Family_Address";
}

View File

@@ -0,0 +1,140 @@
package com.uiuios.aios.dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.uiuios.aios.R;
/**
* description:自定义dialog
*/
public class EditContactDialog extends AlertDialog {
private TextView tvPhoneNumber;
private ConstraintLayout clEdit, clDelete, clCancel;
private String mPhoneNumber;
private Context mContext;
public EditContactDialog(Context context) {
super(context, R.style.CustomDialog);
this.mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_edit_contact);
//按空白处不能取消动画
setCanceledOnTouchOutside(true);
//初始化界面控件
initView();
//初始化界面数据
refreshView();
//初始化界面控件的事件
initEvent();
}
/**
* 初始化界面的确定和取消监听器
*/
private void initEvent() {
//编辑按钮被点击后,向外界提供监听
clEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener != null) {
onClickBottomListener.onEditClick();
}
}
});
//删除按钮被点击后,向外界提供监听
clDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener != null) {
onClickBottomListener.onDeleteClick();
}
}
});
//取消按钮被点击后,向外界提供监听
clCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener != null) {
onClickBottomListener.onCancelClick();
}
}
});
}
/**
* 初始化界面控件的显示数据
*/
private void refreshView() {
//如果用户自定了title和message
if (!TextUtils.isEmpty(mPhoneNumber)) {
tvPhoneNumber.setText(mPhoneNumber);
} else {
}
}
@Override
public void show() {
super.show();
refreshView();
}
/**
* 初始化界面控件
*/
private void initView() {
tvPhoneNumber = findViewById(R.id.tv_phone_number);
clEdit = findViewById(R.id.cl_edit);
clDelete = findViewById(R.id.cl_delete);
clCancel = findViewById(R.id.cl_cancel);
}
/**
* 设置确定取消按钮的回调
*/
private OnClickBottomListener onClickBottomListener;
public void setOnClickBottomListener(OnClickBottomListener onClickBottomListener) {
this.onClickBottomListener = onClickBottomListener;
}
public interface OnClickBottomListener {
/**
* 点击编辑按钮事件
*/
void onEditClick();
/**
* 点击删除按钮事件
*/
void onDeleteClick();
/**
* 点击取消按钮事件
*/
void onCancelClick();
}
public EditContactDialog setPhoneNumber(String phoneNumber) {
mPhoneNumber = phoneNumber;
return this;
}
}

View File

@@ -4,7 +4,9 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
@@ -12,6 +14,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import com.hjq.toast.Toaster;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.contact.AddWechatContactActivity;
import com.uiuios.aios.activity.contact.EditContactActivity;
import com.uiuios.aios.adapter.WechatContactAdapter;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.BaseResponse;
@@ -20,6 +23,7 @@ import com.uiuios.aios.bean.WechatInfo;
import com.uiuios.aios.databinding.FragmentContactHomeBinding;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.dialog.DeleteContactDialog;
import com.uiuios.aios.dialog.EditContactDialog;
import java.util.List;
@@ -48,7 +52,7 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
mContactAdapter.setOnLongClick(new WechatContactAdapter.OnLongClick() {
@Override
public void setOnLongClickListener(Contact contact) {
showDialog(contact);
// showDialog(contact);
}
});
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
@@ -99,25 +103,37 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
mViewModel.getContact();
}
private EditContactDialog mEditContactDialog;
private void showDialog(Contact contact) {
DeleteContactDialog dialog = new DeleteContactDialog(getContext());
dialog.setTitle("提醒")
.setMessage("是否要删除联系人")
.setPositive("确定")
.setNegtive("取消")
.setOnClickBottomListener(new DeleteContactDialog.OnClickBottomListener() {
if (mEditContactDialog == null) {
mEditContactDialog = new EditContactDialog(getContext());
}
mEditContactDialog
.setPhoneNumber(contact.getMobile())
.setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
mViewModel.deleteContact(contact.getId());
dialog.dismiss();
public void onEditClick() {
Intent intent =new Intent(getContext(), EditContactActivity.class);
intent.putExtra("Contact",contact);
startActivity(intent);
mEditContactDialog.dismiss();
}
@Override
public void onNegtiveClick() {
dialog.dismiss();
public void onDeleteClick() {
mViewModel.deleteContact(contact.getId());
mEditContactDialog.dismiss();
}
@Override
public void onCancelClick() {
mEditContactDialog.dismiss();
}
});
dialog.show();
Window window = mEditContactDialog.getWindow();
window.setGravity(Gravity.BOTTOM);
mEditContactDialog.show();
}
public class BtnClick {

View File

@@ -137,7 +137,7 @@ public class ContactViewModel extends BaseViewModel<FragmentContactHomeBinding,
return mDeleteData;
}
public void deleteContact(int id) {
public void deleteContact(String id) {
NetInterfaceManager.getInstance().getMailListDeleteObservable(id)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {

View File

@@ -41,6 +41,7 @@ import com.jeremyliao.liveeventbus.LiveEventBus;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.FamilyAddress;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.PhoneFragmentControlBinding;
@@ -63,6 +64,8 @@ import java.util.Set;
public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFragmentControlBinding> {
private static final String TAG = ControlFragment.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Context mContext;
private ContentResolver mCRv;
@@ -197,18 +200,32 @@ public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFra
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.e("mBrightnessObserver", "onChange: " + Settings.System.getInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 1));
getBrightness();
}
};
private void initData() {
LiveEventBus.get("MapBean", MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
Toaster.showShort("刷新成功");
mViewDataBinding.tvLocation.setText(mapBean.getAddress());
}
});
mViewModel.getFamilyAddressData().observe(this, new Observer<FamilyAddress>() {
@Override
public void onChanged(FamilyAddress familyAddress) {
if (familyAddress == null || TextUtils.isEmpty(familyAddress.getAddress())) {
mViewDataBinding.tvLocation.setText("未设置地址");
} else {
mViewDataBinding.tvLocation.setText(familyAddress.getAddress());
}
}
});
// LiveEventBus.get("MapBean", MapBean.class)
// .observe(this, new Observer<MapBean>() {
// @Override
// public void onChanged(@Nullable MapBean mapBean) {
// Toaster.showShort("刷新成功");
// mViewDataBinding.tvLocation.setText(mapBean.getAddress());
// }
// });
mViewModel.getFamilyAddress();
}
private void getWifi() {
@@ -789,7 +806,7 @@ public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFra
// }
private void getFontSize() {
float fontScale = Settings.System.getFloat(mCRv, Settings.System.FONT_SCALE, 0.0f);
float fontScale = Settings.System.getFloat(mCRv, Settings.System.FONT_SCALE, 1.0f);
Log.e(TAG, "getHardware: fontScale = " + fontScale);
List<String> mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size));
List<String> strEntryValues = Arrays.asList(getResources().getStringArray(R.array.entryvalues_font_size));
@@ -822,10 +839,10 @@ public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFra
}
private void getLocation() {
String addr = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).decodeString(CommonConfig.MAP_ADDRESS_KEY);
String addr = mMMKV.decodeString(CommonConfig.FAMILY_ADDRESS_KEY);
if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) {
mViewDataBinding.tvLocation.setText("能获取到位置信息");
mViewDataBinding.tvLocation.setText("设置地址");
} else {
mViewDataBinding.tvLocation.setText(addr);
}

View File

@@ -1,10 +1,28 @@
package com.uiuios.aios.fragment.control;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.FamilyAddress;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.PhoneFragmentControlBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class ControlViewModel extends BaseViewModel<PhoneFragmentControlBinding, FragmentEvent> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override
public PhoneFragmentControlBinding getVDBinding() {
return binding;
@@ -15,6 +33,40 @@ public class ControlViewModel extends BaseViewModel<PhoneFragmentControlBinding,
}
public MutableLiveData<FamilyAddress> mFamilyAddressData = new MutableLiveData<>();
public MutableLiveData<FamilyAddress> getFamilyAddressData() {
return mFamilyAddressData;
}
public void getFamilyAddress() {
NetInterfaceManager.getInstance().getFamilyAddressControl()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse<FamilyAddress>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getFamilyAddress", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<FamilyAddress> baseResponse) {
Log.e("getFamilyAddress", "onNext: " + baseResponse);
FamilyAddress familyAddress = baseResponse.data;
if (familyAddress != null) {
mMMKV.encode(CommonConfig.FAMILY_ADDRESS_KEY, familyAddress.getAddress());
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getFamilyAddress", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getFamilyAddress", "onComplete: ");
}
});
}
}

View File

@@ -17,6 +17,7 @@ import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
import com.blankj.utilcode.util.NetworkUtils;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
@@ -61,7 +62,7 @@ import java.util.List;
* Use the {@link HomeFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBinding> {
public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBinding> implements NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = HomeFragment.class.getSimpleName();
@@ -115,8 +116,20 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
}
@Override
public void fetchData() {
public void onDisconnected() {
Log.e(TAG, "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e(TAG, "onConnected: " + networkType);
initAmap();
}
@Override
public void fetchData() {
Log.e(TAG, "fetchData: " );
// initAmap();
}
@Override
@@ -135,6 +148,7 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
@Override
protected void initView(Bundle bundle) {
NetworkUtils.registerNetworkStatusChangedListener(this);
initView();
}
@@ -298,6 +312,12 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
unregisterReceivers();
}
@Override
public void onDestroyView() {
super.onDestroyView();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
}
private void registerReceivers() {
registerTimeReceiver();
registerAlarmClockReceiver();

View File

@@ -62,7 +62,7 @@ public class HomeViewModel extends BaseViewModel<FragmentHomeBinding, FragmentEv
// updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update));
// desktopIcons.add(desktopIcons.size(), updateDesktopIcon);
if (desktopIcons.size()!=6){
if (desktopIcons.size() != 6) {
DesktopIcon desktopIcon = new DesktopIcon();
desktopIcon.setTitle("添加应用");
desktopIcon.setPackage(AppManager.ADD_NAME);

View File

@@ -7,17 +7,24 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.hjq.toast.Toaster;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.contact.AddWechatContactActivity;
import com.uiuios.aios.activity.contact.EditContactActivity;
import com.uiuios.aios.adapter.ContactAdapter;
import com.uiuios.aios.adapter.WechatContactAdapter;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.databinding.FragmentContactBinding;
import com.uiuios.aios.dialog.EditContactDialog;
import java.util.ArrayList;
import java.util.List;
@@ -59,6 +66,12 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
@Override
protected void initView(Bundle bundle) {
mContactAdapter = new ContactAdapter();
mContactAdapter.setOnLongClick(new WechatContactAdapter.OnLongClick() {
@Override
public void setOnLongClickListener(Contact contact) {
showDialog(contact);
}
});
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mViewDataBinding.rvContact.setLayoutManager(linearLayoutManager);
@@ -68,6 +81,10 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
// mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(mContext, 2));
// }
mViewDataBinding.rvContact.setAdapter(mContactAdapter);
}
@Override
protected void initData(Bundle savedInstanceState) {
mViewModel.getContactListData().observe(this, new Observer<List<Contact>>() {
@Override
public void onChanged(List<Contact> contacts) {
@@ -79,10 +96,18 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
mContactAdapter.setContactList(contacts);
}
});
}
@Override
protected void initData(Bundle savedInstanceState) {
mViewModel.getDeleteData().observe(this, new Observer<BaseResponse>() {
@Override
public void onChanged(BaseResponse baseResponse) {
if (baseResponse.code == 200) {
Toaster.show("删除成功");
} else {
Toaster.show("删除失败:" + baseResponse.msg);
}
mViewModel.getContact();
}
});
mViewModel.getContact();
}
@@ -123,6 +148,39 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
return contactList;
}
private EditContactDialog mEditContactDialog;
private void showDialog(Contact contact) {
if (mEditContactDialog == null) {
mEditContactDialog = new EditContactDialog(getContext());
}
mEditContactDialog
.setPhoneNumber(contact.getMobile())
.setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() {
@Override
public void onEditClick() {
Intent intent =new Intent(getContext(), EditContactActivity.class);
intent.putExtra("Contact",contact);
startActivity(intent);
mEditContactDialog.dismiss();
}
@Override
public void onDeleteClick() {
mViewModel.deleteContact(contact.getId());
mEditContactDialog.dismiss();
}
@Override
public void onCancelClick() {
mEditContactDialog.dismiss();
}
});
Window window = mEditContactDialog.getWindow();
window.setGravity(Gravity.BOTTOM);
mEditContactDialog.show();
}
public class BtnClick {
public void add(View view) {

View File

@@ -89,4 +89,36 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
});
}
private MutableLiveData<BaseResponse> mDeleteData =new MutableLiveData<>();
public MutableLiveData<BaseResponse> getDeleteData() {
return mDeleteData;
}
public void deleteContact(String id) {
NetInterfaceManager.getInstance().getMailListDeleteObservable(id)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("deleteContact", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("deleteContact", "onNext: " + baseResponse);
mDeleteData.setValue(baseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("deleteContact", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("deleteContact", "onComplete: ");
}
});
}
}

View File

@@ -106,7 +106,7 @@ public class AmapManager {
public void startLocation() {
boolean activation = ActivationUtil.isActivation(mContext);
if (!activation) {
Log.e(TAG, "startLocation: 未激活" );
Log.e(TAG, "startLocation: 未激活");
return;
}
mAMapLocationClient.stopLocation();
@@ -121,6 +121,9 @@ public class AmapManager {
//errCode等于0代表定位成功其他的为定位失败具体的可以参照官网定位错误码说明
if (aMapLocation.getErrorCode() == 0) {
Log.e(TAG, "onLocationChanged: " + "定位成功");
mMMKV.encode(CommonConfig.MAP_LONGITUDE_KEY, String.valueOf(aMapLocation.getLongitude()));
mMMKV.encode(CommonConfig.MAP_LATITUDE_KEY, String.valueOf(aMapLocation.getLatitude()));
mMMKV.encode(CommonConfig.MAP_ADDRESS_KEY, aMapLocation.getAddress());
updateAddress(aMapLocation);
mMapBean = getMapBean(aMapLocation);
saveMapResult(mMapBean);

View File

@@ -11,9 +11,7 @@ import android.util.Log;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.disklrucache.CacheHelper;
import com.uiuios.sn.IGetInfoInterface;
import java.util.Set;
@@ -45,7 +43,7 @@ public class RemoteManager {
mServiceConnected = true;
for (ConnectedListener listener : mListeners) {
if (listener != null) {
listener.onConnected();
listener.onRemoteConnected();
}
}
try {
@@ -88,7 +86,7 @@ public class RemoteManager {
}
public interface ConnectedListener {
void onConnected();
void onRemoteConnected();
}
private static Set<ConnectedListener> mListeners = new CopyOnWriteArraySet<>();
@@ -96,7 +94,7 @@ public class RemoteManager {
public static void setListener(ConnectedListener listener) {
mListeners.add(listener);
if (mServiceConnected) {
listener.onConnected();
listener.onRemoteConnected();
}
}

View File

@@ -19,18 +19,20 @@ import com.uiuios.aios.bean.ActivityBean;
import com.uiuios.aios.bean.AddressInfo;
import com.uiuios.aios.bean.AlarmClockId;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaiduMapGeoBean;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.DemandBean;
import com.uiuios.aios.bean.ExpressData;
import com.uiuios.aios.bean.FamilyAddress;
import com.uiuios.aios.bean.GoodsList;
import com.uiuios.aios.bean.GoodsType;
import com.uiuios.aios.bean.HealthCode;
import com.uiuios.aios.bean.MapGeoBean;
import com.uiuios.aios.bean.NetDesktopIcon;
import com.uiuios.aios.bean.OrderBean;
import com.uiuios.aios.bean.OrderIndexData;
import com.uiuios.aios.bean.QweatherLookup;
import com.uiuios.aios.bean.RegionInfo;
import com.uiuios.aios.bean.ServeBean;
import com.uiuios.aios.bean.SnInfo;
@@ -44,50 +46,53 @@ import com.uiuios.aios.gson.GsonUtils;
import com.uiuios.aios.manager.ConnectManager;
import com.uiuios.aios.manager.ConnectMode;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.api.ActivityListApi;
import com.uiuios.aios.network.api.AddressIndexApi;
import com.uiuios.aios.network.api.MailListDeleteApi;
import com.uiuios.aios.network.api.ServeApi;
import com.uiuios.aios.network.api.alarmclock.AlarmClockAddApi;
import com.uiuios.aios.network.api.alarmclock.AlarmClockApi;
import com.uiuios.aios.network.api.alarmclock.AlarmClockDeleteApi;
import com.uiuios.aios.network.api.alarmclock.AlarmClockEditApi;
import com.uiuios.aios.network.api.alarmclock.AlarmClockQueryApi;
import com.uiuios.aios.network.api.AppUsageRecordApi;
import com.uiuios.aios.network.api.ArticleCategorysListApi;
import com.uiuios.aios.network.api.ArticleListApi;
import com.uiuios.aios.network.api.CategorysApi;
import com.uiuios.aios.network.api.DemandListApi;
import com.uiuios.aios.network.api.GetAdminSnSettingApi;
import com.uiuios.aios.network.api.desktop.GetDesktopApi;
import com.uiuios.aios.network.api.GetMailList;
import com.uiuios.aios.network.api.GetUserIDApi;
import com.uiuios.aios.network.api.pay.GoodsBuyApi;
import com.uiuios.aios.network.api.GoodsListApi;
import com.uiuios.aios.network.api.GoodsTypeApi;
import com.uiuios.aios.network.api.GoodsTypeListApi;
import com.uiuios.aios.network.api.HealthCodeApi;
import com.uiuios.aios.network.api.KnowledgeVideoListApi;
import com.uiuios.aios.network.api.liven.LivenVideoListApi;
import com.uiuios.aios.network.api.MailListAddApi;
import com.uiuios.aios.network.api.pay.OrderPayApi;
import com.uiuios.aios.network.api.pay.OrderPayCheckApi;
import com.uiuios.aios.network.api.RegionListApi;
import com.uiuios.aios.network.api.RegionListCall;
import com.uiuios.aios.network.api.app.RunNewApp;
import com.uiuios.aios.network.api.sn.SnInfoApi;
import com.uiuios.aios.network.api.sn.SosRecordApi;
import com.uiuios.aios.network.api.sn.SendScreenshotApi;
import com.uiuios.aios.network.api.sn.SettingApi;
import com.uiuios.aios.network.api.sn.UpdateAddressApi;
import com.uiuios.aios.network.api.sn.UpdateAlarmClockApi;
import com.uiuios.aios.network.api.UpdateAppIconApi;
import com.uiuios.aios.network.api.desktop.UpdateDesktopApi;
import com.uiuios.aios.network.api.UserInfoControl;
import com.uiuios.aios.network.api.amap.GeocodingApi;
import com.uiuios.aios.network.api.order.AllOrderApi;
import com.uiuios.aios.network.api.order.OrderExpressApi;
import com.uiuios.aios.network.api.order.OrderIndexApi;
import com.uiuios.aios.network.api.qweather.LookupApi;
import com.uiuios.aios.network.api.uiui.ActivityListApi;
import com.uiuios.aios.network.api.uiui.AddressIndexApi;
import com.uiuios.aios.network.api.uiui.AppUsageRecordApi;
import com.uiuios.aios.network.api.uiui.ArticleCategorysListApi;
import com.uiuios.aios.network.api.uiui.ArticleListApi;
import com.uiuios.aios.network.api.uiui.CategorysApi;
import com.uiuios.aios.network.api.uiui.DemandListApi;
import com.uiuios.aios.network.api.uiui.GetAdminSnSettingApi;
import com.uiuios.aios.network.api.uiui.GetMailList;
import com.uiuios.aios.network.api.uiui.GetUserIDApi;
import com.uiuios.aios.network.api.uiui.GoodsListApi;
import com.uiuios.aios.network.api.uiui.GoodsTypeApi;
import com.uiuios.aios.network.api.uiui.GoodsTypeListApi;
import com.uiuios.aios.network.api.uiui.HealthCodeApi;
import com.uiuios.aios.network.api.uiui.KnowledgeVideoListApi;
import com.uiuios.aios.network.api.uiui.contact.MailListAddApi;
import com.uiuios.aios.network.api.uiui.contact.MailListDeleteApi;
import com.uiuios.aios.network.api.uiui.RegionListApi;
import com.uiuios.aios.network.api.uiui.RegionListCall;
import com.uiuios.aios.network.api.uiui.ServeApi;
import com.uiuios.aios.network.api.uiui.UpdateAppIconApi;
import com.uiuios.aios.network.api.uiui.UserInfoControl;
import com.uiuios.aios.network.api.uiui.alarmclock.AlarmClockAddApi;
import com.uiuios.aios.network.api.uiui.alarmclock.AlarmClockApi;
import com.uiuios.aios.network.api.uiui.alarmclock.AlarmClockDeleteApi;
import com.uiuios.aios.network.api.uiui.alarmclock.AlarmClockEditApi;
import com.uiuios.aios.network.api.uiui.alarmclock.AlarmClockQueryApi;
import com.uiuios.aios.network.api.uiui.app.RunNewApp;
import com.uiuios.aios.network.api.uiui.contact.MailListEditApi;
import com.uiuios.aios.network.api.uiui.desktop.GetDesktopApi;
import com.uiuios.aios.network.api.uiui.desktop.UpdateDesktopApi;
import com.uiuios.aios.network.api.uiui.liven.LivenVideoListApi;
import com.uiuios.aios.network.api.uiui.order.AllOrderApi;
import com.uiuios.aios.network.api.uiui.order.OrderExpressApi;
import com.uiuios.aios.network.api.uiui.order.OrderIndexApi;
import com.uiuios.aios.network.api.uiui.pay.GoodsBuyApi;
import com.uiuios.aios.network.api.uiui.pay.OrderPayApi;
import com.uiuios.aios.network.api.uiui.pay.OrderPayCheckApi;
import com.uiuios.aios.network.api.uiui.sn.FamilyAddressApi;
import com.uiuios.aios.network.api.uiui.sn.SendScreenshotApi;
import com.uiuios.aios.network.api.uiui.sn.SettingApi;
import com.uiuios.aios.network.api.uiui.sn.SnInfoApi;
import com.uiuios.aios.network.api.uiui.sn.SosRecordApi;
import com.uiuios.aios.network.api.uiui.sn.UpdateAddressApi;
import com.uiuios.aios.network.api.uiui.sn.UpdateAlarmClockApi;
import com.uiuios.aios.network.interceptor.RepeatRequestInterceptor;
import java.io.File;
@@ -122,18 +127,22 @@ public class NetInterfaceManager {
private static NetInterfaceManager INSTANCE;
private Context mContext;
private CacheHelper mCacheHelper;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Retrofit mRetrofit;
private OkHttpClient okHttpClient;
private Retrofit mAmapRetrofit;
private OkHttpClient mAmapOkHttpClient;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Retrofit mQweatherRetrofit;
private OkHttpClient mQweatherOkHttpClient;
private final ConcurrentHashMap<String, Long> requestIdsMap = new ConcurrentHashMap<>();
//超时时间
private static int timeOut = 30;
private static final int TIME_OUT = 8;
// 缓存文件最大限制大小20M
private static long cacheSize = 1024 * 1024 * 64;
private static final long CACHE_SIZE = 1024 * 1024 * 64;
public static final String HTTP_KEY = "YTM3YTAxNTJmMmZmNzkyM2E2YzIwZjlhZTc0NzNmMGI=";
public static final String CUSTOM_REPEAT_REQ_PROTOCOL = "MY_CUSTOM_REPEAT_REQ_PROTOCOL";
@@ -142,18 +151,17 @@ public class NetInterfaceManager {
this.mContext = context;
this.mCacheHelper = new CacheHelper(context);
if (okHttpClient == null) {
//如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间
builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间
builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
builder.addInterceptor(new RepeatRequestInterceptor());
// 设置缓存文件路径
String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache";
Cache cache = new Cache(new File(cacheDirectory), cacheSize);
Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE);
builder.cache(cache);// 设置缓存
okHttpClient = builder.build();
}
@@ -170,15 +178,15 @@ public class NetInterfaceManager {
if (mAmapOkHttpClient == null) {
//如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间
builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间
builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
builder.addInterceptor(new RepeatRequestInterceptor());
// 设置缓存文件路径
String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache";
Cache cache = new Cache(new File(cacheDirectory), cacheSize);
Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE);
builder.cache(cache);// 设置缓存
mAmapOkHttpClient = builder.build();
}
@@ -191,6 +199,31 @@ public class NetInterfaceManager {
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
}
if (mQweatherOkHttpClient == null) {
//如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间
builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
builder.addInterceptor(new RepeatRequestInterceptor());
// 设置缓存文件路径
String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache";
Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE);
builder.cache(cache);// 设置缓存
mQweatherOkHttpClient = builder.build();
}
if (mQweatherRetrofit == null) {
mQweatherRetrofit = new Retrofit.Builder()
.client(mQweatherOkHttpClient)
.baseUrl(UrlAddress.QWEATHER_ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
}
}
/**
@@ -247,13 +280,22 @@ public class NetInterfaceManager {
return okHttpClient;
}
public Observable<MapGeoBean> getGeoObservable(String address) {
@Deprecated
public Observable<BaiduMapGeoBean> getGeoObservable(String address) {
return mAmapRetrofit.create(GeocodingApi.class)
.geocoding(address, "json", "RGAsG7hN9gbDxeruqF4Lsf0ro6pp362O")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<QweatherLookup> getLookupObservable(String address) {
return mQweatherRetrofit.create(LookupApi.class)
.lookup(address, "c5928a6a274c4a1cb80957a293b27898")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public static RequestBody convertToRequestBody(String param) {
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), param);
return requestBody;
@@ -279,13 +321,20 @@ public class NetInterfaceManager {
*
* @return
*/
public Observable<BaseResponse<SnInfo>> getsnInfoControl() {
public Observable<BaseResponse<SnInfo>> getSnInfoControl() {
return mRetrofit.create(SnInfoApi.class)
.getSninfo(RemoteManager.getInstance().getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<FamilyAddress>> getFamilyAddressControl() {
return mRetrofit.create(FamilyAddressApi.class)
.getFamilyAddress(RemoteManager.getInstance().getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<UserAvatarInfo>> getUserAvatarInfoControl() {
return mRetrofit.create(UserInfoControl.class)
.getUserAvatarInfo(RemoteManager.getInstance().getSerial())
@@ -398,8 +447,14 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse> getMailListEditObservable(Map<String, String> params, MultipartBody.Part body) {
return mRetrofit.create(MailListEditApi.class)
.editContact(params, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse> getMailListDeleteObservable(int id) {
public Observable<BaseResponse> getMailListDeleteObservable(String id) {
return mRetrofit.create(MailListDeleteApi.class)
.deleteMailList(RemoteManager.getInstance().getSerial(), id)
.subscribeOn(Schedulers.io())
@@ -1086,7 +1141,7 @@ public class NetInterfaceManager {
}
public void getSnInfo(SnInfoCallback callback) {
getsnInfoControl()
getSnInfoControl()
.subscribe(new Observer<BaseResponse<SnInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {

View File

@@ -2,7 +2,12 @@ package com.uiuios.aios.network;
public class UrlAddress {
public static final String ROOT_URL = "https://led.zuoyepad.com/android/";
/*百度地图*/
@Deprecated
public static final String AMAP_ROOT_URL = "https://api.map.baidu.com/";
/*和风天气*/
public static final String QWEATHER_ROOT_URL = "https://geoapi.qweather.com/";
/**
* 旧接口
@@ -26,6 +31,9 @@ public class UrlAddress {
public static final String SOS_RECORD = "sosRecord";
/*上传地址信息*/
public static final String UPDATE_ADDRESS = "sn/update-address";
/*获取设备家庭地址*/
public static final String FAMILY_ADDRESS = "sn/family-address";
/*获取抢购列表*/
public static final String GET_GOODS_LIST = "getGoodsList";
@@ -153,7 +161,15 @@ public class UrlAddress {
/*逆地理编码*/
@Deprecated
public static final String GEOCODING = "geocoding/v3/";
/*城市搜索*/
public static final String CITY_LOOKUP = "v2/city/lookup";
}

View File

@@ -1,6 +1,6 @@
package com.uiuios.aios.network.api.amap;
import com.uiuios.aios.bean.MapGeoBean;
import com.uiuios.aios.bean.BaiduMapGeoBean;
import com.uiuios.aios.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
@@ -9,7 +9,7 @@ import retrofit2.http.Query;
public interface GeocodingApi {
@GET(UrlAddress.GEOCODING)
Observable<MapGeoBean> geocoding(
Observable<BaiduMapGeoBean> geocoding(
@Query("address") String address,
@Query("output") String output,
@Query("ak") String key

View File

@@ -0,0 +1,17 @@
package com.uiuios.aios.network.api.qweather;
import com.uiuios.aios.bean.BaiduMapGeoBean;
import com.uiuios.aios.bean.QweatherLookup;
import com.uiuios.aios.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface LookupApi {
@GET(UrlAddress.CITY_LOOKUP)
Observable<QweatherLookup> lookup(
@Query("location") String location,
@Query("key") String key
);
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.ActivityBean;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.AddressInfo;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.ArticleList;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.ArticleDetails;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.ArticleList;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.CategoryBean;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.DemandBean;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.UserId;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsDetails;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsList;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsType;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsList;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.HealthCode;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.RegionInfo;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.RegionInfo;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.RegionInfo;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.alarmclock;
package com.uiuios.aios.network.api.uiui.alarmclock;
import com.uiuios.aios.bean.AlarmClockId;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.alarmclock;
package com.uiuios.aios.network.api.uiui.alarmclock;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.alarmclock;
package com.uiuios.aios.network.api.uiui.alarmclock;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.alarmclock;
package com.uiuios.aios.network.api.uiui.alarmclock;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.alarmclock;
package com.uiuios.aios.network.api.uiui.alarmclock;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.app;
package com.uiuios.aios.network.api.uiui.app;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui.contact;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api;
package com.uiuios.aios.network.api.uiui.contact;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;
@@ -13,6 +13,6 @@ public interface MailListDeleteApi {
@POST(UrlAddress.MAIL_LIST_DELETE)
Observable<BaseResponse> deleteMailList(
@Field("sn") String sn,
@Field("id") int id
@Field("id") String id
);
}

View File

@@ -0,0 +1,24 @@
package com.uiuios.aios.network.api.uiui.contact;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;
import java.util.Map;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.QueryMap;
public interface MailListEditApi {
@Multipart
@POST(UrlAddress.MAIL_LIST_EDIT)
Observable<BaseResponse> editContact(
@QueryMap Map<String, String> params,
@Part MultipartBody.Part body
);
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.desktop;
package com.uiuios.aios.network.api.uiui.desktop;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.NetDesktopIcon;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.desktop;
package com.uiuios.aios.network.api.uiui.desktop;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.liven;
package com.uiuios.aios.network.api.uiui.liven;
import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.order;
package com.uiuios.aios.network.api.uiui.order;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.OrderIndexData;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.order;
package com.uiuios.aios.network.api.uiui.order;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.ExpressData;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.order;
package com.uiuios.aios.network.api.uiui.order;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.OrderIndexData;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.pay;
package com.uiuios.aios.network.api.uiui.pay;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.OrderBean;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.pay;
package com.uiuios.aios.network.api.uiui.pay;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.WxpayBean;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.pay;
package com.uiuios.aios.network.api.uiui.pay;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -0,0 +1,16 @@
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.FamilyAddress;
import com.uiuios.aios.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface FamilyAddressApi {
@GET(UrlAddress.FAMILY_ADDRESS)
Observable<BaseResponse<FamilyAddress>> getFamilyAddress(
@Query("sn") String sn
);
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.SystemSettings;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.SnInfo;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.network.api.sn;
package com.uiuios.aios.network.api.uiui.sn;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.network.UrlAddress;

View File

@@ -165,6 +165,10 @@ public class ApkUtils {
private static List<String> hideApp = new ArrayList<String>() {{
this.add("com.uiuios.aios");
this.add("com.uiuios.appstore");
this.add("com.android.quicksearchbox");
this.add("com.android.stk");
this.add("com.debug.loggerui");
this.add("com.mediatek.gnss.nonframeworklbs");
}};
/**
@@ -359,6 +363,10 @@ public class ApkUtils {
Log.e(TAG, "getAppstoreAppInfo: hided = " + pkg);
continue;
}
if (hideApp.contains(pkg)) {
Log.e(TAG, "getAppstoreAppInfo: hideApp = " + pkg);
continue;
}
if (frist == 0) {
if (pkgSet.contains(pkg)) {
if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) {

View File

@@ -56,4 +56,5 @@ public class FileUtil {
}
}
}