diff --git a/app/build.gradle b/app/build.gradle index 3c83bbe..7321fda 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.uiuios.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 49 - versionName "5.8" + versionCode 51 + versionName "6.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 380fc68..312b64e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -229,20 +229,20 @@ android:name=".activity.EmergencyActivity" android:launchMode="singleTask" /> { - void getAlarmClock(); - } - - public interface ClockView extends BaseView { - void showAlarmClock(List alarmClockData); - void setAlarmClockEmpty(); - void onError(); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java deleted file mode 100644 index 40b31f6..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.uiuios.aios.activity.alarmclock; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiuios.aios.alarm.AlarmClockData; -import com.uiuios.aios.network.NetInterfaceManager; - -import java.util.List; - -import io.reactivex.rxjava3.subjects.BehaviorSubject; - -public class AlarmClockPresenter implements AlarmClockContact.Presenter { - - private AlarmClockContact.ClockView mView; - private Context mContext; - - AlarmClockPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - @Override - public void attachView(@NonNull AlarmClockContact.ClockView view) { - this.mView = view; - } - - @Override - public void detachView() { - this.mView = null; - } - - - @Override - public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { - @Override - public void setAlarmClock(List alarmClockList) { - mView.showAlarmClock(alarmClockList); - } - - @Override - public void setAlarmClockEmpty() { - mView.setAlarmClockEmpty(); - } - - @Override - public void onError() { - mView.onError(); - } - }); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java similarity index 99% rename from app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java index 111a077..8cb67ba 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.alarmclock; +package com.uiuios.aios.activity.alarmclock.add; import android.content.Intent; import android.content.res.ColorStateList; diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java similarity index 99% rename from app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java index af72f03..4b83f2b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.alarmclock.port; +package com.uiuios.aios.activity.alarmclock.add.port; import android.content.Intent; import android.content.res.ColorStateList; diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java similarity index 88% rename from app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java index 3f98a6f..6e0ca3a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/port/PortAlarmClockAddViewModel.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.alarmclock.port; +package com.uiuios.aios.activity.alarmclock.add.port; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.base.mvvm.BaseViewModel; diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditActivity.java similarity index 99% rename from app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditActivity.java index fc79a4e..ba32f3e 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.alarmclock; +package com.uiuios.aios.activity.alarmclock.edit; import android.content.Intent; import android.content.res.ColorStateList; @@ -81,6 +81,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc private static final String TAG = AlarmClockEditActivity.class.getSimpleName(); private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); + private LoadingDialog mLoadingDialog; @BindView(R.id.cl_content) ConstraintLayout cl_content; @@ -409,8 +410,6 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } - LoadingDialog mLoadingDialog; - private void checkContent() { pvTime.returnData(); if (TextUtils.isEmpty(et_activation.getText())) { diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockActivity.java similarity index 72% rename from app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockActivity.java index 20f34e7..ae48c7a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.alarmclock; +package com.uiuios.aios.activity.alarmclock.main; import android.content.BroadcastReceiver; import android.content.Context; @@ -19,11 +19,14 @@ import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; +import com.uiuios.aios.activity.alarmclock.add.AlarmClockAddActivity; import com.uiuios.aios.alarm.AlarmAdapter; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.mvp.BaseMvpActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityAlarmBinding; import com.uiuios.aios.dialog.DeleteDialog; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.push.PushManager; @@ -38,21 +41,9 @@ import cn.jzvd.Jzvd; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockContact.ClockView { +public class AlarmClockActivity extends BaseMvvmActivity { private static final String TAG = AlarmClockActivity.class.getSimpleName(); - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.swipeRefreshLayout) - SwipeRefreshLayout swipeRefreshLayout; - @BindView(R.id.fab) - FloatingActionButton fab; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - - private AlarmClockPresenter mPresenter; private AlarmAdapter mAlarmAdapter; @Override @@ -60,16 +51,20 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon return R.layout.activity_alarm; } + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { UltimateBarX.statusBarOnly(this) .colorRes(R.color.default_blue) .fitWindow(true) .apply(); - ButterKnife.bind(this); - mPresenter = new AlarmClockPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); mAlarmAdapter = new AlarmAdapter(); mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() { @@ -78,26 +73,26 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon showDialog(alarmClockData); } }); - recyclerView.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this)); - recyclerView.setAdapter(mAlarmAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this)); + mViewDataBinding.rvData.setAdapter(mAlarmAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - mPresenter.getAlarmClock(); - } - }); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(AlarmClockActivity.this, AlarmClockAddActivity.class)); - } - }); +// mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { +// @Override +// public void onRefresh() { +// mViewModel.getAlarmClock(); +// } +// }); +// mViewDataBinding.fab.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// startActivity(new Intent(AlarmClockActivity.this, AlarmClockAddActivity.class)); +// } +// }); } private void showDialog(AlarmClockData alarmClockData) { @@ -156,7 +151,7 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon @Override public void onComplete() { Log.e("deleteAlarm", "onComplete: "); - mPresenter.getAlarmClock(); + mViewModel.getAlarmClock(); } }); } @@ -167,26 +162,26 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon registerAlarmClockReceiver(); } - @Override - public void showAlarmClock(List alarmClockData) { - mAlarmAdapter.setAlarmClockData(alarmClockData); - swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); - } - - @Override - public void setAlarmClockEmpty() { - mAlarmAdapter.setAlarmClockData(null); - swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); - } - - @Override - public void onError() { - swipeRefreshLayout.setRefreshing(false); - } +// @Override +// public void showAlarmClock(List alarmClockData) { +// mAlarmAdapter.setAlarmClockData(alarmClockData); +//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false); +// mViewDataBinding.clNodata.setVisibility(View.GONE); +// mViewDataBinding.rvData.setVisibility(View.VISIBLE); +// } +// +// @Override +// public void setAlarmClockEmpty() { +// mAlarmAdapter.setAlarmClockData(null); +//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false); +// mViewDataBinding.clNodata.setVisibility(View.VISIBLE); +// mViewDataBinding.rvData.setVisibility(View.GONE); +// } +// +// @Override +// public void onError() { +//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false); +// } @Override protected void onDestroy() { @@ -200,7 +195,7 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon @Override protected void onResume() { super.onResume(); - mPresenter.getAlarmClock(); + mViewModel.getAlarmClock(); } private void registerAlarmClockReceiver() { @@ -222,8 +217,13 @@ public class AlarmClockActivity extends BaseMvpActivity implements AlarmClockCon String action = intent.getAction(); Log.e(TAG, "onReceive: " + action); if (PushManager.SET_ALARMCLOCK.equals(action)) { - mPresenter.getAlarmClock(); + mViewModel.getAlarmClock(); } } } + + public class BtnClick { + + + } } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockViewModel.java new file mode 100644 index 0000000..ce1f540 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/main/AlarmClockViewModel.java @@ -0,0 +1,42 @@ +package com.uiuios.aios.activity.alarmclock.main; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.alarm.AlarmClockData; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAlarmBinding; +import com.uiuios.aios.network.NetInterfaceManager; + +import java.util.List; + +public class AlarmClockViewModel extends BaseViewModel { + + @Override + public ActivityAlarmBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + + public void getAlarmClock() { + NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { +// mView.showAlarmClock(alarmClockList); + } + + @Override + public void setAlarmClockEmpty() { +// mView.setAlarmClockEmpty(); + } + + @Override + public void onError() { +// mView.onError(); + } + }); + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/callwechat/CallWechatActivity.java b/app/src/main/java/com/uiuios/aios/activity/callwechat/CallWechatActivity.java index 71a6964..3d27b20 100644 --- a/app/src/main/java/com/uiuios/aios/activity/callwechat/CallWechatActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/callwechat/CallWechatActivity.java @@ -2,18 +2,20 @@ package com.uiuios.aios.activity.callwechat; import android.content.Intent; import android.net.Uri; +import android.text.TextUtils; import android.view.Gravity; import android.view.View; +import com.hjq.toast.Toaster; import com.uiuios.aios.R; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; -import com.uiuios.aios.bean.WechatInfo; +import com.uiuios.aios.bean.Contact; import com.uiuios.aios.databinding.ActivityWechatCallBinding; import com.uiuios.aios.service.WeAccessibilityService; public class CallWechatActivity extends BaseMvvmActivity { - private WechatInfo mWechatInfo; + private Contact mContact; @Override public boolean setfitWindow() { @@ -42,10 +44,10 @@ public class CallWechatActivity extends BaseMvvmActivity { private static final String TAG = AddContactActivity.class.getSimpleName(); - @BindView(R.id.iv_cancel) - ImageView iv_cancel; - @BindView(R.id.iv_confirm) - ImageView iv_confirm; - @BindView(R.id.cl_confirm) - ConstraintLayout cl_confirm; - @BindView(R.id.nv_avatar) - NiceImageView nv_avatar; - @BindView(R.id.et_name) - EditText et_name; - @BindView(R.id.et_phone) - EditText et_phone; - @BindView(R.id.toggleButton) - ToggleButton toggleButton; - - private String avatarFilePath; - private boolean urgent = false; + + @Override + protected int getLayoutId() { + return R.layout.activity_add_contact; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_add_contact); + mViewModel.setCtx(this); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); + } @Override public void initData() { - nv_avatar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectPicture(); - } - }); - iv_cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - finish(); - } - }); - iv_confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - checkContact(); - } - }); - cl_confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - checkContact(); - } - }); + } private void selectPicture() { @@ -118,7 +90,7 @@ public class AddContactActivity extends BaseDataBindingActivity { public void onResult(ArrayList result) { avatarFilePath = result.get(0).getPath(); Log.e("selectPicture", "onResult: " + avatarFilePath); - GlideLoadUtils.getInstance().glideLoad(AddContactActivity.this, avatarFilePath, nv_avatar, R.drawable.default_avatar); + GlideLoadUtils.getInstance().glideLoad(AddContactActivity.this, avatarFilePath, mViewDataBinding.nvAvatar, R.drawable.default_avatar); } @Override @@ -130,12 +102,12 @@ public class AddContactActivity extends BaseDataBindingActivity { private void checkContact() { - String name = et_name.getText().toString(); + String name = mViewDataBinding.etName.getText().toString(); if (TextUtils.isEmpty(name)) { Toaster.show("请输入联系人姓名"); return; } - String phone = et_phone.getText().toString(); + String phone = mViewDataBinding.etPhone.getText().toString(); if (TextUtils.isEmpty(phone)) { Toaster.show("请输入手机号码"); return; @@ -155,7 +127,7 @@ public class AddContactActivity extends BaseDataBindingActivity { params.put("sn", RemoteManager.getInstance().getSerial()); params.put("name", name); params.put("mobile", phone); - params.put("is_urgent", String.valueOf(toggleButton.isToggleOn())); + params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn())); NetInterfaceManager.getInstance() .getMailListAddObservable(params, body) .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) @@ -220,7 +192,6 @@ public class AddContactActivity extends BaseDataBindingActivity { return file; } - public static File uriToFile(Uri uri, Context context) { String path = null; if ("file".equals(uri.getScheme())) { @@ -266,4 +237,18 @@ public class AddContactActivity extends BaseDataBindingActivity { return null; } + + public class BtnClick { + public void exit(View view) { + finish(); + } + + public void selectPic(View v) { + selectPicture(); + } + + public void confirm(View v) { + checkContact(); + } + } } diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactViewModel.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactViewModel.java index 258b7d6..ba2290b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactViewModel.java +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactViewModel.java @@ -1,8 +1,16 @@ package com.uiuios.aios.activity.contact; +import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddContactBinding; + +public class AddContactViewModel extends BaseViewModel { + + @Override + public ActivityAddContactBinding getVDBinding() { + return binding; + } -public class AddContactViewModel extends BaseViewModel { @Override public void onDestroy() { diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java new file mode 100644 index 0000000..8166a74 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java @@ -0,0 +1,252 @@ +package com.uiuios.aios.activity.contact; + +import android.content.ContentResolver; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +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.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.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.ActivityEvent; +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.WechatInfo; +import com.uiuios.aios.databinding.ActivityAddWechatContactBinding; +import com.uiuios.aios.db.ContactManager; +import com.uiuios.aios.manager.RemoteManager; +import com.uiuios.aios.network.NetInterfaceManager; +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 io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.disposables.Disposable; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; + +public class AddWechatContactActivity extends BaseMvvmActivity { + private static final String TAG = AddWechatContactActivity.class.getSimpleName(); + + private LoadingDialog mLoadingDialog; + private String mPictrueFilePath; + + + @Override + protected int getLayoutId() { + return R.layout.activity_add_wechat_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() { + @Override + public void onChanged(BaseResponse baseResponse) { + if (baseResponse.code == 200) { + mLoadingDialog.loadSuccess(); + mLoadingDialog.close(); + finish(); + } else { + mLoadingDialog.setFailedText(baseResponse.msg); + mLoadingDialog.loadFailed(); + mLoadingDialog.close(); + } + } + }); + } + + + private void openSelector() { + PictureSelector.create(AddWechatContactActivity.this) + .openGallery(SelectMimeType.ofAll()) + .setSelectionMode(1) + .setImageEngine(GlideEngine.createGlideEngine()) + .forResult(new OnResultCallbackListener() { + @Override + public void onResult(ArrayList result) { + mPictrueFilePath = result.get(0).getRealPath(); + File file = new File(mPictrueFilePath); + if (file.exists()) { + RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AddWechatContactActivity.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, AddWechatContactActivity.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 params = new HashMap<>(); + params.put("sn", RemoteManager.getInstance().getSerial()); + params.put("name", name); + params.put("mobile", phone); + params.put("tag", groupTag); + params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn())); + mViewModel.addContact(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, 20, 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.i(TAG, "Uri Scheme:" + uri.getScheme()); + } + return null; + } + + public class BtnClick { + public void selectPic(View view) { + openSelector(); + } + + public void exit(View view) { + finish(); + } + + public void addContact(View view) { + checkContact(); + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactViewModel.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactViewModel.java new file mode 100644 index 0000000..2ecb381 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactViewModel.java @@ -0,0 +1,66 @@ +package com.uiuios.aios.activity.contact; + +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; + +import com.hjq.toast.Toaster; +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.ActivityAddWechatContactBinding; +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 AddWechatContactViewModel extends BaseViewModel { + @Override + public ActivityAddWechatContactBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + private MutableLiveData mBaseResponseMutableLiveData = new MutableLiveData<>(); + + public MutableLiveData getBaseResponseMutableLiveData() { + return mBaseResponseMutableLiveData; + } + + public void addContact(Map params, MultipartBody.Part body) { + NetInterfaceManager.getInstance() + .getMailListAddObservable(params, body) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("addContact", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("addContact", "onNext: " + baseResponse); + mBaseResponseMutableLiveData.setValue(baseResponse); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("addContact", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("addContact", "onComplete: "); + } + }); + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java index 5dd23a9..dca3111 100644 --- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java @@ -17,7 +17,6 @@ import java.util.List; public class ContactActivity extends BaseMvvmActivity { - private OldContactAdapter mOldContactAdapter; @Override @@ -80,7 +79,7 @@ public class ContactActivity extends BaseMvvmActivity desktopIcons = ApkUtils.queryFilterAppInfo(this); + ArrayList desktopIcons = ApkUtils.getAppstoreAppInfo(this); int x = 0; for (int i = 0; i <= desktopIcons.size(); i++) { - if (i != 0 && i % APP_LIST_SIZE == 0) { + if (i != 0 && i % CommonConfig.DESKTOP_LIST_SIZE == 0) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -212,7 +212,7 @@ public class MainActivity extends BaseMvvmActivity desktopIcons) { int x = 0; for (int i = 0; i <= desktopIcons.size(); i++) { - if (i != 0 && i % APP_LIST_SIZE == 0) { + if (i != 0 && i % CommonConfig.DESKTOP_LIST_SIZE == 0) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -294,35 +294,42 @@ public class MainActivity extends BaseMvvmActivity fragmentList = new ArrayList<>(); - ArrayList applicationInfoList = ApkUtils.queryFilterAppInfo(this); + ArrayList applicationInfoList = ApkUtils.getAppstoreAppInfo(this); + Log.e(TAG, "addData: applicationInfoList = " + applicationInfoList); + Log.e(TAG, "addData: applicationInfoList size = " + applicationInfoList.size()); int x = 0; for (int i = 0; i <= applicationInfoList.size(); i++) { - if (i != 0 && i % APP_LIST_SIZE == 0) { + Log.e(TAG, "addData: x = " + x + " i = " + i); + if (i != 0 && i % (CommonConfig.DESKTOP_LIST_SIZE) == 0) {//图标数量刚好填满 + Log.e(TAG, "addData: % = 0"); AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); fragmentList.add(appListFragment); x = i; } else if (i == applicationInfoList.size()) { + Log.e(TAG, "addData: i == size"); AppListFragment appListFragment = new AppListFragment(); - fragmentList.add(appListFragment); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); + fragmentList.add(appListFragment); } } + Log.e(TAG, "addData: fragmentList = " + fragmentList); //从第三个开始改 for (int i = 0; i < fragmentList.size(); i++) { if (i + appListIndex < mFragments.size()) { mBaseFragmentPagerAdapter.replaceFragment(i + appListIndex, fragmentList.get(i)); + Log.e(TAG, "addData: replaceFragment = " + fragmentList.get(i)); // mFragments.remove(i + 2); // mFragments.add(i + 2, fragmentList.get(i)); } else { // mFragments.add(fragmentList.get(i)); // mBaseFragmentPagerAdapter.getFragments(); mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i)); + Log.e(TAG, "addData: addFragment = " + fragmentList.get(i)); } } for (int i = mFragments.size(); i > fragmentList.size() + appListIndex; i--) { diff --git a/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeActivity.java similarity index 80% rename from app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java rename to app/src/main/java/com/uiuios/aios/activity/noti/NoticeActivity.java index 02087f3..8f3a707 100644 --- a/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.noti; import android.content.Context; import android.content.Intent; @@ -8,37 +8,49 @@ import android.os.Bundle; import android.os.PowerManager; import android.os.Vibrator; import android.view.View; -import android.widget.TextView; -import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; +import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.databinding.ActivityNoticeBinding; import com.uiuios.aios.utils.WakeUpUtils; -import butterknife.BindView; -import butterknife.ButterKnife; import cn.jzvd.Jzvd; -public class NoticeActivity extends AppCompatActivity { +public class NoticeActivity extends BaseDataBindingActivity { private String TAG = NoticeActivity.class.getSimpleName(); - @BindView(R.id.positive) - TextView positive; + private ActivityNoticeBinding mBinding; private int mId; private MediaPlayer mMediaPlayer; private PowerManager mPowerManager; private PowerManager.WakeLock mWakeLock; private AudioManager mAudioManager; - private Vibrator mVibrator; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_notice); - ButterKnife.bind(this); + protected void initDataBinding() { + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_notice); + } + @Override + protected void initView() { + mBinding.positive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent noticeIntent = new Intent(NoticeActivity.this, NoticeInfoActivity.class); + noticeIntent.putExtra("id", mId); + startActivity(noticeIntent); + + finish(); + } + }); + } + + @Override + protected void initData() { Intent intent = getIntent(); mId = intent.getIntExtra("id", -1); @@ -58,19 +70,8 @@ public class NoticeActivity extends AppCompatActivity { // 开始播放 mMediaPlayer.start(); - positive.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent noticeIntent = new Intent(NoticeActivity.this, NoticeInfoActivity.class); - noticeIntent.putExtra("id", mId); - startActivity(noticeIntent); - - finish(); - } - }); } - @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoActivity.java similarity index 77% rename from app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java rename to app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoActivity.java index 600cfb5..67a9262 100644 --- a/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoActivity.java @@ -1,21 +1,13 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.noti; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; -import android.os.Bundle; import android.os.PowerManager; -import android.os.Vibrator; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.constraintlayout.widget.ConstraintLayout; import com.blankj.utilcode.util.FileUtils; import com.bumptech.glide.Glide; @@ -24,13 +16,14 @@ import com.bumptech.glide.request.RequestOptions; import com.uiuios.aios.R; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityNoticeInfoBinding; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.utils.FileUtil; import com.uiuios.aios.utils.ScreenUtils; import com.uiuios.aios.utils.Utils; import com.uiuios.aios.utils.WakeUpUtils; -import com.uiuios.aios.view.JzvdStdAssert; import java.io.File; import java.io.FileInputStream; @@ -38,30 +31,15 @@ import java.io.IOException; import java.net.URI; import java.util.HashMap; -import butterknife.BindView; -import butterknife.ButterKnife; import cn.jzvd.JZDataSource; import cn.jzvd.Jzvd; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class NoticeInfoActivity extends AppCompatActivity { +public class NoticeInfoActivity extends BaseMvvmActivity { private String TAG = NoticeInfoActivity.class.getSimpleName(); - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.bt_ok) - Button bt_ok; - @BindView(R.id.cl_voice) - ConstraintLayout cl_voice; - @BindView(R.id.cl_vp) - ConstraintLayout cl_vp; - @BindView(R.id.jz_video) - JzvdStdAssert jz_video; - @BindView(R.id.imageView) - ImageView imageView; - private AlarmClockData mAlarmClockData; private int mId; private MediaPlayer mMediaPlayer; @@ -69,19 +47,31 @@ public class NoticeInfoActivity extends AppCompatActivity { private PowerManager.WakeLock mWakeLock; private AudioManager mAudioManager; - private Vibrator mVibrator; + @Override + protected int getLayoutId() { + return R.layout.activity_notice_info; + } @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_notice_info); - ButterKnife.bind(this); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { Intent intent = getIntent(); mId = intent.getIntExtra("id", -1); mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock"); - mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); +// mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); @@ -93,8 +83,6 @@ public class NoticeInfoActivity extends AppCompatActivity { finish(); } else { mWakeLock.acquire(60 * 1000L); - long[] pattern = {1000, 5000, 1000, 5000}; - mVibrator.vibrate(pattern, 0); WakeUpUtils.wakeUpAndUnlockScreen(this); HashMap oldData = AlarmUtils.getInstance().getOldDataMap(); @@ -104,7 +92,7 @@ public class NoticeInfoActivity extends AppCompatActivity { } Log.e(TAG, "onCreate: " + mAlarmClockData); showPic(mAlarmClockData); - jz_video.postDelayed(new Runnable() { + mViewDataBinding.jzVideo.postDelayed(new Runnable() { @Override public void run() { showData(mAlarmClockData); @@ -114,8 +102,8 @@ public class NoticeInfoActivity extends AppCompatActivity { } private void showPic(AlarmClockData alarmClockData) { - tv_title.setText(alarmClockData.getTitle()); - bt_ok.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvTitle.setText(alarmClockData.getTitle()); + mViewDataBinding.btOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { HashMap oldData = AlarmUtils.getInstance().getOldDataMap(); @@ -155,7 +143,7 @@ public class NoticeInfoActivity extends AppCompatActivity { String voiceUrl = alarmClockData.getVoice(); String voicemd5 = alarmClockData.getVoice_md5(); if (!TextUtils.isEmpty(voiceUrl)) { - cl_voice.setVisibility(View.VISIBLE); + mViewDataBinding.clVoice.setVisibility(View.VISIBLE); String fileName = Utils.getFileNamefromURL(voiceUrl); File file = new File(Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName); String fileMD5 = FileUtils.getFileMD5ToString(file); @@ -179,17 +167,17 @@ public class NoticeInfoActivity extends AppCompatActivity { } // } } else { - cl_voice.setVisibility(View.GONE); + mViewDataBinding.clVoice.setVisibility(View.GONE); } String filePath = alarmClockData.getFile(); RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(this, 16F))); String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length()); String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName; File file = new File(realPath); - if (file.exists()){ - Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(imageView); - }else { - Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(imageView); + if (file.exists()) { + Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(mViewDataBinding.imageView); + } else { + Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(mViewDataBinding.imageView); } } @@ -197,24 +185,24 @@ public class NoticeInfoActivity extends AppCompatActivity { private void showData(AlarmClockData alarmClockData) { String filePath = alarmClockData.getFile(); if (!TextUtils.isEmpty(filePath)) { - cl_vp.setVisibility(View.VISIBLE); + mViewDataBinding.clVp.setVisibility(View.VISIBLE); String fileType = FileUtil.getFileType(filePath); Log.e(TAG, "showData: " + fileType); if (FileUtil.isPictureFile(fileType)) { - jz_video.setVisibility(View.GONE); - imageView.setVisibility(View.VISIBLE); + mViewDataBinding.jzVideo.setVisibility(View.GONE); + mViewDataBinding.imageView.setVisibility(View.VISIBLE); RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(this, 16F))); String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length()); String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName; File file = new File(realPath); - if (file.exists()){ - Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(imageView); - }else { - Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(imageView); + if (file.exists()) { + Glide.with(NoticeInfoActivity.this).load(file).apply(options).error(R.drawable.icon_nodata).into(mViewDataBinding.imageView); + } else { + Glide.with(NoticeInfoActivity.this).load(filePath).apply(options).error(R.drawable.icon_nodata).into(mViewDataBinding.imageView); } } else if (FileUtil.isVideoFile(fileType)) { - jz_video.setVisibility(View.VISIBLE); - imageView.setVisibility(View.GONE); + mViewDataBinding.jzVideo.setVisibility(View.VISIBLE); + mViewDataBinding.imageView.setVisibility(View.GONE); String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length()); String realPath = Utils.getDownLoadPath(NoticeInfoActivity.this) + fileName; File file = new File(realPath); @@ -228,13 +216,13 @@ public class NoticeInfoActivity extends AppCompatActivity { jzDataSource = new JZDataSource(uri.toString(), ""); } jzDataSource.looping = true; - jz_video.setUp(jzDataSource, Jzvd.SCREEN_NORMAL); - jz_video.startPreloading(); - jz_video.startVideoAfterPreloading(); - jz_video.startVideo(); + mViewDataBinding.jzVideo.setUp(jzDataSource, Jzvd.SCREEN_NORMAL); + mViewDataBinding.jzVideo.startPreloading(); + mViewDataBinding.jzVideo.startVideoAfterPreloading(); + mViewDataBinding.jzVideo.startVideo(); } } else { - cl_vp.setVisibility(View.GONE); + mViewDataBinding.clVp.setVisibility(View.GONE); } } @@ -249,9 +237,6 @@ public class NoticeInfoActivity extends AppCompatActivity { mMediaPlayer.release(); mMediaPlayer = null; } - if (mVibrator != null) { - mVibrator.cancel(); - } } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoViewModel.java b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoViewModel.java new file mode 100644 index 0000000..910d1aa --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/noti/NoticeInfoViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.noti; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityNoticeInfoBinding; + +public class NoticeInfoViewModel extends BaseViewModel { + + @Override + public ActivityNoticeInfoBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactActivity.java deleted file mode 100644 index 1b29394..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.uiuios.aios.activity.wecontact; - -import android.text.TextUtils; -import android.util.Log; -import android.view.View; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.request.RequestOptions; -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.WechatInfo; -import com.uiuios.aios.databinding.ActivityAddWechatContactBinding; -import com.uiuios.aios.db.ContactManager; -import com.uiuios.aios.utils.ScreenUtil; - -import java.io.File; -import java.util.ArrayList; - -public class AddWechatContactActivity extends BaseMvvmActivity { - private static final String TAG = AddWechatContactActivity.class.getSimpleName(); - - private String mPictrueFilePath; - - - @Override - protected int getLayoutId() { - return R.layout.activity_add_wechat_contact; - } - - @Override - protected void initDataBinding() { - mViewModel.setCtx(this); - mViewModel.setVDBinding(mViewDataBinding); - mViewModel.setLifecycle(getLifecycleSubject()); - mViewDataBinding.setClick(new BtnClick()); - } - - @Override - protected void initView() { - - } - - @Override - protected void initData() { - - } - - - private void openSelector() { - PictureSelector.create(AddWechatContactActivity.this) - .openGallery(SelectMimeType.ofAll()) - .setSelectionMode(1) - .setImageEngine(GlideEngine.createGlideEngine()) - .forResult(new OnResultCallbackListener() { - @Override - public void onResult(ArrayList result) { - mPictrueFilePath = result.get(0).getRealPath(); - File file = new File(mPictrueFilePath); - if (file.exists()) { - RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AddWechatContactActivity.this, 8F))); - Glide.with(mViewDataBinding.nvAvatar).load(file).apply(options).into(mViewDataBinding.nvAvatar); - } else { - mPictrueFilePath = ""; - } - } - - @Override - public void onCancel() { - Log.e(TAG, "onCancel: "); - } - }); - } - - public class BtnClick { - public void selectPic(View view){ - openSelector(); - } - - public void exit(View view){ - finish(); - } - - public void addContact(View view) { - if (TextUtils.isEmpty(mViewDataBinding.etName.getText())) { - Toaster.show("请输入微信备注"); - return; - } - if (TextUtils.isEmpty(mViewDataBinding.etGroup.getText())) { - Toaster.show("请输入微信群组标签"); - return; - } - if (TextUtils.isEmpty(mViewDataBinding.etPhone.getText())) { - Toaster.show("请输入手机号码"); - return; - } -// if (TextUtils.isEmpty(mPictrueFilePath)) { -// Toaster.show("请选择图片"); -// return; -// } - WechatInfo wechatInfo = new WechatInfo(); - if (!TextUtils.isEmpty(mViewDataBinding.etName.getText())) { - wechatInfo.setNickName(mViewDataBinding.etName.getText().toString()); - } - if (!TextUtils.isEmpty(mViewDataBinding.etGroup.getText())) { - wechatInfo.setGroupTag(mViewDataBinding.etGroup.getText().toString()); - } - if (!TextUtils.isEmpty(mViewDataBinding.etWechatId.getText())) { - wechatInfo.setWechatId(mViewDataBinding.etWechatId.getText().toString()); - } - if (!TextUtils.isEmpty(mViewDataBinding.etPhone.getText())) { - wechatInfo.setMobile(mViewDataBinding.etPhone.getText().toString()); - } - if (!TextUtils.isEmpty(mPictrueFilePath)) { - wechatInfo.setAvatarPath(mPictrueFilePath); - } - if (ContactManager.getInstance().addWechatInfo(wechatInfo)) { - Toaster.show("添加成功"); - finish(); - } - - } - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactViewModel.java b/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactViewModel.java deleted file mode 100644 index 736b6eb..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/wecontact/AddWechatContactViewModel.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.uiuios.aios.activity.wecontact; - -import com.trello.rxlifecycle4.android.ActivityEvent; -import com.uiuios.aios.base.mvvm.BaseViewModel; -import com.uiuios.aios.databinding.ActivityAddWechatContactBinding; - -public class AddWechatContactViewModel extends BaseViewModel { - @Override - public ActivityAddWechatContactBinding getVDBinding() { - return binding; - } - - @Override - public void onDestroy() { - - } -} diff --git a/app/src/main/java/com/uiuios/aios/adapter/ContactAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/ContactAdapter.java index e2ac1e1..a77ef76 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/ContactAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/ContactAdapter.java @@ -18,7 +18,7 @@ import com.bumptech.glide.Glide; import com.hjq.toast.Toaster; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.contact.AddContactActivity; +import com.uiuios.aios.activity.contact.AddWechatContactActivity; import com.uiuios.aios.activity.records.RecordsActivity; import com.uiuios.aios.bean.Contact; @@ -70,7 +70,7 @@ public class ContactAdapter extends RecyclerView.Adapter { private static final String TAG = WechatContactAdapter.class.getSimpleName(); - private List mContactList; + private List mContactList; private Context mContext; public static final String DIALER_PACKAGE = "com.android.dialer"; public static final String DIALER_ADD_CONTACT = "com.uiui.aios.contact.add"; - public void setContactList(List contactList) { + public void setContactList(List contactList) { this.mContactList = contactList; notifyDataSetChanged(); } @@ -51,7 +52,7 @@ public class WechatContactAdapter extends RecyclerView.Adapter extends BaseFragment { - protected String mTag = this.getClass().getSimpleName(); + protected String TAG = this.getClass().getSimpleName(); /** * 是否顯示了 */ @@ -65,6 +65,7 @@ public abstract class BaseMvvmFragment(context); } @@ -82,6 +83,7 @@ public abstract class BaseMvvmFragment { +public class AppListFragment extends BaseFragment { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -70,6 +71,7 @@ public class AppListFragment extends BaseMvvmFragment mDesktopIcons; private MyGridLayout gridLayout; private String TAG = AppListFragment.class.getSimpleName(); @@ -100,9 +102,9 @@ public class AppListFragment extends BaseMvvmFragment(Arrays.asList(new DesktopIcon[12 - mDesktopIcons.size()]))); + private void initView() { + if (mDesktopIcons.size() != CommonConfig.DESKTOP_LIST_SIZE) { + mDesktopIcons.addAll(new ArrayList<>(Arrays.asList(new DesktopIcon[CommonConfig.DESKTOP_LIST_SIZE - mDesktopIcons.size()]))); } - gridLayout = getActivity().findViewById(R.id.list); - if (getCtx().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { + gridLayout = rootView.findViewById(R.id.list); +// if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { +// gridLayout.set(3, 3); +// } else { gridLayout.set(3, 3); - } else { - gridLayout.set(3, 3); - } +// } gridLayout.setGridAdapter(new MyGridLayout.GridAdatper() { @Override public View getView(int index) { - PackageManager pm = getCtx().getPackageManager(); + PackageManager pm = mContext.getPackageManager(); View view = getLayoutInflater().inflate(R.layout.item_actions, null); ImageView iv = view.findViewById(R.id.iv); ImageView iv_app = view.findViewById(R.id.iv_app); @@ -153,7 +154,7 @@ public class AppListFragment extends BaseMvvmFragment appList) { this.mDesktopIcons = appList; - } @Override public void onSaveInstanceState(@NonNull Bundle outState) { - outState.putParcelableArrayList("applicationInfos", mDesktopIcons); - super.onSaveInstanceState(outState); +// outState.putParcelableArrayList("applicationInfos", mDesktopIcons); +// super.onSaveInstanceState(outState); } } diff --git a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java index e1ad5cb..12608c5 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java @@ -11,9 +11,11 @@ import androidx.recyclerview.widget.GridLayoutManager; import com.hjq.toast.Toaster; import com.uiuios.aios.R; -import com.uiuios.aios.activity.wecontact.AddWechatContactActivity; +import com.uiuios.aios.activity.contact.AddWechatContactActivity; 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.bean.WechatInfo; import com.uiuios.aios.databinding.FragmentContactHomeBinding; import com.uiuios.aios.db.ContactManager; @@ -45,8 +47,8 @@ public class ContactFragment extends BaseMvvmFragment>() { + mViewModel.getContactList().observe(this, new Observer>() { @Override - public void onChanged(List contacts) { + public void onChanged(List contacts) { if (contacts == null || contacts.size() == 0) { mViewDataBinding.tvNoContact.setVisibility(View.VISIBLE); mViewDataBinding.rvContact.setVisibility(View.GONE); @@ -72,6 +74,17 @@ public class ContactFragment extends BaseMvvmFragment() { + @Override + public void onChanged(BaseResponse baseResponse) { + if (baseResponse.code == 200) { + Toaster.show("删除成功"); + } else { + Toaster.show("删除失败:" + baseResponse.msg); + } + mViewModel.getContact(); + } + }); } @Override @@ -86,7 +99,7 @@ public class ContactFragment extends BaseMvvmFragment> mContactList = new MutableLiveData<>(); + private MutableLiveData> mContactList = new MutableLiveData<>(); - public MutableLiveData> getContactList() { + public MutableLiveData> getContactList() { return mContactList; } public void getContact() { - Observable.create(new ObservableOnSubscribe>() { - @Override - public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable { - emitter.onNext(ContactManager.getInstance().getWechatInfoList()); - } - }) - .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getWechatInfoList", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull List wechatInfos) { - Log.e("getWechatInfoList", "onNext: " + wechatInfos); - mContactList.setValue(wechatInfos); - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getWechatInfoList", "onError: " + e.getMessage()); - mContactList.setValue(null); - } - - @Override - public void onComplete() { - Log.e("getWechatInfoList", "onComplete: "); - } - }); - -// NetInterfaceManager.getInstance() -// .getContactListObservable() +// Observable.create(new ObservableOnSubscribe>() { +// @Override +// public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable { +// emitter.onNext(ContactManager.getInstance().getWechatInfoList()); +// } +// }) // .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) -// .subscribe(new Observer>>() { +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer>() { // @Override // public void onSubscribe(@NonNull Disposable d) { -// Log.e("getContactList", "onSubscribe: "); +// Log.e("getWechatInfoList", "onSubscribe: "); // } // // @Override -// public void onNext(@NonNull BaseResponse> listBaseResponse) { -// Log.e("getContactList", "onNext: " + listBaseResponse); -// if (listBaseResponse.code == 200) { -// mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data)); -// mContactList.setValue(listBaseResponse.data); -// } else { -// mMMKV.putString(UrlAddress.GET_MAIL_LIST, ""); -// mContactList.setValue(new ArrayList<>()); -// } +// public void onNext(@NonNull List wechatInfos) { +// Log.e("getWechatInfoList", "onNext: " + wechatInfos); +// mContactList.setValue(wechatInfos); // } // // @Override // public void onError(@NonNull Throwable e) { -// Log.e("getContactList", "onError: " + e.getMessage()); -// String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null); -// Gson gson = new Gson(); -// Type type = new TypeToken>() { -// }.getType(); -// List contacts = gson.fromJson(jsonString, type); -// if (contacts == null) { -// mContactList.setValue(new ArrayList<>()); -// } else { -// mContactList.setValue(contacts); -// } -// onComplete(); +// Log.e("getWechatInfoList", "onError: " + e.getMessage()); +// mContactList.setValue(null); // } // // @Override // public void onComplete() { -// Log.e("getContactList", "onComplete: "); +// Log.e("getWechatInfoList", "onComplete: "); // } // }); + + NetInterfaceManager.getInstance() + .getContactListObservable() + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getContactList", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getContactList", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data)); + mContactList.setValue(listBaseResponse.data); + } else { + mMMKV.putString(UrlAddress.GET_MAIL_LIST, ""); + mContactList.setValue(new ArrayList<>()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getContactList", "onError: " + e.getMessage()); + String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List contacts = gson.fromJson(jsonString, type); + if (contacts == null) { + mContactList.setValue(new ArrayList<>()); + } else { + mContactList.setValue(contacts); + } + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getContactList", "onComplete: "); + } + }); + } + + + private MutableLiveData mDeleteData =new MutableLiveData<>(); + + public MutableLiveData getDeleteData() { + return mDeleteData; + } + + public void deleteContact(int id) { + NetInterfaceManager.getInstance().getMailListDeleteObservable(id) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) + .subscribe(new Observer() { + @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: "); + } + }); } } diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java index 36ca703..cf58b5d 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java @@ -16,8 +16,8 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; +import com.hjq.toast.Toaster; import com.jeremyliao.liveeventbus.LiveEventBus; import com.qweather.sdk.bean.weather.WeatherDailyBean; import com.qweather.sdk.bean.weather.WeatherHourlyBean; @@ -29,12 +29,12 @@ import com.uiuios.aios.activity.EmergencyActivity; import com.uiuios.aios.activity.addicon.AddIconActivity; import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; import com.uiuios.aios.activity.contact.ContactActivity; +import com.uiuios.aios.activity.dailyapp.DailyAppActivity; import com.uiuios.aios.activity.weather.WeatherActivity; import com.uiuios.aios.adapter.HomeAppAdapter; -import com.uiuios.aios.adapter.NotificationAdapter; import com.uiuios.aios.alarm.AlarmClockData; +import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; -import com.uiuios.aios.bean.AlarmItem; import com.uiuios.aios.bean.Contact; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.bean.MapBean; @@ -48,6 +48,7 @@ import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUtil; import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -66,8 +67,7 @@ public class HomeFragment extends BaseMvvmFragment alarmItemList; - private NotificationAdapter notificationAdapter; +// private NotificationAdapter notificationAdapter; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -145,11 +145,11 @@ public class HomeFragment extends BaseMvvmFragment desktopIcons) { Log.e(TAG, "setInstalledApp: " + desktopIcons); if (desktopIcons == null || desktopIcons.size() == 0) { - mViewDataBinding.ivNodata.setVisibility(View.VISIBLE); - mViewDataBinding.rvApp.setVisibility(View.INVISIBLE); +// mViewDataBinding.ivNodata.setVisibility(View.VISIBLE); +// mViewDataBinding.rvApp.setVisibility(View.INVISIBLE); } else { - mViewDataBinding.ivNodata.setVisibility(View.GONE); - mViewDataBinding.rvApp.setVisibility(View.VISIBLE); +// mViewDataBinding.ivNodata.setVisibility(View.GONE); +// mViewDataBinding.rvApp.setVisibility(View.VISIBLE); mHomeAppAdapter.setDesktopIcons(desktopIcons); } } @@ -157,14 +157,35 @@ public class HomeFragment extends BaseMvvmFragment>() { @Override - public void onChanged(List alarmClockData) { - if (alarmClockData != null && alarmClockData.size() != 0) { - notificationAdapter.setDataList(alarmClockData); - mViewDataBinding.rvNoti.setVisibility(View.VISIBLE); - mViewDataBinding.ivNoteNodata.setVisibility(View.GONE); + public void onChanged(List alarmClockDataList) { + if (alarmClockDataList != null && alarmClockDataList.size() != 0) { +// notificationAdapter.setDataList(alarmClockDataList); + AlarmClockData alarmClockData = alarmClockDataList.get(0); + switch (alarmClockData.getType()) { + case AlarmUtils.ONCE: + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + Date date = sdf.parse(alarmClockData.getTime()); + SimpleDateFormat hours = new SimpleDateFormat("HH:mm"); + String time = hours.format(date); + mViewDataBinding.tvClock.setText(time); + } catch (ParseException e) { + e.printStackTrace(); + } + break; + case AlarmUtils.LOOP: + case AlarmUtils.WORKING_DAY: + case AlarmUtils.OFF_DAY: + mViewDataBinding.tvClock.setText(alarmClockData.getTime()); + break; + default: + } +// mViewDataBinding.rvNoti.setVisibility(View.VISIBLE); +// mViewDataBinding.ivNoteNodata.setVisibility(View.GONE); } else { - mViewDataBinding.rvNoti.setVisibility(View.GONE); - mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE); + mViewDataBinding.tvClock.setText("未设置"); +// mViewDataBinding.rvNoti.setVisibility(View.GONE); +// mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE); } } }); @@ -235,19 +256,18 @@ public class HomeFragment extends BaseMvvmFragment stringIntegerHashMap = new HashMap<>(); @@ -269,6 +289,27 @@ public class HomeFragment extends BaseMvvmFragment allowPackages = resolveinfoList.stream().map(resolveInfo -> resolveInfo.activityInfo.packageName).collect(Collectors.toSet()); // List adminApp = RemoteManager.getInstance().getAdminApp(); -// Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); +// Log.i(TAG, "getFilterAppset: adminapp = " + adminApp); for (ResolveInfo resolveInfo : resolveinfoList) { String pkg = resolveInfo.activityInfo.packageName; if (ApkUtils.appIsDisable(mContext, pkg)) { - Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + Log.e(TAG, "getFilterAppset: disable = " + pkg); continue; } if (showPackages.contains(pkg)) { @@ -142,11 +142,11 @@ public class AppManager { // List adminApp = RemoteManager.getInstance().getAdminApp(); -// Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); +// Log.i(TAG, "getFilterAppset: adminapp = " + adminApp); for (ResolveInfo resolveInfo : resolveinfoList) { String pkg = resolveInfo.activityInfo.packageName; if (ApkUtils.appIsDisable(mContext, pkg)) { - Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + Log.e(TAG, "getFilterAppset: disable = " + pkg); continue; } if (showPackages.contains(pkg)) { @@ -215,11 +215,11 @@ public class AppManager { // List adminApp = RemoteManager.getInstance().getAdminApp(); -// Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); +// Log.i(TAG, "getFilterAppset: adminapp = " + adminApp); for (ResolveInfo resolveInfo : resolveinfoList) { String pkg = resolveInfo.activityInfo.packageName; if (ApkUtils.appIsDisable(mContext, pkg)) { - Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + Log.e(TAG, "getFilterAppset: disable = " + pkg); continue; } if (ApkUtils.excludePackageName.contains(pkg)) { diff --git a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java index cdce3c3..f8096c8 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java @@ -20,8 +20,10 @@ import java.util.function.Predicate; public class AppStatusManager { private static final String TAG = AppStatusManager.class.getSimpleName(); + @SuppressLint("StaticFieldLeak") private static AppStatusManager sInstance; + private Context mContext; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private Set hidedAppSet; @@ -34,6 +36,9 @@ public class AppStatusManager { this.add("com.android.documentsui"); this.add("com.android.calculator2"); this.add("com.android.calendar"); + this.add("com.mediatek.camera"); + this.add("com.android.dialer"); + this.add("com.android.settings"); }}; private AppStatusManager(Context context) { diff --git a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java index ea6d534..c4cb936 100644 --- a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java @@ -46,6 +46,7 @@ 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; @@ -398,6 +399,14 @@ public class NetInterfaceManager { } + public Observable getMailListDeleteObservable(int id) { + return mRetrofit.create(MailListDeleteApi.class) + .deleteMailList(RemoteManager.getInstance().getSerial(), id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> getGoodsTypeListObservable() { return mRetrofit.create(GoodsTypeApi.class) .getGoodsTypeList() @@ -518,7 +527,7 @@ public class NetInterfaceManager { public Observable> getOrderExpressObservable(String order_sn, String order_id) { return mRetrofit.create(OrderExpressApi.class) - .getOrderExpress(RemoteManager.getInstance().getSerial(), order_sn,order_id) + .getOrderExpress(RemoteManager.getInstance().getSerial(), order_sn, order_id) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } @@ -1024,7 +1033,7 @@ public class NetInterfaceManager { @Override public void onNext(@NonNull BaseResponse> listBaseResponse) { - Log.e("getAlarmClockObserver", "onNext: "); + Log.e("getAlarmClockObserver", "onNext: " + listBaseResponse); if (listBaseResponse.code == 200) { List alarmClockData = listBaseResponse.data; if (alarmClockData != null && alarmClockData.size() != 0) { diff --git a/app/src/main/java/com/uiuios/aios/network/api/MailListDeleteApi.java b/app/src/main/java/com/uiuios/aios/network/api/MailListDeleteApi.java new file mode 100644 index 0000000..7dd6da1 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/network/api/MailListDeleteApi.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.network.api; + +import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.network.UrlAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface MailListDeleteApi { + @FormUrlEncoded + @POST(UrlAddress.MAIL_LIST_DELETE) + Observable deleteMailList( + @Field("sn") String sn, + @Field("id") int id + ); +} diff --git a/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java b/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java index 47a9852..873b6a3 100644 --- a/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java +++ b/app/src/main/java/com/uiuios/aios/service/WeAccessibilityService.java @@ -20,6 +20,7 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Toast; import com.tencent.mmkv.MMKV; +import com.uiuios.aios.bean.Contact; import com.uiuios.aios.bean.WechatInfo; import com.uiuios.aios.config.CommonConfig; @@ -48,7 +49,7 @@ public class WeAccessibilityService extends AccessibilityService { private int mCallType = TYPE_VOICE; - private WechatInfo mWechatInfo; + private Contact mContact; private Step mCurrentStep = Step.WAITING; private String mName = "";//微信昵称 private String mTagName = "";//微信联系人标签名 @@ -78,11 +79,11 @@ public class WeAccessibilityService extends AccessibilityService { public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, "onStartCommand: "); if (intent != null) { - mWechatInfo = (WechatInfo) intent.getSerializableExtra("WechatInfo"); - Log.e(TAG, "onStartCommand: wechatInfo = " + mWechatInfo); + mContact = (Contact) intent.getSerializableExtra("WechatInfo"); + Log.e(TAG, "onStartCommand: wechatInfo = " + mContact); mCallType = intent.getIntExtra("call_type", TYPE_VOICE); - mName = mWechatInfo.getNickName(); - String groupTag = mWechatInfo.getGroupTag(); + mName = mContact.getName(); + String groupTag = mContact.getTag(); if (TextUtils.isEmpty(groupTag)) { mTagName = TAG_NAME; } else { diff --git a/app/src/main/java/com/uiuios/aios/service/main/MainService.java b/app/src/main/java/com/uiuios/aios/service/main/MainService.java index dc332e5..45f8b86 100644 --- a/app/src/main/java/com/uiuios/aios/service/main/MainService.java +++ b/app/src/main/java/com/uiuios/aios/service/main/MainService.java @@ -15,7 +15,7 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.NetworkUtils; import com.uiuios.aios.BuildConfig; -import com.uiuios.aios.activity.NoticeActivity; +import com.uiuios.aios.activity.noti.NoticeActivity; import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.rx.BaseRxService; import com.uiuios.aios.alarm.AlarmClockData; diff --git a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java index abe06f3..25a644b 100644 --- a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java @@ -22,7 +22,6 @@ import androidx.annotation.RequiresApi; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; -import com.uiuios.aios.R; import com.uiuios.aios.activity.QuickAppActivity; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; @@ -99,10 +98,12 @@ public class ApkUtils { // this.add("com.android.documentsui"); // this.add("com.android.calculator2"); }}; + private static HashSet allHintPackage = new HashSet() {{ this.add("com.android.uiuios"); }}; - private static String TAG = ApkUtils.class.getSimpleName(); + + private static final String TAG = ApkUtils.class.getSimpleName(); public static ArrayList getSystemApp(Context context) { PackageManager pm = context.getPackageManager(); @@ -240,8 +241,12 @@ public class ApkUtils { resolveInfos.add(resolveInfo); } } else { - Log.e(TAG, "queryFilterAppInfo: pkgSet ! contains " + pkg); - AppStatusManager.getInstance().addHidedApp(pkg); + if ("com.uiuios.sn".equals(pkg)) { + resolveInfos.add(resolveInfo); + } else { + Log.e(TAG, "queryFilterAppInfo: pkgSet ! contains " + pkg); + AppStatusManager.getInstance().addHidedApp(pkg); + } } } else { if (allowPackages.contains(pkg) && !excludePackageName.contains(pkg)) { @@ -286,17 +291,17 @@ public class ApkUtils { List shortcutPkgInfos = ShortcutUtils.getInstance().getShortcutList(); desktopIcons.addAll(shortcutPkgInfos); - DesktopIcon dailyIcon = new DesktopIcon(); -// dailyIcon.setIcon(context.getDrawable(R.drawable.icon_daily_app)); - dailyIcon.setTitle("日常应用"); - dailyIcon.setPackage("aios.daily.app"); - desktopIcons.add(0, dailyIcon); +// DesktopIcon dailyIcon = new DesktopIcon(); +//// dailyIcon.setIcon(context.getDrawable(R.drawable.icon_daily_app)); +// dailyIcon.setTitle("日常应用"); +// dailyIcon.setPackage("aios.daily.app"); +// desktopIcons.add(0, dailyIcon); - DesktopIcon familyIcon = new DesktopIcon(); -// familyIcon.setIcon(context.getDrawable(R.drawable.com_android_appstore)); - familyIcon.setTitle("应用市场"); - familyIcon.setPackage("aios.appstore"); - desktopIcons.add(1, familyIcon); +// DesktopIcon familyIcon = new DesktopIcon(); +//// familyIcon.setIcon(context.getDrawable(R.drawable.com_android_appstore)); +// familyIcon.setTitle("应用市场"); +// familyIcon.setPackage("aios.appstore"); +// desktopIcons.add(0, familyIcon); // DesktopIcon exitIcon = new DesktopIcon(); // exitIcon.setIcon(context.getDrawable(R.drawable.exit_icon)); @@ -308,6 +313,106 @@ public class ApkUtils { return desktopIcons; } + public static final HashSet phoneShowPackageName = new HashSet() {{ + this.add("com.uiuios.sn"); +// this.add("com.uiuios.browser"); +// this.add("com.android.dialer"); +// this.add("com.android.gallery3d"); +// this.add("com.android.settings"); +// this.add("com.android.messaging"); +// this.add("com.android.camera2"); +// this.add("com.mediatek.camera"); +// this.add("com.android.mms"); +// this.add("com.uiui.city"); +// this.add("com.uiui.health"); + }}; + + public static ArrayList getAppstoreAppInfo(Context context) { + MMKV mmkv = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + PackageManager pm = context.getPackageManager(); + // 查询所有已经安装的应用程序 + List resolveInfos = new ArrayList<>(); + // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); + // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName + List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); + + Set allPackages = new HashSet(); + for (ResolveInfo resolveInfo : resolveinfoList) { + Log.i(TAG, "getAppstoreAppInfo: " + resolveInfo.activityInfo.packageName); + Log.i(TAG, "getAppstoreAppInfo class: " + resolveInfo.activityInfo.name); + allPackages.add(resolveInfo.activityInfo.packageName); + } + String pkgString = Settings.Global.getString(context.getContentResolver(), CommonConfig.UIUI_APPSTORE_PACKAGE_LIST); + Set pkgSet; + if (TextUtils.isEmpty(pkgString)) { + pkgSet = new ArraySet<>(); + } else { + pkgSet = new HashSet<>(new ArrayList<>(Arrays.asList(pkgString.split(",")))); + } + Log.e(TAG, "getAppstoreAppInfo: pkgSet = " + pkgSet); + int frist = mmkv.decodeInt(CommonConfig.UIUI_FIRST_OPEN, 0); + for (ResolveInfo resolveInfo : resolveinfoList) { + String pkg = resolveInfo.activityInfo.packageName; + if (AppStatusManager.getInstance().getHidedAppSet().contains(pkg)) { + Log.e(TAG, "getAppstoreAppInfo: hided = " + pkg); + continue; + } + if (frist == 0) { + if (pkgSet.contains(pkg)) { + if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } else { + if ("com.uiuios.sn".equals(pkg)) { + resolveInfos.add(resolveInfo); + } else { + Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); + AppStatusManager.getInstance().addHidedApp(pkg); + } + } + } else { + if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } + } + List sort1 = resolveInfos.stream().sorted(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + return Collator.getInstance(Locale.CHINESE).compare(o1.loadLabel(pm).toString(), o2.loadLabel(pm).toString()); + } + }).collect(Collectors.toList()); + List sort2 = sort1.stream().sorted(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + try { + if ((pm.getApplicationInfo(o1.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM) < (pm.getApplicationInfo(o2.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM)) { + return 1; + } else { + return -1; + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return 0; + } + }).collect(Collectors.toList()); + ArrayList desktopIcons = new ArrayList<>(); + for (ResolveInfo applicationInfo : sort2) { + if (!excludeClassName.contains(applicationInfo.activityInfo.name)) { + desktopIcons.add(DesktopIcon.creatDesktopIcon(context, applicationInfo)); + } + } + + List shortcutPkgInfos = ShortcutUtils.getInstance().getShortcutList(); + desktopIcons.addAll(shortcutPkgInfos); + + mmkv.encode(CommonConfig.UIUI_FIRST_OPEN, 1); + return desktopIcons; + } + public static boolean isSystemApp(Context context, String pkg) { PackageManager pm = context.getPackageManager(); ApplicationInfo applicationInfo = null; diff --git a/app/src/main/java/com/uiuios/aios/view/MyGridLayout.java b/app/src/main/java/com/uiuios/aios/view/MyGridLayout.java index 7adeb0b..8e5dbde 100644 --- a/app/src/main/java/com/uiuios/aios/view/MyGridLayout.java +++ b/app/src/main/java/com/uiuios/aios/view/MyGridLayout.java @@ -22,13 +22,14 @@ import static android.view.View.MeasureSpec.makeMeasureSpec; * @author zihao */ public class MyGridLayout extends ViewGroup { + private static final String TAG = MyGridLayout.class.getSimpleName(); + int margin = 0;// 每个格子的水平和垂直间隔 - int colums = 4;//列数 + int colums = 3;//列数 int rows = 3;//行数 int count = 0; private GridAdatper adapter; - private String TAG = MyGridLayout.class.getSimpleName(); @SuppressLint("Recycle") public MyGridLayout(Context context, AttributeSet attrs, int defStyle) { @@ -37,7 +38,7 @@ public class MyGridLayout extends ViewGroup { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MyGridLayout); // margin = a.getInteger(R.styleable.MyGridLayout_itemMargin, 2); - colums = a.getInteger(R.styleable.MyGridLayout_numColumns, 4); + colums = a.getInteger(R.styleable.MyGridLayout_numColumns, 3); rows = a.getInteger(R.styleable.MyGridLayout_numRows, 3); } } diff --git a/app/src/main/java/com/uiuios/aios/view/RulerSeekBar.java b/app/src/main/java/com/uiuios/aios/view/RulerSeekBar.java index 183707e..574af75 100644 --- a/app/src/main/java/com/uiuios/aios/view/RulerSeekBar.java +++ b/app/src/main/java/com/uiuios/aios/view/RulerSeekBar.java @@ -1,6 +1,5 @@ package com.uiuios.aios.view; - import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; @@ -10,7 +9,10 @@ import android.os.Build; import android.util.AttributeSet; import android.util.Log; -public class RulerSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { +import androidx.appcompat.widget.AppCompatSeekBar; + +public class RulerSeekBar extends AppCompatSeekBar { + private static final String TAG = RulerSeekBar.class.getSimpleName(); /** * 刻度线画笔 @@ -89,26 +91,26 @@ public class RulerSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { Rect rect = getThumb().getBounds(); thumbRadius = (rect.right - rect.left) / 2; } - Log.e("RulerSeekBar", "onDraw: thumbRadius = " + thumbRadius); + Log.e(TAG, "onDraw: thumbRadius = " + thumbRadius); //获取每一份的长度 int length = (getWidth() - getPaddingLeft() - getPaddingRight() - (mRulerCount + 1) * (radius) - thumbRadius * 2) / (mRulerCount + 1); - Log.e("RulerSeekBar", "onDraw: mRulerCount = " + mRulerCount); + Log.e(TAG, "onDraw: mRulerCount = " + mRulerCount); - Log.e("RulerSeekBar", "onDraw: getWidth = " + getWidth()); - Log.e("RulerSeekBar", "onDraw: getPaddingLeft = " + getPaddingLeft()); - Log.e("RulerSeekBar", "onDraw: getPaddingRight = " + getPaddingRight()); - Log.e("RulerSeekBar", "onDraw: length = " + length); + Log.e(TAG, "onDraw: getWidth = " + getWidth()); + Log.e(TAG, "onDraw: getPaddingLeft = " + getPaddingLeft()); + Log.e(TAG, "onDraw: getPaddingRight = " + getPaddingRight()); + Log.e(TAG, "onDraw: length = " + length); //计算刻度线的顶部坐标和底部坐标 - Log.e("RulerSeekBar", "onDraw: getHeight = " + getHeight()); - Log.e("RulerSeekBar", "onDraw: getMinimumHeight = " + getMinimumHeight()); + Log.e(TAG, "onDraw: getHeight = " + getHeight()); + Log.e(TAG, "onDraw: getMinimumHeight = " + getMinimumHeight()); int rulerTop = getHeight() / 2 - getMinimumHeight() / 2; int rulerBottom = rulerTop + getMinimumHeight(); - Log.e("RulerSeekBar", "onDraw: rulerTop = " + rulerTop); - Log.e("RulerSeekBar", "onDraw: rulerBottom = " + rulerBottom); + Log.e(TAG, "onDraw: rulerTop = " + rulerTop); + Log.e(TAG, "onDraw: rulerBottom = " + rulerBottom); int center = getHeight() / 2; //获取滑块的位置信息 @@ -116,13 +118,16 @@ public class RulerSeekBar extends androidx.appcompat.widget.AppCompatSeekBar { if (getThumb() != null) { thumbRect = getThumb().getBounds(); } - Log.e("RulerSeekBar", "onDraw: thumbRect = " + thumbRect); + Log.e(TAG, "onDraw: thumbRect = " + thumbRect); //绘制刻度线 for (int i = 0; i <= mRulerCount + 1; i++) { + if (getProgress() == i) { + continue; + } //计算刻度线的左边坐标和右边坐标 int rulerLeft = i * length + getPaddingLeft(); - Log.e("RulerSeekBar", "onDraw: rulerLeft = " + rulerLeft); + Log.e(TAG, "onDraw: rulerLeft = " + rulerLeft); int rulerRight = rulerLeft + mRulerWidth; //判断是否需要绘制刻度线 diff --git a/app/src/main/res/drawable-hdpi/icon_add.png b/app/src/main/res/drawable-hdpi/icon_add.png index f66956c..0ee1422 100644 Binary files a/app/src/main/res/drawable-hdpi/icon_add.png and b/app/src/main/res/drawable-hdpi/icon_add.png differ diff --git a/app/src/main/res/drawable/home_alarm_bg.xml b/app/src/main/res/drawable/home_alarm_bg.xml new file mode 100644 index 0000000..97b942a --- /dev/null +++ b/app/src/main/res/drawable/home_alarm_bg.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_bg.xml b/app/src/main/res/drawable/home_card_bg.xml new file mode 100644 index 0000000..0c6896f --- /dev/null +++ b/app/src/main/res/drawable/home_card_bg.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_progress_default.xml b/app/src/main/res/drawable/seekbar_progress_default.xml index 47fed2c..30e5bfb 100644 --- a/app/src/main/res/drawable/seekbar_progress_default.xml +++ b/app/src/main/res/drawable/seekbar_progress_default.xml @@ -36,7 +36,7 @@ - + diff --git a/app/src/main/res/drawable/shape_progress_drawable.xml b/app/src/main/res/drawable/shape_progress_drawable.xml index fae0676..fe8aa21 100644 --- a/app/src/main/res/drawable/shape_progress_drawable.xml +++ b/app/src/main/res/drawable/shape_progress_drawable.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index c2d9740..7d73b79 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -31,8 +31,8 @@ android:id="@+id/cl_weather" android:layout_width="@dimen/dp_157" android:layout_height="@dimen/dp_96" - android:onClick="@{click::toWeather}" android:background="@drawable/custom_bg_weather" + android:onClick="@{click::toWeather}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -170,8 +170,8 @@ android:layout_width="@dimen/dp_115" android:layout_height="@dimen/dp_142" android:layout_marginStart="@dimen/dp_13" - android:onClick="@{click::toVideoplayer}" android:background="@drawable/bg_black_transparent" + android:onClick="@{click::toVideoplayer}" app:layout_constraintStart_toEndOf="@+id/cl_weather" app:layout_constraintTop_toTopOf="parent"> @@ -288,6 +288,20 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + @@ -367,8 +381,8 @@ android:layout_width="@dimen/dp_109" android:layout_height="@dimen/dp_71" android:layout_marginStart="@dimen/dp_13" - android:onClick="@{click::toSos}" android:background="@drawable/bg_black_transparent" + android:onClick="@{click::toSos}" app:layout_constraintStart_toEndOf="@+id/cl_clear" app:layout_constraintTop_toTopOf="parent"> @@ -434,9 +448,9 @@ @@ -257,6 +255,60 @@ + + + + + + + + + + + + + @@ -274,12 +327,25 @@ android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/dp_12" - android:layout_marginTop="@dimen/dp_6" - android:text="爱心闹钟" + android:layout_marginBottom="@dimen/dp_8" + android:text="我的闹钟" android:textColor="@color/white" android:textSize="@dimen/sp_16" android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> + + @@ -292,77 +358,24 @@ android:layout_marginEnd="@dimen/dp_16" android:onClick="@{click::getAlarmClock}" android:overScrollMode="never" - app:layout_constraintBottom_toBottomOf="parent" + android:visibility="gone" + app:layout_constraintBottom_toTopOf="@+id/textView3" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView3" /> + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/textView3" /> @@ -376,6 +389,7 @@ android:layout_weight="1" android:background="@drawable/bg_black_transparent" android:onClick="@{click::toSos}" + android:visibility="gone" app:layout_constraintStart_toEndOf="@+id/cl_clear" app:layout_constraintTop_toTopOf="parent"> @@ -387,7 +401,7 @@ android:layout_marginTop="@dimen/dp_6" android:text="紧急呼叫" android:textColor="@color/white" - android:textSize="@dimen/sp_9" + android:textSize="@dimen/sp_16" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -408,37 +422,122 @@ - + android:layout_weight="2" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> @@ -470,102 +569,50 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="@dimen/dp_6" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_app" /> + + + + + + + + - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_add_alarm.xml b/app/src/main/res/layout/activity_add_alarm.xml index dfa9d34..e4783b1 100644 --- a/app/src/main/res/layout/activity_add_alarm.xml +++ b/app/src/main/res/layout/activity_add_alarm.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/gray" - tools:context=".activity.alarmclock.AlarmClockAddActivity"> + tools:context=".activity.alarmclock.add.AlarmClockAddActivity"> + android:background="@color/gray"> + tools:context=".activity.alarmclock.add.port.PortAlarmClockAddActivity"> + type="com.uiuios.aios.activity.alarmclock.add.port.PortAlarmClockAddActivity.Click" /> @@ -20,7 +20,7 @@ @@ -36,8 +36,8 @@ - - - - + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintBottom_toTopOf="@+id/tv_add" + app:layout_constraintTop_toBottomOf="@+id/cl_exit"> + android:layout_height="@dimen/dp_200" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginEnd="@dimen/dp_8" + android:layout_marginBottom="@dimen/dp_8" + android:background="@drawable/add_alarm_background"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginEnd="@dimen/dp_8" + android:layout_marginBottom="@dimen/dp_8" + android:background="@drawable/add_alarm_background" + android:visibility="gone"> + + + + + + + + + + + + - + - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_add_contact.xml b/app/src/main/res/layout/activity_add_contact.xml index cb5b161..164a250 100644 --- a/app/src/main/res/layout/activity_add_contact.xml +++ b/app/src/main/res/layout/activity_add_contact.xml @@ -1,284 +1,297 @@ - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent"> + android:layout_height="@dimen/dp_48" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_wechat_contact.xml b/app/src/main/res/layout/activity_add_wechat_contact.xml index d730cbe..951e6bd 100644 --- a/app/src/main/res/layout/activity_add_wechat_contact.xml +++ b/app/src/main/res/layout/activity_add_wechat_contact.xml @@ -2,13 +2,13 @@ + tools:context=".activity.contact.AddWechatContactActivity"> + type="com.uiuios.aios.activity.contact.AddWechatContactActivity.BtnClick" /> + + + + + + + + - + tools:context=".activity.alarm.main.AlarmActivity"> + + + + android:background="@color/alarm_background_color"> + - - - + + + + + + + + + android:orientation="vertical" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/cl_exit"> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + app:layout_constraintStart_toStartOf="parent" /> + + + + + + + + + + + + - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_clock.xml b/app/src/main/res/layout/activity_alarm_clock.xml index d7c1179..93cbf5d 100644 --- a/app/src/main/res/layout/activity_alarm_clock.xml +++ b/app/src/main/res/layout/activity_alarm_clock.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activity.alarmclock.AlarmClockActivity"> + tools:context=".activity.alarmclock.main.AlarmClockActivity"> - + tools:context=".activity.noti.NoticeActivity"> + + + + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_notice_info.xml b/app/src/main/res/layout/activity_notice_info.xml index 8aaafad..25dfb1f 100644 --- a/app/src/main/res/layout/activity_notice_info.xml +++ b/app/src/main/res/layout/activity_notice_info.xml @@ -1,89 +1,99 @@ - + tools:context=".activity.noti.NoticeInfoActivity" + xmlns:tools="http://schemas.android.com/tools"> - + + + + android:layout_width="match_parent" + android:layout_height="match_parent" + > - + + + + + + + + + + + + + +