diff --git a/app/build.gradle b/app/build.gradle index b93cc1f..8ee853d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.uiuios.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 52 - versionName "6.1" + versionCode 53 + versionName "6.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -27,7 +27,7 @@ android { } manifestPlaceholders = [ - AMAP_KEY : "372937d213ff288dc150c31967a200cd" + AMAP_KEY: "372937d213ff288dc150c31967a200cd" ] } @@ -121,6 +121,7 @@ dependencies { implementation "androidx.fragment:fragment:1.4.1" implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.preference:preference:1.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 50a6e00..28d9760 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,6 +32,7 @@ + @@ -141,7 +142,7 @@ - - + + - - + + + + + android:launchMode="singleTask" + android:screenOrientation="portrait" /> @@ -230,7 +239,7 @@ android:screenOrientation="portrait" android:theme="@style/activity_styles" /> { private static final String TAG = AddItemActivity.class.getSimpleName(); - @BindView(R.id.tv_app_name) - TextView tv_app_name; - @BindView(R.id.iv_icon) - ImageView iv_icon; - @BindView(R.id.tv_add) - TextView tv_add; - @BindView(R.id.tv_cancel) - TextView tv_cancel; - int mIconDpi = 1000; @@ -56,9 +49,18 @@ public class AddItemActivity extends BaseDataBindingActivity { private ShortcutPkgInfo mShortcutPkgInfo; + + @Override + protected int getLayoutId() { + return R.layout.activity_add_item; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.add_item_confirmation_activity); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -66,14 +68,13 @@ public class AddItemActivity extends BaseDataBindingActivity { */ @Override public void initView() { - ButterKnife.bind(this); - tv_cancel.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); - tv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -117,9 +118,9 @@ public class AddItemActivity extends BaseDataBindingActivity { mId = mInfo.getId(); mPackageName = mInfo.getPackage(); mTitle = mInfo.getShortLabel().toString(); - tv_app_name.setText(mTitle); + mViewDataBinding.tvAppName.setText(mTitle); Drawable d = getSystemService(LauncherApps.class).getShortcutIconDrawable(mInfo, mIconDpi); - iv_icon.setImageDrawable(d); + mViewDataBinding.ivIcon.setImageDrawable(d); mComponentName = mInfo.getActivity(); // Drawable icon = getFullResIcon(mAppWidgetProviderInfo.provider.getPackageName(), mAppWidgetProviderInfo.icon); // RemoteViews remoteViews = getPreview(mRequest); @@ -165,4 +166,6 @@ public class AddItemActivity extends BaseDataBindingActivity { ? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon, iconDpi); } + + } diff --git a/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java b/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java new file mode 100644 index 0000000..c8b39d3 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/additem/AddItemViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.additem; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddItemBinding; + +public class AddItemViewModel extends BaseViewModel { + + @Override + public ActivityAddItemBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java index 56971f8..e0f9cde 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmActivity.java @@ -3,13 +3,9 @@ package com.uiuios.aios.activity.alarm.main; import android.content.Intent; import android.util.Log; import android.view.View; -import android.widget.ImageView; import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; @@ -19,64 +15,34 @@ 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.BaseDataBindingActivity; +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 java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class AlarmActivity extends BaseDataBindingActivity implements AlarmContact.AlarmView { +public class AlarmActivity extends BaseMvvmActivity { private static final String TAG = AlarmActivity.class.getSimpleName(); - @BindView(R.id.cl_exit) - ConstraintLayout cl_exit; - @BindView(R.id.cl_all) - ConstraintLayout cl_all; - @BindView(R.id.cl_medicine) - ConstraintLayout cl_medicine; - @BindView(R.id.cl_look) - ConstraintLayout cl_look; - @BindView(R.id.cl_reserve) - ConstraintLayout cl_reserve; - @BindView(R.id.imageView1) - ImageView imageView1; - @BindView(R.id.imageView3) - ImageView imageView3; - @BindView(R.id.imageView5) - ImageView imageView5; - @BindView(R.id.imageView7) - ImageView imageView7; - - @BindView(R.id.rv_data) - RecyclerView rv_data; - @BindView(R.id.cl_nodata) - ConstraintLayout cl_nodata; - - @BindView(R.id.imageView2) - ImageView imageView2; - @BindView(R.id.imageView4) - ImageView imageView4; - @BindView(R.id.imageView6) - ImageView imageView6; - @BindView(R.id.imageView8) - ImageView imageView8; - - @BindView(R.id.iv_add) - ImageView iv_add; - - private AlarmPresenter mPresenter; private AlarmAdapter mAlarmAdapter; private int mType = 0; + @Override + protected int getLayoutId() { + return R.layout.activity_alarm; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_alarm); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -84,11 +50,6 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta */ @Override public void initView() { - ButterKnife.bind(this); - mPresenter = new AlarmPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - mAlarmAdapter = new AlarmAdapter(); mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() { @Override @@ -96,45 +57,45 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta showDialog(alarmClockData); } }); - rv_data.setLayoutManager(new LinearLayoutManager(AlarmActivity.this)); - rv_data.setAdapter(mAlarmAdapter); + mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(AlarmActivity.this)); + mViewDataBinding.rvData.setAdapter(mAlarmAdapter); switchItem(0); - cl_exit.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); - cl_all.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(0); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_medicine.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clMedicine.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(1); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_look.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clLook.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(2); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - cl_reserve.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clReserve.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switchItem(3); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AlarmActivity.this, AlarmClockAddActivity.class)); @@ -147,60 +108,82 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta */ @Override public void initData() { - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClockDataData().observe(this, new androidx.lifecycle.Observer>() { + @Override + public void onChanged(List alarmClockData) { + List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm(); + Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm); + if (alarmClockData != null) { + localAddAlarm.addAll(alarmClockData); + } + if (localAddAlarm.size() == 0) { + mAlarmAdapter.setAlarmClockData(null); +// swipeRefreshLayout.setRefreshing(false); + mViewDataBinding.clNodata.setVisibility(View.VISIBLE); + mViewDataBinding.rvData.setVisibility(View.GONE); + Toaster.show("没有数据"); + } else { + mAlarmAdapter.setAlarmClockData(localAddAlarm); +// swipeRefreshLayout.setRefreshing(false); + mViewDataBinding.clNodata.setVisibility(View.GONE); + mViewDataBinding.rvData.setVisibility(View.VISIBLE); + } + } + }); + mViewModel.getAlarmClock(mType); } @Override protected void onResume() { super.onResume(); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } private void switchItem(int position) { mType = position; - cl_all.setBackground(null); - cl_medicine.setBackground(null); - cl_look.setBackground(null); - cl_reserve.setBackground(null); + mViewDataBinding.clAll.setBackground(null); + mViewDataBinding.clMedicine.setBackground(null); + mViewDataBinding.clLook.setBackground(null); + mViewDataBinding.clReserve.setBackground(null); - imageView2.setImageDrawable(null); - imageView4.setImageDrawable(null); - imageView6.setImageDrawable(null); - imageView8.setImageDrawable(null); + mViewDataBinding.imageView2.setImageDrawable(null); + mViewDataBinding.imageView4.setImageDrawable(null); + mViewDataBinding.imageView6.setImageDrawable(null); + mViewDataBinding.imageView8.setImageDrawable(null); switch (position) { case 0: default: // cl_all.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 1: // cl_medicine.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 2: // cl_look.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); + mViewDataBinding.imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve)); break; case 3: // cl_reserve.setBackground(getDrawable(R.drawable.alarm_pressed_background)); - imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch)); - imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); - imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); - imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); - imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed)); + mViewDataBinding.imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch)); + mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all)); + mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine)); + mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look)); + mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed)); break; } } @@ -231,7 +214,7 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta if (alarmClockData.isIs_local()) { alarmClockData.setDeleted(true); AlarmUtils.getInstance().deleteAlarmClock(alarmClockData); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } else { NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId()) .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) @@ -263,36 +246,10 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta @Override public void onComplete() { Log.e("deleteAlarm", "onComplete: "); - mPresenter.getAlarmClock(mType); + mViewModel.getAlarmClock(mType); } }); } } - - @Override - public void setAlarmClock(List alarmClockData) { - List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm(); - Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm); - if (alarmClockData != null) { - localAddAlarm.addAll(alarmClockData); - } - if (localAddAlarm.size() == 0) { - mAlarmAdapter.setAlarmClockData(null); -// swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.VISIBLE); - rv_data.setVisibility(View.GONE); - Toaster.show("没有数据"); - } else { - mAlarmAdapter.setAlarmClockData(localAddAlarm); -// swipeRefreshLayout.setRefreshing(false); - cl_nodata.setVisibility(View.GONE); - rv_data.setVisibility(View.VISIBLE); - } - } - - @Override - public void setAlarmClockEmpty() { - - } } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java deleted file mode 100644 index fa169d1..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmContact.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.uiuios.aios.activity.alarm.main; - -import com.uiuios.aios.alarm.AlarmClockData; -import com.uiuios.aios.base.mvp.BasePresenter; -import com.uiuios.aios.base.mvp.BaseView; - -import java.util.List; - -public class AlarmContact { - public interface Presenter extends BasePresenter { - void getAlarmClock(); - - void getAlarmClock(int type); - } - - public interface AlarmView extends BaseView { - void setAlarmClock(List alarmClockData); - - void setAlarmClockEmpty(); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java similarity index 71% rename from app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java rename to app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java index 298115a..9ff36a5 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmPresenter.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarm/main/AlarmViewModel.java @@ -1,11 +1,14 @@ package com.uiuios.aios.activity.alarm.main; -import android.content.Context; import android.util.Log; +import androidx.lifecycle.MutableLiveData; + import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.alarm.AlarmClockData; +import com.uiuios.aios.base.mvvm.BaseViewModel; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityAlarmBinding; import com.uiuios.aios.network.NetInterfaceManager; import java.util.List; @@ -13,40 +16,22 @@ import java.util.List; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.subjects.BehaviorSubject; -public class AlarmPresenter implements AlarmContact.Presenter { - private static final String TAG = AlarmPresenter.class.getSimpleName(); - - private AlarmContact.AlarmView mView; - private Context mContext; - - AlarmPresenter(Context context) { - this.mContext = context; - } - - private BehaviorSubject lifecycle; - - void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } +public class AlarmViewModel extends BaseViewModel { @Override - public void attachView(@NonNull AlarmContact.AlarmView view) { - this.mView = view; + public ActivityAlarmBinding getVDBinding() { + return binding; } + private static final String TAG = AlarmViewModel.class.getSimpleName(); + @Override - public void detachView() { - this.mView = null; + public void onDestroy() { + } - @Override public void getAlarmClock() { NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { @Override @@ -70,7 +55,12 @@ public class AlarmPresenter implements AlarmContact.Presenter { }); } - @Override + private MutableLiveData> mAlarmClockDataData = new MutableLiveData<>(); + + public MutableLiveData> getAlarmClockDataData() { + return mAlarmClockDataData; + } + public void getAlarmClock(int type) { Log.e(TAG, "getAlarmClock: " + type); NetInterfaceManager.getInstance().getAlarmClockObservable(type) @@ -83,7 +73,7 @@ public class AlarmPresenter implements AlarmContact.Presenter { @Override public void onNext(@NonNull BaseResponse> listBaseResponse) { Log.e("getAlarmClock", "onNext: " + listBaseResponse); - mView.setAlarmClock(listBaseResponse.data); + mAlarmClockDataData.setValue(listBaseResponse.data); } @Override diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java index 8cb67ba..238a767 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddActivity.java @@ -9,15 +9,9 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.PopupWindow; -import android.widget.RadioButton; import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; - import com.bigkoo.pickerview.builder.TimePickerBuilder; import com.bigkoo.pickerview.listener.CustomListener; import com.bigkoo.pickerview.listener.OnTimeSelectListener; @@ -30,19 +24,18 @@ 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.shehuan.niv.NiceImageView; import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.alarm.AlarmUtils; import com.uiuios.aios.base.GlideEngine; -import com.uiuios.aios.base.mvp.BaseMvpActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; import com.uiuios.aios.service.main.MainService; import com.uiuios.aios.utils.FFmpegUtils; import com.uiuios.aios.utils.FileUtil; import com.uiuios.aios.utils.ScreenUtil; import com.uiuios.aios.utils.TimeUtils; - import com.uiuios.aios.utils.Utils; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; @@ -55,8 +48,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; -import butterknife.BindView; -import butterknife.ButterKnife; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; @@ -64,42 +55,9 @@ import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -public class AlarmClockAddActivity extends BaseMvpActivity { +public class AlarmClockAddActivity extends BaseMvvmActivity { private static final String TAG = AlarmClockAddActivity.class.getSimpleName(); - @BindView(R.id.cl_content) - ConstraintLayout cl_content; - @BindView(R.id.ll_type) - LinearLayout ll_type; - @BindView(R.id.cl_type) - ConstraintLayout cl_type; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.cl_pic) - ConstraintLayout cl_pic; - @BindView(R.id.et_activation) - EditText et_activation; - @BindView(R.id.nv_pic) - NiceImageView nv_pic; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_duration) - TextView tv_duration; - - @BindView(R.id.rb1) - RadioButton rb1; - @BindView(R.id.rb2) - RadioButton rb2; - @BindView(R.id.rb_all) - RadioButton rb_all; - @BindView(R.id.rb_look) - RadioButton rb_look; - @BindView(R.id.rb_reserve) - RadioButton rb_reserve; - - @BindView(R.id.iv_add) - ImageView iv_add; - private PopupWindow mPopupWindow; private TimePickerView pvTime; @@ -115,6 +73,14 @@ public class AlarmClockAddActivity extends BaseMvpActivity { return R.layout.activity_add_alarm; } + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + @Override public void initView() { getLifecycleSubject().onNext(ActivityEvent.CREATE); @@ -123,95 +89,94 @@ public class AlarmClockAddActivity extends BaseMvpActivity { .fitWindow(true) .apply(); - ButterKnife.bind(this); initTimePicker(); - rb1.setChecked(true); - rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb1.setChecked(true); + mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { if (isChecked) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); mDayType = 1; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); } } }); - rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { if (isChecked) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); mDayType = 2; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); } } }); - rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 1; - et_activation.setText("用药闹钟"); + mViewDataBinding.etActivation.setText("用药闹钟"); } else { } } }); - rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 2; - et_activation.setText("接送闹钟"); + mViewDataBinding.etActivation.setText("接送闹钟"); } else { } } }); - rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { mClockType = 3; - et_activation.setText("预约闹钟"); + mViewDataBinding.etActivation.setText("预约闹钟"); } else { } } }); - cl_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - cl_type.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // showTimeFilterWindow(); } }); - nv_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkContent(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -237,7 +202,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 1; - tv_type.setText("只响一次"); + mViewDataBinding.tvType.setText("只响一次"); mPopupWindow.dismiss(); } }); @@ -245,7 +210,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 2; - tv_type.setText("每天"); + mViewDataBinding.tvType.setText("每天"); mPopupWindow.dismiss(); } }); @@ -253,7 +218,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 3; - tv_type.setText("周一至周五"); + mViewDataBinding.tvType.setText("周一至周五"); mPopupWindow.dismiss(); } }); @@ -261,7 +226,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onClick(View view) { mDayType = 4; - tv_type.setText("周六至周日"); + mViewDataBinding.tvType.setText("周六至周日"); mPopupWindow.dismiss(); } }); @@ -269,11 +234,11 @@ public class AlarmClockAddActivity extends BaseMvpActivity { if (mPopupWindow.isShowing()) { mPopupWindow.dismiss(); } else { - Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop()); - Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop()); - mPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop()); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop()); + mPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0); } } @@ -282,7 +247,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { private void checkContent() { pvTime.returnData(); - if (TextUtils.isEmpty(et_activation.getText())) { + if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) { Toaster.show("请输入标题"); return; } @@ -304,7 +269,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { alarmClockData.setFile(mPictrueFilePath); alarmClockData.setType(mDayType); alarmClockData.setTime(timeStamp); - alarmClockData.setTitle(et_activation.getText().toString()); + alarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString()); alarmClockData.setRemind_type(0); alarmClockData.setIs_onoff(1); alarmClockData.setClazz(mClockType); @@ -313,7 +278,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { params.put("sn", Utils.getSerial()); params.put("time", timeStamp); params.put("type", String.valueOf(mDayType)); - params.put("title", et_activation.getText().toString()); + params.put("title", mViewDataBinding.etActivation.getText().toString()); params.put("remind_type", "0"); params.put("is_onoff", "1"); params.put("class", String.valueOf(mClockType)); @@ -390,9 +355,9 @@ public class AlarmClockAddActivity extends BaseMvpActivity { File file = new File(mPictrueFilePath); if (file.exists()) { RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockAddActivity.this, 8F))); - Glide.with(nv_pic).load(file).apply(options).into(nv_pic); - nv_pic.setVisibility(View.VISIBLE); - cl_pic.setVisibility(View.GONE); + Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); if (FileUtil.isVideoFile(mPictrueFilePath)) { FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer() { @Override @@ -403,7 +368,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity { @Override public void onNext(@NonNull Integer integer) { Log.e("openSelector", "onNext: " + integer); - tv_duration.setText(TimeUtils.secToTime(integer)); + mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer)); } @Override @@ -417,12 +382,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity { } }); } else { - tv_duration.setText(""); + mViewDataBinding.tvDuration.setText(""); } } else { mPictrueFilePath = ""; - nv_pic.setVisibility(View.GONE); - cl_pic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); } } @@ -466,12 +431,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity { .setContentTextSize(30) .setDate(selectedDate) .setRangDate(startDate, selectedDate) - .setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 + .setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 .setOutSideColor(0x00000000) .setOutSideCancelable(false) .build(); pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉 - pvTime.show(cl_content, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view + pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java new file mode 100644 index 0000000..b4f81ec --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/AlarmClockAddViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.alarmclock.add; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; + +public class AlarmClockAddViewModel extends BaseViewModel { + + @Override + public ActivityAddAlarmBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java index 4b83f2b..3bd13b8 100644 --- a/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/add/port/PortAlarmClockAddActivity.java @@ -83,7 +83,6 @@ public class PortAlarmClockAddActivity extends BaseMvvmActivity { - +public class AlarmClockEditActivity extends BaseMvvmActivity { 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; - @BindView(R.id.ll_type) - LinearLayout ll_type; - @BindView(R.id.cl_type) - ConstraintLayout cl_type; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.cl_pic) - ConstraintLayout cl_pic; - @BindView(R.id.et_activation) - EditText et_activation; - @BindView(R.id.nv_pic) - NiceImageView nv_pic; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_duration) - TextView tv_duration; - - @BindView(R.id.rb1) - RadioButton rb1; - @BindView(R.id.rb2) - RadioButton rb2; - @BindView(R.id.rb_all) - RadioButton rb_all; - @BindView(R.id.rb_look) - RadioButton rb_look; - @BindView(R.id.rb_reserve) - RadioButton rb_reserve; - - @BindView(R.id.iv_add) - ImageView iv_add; - private PopupWindow mMenuPopupWindow; private TimePickerView pvTime; @@ -128,132 +73,77 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc private int mId; private AlarmClockData mAlarmClockData; + @Override - @androidx.annotation.NonNull - @CheckResult - public final Observable lifecycle() { - return lifecycleSubject.hide(); + protected int getLayoutId() { + return R.layout.activity_add_alarm; } @Override - @androidx.annotation.NonNull - @CheckResult - public final LifecycleTransformer bindUntilEvent(@androidx.annotation.NonNull ActivityEvent event) { - return RxLifecycle.bindUntilEvent(lifecycleSubject, event); + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override - @androidx.annotation.NonNull - @CheckResult - public final LifecycleTransformer bindToLifecycle() { - return RxLifecycleAndroid.bindActivity(lifecycleSubject); - } - - @Override - @CallSuper - protected void onStart() { - super.onStart(); - lifecycleSubject.onNext(ActivityEvent.START); - } - - @Override - @CallSuper - protected void onResume() { - super.onResume(); - lifecycleSubject.onNext(ActivityEvent.RESUME); - } - - @Override - @CallSuper - protected void onPause() { - lifecycleSubject.onNext(ActivityEvent.PAUSE); - super.onPause(); - } - - @Override - @CallSuper - protected void onStop() { - lifecycleSubject.onNext(ActivityEvent.STOP); - super.onStop(); - } - - @Override - @CallSuper - protected void onDestroy() { - lifecycleSubject.onNext(ActivityEvent.DESTROY); - super.onDestroy(); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_alarm); - lifecycleSubject.onNext(ActivityEvent.CREATE); - UltimateBarX.statusBarOnly(this) - .colorRes(R.color.default_blue) - .fitWindow(true) - .apply(); - initView(); - initData(); - } - - private void initView() { - ButterKnife.bind(this); + public void initView() { // tv_title.setText("编辑闹钟"); initTimePicker(); - cl_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - cl_type.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // showTimeFilterWindow(); } }); - nv_pic.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openSelector(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); mDayType = 1; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb1.setTextColor(colorStateList); + mViewDataBinding.rb1.setTextColor(colorStateList); } } }); - rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { ColorStateList colorStateList = getResources().getColorStateList(R.color.white); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); mDayType = 2; } else { ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray); - rb2.setTextColor(colorStateList); + mViewDataBinding.rb2.setTextColor(colorStateList); } } }); - rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -263,7 +153,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -273,7 +163,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { @@ -283,7 +173,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } } }); - iv_add.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkContent(); @@ -291,7 +181,8 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc }); } - private void initData() { + @Override + public void initData() { Intent intent = getIntent(); if (intent == null) { Toaster.show("获取闹钟信息失败"); @@ -308,7 +199,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc AlarmClockData alarmClockData = clockDataHashMap.get(mId); if (alarmClockData == null || !alarmClockData.isIs_local()) { NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) .subscribe(new Observer>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -355,33 +246,33 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc switch (mDayType) { default: case AlarmUtils.ONCE: - rb1.setChecked(true); -// tv_type.setText("只响一次"); + mViewDataBinding.rb1.setChecked(true); +// tvType.setText("只响一次"); break; case AlarmUtils.LOOP: - rb2.setChecked(true); -// tv_type.setText("每天"); + mViewDataBinding.rb2.setChecked(true); +// tvType.setText("每天"); break; // case AlarmUtils.WORKING_DAY: // rb3.setChecked(true); -// tv_type.setText("周一至周五"); +// tvType.setText("周一至周五"); // break; // case AlarmUtils.OFF_DAY: // rb4.setChecked(true); -// tv_type.setText("周六至周日"); +// tvType.setText("周六至周日"); // break; } mClockType = alarmClockData.getClazz(); switch (mClockType) { case 1: default: - rb_all.setChecked(true); + mViewDataBinding.rbAll.setChecked(true); break; case 2: - rb_look.setChecked(true); + mViewDataBinding.rbLook.setChecked(true); break; case 3: - rb_reserve.setChecked(true); + mViewDataBinding.rbReserve.setChecked(true); break; } String time = alarmClockData.getTime(); @@ -391,28 +282,28 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc Log.e(TAG, "setAlarmClockInfo: " + date.getTimeInMillis()); pvTime.setDate(date); String title = alarmClockData.getTitle(); - et_activation.setText(title); + mViewDataBinding.etActivation.setText(title); String fileUrl = alarmClockData.getFile(); mPictrueFilePath = fileUrl; String fileName = Utils.getFileNamefromURL(fileUrl); File file = new File(Utils.getDownLoadPath(AlarmClockEditActivity.this) + fileName); if (TextUtils.isEmpty(fileUrl)) { - cl_pic.setVisibility(View.VISIBLE); - nv_pic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); } else { if (file.exists() && !file.isDirectory()) { - GlideLoadUtils.getInstance().glideLoad(this, file, nv_pic); + GlideLoadUtils.getInstance().glideLoad(this, file, mViewDataBinding.nvPic); } else { - GlideLoadUtils.getInstance().glideLoad(this, fileUrl, nv_pic); + GlideLoadUtils.getInstance().glideLoad(this, fileUrl, mViewDataBinding.nvPic); } - cl_pic.setVisibility(View.GONE); - nv_pic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); } } private void checkContent() { pvTime.returnData(); - if (TextUtils.isEmpty(et_activation.getText())) { + if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) { Toaster.show("请输入标题"); return; } @@ -442,7 +333,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc mAlarmClockData.setId(mId); mAlarmClockData.setType(mDayType); mAlarmClockData.setTime(timeStamp); - mAlarmClockData.setTitle(et_activation.getText().toString()); + mAlarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString()); mAlarmClockData.setFile(mPictrueFilePath); mAlarmClockData.setRemind_type(0); mAlarmClockData.setIs_onoff(1); @@ -455,7 +346,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc params.put("id", String.valueOf(mId)); params.put("type", String.valueOf(mDayType)); params.put("time", timeStamp); - params.put("title", et_activation.getText().toString()); + params.put("title", mViewDataBinding.etActivation.getText().toString()); params.put("remind_type", "0"); params.put("is_onoff", "1"); params.put("class", String.valueOf(mClockType)); @@ -479,13 +370,13 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc finish(); } else { NetInterfaceManager.getInstance().getAlarmClockEditObservable(params, body) - .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY)) + .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { Log.e("checkContent", "onSubscribe: "); Toaster.show("正在上传"); - iv_add.setEnabled(false); + mViewDataBinding.ivAdd.setEnabled(false); } @Override @@ -515,7 +406,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onComplete() { Log.e("checkContent", "onComplete: "); - iv_add.setEnabled(true); + mViewDataBinding.ivAdd.setEnabled(true); finish(); mLoadingDialog.close(); } @@ -537,7 +428,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 1; - tv_type.setText("只响一次"); + mViewDataBinding.tvType.setText("只响一次"); mMenuPopupWindow.dismiss(); } }); @@ -545,7 +436,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 2; - tv_type.setText("每天"); + mViewDataBinding.tvType.setText("每天"); mMenuPopupWindow.dismiss(); } }); @@ -553,7 +444,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 3; - tv_type.setText("周一至周五"); + mViewDataBinding.tvType.setText("周一至周五"); mMenuPopupWindow.dismiss(); } }); @@ -561,7 +452,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onClick(View view) { mDayType = 4; - tv_type.setText("周六至周日"); + mViewDataBinding.tvType.setText("周六至周日"); mMenuPopupWindow.dismiss(); } }); @@ -569,11 +460,11 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc if (mMenuPopupWindow.isShowing()) { mMenuPopupWindow.dismiss(); } else { - Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop()); - Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight()); - Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop()); - mMenuPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop()); + Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight()); + Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop()); + mMenuPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0); } } @@ -589,9 +480,9 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc File file = new File(mPictrueFilePath); if (file.exists()) { RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockEditActivity.this, 8F))); - Glide.with(nv_pic).load(file).apply(options).into(nv_pic); - nv_pic.setVisibility(View.VISIBLE); - cl_pic.setVisibility(View.GONE); + Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic); + mViewDataBinding.nvPic.setVisibility(View.VISIBLE); + mViewDataBinding.clPic.setVisibility(View.GONE); if (FileUtil.isVideoFile(mPictrueFilePath)) { FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer() { @Override @@ -602,7 +493,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc @Override public void onNext(@NonNull Integer integer) { Log.e("openSelector", "onNext: " + integer); - tv_duration.setText(TimeUtils.secToTime(integer)); + mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer)); } @Override @@ -616,12 +507,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc } }); } else { - tv_duration.setText(""); + mViewDataBinding.tvDuration.setText(""); } } else { mPictrueFilePath = ""; - nv_pic.setVisibility(View.GONE); - cl_pic.setVisibility(View.VISIBLE); + mViewDataBinding.nvPic.setVisibility(View.GONE); + mViewDataBinding.clPic.setVisibility(View.VISIBLE); } } @@ -665,12 +556,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc .setContentTextSize(30) .setDate(selectedDate) .setRangDate(startDate, selectedDate) - .setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 + .setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中 .setOutSideColor(0x00000000) .setOutSideCancelable(false) .build(); pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉 - pvTime.show(cl_content, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view + pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view } diff --git a/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java new file mode 100644 index 0000000..75deb3b --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/edit/AlarmClockEditViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.alarmclock.edit; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityAddAlarmBinding; + +public class AlarmClockEditViewModel extends BaseViewModel { + + @Override + public ActivityAddAlarmBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java b/app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java similarity index 55% rename from app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java rename to app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java index a14c830..bca3c37 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ArticleActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/article/ArticleActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.article; import android.content.Intent; import android.graphics.Bitmap; @@ -7,42 +7,35 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.transition.Transition; -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.ArticleInfo; +import com.uiuios.aios.databinding.ActivityArticlBinding; -import butterknife.BindView; -import butterknife.ButterKnife; +public class ArticleActivity extends BaseMvvmActivity { -public class ArticleActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.tv_content) - TextView tv_content; - @BindView(R.id.iv_img) - NiceImageView iv_img; + @Override + protected int getLayoutId() { + return R.layout.activity_articl; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_articl); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); Intent intent = getIntent(); if (intent == null) { finish(); @@ -51,35 +44,35 @@ public class ArticleActivity extends BaseDataBindingActivity { if (articleInfo == null) { finish(); } - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_title.setText(articleInfo.getTitle()); - tv_content.setText(articleInfo.getContent()); - ViewTreeObserver observer = iv_img.getViewTreeObserver(); + mViewDataBinding.tvTitle.setText(articleInfo.getTitle()); + mViewDataBinding.tvContent.setText(articleInfo.getContent()); + ViewTreeObserver observer = mViewDataBinding.ivImg.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams(); - int width = iv_img.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams(); + int width = mViewDataBinding.ivImg.getWidth(); // layoutParams.height = width; -// iv_img.setLayoutParams(layoutParams); +// ivImg.setLayoutParams(layoutParams); } }); - Glide.with(iv_img).asBitmap().load(articleInfo.getImg()).into(new CustomTarget() { + Glide.with(mViewDataBinding.ivImg).asBitmap().load(articleInfo.getImg()).into(new CustomTarget() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { int imgWidth = resource.getWidth(); int imgHeight = resource.getHeight(); - iv_img.setImageBitmap(resource); + mViewDataBinding.ivImg.setImageBitmap(resource); Log.e("into", "onResourceReady: width = " + imgWidth + "height = " + imgHeight); - ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams(); - int width = iv_img.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams(); + int width = mViewDataBinding.ivImg.getWidth(); layoutParams.height = (int) (imgHeight * (1.0f * width / imgWidth)); - iv_img.setLayoutParams(layoutParams); + mViewDataBinding.ivImg.setLayoutParams(layoutParams); } @Override @@ -93,4 +86,6 @@ public class ArticleActivity extends BaseDataBindingActivity { public void initData() { } + + } diff --git a/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java b/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java new file mode 100644 index 0000000..e162c72 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/article/ArticleViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.article; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityArticlBinding; + +public class ArticleViewModel extends BaseViewModel { + + @Override + public ActivityArticlBinding getVDBinding() { + return binding; + } + + @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 index 9ecf5d7..3bb1a6b 100644 --- a/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddWechatContactActivity.java @@ -21,17 +21,12 @@ 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; @@ -41,8 +36,6 @@ 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; diff --git a/app/src/main/java/com/uiuios/aios/activity/ControlActivity.java b/app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java similarity index 81% rename from app/src/main/java/com/uiuios/aios/activity/ControlActivity.java rename to app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java index 5dc9ce5..588e43e 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ControlActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/control/ControlActivity.java @@ -1,9 +1,8 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.control; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -22,24 +21,18 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.ImageView; import android.widget.SeekBar; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivityControlBinding; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.utils.BrightnessUtils; -import com.uiuios.aios.view.RulerSeekBar; - import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; @@ -47,73 +40,27 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -public class ControlActivity extends BaseDataBindingActivity { +public class ControlActivity extends BaseMvvmActivity { private static final String TAG = ControlActivity.class.getSimpleName(); - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_wifi) - TextView tv_wifi; - @BindView(R.id.tv_bt) - TextView tv_bt; - - @BindView(R.id.seekBar) - RulerSeekBar seekBar; - @BindView(R.id.seekbar_brightness) - SeekBar seekbar_brightness; - @BindView(R.id.seekbar_sound) - SeekBar seekbar_sound; - - @BindView(R.id.tv_sound) - TextView tv_sound; - @BindView(R.id.tv_battery) - TextView tv_battery; - @BindView(R.id.tv_flashlight) - TextView tv_flashlight; - @BindView(R.id.tv_brightness) - TextView tv_brightness; - @BindView(R.id.tv_location) - TextView tv_location; - @BindView(R.id.cl_wifi) - ConstraintLayout cl_wifi; - @BindView(R.id.cl_bt) - ConstraintLayout cl_bt; - @BindView(R.id.cl_battery) - ConstraintLayout cl_battery; - @BindView(R.id.cl_flashlight) - ConstraintLayout cl_flashlight; - @BindView(R.id.cl_location) - ConstraintLayout cl_location; - - - @OnClick({R.id.iv_back}) - void OnClick(View v) { - switch (v.getId()) { - case R.id.iv_back: - finish(); - break; - default: - } - } - - - private ContentResolver crv; private static final String ACTION_FLASHLIGHT_CHANGED = "com.android.settings.flashlight.action.FLASHLIGHT_CHANGED"; + @Override + protected int getLayoutId() { + return R.layout.activity_control; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_control); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); - crv = getContentResolver(); getWifi(); registerReceivers(); getBluetooth(); @@ -125,7 +72,7 @@ public class ControlActivity extends BaseDataBindingActivity { getLocation(); getBrightness(); getSound(); - cl_flashlight.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clFlashlight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { @@ -136,7 +83,7 @@ public class ControlActivity extends BaseDataBindingActivity { } } }); - cl_battery.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clBattery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS)); @@ -150,7 +97,7 @@ public class ControlActivity extends BaseDataBindingActivity { } private void getWifi() { - cl_wifi.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clWifi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); @@ -159,10 +106,10 @@ public class ControlActivity extends BaseDataBindingActivity { }); if (isWifiEnabled()) { // tv_wifi_ssid.setText(getConnectWifiSsid()); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } else { // tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } } @@ -214,14 +161,14 @@ public class ControlActivity extends BaseDataBindingActivity { if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) { Log.e(TAG, "wifi断开"); // tv_wifi_ssid.setText("未连接"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); //获取当前wifi名称 String newSSID = wifiInfo.getSSID(); // tv_wifi_ssid.setText(getConnectWifiSsid()); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } break; //wifi打开与否 @@ -230,7 +177,7 @@ public class ControlActivity extends BaseDataBindingActivity { if (wifistate == WifiManager.WIFI_STATE_DISABLED) { Log.e(TAG, "系统关闭wifi"); // tv_wifi_ssid.setText("关"); - cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { Log.e(TAG, "系统开启wifi"); } @@ -277,18 +224,18 @@ public class ControlActivity extends BaseDataBindingActivity { bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter.isEnabled()) { // if (isConnected()) { -// cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); +// clBt.setBackground(getDrawable(R.drawable.control_background_item)); // tv_bt_ssid.setText(getBluetoothDeviceName()); // } else { -// cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); // tv_bt_ssid.setText("未连接"); // } } else { - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); // tv_bt_ssid.setText("已关闭"); } getConnectedDevicesV1(); - cl_bt.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); @@ -425,30 +372,30 @@ public class ControlActivity extends BaseDataBindingActivity { switch (blueState) { case BluetoothAdapter.STATE_TURNING_ON: // tv_bt_ssid.setText("正在打开"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_ON: // tv_bt_ssid.setText("已打开"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_TURNING_OFF: // tv_bt_ssid.setText("正在关闭"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothAdapter.STATE_OFF: // tv_bt_ssid.setText("已关闭"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; default: } break; case BluetoothDevice.ACTION_ACL_CONNECTED: // tv_bt_ssid.setText(getBluetoothDeviceName()); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item)); break; case BluetoothDevice.ACTION_ACL_DISCONNECTED: // tv_bt_ssid.setText("未连接"); - cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; default: } @@ -460,9 +407,9 @@ public class ControlActivity extends BaseDataBindingActivity { private void getBattery() { // tv_electricity.setText(getBatteryCapacity() + "%"); if (isBatteryCharging()) { - cl_battery.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); } else { - cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); } } @@ -528,10 +475,10 @@ public class ControlActivity extends BaseDataBindingActivity { Log.e(TAG, "onReceive: " + action); switch (action) { case Intent.ACTION_POWER_CONNECTED: - cl_battery.setBackground(getDrawable(R.drawable.control_background_item)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item)); break; case Intent.ACTION_POWER_DISCONNECTED: - cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis)); + mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis)); break; // case Intent.ACTION_BATTERY_LEVEL_CHANGED: // tv_electricity.setText(getBatteryCapacity() + "%"); @@ -547,23 +494,23 @@ public class ControlActivity extends BaseDataBindingActivity { // private void getFlashlight() { // if (isFlashlightAvailable()) { // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // } else { // tv_flashlight_switch.setText("不可用"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // return; // } //// if (isFlashlightEnabled()) { //// tv_flashlight_switch.setText("开"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); //// } else { //// tv_flashlight_switch.setText("关"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); //// } // // cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); // -// cl_flashlight.setOnClickListener(new View.OnClickListener() { +// clFlashlight.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // if (flashing) { @@ -575,7 +522,7 @@ public class ControlActivity extends BaseDataBindingActivity { // } // flashing = false; // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); // } else { // try { // String CameraId = cameraManager.getCameraIdList()[0]; @@ -584,7 +531,7 @@ public class ControlActivity extends BaseDataBindingActivity { // e.printStackTrace(); // } // tv_flashlight_switch.setText("开"); -// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); // flashing = true; // } // } @@ -631,23 +578,23 @@ public class ControlActivity extends BaseDataBindingActivity { updateTimeUi(); // if (isFlashlightAvailable()) { // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // } else { // tv_flashlight_switch.setText("不可用"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // return; // } //// if (isFlashlightEnabled()) { //// tv_flashlight_switch.setText("开"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item)); //// } else { //// tv_flashlight_switch.setText("关"); -//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); +//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis)); //// } // // cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); // -// cl_flashlight.setOnClickListener(new View.OnClickListener() { +// clFlashlight.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // if (flashing) { @@ -659,7 +606,7 @@ public class ControlActivity extends BaseDataBindingActivity { // } // flashing = false; // tv_flashlight_switch.setText("关"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis)); // } else { // try { // String CameraId = cameraManager.getCameraIdList()[0]; @@ -668,7 +615,7 @@ public class ControlActivity extends BaseDataBindingActivity { // e.printStackTrace(); // } // tv_flashlight_switch.setText("开"); -// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item)); +// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item)); // flashing = true; // } // } @@ -695,15 +642,15 @@ public class ControlActivity extends BaseDataBindingActivity { } // private boolean isFlashlightEnabled() { -// return Settings.Secure.getInt(crv, Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1; +// return Settings.Secure.getInt(getContentResolver(), Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1; // } private void getFontSize() { - float fontScale = Settings.System.getFloat(crv, Settings.System.FONT_SCALE, 0.0f); + float fontScale = Settings.System.getFloat(getContentResolver(), Settings.System.FONT_SCALE, 0.0f); Log.e(TAG, "getHardware: fontScale = " + fontScale); List mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size)); List strEntryValues = Arrays.asList(getResources().getStringArray(R.array.entryvalues_font_size)); - seekBar.setMax(mEntries.size() - 1); + mViewDataBinding.seekBar.setMax(mEntries.size() - 1); String font_size; int index = strEntryValues.indexOf(String.valueOf(fontScale)); if (index == -1) { @@ -712,11 +659,11 @@ public class ControlActivity extends BaseDataBindingActivity { font_size = mEntries.get(index); } // tv_font_size.setText(font_size); - seekBar.setProgress(index); - seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.seekBar.setProgress(index); + mViewDataBinding.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - Settings.System.putFloat(crv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i))); + Settings.System.putFloat(getContentResolver(), Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i))); } @Override @@ -735,11 +682,11 @@ public class ControlActivity extends BaseDataBindingActivity { String addr = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).decodeString(CommonConfig.MAP_ADDRESS_KEY); if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) { - tv_location.setText("未能获取到位置信息"); + mViewDataBinding.tvLocation.setText("未能获取到位置信息"); } else { - tv_location.setText(addr); + mViewDataBinding.tvLocation.setText(addr); } - cl_location.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.clLocation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AmapManager.getInstance().startLocation(); @@ -748,17 +695,17 @@ public class ControlActivity extends BaseDataBindingActivity { } private void getBrightness() { - seekbar_brightness.setMax(255); + mViewDataBinding.seekbarBrightness.setMax(255); //亮度 - int brightness = Settings.System.getInt(crv, Settings.System.SCREEN_BRIGHTNESS, 1); - seekbar_brightness.setProgress(brightness); + int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 1); + mViewDataBinding.seekbarBrightness.setProgress(brightness); Log.e(TAG, "getHardware: brightness = " + brightness); int gamma = BrightnessUtils.convertLinearToGamma(brightness, 1, 255); Log.e(TAG, "getHardware: gamma = " + gamma); long percentage = Math.round((((double) gamma / 65535) * 100f)); // tv_brightness.setText(percentage + "%"); Log.e(TAG, "getHardware: percentage = " + percentage); - seekbar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.seekbarBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { Log.e(TAG, "onProgressChanged: i = " + i); @@ -788,20 +735,20 @@ public class ControlActivity extends BaseDataBindingActivity { mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //最大音量 int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setMax(maxVolume); + mViewDataBinding.seekbarSound.setMax(maxVolume); Log.e(TAG, "getHardware: maxVolume = " + maxVolume); //音量 int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); - seekbar_sound.setProgress(streamVolume); + mViewDataBinding.seekbarSound.setProgress(streamVolume); Log.e(TAG, "getHardware: streamVolume = " + streamVolume); int currentVolume = (int) (((double) streamVolume / (double) maxVolume) * 100f); Log.e(TAG, "getHardware: currentVolume = " + currentVolume); - tv_sound.setText(currentVolume + "%"); - seekbar_sound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + mViewDataBinding.tvSound.setText(currentVolume + "%"); + mViewDataBinding.seekbarSound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { int volume = (int) (((double) i / (double) maxVolume) * 100f); - tv_sound.setText(volume + "%"); + mViewDataBinding.tvSound.setText(volume + "%"); mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); } @@ -823,4 +770,10 @@ public class ControlActivity extends BaseDataBindingActivity { if (mWifiReceiver != null) unregisterReceiver(mWifiReceiver); if (mTimeUpdateReceiver != null) unregisterReceiver(mTimeUpdateReceiver); } + + public class BtnClick { + public void exit(View view) { + finish(); + } + } } diff --git a/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java b/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java new file mode 100644 index 0000000..4d52e50 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/control/ControlViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.control; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityControlBinding; + +public class ControlViewModel extends BaseViewModel { + + @Override + public ActivityControlBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java index b4ac196..3ee48f7 100644 --- a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java @@ -2,55 +2,49 @@ package com.uiuios.aios.activity.dailyapp; import android.content.res.Configuration; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.R; import com.uiuios.aios.adapter.DailyAppAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.DailyAppBean; +import com.uiuios.aios.databinding.ActivityDailyappBinding; import com.uiuios.aios.manager.AppStatusManager; import com.uiuios.aios.view.GridSpaceItemDecoration; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class DailyAppActivity extends BaseDataBindingActivity { +public class DailyAppActivity extends BaseMvvmActivity { private static final String TAG = DailyAppActivity.class.getSimpleName(); private DailyAppAdapter mDailyAppAdapter; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.tv_appsize) - TextView tv_appsize; + @Override + protected int getLayoutId() { + return R.layout.activity_dailyapp; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_dailyapp); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mDailyAppAdapter = new DailyAppAdapter(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - recyclerView.setLayoutManager(new GridLayoutManager(this, 5)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50)); + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 5)); + mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50)); } else { - recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); + mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); } - recyclerView.setAdapter(mDailyAppAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.recyclerView.setAdapter(mDailyAppAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -62,6 +56,7 @@ public class DailyAppActivity extends BaseDataBindingActivity { public void initData() { List appBeanList = AppStatusManager.getInstance().getPackageList(); mDailyAppAdapter.setDailyAppBeans(appBeanList); - tv_appsize.setText(String.format(getString(R.string.app_size), appBeanList.size())); + mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), appBeanList.size())); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java new file mode 100644 index 0000000..3c52777 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.dailyapp; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDailyappBinding; + +public class DailyAppViewModel extends BaseViewModel { + + @Override + public ActivityDailyappBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java similarity index 70% rename from app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java rename to app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java index 61d6bed..e2e56ca 100644 --- a/app/src/main/java/com/uiuios/aios/activity/DetailsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/details/DetailsActivity.java @@ -1,93 +1,26 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.details; import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.databinding.DataBindingUtil; import com.bumptech.glide.Glide; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; -import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.activity.OrderActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.GoodsInfo; -import com.uiuios.aios.bean.RegionInfo; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.ActivityDetailsBinding; -import com.uiuios.aios.network.NetInterfaceManager; -import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; - -import org.reactivestreams.Publisher; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import butterknife.BindView; import butterknife.ButterKnife; -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.core.ObservableEmitter; -import io.reactivex.rxjava3.core.ObservableOnSubscribe; -import io.reactivex.rxjava3.core.ObservableSource; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.functions.Function; -import io.reactivex.rxjava3.schedulers.Schedulers; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -public class DetailsActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_details) - ImageView iv_details; - @BindView(R.id.iv_exit) - ImageView iv_exit; - @BindView(R.id.tv_buying_price) - TextView tv_buying_price; - @BindView(R.id.tv_original_price) - TextView tv_original_price; - @BindView(R.id.tv_stock) - TextView tv_stock; - @BindView(R.id.tv_subsidy) - TextView tv_subsidy; - @BindView(R.id.tv_price) - TextView tv_price; - @BindView(R.id.tv_title) - TextView tv_title; - @BindView(R.id.tv_details) - TextView tv_details; - @BindView(R.id.tv_certified) - TextView tv_certified; - @BindView(R.id.tv_ship) - TextView tv_ship; - @BindView(R.id.tv_insurance) - TextView tv_insurance; - @BindView(R.id.tv_sale) - TextView tv_sale; - @BindView(R.id.tv_type) - TextView tv_type; - @BindView(R.id.ll_buy) - LinearLayout ll_buy; +public class DetailsActivity extends BaseMvvmActivity { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - - private ActivityDetailsBinding mBinding; private GoodsInfo mGoodsInfo; @Override @@ -95,9 +28,17 @@ public class DetailsActivity extends BaseDataBindingActivity { return true; } + @Override + protected int getLayoutId() { + return R.layout.activity_details; + } + @Override protected void initDataBinding() { - mBinding = DataBindingUtil.setContentView(this, R.layout.activity_details); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } /** @@ -111,37 +52,37 @@ public class DetailsActivity extends BaseDataBindingActivity { GoodsInfo goodsInfo = (GoodsInfo) intent.getSerializableExtra("GoodsInfo"); if (goodsInfo == null) return; mGoodsInfo = goodsInfo; - Glide.with(iv_details).load(mGoodsInfo.getDetails_img()).into(iv_details); - ViewTreeObserver observer = iv_details.getViewTreeObserver(); + Glide.with(mViewDataBinding.ivDetails).load(mGoodsInfo.getDetails_img()).into(mViewDataBinding.ivDetails); + ViewTreeObserver observer = mViewDataBinding.ivDetails.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { - ViewGroup.LayoutParams layoutParams = iv_details.getLayoutParams(); - int width = iv_details.getWidth(); + ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivDetails.getLayoutParams(); + int width = mViewDataBinding.ivDetails.getWidth(); layoutParams.height = width; - iv_details.setLayoutParams(layoutParams); + mViewDataBinding.ivDetails.setLayoutParams(layoutParams); } }); - iv_exit.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_stock.setText("库存:" + mGoodsInfo.getStock()); + mViewDataBinding.tvStock.setText("库存:" + mGoodsInfo.getStock()); BigDecimal d = new BigDecimal(mGoodsInfo.getOriginal_price()); BigDecimal d2 = new BigDecimal(mGoodsInfo.getBuying_price()); - tv_subsidy.setText("官方补贴" + d.subtract(d2).toString()); - tv_buying_price.setText("¥" + mGoodsInfo.getBuying_price()); - tv_original_price.setText("原价:" + mGoodsInfo.getOriginal_price() + "元"); - tv_price.setText("抢购:" + mGoodsInfo.getBuying_price() + "元"); - tv_title.setText(mGoodsInfo.getGoods_name()); - tv_details.setText(mGoodsInfo.getGoods_desc()); - tv_certified.setText(mGoodsInfo.getEnsure()); - tv_ship.setText(mGoodsInfo.getDeliver_goods()); - tv_insurance.setText(mGoodsInfo.getInsure()); - tv_sale.setText(mGoodsInfo.getAfter_sales()); - ll_buy.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvSubsidy.setText("官方补贴" + d.subtract(d2).toString()); + mViewDataBinding.tvBuyingPrice.setText("¥" + mGoodsInfo.getBuying_price()); + mViewDataBinding.tvOriginalPrice.setText("原价:" + mGoodsInfo.getOriginal_price() + "元"); + mViewDataBinding.tvPrice.setText("抢购:" + mGoodsInfo.getBuying_price() + "元"); + mViewDataBinding.tvTitle.setText(mGoodsInfo.getGoods_name()); + mViewDataBinding.tvDetails.setText(mGoodsInfo.getGoods_desc()); + mViewDataBinding.tvCertified.setText(mGoodsInfo.getEnsure()); + mViewDataBinding.tvShip.setText(mGoodsInfo.getDeliver_goods()); + mViewDataBinding.tvInsurance.setText(mGoodsInfo.getInsure()); + mViewDataBinding.tvSale.setText(mGoodsInfo.getAfter_sales()); + mViewDataBinding.llBuy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Uri uri = Uri.parse(goodsInfo.getJump_url()); @@ -229,7 +170,7 @@ public class DetailsActivity extends BaseDataBindingActivity { // }); } }); - tv_type.setText(mGoodsInfo.getType()); + mViewDataBinding.tvType.setText(mGoodsInfo.getType()); } /** diff --git a/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java b/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java new file mode 100644 index 0000000..bbb51b1 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/details/DetailsViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.details; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDetailsBinding; + +public class DetailsViewModel extends BaseViewModel { + + @Override + public ActivityDetailsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java index 527d312..0db8619 100644 --- a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerActivity.java @@ -7,72 +7,39 @@ import android.net.Uri; import android.text.TextUtils; import android.view.View; import android.view.WindowManager; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.databinding.DataBindingUtil; - -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; import com.uiuios.aios.activity.contact.ContactActivity; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivityDialerBinding; import java.util.HashMap; -import butterknife.BindView; import butterknife.ButterKnife; -public class DialerActivity extends BaseDataBindingActivity { +public class DialerActivity extends BaseMvvmActivity { - @BindView(R.id.et_phone) - EditText et_phone; - @BindView(R.id.iv_delete) - ImageView iv_delete; - @BindView(R.id.nv_dialer) - NiceImageView nv_dialer; - @BindView(R.id.iv_contact) - ImageView iv_contact; - @BindView(R.id.tv_contact) - TextView tv_contact; - @BindView(R.id.cl_0) - ConstraintLayout cl_0; - @BindView(R.id.cl_1) - ConstraintLayout cl_1; - @BindView(R.id.cl_2) - ConstraintLayout cl_2; - @BindView(R.id.cl_3) - ConstraintLayout cl_3; - @BindView(R.id.cl_4) - ConstraintLayout cl_4; - @BindView(R.id.cl_5) - ConstraintLayout cl_5; - @BindView(R.id.cl_6) - ConstraintLayout cl_6; - @BindView(R.id.cl_7) - ConstraintLayout cl_7; - @BindView(R.id.cl_8) - ConstraintLayout cl_8; - @BindView(R.id.cl_9) - ConstraintLayout cl_9; - @BindView(R.id.cl_11) - ConstraintLayout cl_11; - @BindView(R.id.cl_12) - ConstraintLayout cl_12; private SoundPool soundPool; private HashMap soundMap = new HashMap<>(); + @Override + protected int getLayoutId() { + return R.layout.activity_dialer; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_dialer); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - ButterKnife.bind(this); + AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 设置音效的类型 soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 设置音效池的属性 @@ -96,107 +63,107 @@ public class DialerActivity extends BaseDataBindingActivity { @Override public void initData() { - cl_0.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("0", 0); } }); - cl_1.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("1", 1); } }); - cl_2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("2", 2); } }); - cl_3.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("3", 3); } }); - cl_4.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("4", 4); } }); - cl_5.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("5", 5); } }); - cl_6.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("6", 6); } }); - cl_7.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("7", 7); } }); - cl_8.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("8", 8); } }); - cl_9.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("9", 9); } }); - cl_11.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl11.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("*", 10); } }); - cl_12.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.cl12.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { addNumber("#", 11); } }); - nv_dialer.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - String phone = et_phone.getText().toString(); + String phone = mViewDataBinding.etPhone.getText().toString(); Intent dialIntent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" + phone); dialIntent.setData(data); startActivity(dialIntent); } }); - iv_delete.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - String tmp = et_phone.getText().toString(); + String tmp = mViewDataBinding.etPhone.getText().toString(); if (TextUtils.isEmpty(tmp)) { - et_phone.setText(""); + mViewDataBinding.etPhone.setText(""); } else { - et_phone.setText(tmp.substring(0, tmp.length() - 1)); + mViewDataBinding.etPhone.setText(tmp.substring(0, tmp.length() - 1)); } } }); - iv_contact.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(DialerActivity.this, ContactActivity.class); startActivity(intent); } }); - tv_contact.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvContact.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(DialerActivity.this, ContactActivity.class); @@ -207,13 +174,14 @@ public class DialerActivity extends BaseDataBindingActivity { private void addNumber(String number, int position) { - String tmp = et_phone.getText().toString(); + String tmp = mViewDataBinding.etPhone.getText().toString(); if (TextUtils.isEmpty(tmp)) { - et_phone.setText(number); + mViewDataBinding.etPhone.setText(number); } else { - et_phone.setText(tmp + number); + mViewDataBinding.etPhone.setText(tmp + number); } soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java new file mode 100644 index 0000000..ea5c7e0 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/dialer/DialerViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.dialer; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityDialerBinding; + +public class DialerViewModel extends BaseViewModel { + + @Override + public ActivityDialerBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java similarity index 91% rename from app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java rename to app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java index aeab661..4d6936a 100644 --- a/app/src/main/java/com/uiuios/aios/activity/EmergencyActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyActivity.java @@ -1,38 +1,28 @@ -package com.uiuios.aios.activity; - -import androidx.appcompat.app.AppCompatActivity; +package com.uiuios.aios.activity.emergency; import android.content.ComponentName; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.BaseResponse; -import com.uiuios.aios.bean.Contact; import com.uiuios.aios.config.CommonConfig; -import com.uiuios.aios.disklrucache.CacheHelper; +import com.uiuios.aios.databinding.ActivityEmergencyBinding; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.network.NetInterfaceManager; -import com.uiuios.aios.network.UrlAddress; import com.uiuios.aios.receiver.BootReceiver; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import butterknife.BindView; import butterknife.ButterKnife; @@ -43,17 +33,11 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; -public class EmergencyActivity extends AppCompatActivity { +public class EmergencyActivity extends BaseMvvmActivity { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); - @BindView(R.id.tv_countdown) - TextView tv_countdown; - @BindView(R.id.iv_finish) - ImageView iv_finish; - - private Disposable subscribe; private String TAG = EmergencyActivity.class.getSimpleName(); private boolean needDial = false; @@ -62,12 +46,21 @@ public class EmergencyActivity extends AppCompatActivity { // private CacheHelper mCacheHelper; @Override - protected void onCreate(Bundle savedInstanceState) { - Log.e(TAG, "onCreate: "); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_emergency); + protected int getLayoutId() { + return R.layout.activity_emergency; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { // mCacheHelper = new CacheHelper(this); - ButterKnife.bind(this); //发送紧急广播 Intent bootIntent = new Intent(BootReceiver.SOS); @@ -107,7 +100,7 @@ public class EmergencyActivity extends AppCompatActivity { .subscribe(aLong -> { Log.e("TAG", "倒计时:" + aLong); if (aLong < time && !subscribe.isDisposed()) { - tv_countdown.setText("倒计时(" + (time - aLong - 1) + ")秒"); + mViewDataBinding.tvCountdown.setText("倒计时(" + (time - aLong - 1) + ")秒"); Log.e(TAG, "accept: " + (time - aLong - 1)); } else { String longitude = mMMKV.decodeString(CommonConfig.MAP_LONGITUDE_KEY, ""); @@ -154,7 +147,7 @@ public class EmergencyActivity extends AppCompatActivity { finish(); } }); - iv_finish.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivFinish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -177,6 +170,11 @@ public class EmergencyActivity extends AppCompatActivity { //// mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键 } + @Override + protected void initData() { + + } + @Override protected void onStart() { super.onStart(); diff --git a/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java new file mode 100644 index 0000000..f74ad53 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/emergency/EmergencyViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.emergency; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityEmergencyBinding; + +public class EmergencyViewModel extends BaseViewModel { + + @Override + public ActivityEmergencyBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java similarity index 74% rename from app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java rename to app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java index 28cc641..8e14198 100644 --- a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.infolist; import android.util.Log; import android.view.View; @@ -13,9 +13,11 @@ import com.trello.rxlifecycle4.android.ActivityEvent; import com.uiuios.aios.R; import com.uiuios.aios.adapter.ArticleAdapter; import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.ArticleInfo; import com.uiuios.aios.bean.ArticleList; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.databinding.ActivityInfoListBinding; import com.uiuios.aios.network.NetInterfaceManager; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; @@ -27,28 +29,28 @@ import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; -public class InfoListActivity extends BaseDataBindingActivity { - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.iv1) - ImageView iv1; - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - +public class InfoListActivity extends BaseMvvmActivity { private ArticleAdapter mArticleAdapter; + @Override + protected int getLayoutId() { + return R.layout.activity_info_list; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_info_list); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mArticleAdapter = new ArticleAdapter(); - recyclerView.setLayoutManager(new LinearLayoutManager(this)); - recyclerView.setAdapter(mArticleAdapter); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this)); + mViewDataBinding.recyclerView.setAdapter(mArticleAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); @@ -73,10 +75,10 @@ public class InfoListActivity extends BaseDataBindingActivity { List articleInfoList = articleList.getData(); if (articleInfoList != null && articleInfoList.size() != 0) { articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight())); - iv1.setVisibility(android.view.View.GONE); + mViewDataBinding.iv1.setVisibility(android.view.View.GONE); mArticleAdapter.setArticleBeanList(articleInfoList); } else { - iv1.setVisibility(android.view.View.VISIBLE); + mViewDataBinding.iv1.setVisibility(android.view.View.VISIBLE); } } @@ -91,4 +93,5 @@ public class InfoListActivity extends BaseDataBindingActivity { } }); } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java new file mode 100644 index 0000000..48a84b9 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/infolist/InfoListViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.infolist; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityInfoListBinding; + +public class InfoListViewModel extends BaseViewModel { + + @Override + public ActivityInfoListBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java index afee0ee..9b58d7d 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java @@ -11,6 +11,9 @@ import android.content.pm.PackageManager; import android.content.pm.ShortcutManager; import android.content.res.Configuration; import android.graphics.Color; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraManager; import android.os.Build; import android.os.Bundle; import android.os.IBinder; @@ -22,6 +25,7 @@ import android.view.KeyEvent; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; @@ -35,36 +39,44 @@ import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; import com.uiuios.aios.activity.phone.PhoneActivity; import com.uiuios.aios.base.BaseFragmentPagerAdapter; import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.AlarmItem; import com.uiuios.aios.bean.DesktopIcon; +import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.PhoneActivityMainBinding; import com.uiuios.aios.fragment.app.AppListFragment; -import com.uiuios.aios.fragment.control.ControlFragment; import com.uiuios.aios.fragment.contact.ContactFragment; import com.uiuios.aios.fragment.home.HomeFragment; +import com.uiuios.aios.fragment.settings.SettingsFragment; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.service.NotificationService; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUsedTimeUtils; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.view.ScaleCircleNavigator; import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.lang.reflect.Type; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; -public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener { +public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainActivity.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private FragmentManager mFragmentManager; private FragmentTransaction mFragmentTransaction; @@ -72,15 +84,29 @@ public class MainActivity extends BaseMvvmActivity mFragments; - private ControlFragment mControlFragment; + // private ControlFragment mControlFragment; + private SettingsFragment mSettingsFragment; private HomeFragment mHomeFragment; // private CustomFragment mCustomFragment; - private ContactFragment mSecondFragment; + private ContactFragment mContactFragment; private boolean is_twoscreen = false; private int appListIndex = 3; private int defaultCurrent = 2; + private CameraManager cameraManager; + + @Override + public void onDisconnected() { + Log.e(TAG, "onDisconnected: "); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Log.e(TAG, "onConnected: " + networkType); + initAmap(); + } + @Override public void onRemoteConnected() { setDefaultDesktop(); @@ -121,6 +147,7 @@ public class MainActivity extends BaseMvvmActivity(desktopIcons.subList(x, i))); mFragments.add(appListFragment); x = i; - } else if (i != 0 &&i == desktopIcons.size()) { + } else if (i != 0 && i == desktopIcons.size()) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -177,8 +205,8 @@ public class MainActivity extends BaseMvvmActivity(desktopIcons.subList(x, i))); mFragments.add(appListFragment); x = i; - } else if (i != 0 &&i == desktopIcons.size()) { + } else if (i != 0 && i == desktopIcons.size()) { AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i))); mFragments.add(appListFragment); @@ -247,6 +275,28 @@ public class MainActivity extends BaseMvvmActivity() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict()); + mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude()); +// mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude()); + } + }); + } else { + String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT); +// mViewDataBinding.tvLocation.setText(district); + mViewModel.getWeather(tude); + } } private ServiceConnection mAlarmServiceConnection; @@ -312,7 +362,7 @@ public class MainActivity extends BaseMvvmActivity(applicationInfoList.subList(x, i))); fragmentList.add(appListFragment); x = i; - } else if (i != 0 &&i == applicationInfoList.size()) { + } else if (i != 0 && i == applicationInfoList.size()) { Log.e(TAG, "addData: i == size"); AppListFragment appListFragment = new AppListFragment(); appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i))); @@ -361,7 +411,6 @@ public class MainActivity extends BaseMvvmActivity mNowBaseBeanData = new MutableLiveData<>(); + + public MutableLiveData getNowBaseBeanData() { + return mNowBaseBeanData; + } + + public void getWeatherNow(String location) { + Log.e(TAG, "getWeatherNow: " + location); + /** + * 实况天气数据 + * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度 + * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负) + * @param lang (选填)多语言,可以不使用该参数,默认为简体中文 + * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位 + * @param listener 网络访问结果回调 + */ + QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() { + @Override + public void onError(Throwable e) { + Log.e("getWeatherNow", "onError: " + e); + } + + @Override + public void onSuccess(WeatherNowBean weatherBean) { + Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean)); + //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因 + if (Code.OK == weatherBean.getCode()) { + WeatherNowBean.NowBaseBean now = weatherBean.getNow(); + LiveEventBus + .get("some_key1") + .post(now); + mNowBaseBeanData.postValue(now); + Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now)); + } else { + //在此查看返回数据失败的原因 + Code code = weatherBean.getCode(); + Log.d("getWeatherNow", "failed code: " + code); + } + } + }); + } + + private MutableLiveData mHourlyBeanData = new MutableLiveData<>(); + + public MutableLiveData getHourlyBeanData() { + return mHourlyBeanData; + } + + public void getWeather24Hourly(String location) { + QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() { + @Override + public void onError(Throwable throwable) { + Log.e("getWeather24Hourly", "onError: " + throwable); + } + + @Override + public void onSuccess(WeatherHourlyBean weatherHourlyBean) { + Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean)); + if (Code.OK == weatherHourlyBean.getCode()) { + List hourly = weatherHourlyBean.getHourly(); + if (hourly != null && hourly.size() != 0) { + WeatherHourlyBean.HourlyBean now = hourly.get(0); + mHourlyBeanData.postValue(now); + LiveEventBus + .get("some_key2") + .post(now); + } + } else { + //在此查看返回数据失败的原因 + Code code = weatherHourlyBean.getCode(); + Log.e("getWeather24Hourly", "failed code: " + code); + } + } + }); + } + + private MutableLiveData DailyBeanData = new MutableLiveData<>(); + + public MutableLiveData getDailyBeanData() { + return DailyBeanData; + } + + public void getWeather7D(String location) { + QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() { + @Override + public void onError(Throwable throwable) { + Log.e("getWeather7D", "onError: " + throwable.getMessage()); + + } + + @Override + public void onSuccess(WeatherDailyBean weatherDailyBean) { + String jsonString = new Gson().toJson(weatherDailyBean); + Log.d("getWeather7D", "onSuccess: " + jsonString); + mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString); + List dailyBeans = weatherDailyBean.getDaily(); + if (dailyBeans != null && dailyBeans.size() != 0) { + WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0); + DailyBeanData.postValue(dailyBean); + LiveEventBus + .get("some_key3") + .post(dailyBean); + } + } + }); + } + + + private MutableLiveData mSnInfoData = new MutableLiveData<>(); public MutableLiveData getSnInfoData() { @@ -88,6 +221,7 @@ public class MainViewModel extends BaseViewModel> mDesktopIconData = new MutableLiveData<>(); public MutableLiveData> getDesktopIconData() { diff --git a/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java similarity index 89% rename from app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java rename to app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java index 16432b9..15f1066 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/OldMainActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.main; +package com.uiuios.aios.activity.main.deprecated; import android.content.Intent; import android.os.Bundle; @@ -8,7 +8,9 @@ import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; +import com.uiuios.aios.activity.main.MainActivity; +@Deprecated public class OldMainActivity extends MainActivity { private static final String TAG = OldMainActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java similarity index 89% rename from app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java rename to app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java index 9c6eed9..5c982be 100644 --- a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/main/deprecated/PhoneMainActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity.main; +package com.uiuios.aios.activity.main.deprecated; import android.content.Intent; import android.view.View; @@ -6,10 +6,12 @@ import android.view.View; import androidx.databinding.DataBindingUtil; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.main.MainActivity; import com.uiuios.aios.databinding.PhoneActivityMainBinding; import com.uiuios.aios.utils.ApkUtils; +@Deprecated public class PhoneMainActivity extends MainActivity { private static final String TAG = PhoneMainActivity.class.getSimpleName(); diff --git a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java similarity index 69% rename from app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java rename to app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java index 90fdc04..bffacb9 100644 --- a/app/src/main/java/com/uiuios/aios/activity/QuickAppActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppActivity.java @@ -1,28 +1,24 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.quickapp; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; -import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; import com.uiuios.aios.adapter.AppSelectedAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.AppSelectBean; +import com.uiuios.aios.databinding.ActivityQuickAppBinding; import com.uiuios.aios.view.GridSpaceItemDecoration; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class QuickAppActivity extends BaseDataBindingActivity { +public class QuickAppActivity extends BaseMvvmActivity { private static final String TAG = QuickAppActivity.class.getSimpleName(); public static final String QUICK_APP_KEY = "QuickAppPackageKey"; @@ -31,26 +27,30 @@ public class QuickAppActivity extends BaseDataBindingActivity { private AppSelectedAdapter mAppSelectedAdapter; - @BindView(R.id.rv_goods) - RecyclerView recyclerView; + @Override + protected int getLayoutId() { + return R.layout.activity_quick_app; + } @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_quick_app); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); mAppSelectedAdapter = new AppSelectedAdapter(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(3,50,50)); + mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 3)); + mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50)); } else { - recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); - recyclerView.addItemDecoration(new GridSpaceItemDecoration(2,50,50)); + mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 2)); + mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(2, 50, 50)); } - recyclerView.setAdapter(mAppSelectedAdapter); + mViewDataBinding.rvApps.setAdapter(mAppSelectedAdapter); } @Override @@ -76,4 +76,5 @@ public class QuickAppActivity extends BaseDataBindingActivity { } return appSelectBeanList; } + } diff --git a/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java new file mode 100644 index 0000000..dea5b73 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/quickapp/QuickAppViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.quickapp; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityQuickAppBinding; + +public class QuickAppViewModel extends BaseViewModel { + + @Override + public ActivityQuickAppBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java b/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java index e05c233..efb10a1 100644 --- a/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/records/RecordsActivity.java @@ -7,73 +7,72 @@ import android.os.Bundle; import android.provider.CallLog; import android.util.Log; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; import com.uiuios.aios.activity.dialer.DialerActivity; import com.uiuios.aios.adapter.CallRecordAdapter; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.RecordsInfo; +import com.uiuios.aios.databinding.ActivityRecordsBinding; import com.uiuios.aios.dialog.DeleteDialog; import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class RecordsActivity extends AppCompatActivity { +public class RecordsActivity extends BaseMvvmActivity { private static final String TAG = RecordsActivity.class.getSimpleName(); - @BindView(R.id.recyclerView) - RecyclerView recyclerView; - @BindView(R.id.iv_cancel) - ImageView iv_cancel; - @BindView(R.id.iv_clear) - ImageView iv_clear; - @BindView(R.id.nv_dialer) - NiceImageView nv_dialer; - @BindView(R.id.tv_nodata) - TextView tv_nodata; - private CallRecordAdapter mCallRecordAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_records); + + } + + @Override + protected int getLayoutId() { + return R.layout.activity_records; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { UltimateBarX.statusBarOnly(this) .colorRes(R.color.default_blue) .fitWindow(true) .apply(); - ButterKnife.bind(this); Log.e(TAG, "initData: " + dataList); mCallRecordAdapter = new CallRecordAdapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecordsActivity.this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - recyclerView.setLayoutManager(linearLayoutManager); - recyclerView.setAdapter(mCallRecordAdapter); + mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager); + mViewDataBinding.recyclerView.setAdapter(mCallRecordAdapter); - iv_cancel.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - nv_dialer.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(RecordsActivity.this, DialerActivity.class)); } }); - iv_clear.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(); @@ -81,6 +80,11 @@ public class RecordsActivity extends AppCompatActivity { }); } + @Override + protected void initData() { + + } + private void showDialog() { DeleteDialog dialog = new DeleteDialog(this); dialog.setTitle("提醒") @@ -116,11 +120,11 @@ public class RecordsActivity extends AppCompatActivity { private void getData() { dataList = getDataList(); if (dataList.size() == 0) { - tv_nodata.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.GONE); + mViewDataBinding.tvNodata.setVisibility(View.VISIBLE); + mViewDataBinding.recyclerView.setVisibility(View.GONE); } else { - tv_nodata.setVisibility(View.GONE); - recyclerView.setVisibility(View.VISIBLE); + mViewDataBinding.tvNodata.setVisibility(View.GONE); + mViewDataBinding.recyclerView.setVisibility(View.VISIBLE); } mCallRecordAdapter.setRecordsInfoList(dataList); } diff --git a/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java b/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java new file mode 100644 index 0000000..9af7d5b --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/records/RecordsViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.records; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityRecordsBinding; + +public class RecordsViewModel extends BaseViewModel { + + @Override + public ActivityRecordsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java similarity index 58% rename from app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java rename to app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java index 3f9ba75..1ca2dbd 100644 --- a/app/src/main/java/com/uiuios/aios/activity/ScreenLockActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockActivity.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.activity; +package com.uiuios.aios.activity.screenlock; import android.content.Context; import android.media.AudioAttributes; @@ -11,63 +11,22 @@ import android.util.Log; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import com.tuo.customview.VerificationCodeView; import com.uiuios.aios.R; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivityScreenLockBinding; import com.uiuios.aios.manager.RemoteManager; -import butterknife.BindView; import butterknife.ButterKnife; -public class ScreenLockActivity extends BaseDataBindingActivity { - +public class ScreenLockActivity extends BaseMvvmActivity { private static final String TAG = ScreenLockActivity.class.getSimpleName(); - @BindView(R.id.iv_back) - ImageView iv_back; - @BindView(R.id.bt_0) - TextView bt0; - @BindView(R.id.bt_1) - TextView bt1; - @BindView(R.id.bt_2) - TextView bt2; - @BindView(R.id.bt_3) - TextView bt3; - @BindView(R.id.bt_4) - TextView bt4; - @BindView(R.id.bt_5) - TextView bt5; - @BindView(R.id.bt_6) - TextView bt6; - @BindView(R.id.bt_7) - TextView bt7; - @BindView(R.id.bt_8) - TextView bt8; - @BindView(R.id.bt_9) - TextView bt9; - @BindView(R.id.bt_del) - TextView bt_del; - @BindView(R.id.bt_confirm) - TextView bt_confirm; - - @BindView(R.id.textView) - TextView textView; - @BindView(R.id.tv_hint) - TextView tv_hint; - @BindView(R.id.ll_keyboard) - LinearLayout ll_keyboard; - @BindView(R.id.icv) - VerificationCodeView codeView; - private SoundPool soundPool; private int soundId; @@ -86,23 +45,30 @@ public class ScreenLockActivity extends BaseDataBindingActivity { soundId = soundPool.load(this, R.raw.click, 1); } + @Override + protected int getLayoutId() { + return R.layout.activity_screen_lock; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this,R.layout.activity_screen_lock); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); InputMethodManager imm = (InputMethodManager) ScreenLockActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0); - codeView.getEditText().setOnClickListener(new View.OnClickListener() { + imm.hideSoftInputFromWindow(mViewDataBinding.codeView.getWindowToken(), 0); + mViewDataBinding.codeView.getEditText().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ll_keyboard.setVisibility(View.VISIBLE); + mViewDataBinding.llKeyboard.setVisibility(View.VISIBLE); } }); - codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { + mViewDataBinding.codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { @Override public void inputComplete() { checkPasswd(); @@ -114,39 +80,39 @@ public class ScreenLockActivity extends BaseDataBindingActivity { } }); - bt_del.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.btDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - tv_hint.setText(""); - codeView.clearInputContent(); + mViewDataBinding.tvHint.setText(""); + mViewDataBinding.codeView.clearInputContent(); } }); - bt_confirm.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.btConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkPasswd(); } }); - iv_back.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - bt0.setOnClickListener(view1 -> add(codeView, "0")); - bt1.setOnClickListener(view1 -> add(codeView, "1")); - bt2.setOnClickListener(view1 -> add(codeView, "2")); - bt3.setOnClickListener(view1 -> add(codeView, "3")); - bt4.setOnClickListener(view1 -> add(codeView, "4")); - bt5.setOnClickListener(view1 -> add(codeView, "5")); - bt6.setOnClickListener(view1 -> add(codeView, "6")); - bt7.setOnClickListener(view1 -> add(codeView, "7")); - bt8.setOnClickListener(view1 -> add(codeView, "8")); - bt9.setOnClickListener(view1 -> add(codeView, "9")); + mViewDataBinding.bt0.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "0")); + mViewDataBinding.bt1.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "1")); + mViewDataBinding.bt2.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "2")); + mViewDataBinding.bt3.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "3")); + mViewDataBinding.bt4.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "4")); + mViewDataBinding.bt5.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "5")); + mViewDataBinding.bt6.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "6")); + mViewDataBinding.bt7.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "7")); + mViewDataBinding.bt8.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "8")); + mViewDataBinding.bt9.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "9")); } private void checkPasswd() { - String content = codeView.getInputContent(); + String content = mViewDataBinding.codeView.getInputContent(); if (TextUtils.isEmpty(content) || content.length() != 4) { return; } @@ -157,13 +123,13 @@ public class ScreenLockActivity extends BaseDataBindingActivity { exitDesktop(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mViewDataBinding.tvHint.setText("密码错误"); } } else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) { exitDesktop(); } else { setEmpty(); - tv_hint.setText("密码错误"); + mViewDataBinding.tvHint.setText("密码错误"); } } @@ -171,8 +137,8 @@ public class ScreenLockActivity extends BaseDataBindingActivity { new Handler().postDelayed(new Runnable() { @Override public void run() { - codeView.clearInputContent(); - tv_hint.setText(""); + mViewDataBinding.codeView.clearInputContent(); + mViewDataBinding.tvHint.setText(""); } }, 1000); } diff --git a/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java new file mode 100644 index 0000000..58431fd --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/screenlock/ScreenLockViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.screenlock; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityScreenLockBinding; + +public class ScreenLockViewModel extends BaseViewModel { + + @Override + public ActivityScreenLockBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java new file mode 100644 index 0000000..9e44ae5 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingActivity.java @@ -0,0 +1,167 @@ +package com.uiuios.aios.activity.setting; + +import android.Manifest; +import android.app.AppOpsManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Binder; +import android.os.Build; +import android.provider.Settings; +import android.view.View; +import android.widget.Toast; + +import androidx.core.content.ContextCompat; + +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.ActivitySettingBinding; +import com.uiuios.aios.service.main.MainService; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class SettingActivity extends BaseMvvmActivity { + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + @Override + protected int getLayoutId() { + return R.layout.activity_setting; + } + + @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 static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { + // 权限被拒绝 + Toast.makeText(this, "用户取消授予悬浮窗权限", Toast.LENGTH_SHORT).show(); + } else { + // 权限已授予,可以显示悬浮窗 + showFloatingWindow(); + } + } + } + + private void showFloatingWindow() { + mViewDataBinding.setFloatWindowEnable(true); + mMMKV.encode(CommonConfig.FLOAT_WINDOW, true); + startService(new Intent(SettingActivity.this, MainService.class)); + sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_ON)); + } + + + private void hideFloatingWindow() { + mViewDataBinding.setFloatWindowEnable(false); + mMMKV.encode(CommonConfig.FLOAT_WINDOW, false); + startService(new Intent(SettingActivity.this, MainService.class)); + sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_OFF)); + } + + /*** + * 检查悬浮窗开启权限 + * @param context + * @return + */ + public boolean checkFloatPermission(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) + return true; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + try { + Class cls = Class.forName("android.content.Context"); + Field declaredField = cls.getDeclaredField("APP_OPS_SERVICE"); + declaredField.setAccessible(true); + Object obj = declaredField.get(cls); + if (!(obj instanceof String)) { + return false; + } + String str2 = (String) obj; + obj = cls.getMethod("getSystemService", String.class).invoke(context, str2); + cls = Class.forName("android.app.AppOpsManager"); + Field declaredField2 = cls.getDeclaredField("MODE_ALLOWED"); + declaredField2.setAccessible(true); + Method checkOp = cls.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class); + int result = (Integer) checkOp.invoke(obj, 24, Binder.getCallingUid(), context.getPackageName()); + return result == declaredField2.getInt(cls); + } catch (Exception e) { + return false; + } + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); + if (appOpsMgr == null) + return false; + int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), context + .getPackageName()); + return Settings.canDrawOverlays(context) || mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED; + } else { + return Settings.canDrawOverlays(context); + } + } + } + + public class BtnClick { + public void openFloat(View view) { + boolean floatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false); + if (floatWindowEnable) { + + hideFloatingWindow(); + } else { + boolean permission = checkFloatPermission(SettingActivity.this); + if (permission) { + showFloatingWindow(); + } else { + // 在Activity或Fragment中请求权限 + if (!Settings.canDrawOverlays(SettingActivity.this)) { + Toast.makeText(SettingActivity.this, "请先打开悬浮窗权限", Toast.LENGTH_LONG).show(); + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION); + } else { + showFloatingWindow(); + } + } + } + } + + public void toInternet(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void toFont(View view) { + startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); + } + + public void toTouch(View view) { + startActivity(new Intent(SettingActivity.this, TouchActivity.class)); + } + + public void toSettings(View view) { + startActivity(new Intent(Settings.ACTION_SETTINGS)); + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java new file mode 100644 index 0000000..23fab4a --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.setting; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivitySettingBinding; + +public class SettingViewModel extends BaseViewModel { + + @Override + public ActivitySettingBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java new file mode 100644 index 0000000..f33d583 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/SettingsActivity.java @@ -0,0 +1,54 @@ +package com.uiuios.aios.activity.setting; + +import android.os.Bundle; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.preference.PreferenceFragmentCompat; + +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; + +public class SettingsActivity extends BaseMvvmActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.settings_activity); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.settings, new SettingsFragment()) + .commit(); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + protected int getLayoutId() { + return 0; + } + + @Override + protected void initDataBinding() { + + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + + } + + public static class SettingsFragment extends PreferenceFragmentCompat { + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferencesFromResource(R.xml.root_preferences, rootKey); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java b/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java new file mode 100644 index 0000000..609724d --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/TouchActivity.java @@ -0,0 +1,51 @@ +package com.uiuios.aios.activity.setting; + +import android.content.Intent; +import android.provider.Settings; +import android.view.View; + +import com.uiuios.aios.R; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; +import com.uiuios.aios.databinding.ActivitySettingBinding; +import com.uiuios.aios.databinding.ActivityTouchBinding; + +public class TouchActivity extends BaseMvvmActivity { + + + @Override + protected int getLayoutId() { + return R.layout.activity_touch; + } + + @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() { + + } + + public class BtnClick { + public void toInternet(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void toFont(View view) { + startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); + } + + public void toSettings(View view) { + startActivity(new Intent(Settings.ACTION_SETTINGS)); + } + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java b/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java new file mode 100644 index 0000000..d8a9c9d --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/activity/setting/TouchViewModel.java @@ -0,0 +1,18 @@ +package com.uiuios.aios.activity.setting; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.databinding.ActivityTouchBinding; + +public class TouchViewModel extends BaseViewModel { + + @Override + public ActivityTouchBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java deleted file mode 100644 index ce94a3f..0000000 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiContact.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uiuios.aios.activity.wifi; - -import com.uiuios.aios.base.mvp.BasePresenter; -import com.uiuios.aios.base.mvp.BaseView; -import com.uiuios.aios.bean.WiFiInfo; - -import java.util.List; - -public class WiFiContact { - public interface Presenter extends BasePresenter { - void getWiFiList(); - } - - public interface WiFiView extends BaseView { - void setSavedWiFiList(List wiFiList); - void setAvailableWiFiList(List wiFiList); - } -} diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java index fd52f02..c100fc1 100644 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java +++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerActivity.java @@ -7,77 +7,65 @@ import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.hjq.toast.Toaster; import com.uiuios.aios.R; import com.uiuios.aios.adapter.AvailableWiFiAdapter; import com.uiuios.aios.adapter.SavedWiFiAdapter; -import com.uiuios.aios.base.BaseDataBindingActivity; +import com.uiuios.aios.base.mvvm.BaseMvvmActivity; import com.uiuios.aios.bean.WiFiInfo; +import com.uiuios.aios.databinding.ActivityWifiManagerBinding; import com.uiuios.aios.view.HorizontalItemDecoration; import java.util.List; -import butterknife.BindView; import butterknife.ButterKnife; -public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFiContact.WiFiView { +public class WiFiManagerActivity extends BaseMvvmActivity { - - @BindView(R.id.iv_close) - ImageView iv_close; - @BindView(R.id.rv_saved) - RecyclerView rv_saved; - @BindView(R.id.rv_available) - RecyclerView rv_available; - @BindView(R.id.tv_refresh) - TextView tv_refresh; - @BindView(R.id.tv_refresh2) - TextView tv_refresh2; - - private WiFiPresenter mPresenter; private SavedWiFiAdapter mSavedWiFiAdapter; private AvailableWiFiAdapter mAvailableWiFiAdapter; + @Override public boolean setNightMode() { return true; } + @Override + protected int getLayoutId() { + return R.layout.activity_wifi_manager; + } + @Override protected void initDataBinding() { - DataBindingUtil.setContentView(this, R.layout.activity_wifi_manager); + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); +// mViewDataBinding.setClick(new BtnClick()); } @Override public void initView() { - ButterKnife.bind(this); - mPresenter = new WiFiPresenter(this); - mPresenter.attachView(this); - mPresenter.setLifecycle(getLifecycleSubject()); - - iv_close.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.ivClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); - tv_refresh.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvRefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } }); - tv_refresh2.setOnClickListener(new View.OnClickListener() { + mViewDataBinding.tvRefresh2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } }); @@ -86,14 +74,14 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - rv_saved.setLayoutManager(linearLayoutManager); - rv_saved.addItemDecoration(new HorizontalItemDecoration(30, this)); - rv_saved.setAdapter(mSavedWiFiAdapter); + mViewDataBinding.rvSaved.setLayoutManager(linearLayoutManager); + mViewDataBinding.rvSaved.addItemDecoration(new HorizontalItemDecoration(30, this)); + mViewDataBinding.rvSaved.setAdapter(mSavedWiFiAdapter); LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(this); linearLayoutManager2.setOrientation(LinearLayoutManager.VERTICAL); - rv_available.setLayoutManager(linearLayoutManager2); - rv_available.setAdapter(mAvailableWiFiAdapter); + mViewDataBinding.rvAvailable.setLayoutManager(linearLayoutManager2); + mViewDataBinding.rvAvailable.setAdapter(mAvailableWiFiAdapter); IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); @@ -105,12 +93,25 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi registerReceiver(broadcastReceiver, filter); - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); } @Override public void initData() { + mViewModel.getSavedWiFiList().observe(this, new Observer>() { + @Override + public void onChanged(List wiFiInfos) { + Toaster.show("刷新成功"); + mSavedWiFiAdapter.setResultList(wiFiInfos); + } + }); + mViewModel.getAvailableWiFiList().observe(this, new Observer>() { + @Override + public void onChanged(List wiFiInfos) { + mAvailableWiFiAdapter.setResultList(wiFiInfos); + } + }); } @Override @@ -132,22 +133,11 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi case WifiManager.NETWORK_STATE_CHANGED_ACTION: case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION: default: - mPresenter.getWiFiList(); + mViewModel.getWiFiList(); break; } } } }; - - @Override - public void setSavedWiFiList(List wiFiList) { - Toaster.show("刷新成功"); - mSavedWiFiAdapter.setResultList(wiFiList); - } - - @Override - public void setAvailableWiFiList(List wiFiList) { - mAvailableWiFiAdapter.setResultList(wiFiList); - } } diff --git a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java similarity index 79% rename from app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java rename to app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java index 200da9b..940c933 100644 --- a/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiPresenter.java +++ b/app/src/main/java/com/uiuios/aios/activity/wifi/WiFiManagerViewModel.java @@ -6,10 +6,12 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; -import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; import com.uiuios.aios.bean.WiFiInfo; +import com.uiuios.aios.databinding.ActivityWifiManagerBinding; import java.util.ArrayList; import java.util.Comparator; @@ -19,42 +21,35 @@ import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; -import io.reactivex.rxjava3.subjects.BehaviorSubject; - import static android.text.TextUtils.isEmpty; -public class WiFiPresenter implements WiFiContact.Presenter { +public class WiFiManagerViewModel extends BaseViewModel { - private WiFiContact.WiFiView mView; - private Context mContext; - - private BehaviorSubject lifecycle; - - public void setLifecycle(BehaviorSubject lifecycle) { - this.lifecycle = lifecycle; - } - - public BehaviorSubject getLifecycle() { - return lifecycle; - } - - WiFiPresenter(Context context) { - this.mContext = context; + @Override + public ActivityWifiManagerBinding getVDBinding() { + return binding; } @Override - public void attachView(@NonNull WiFiContact.WiFiView view) { - this.mView = view; + public void onDestroy() { + } - @Override - public void detachView() { - this.mView = null; + private MutableLiveData> mSavedWiFiList =new MutableLiveData<>(); + + public MutableLiveData> getSavedWiFiList() { + return mSavedWiFiList; + } + + private MutableLiveData> mAvailableWiFiList =new MutableLiveData<>(); + + public MutableLiveData> getAvailableWiFiList() { + return mAvailableWiFiList; } - @Override public void getWiFiList() { - WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); + if (getCtx()==null)return; + WifiManager wifiManager = (WifiManager) getCtx().getSystemService(Context.WIFI_SERVICE); List wifiConfigurations = wifiManager.getConfiguredNetworks(); Map savedWifiConfiguration = new HashMap<>(); for (WifiConfiguration wifiConfiguration : wifiConfigurations) { @@ -110,7 +105,7 @@ public class WiFiPresenter implements WiFiContact.Presenter { } }); } - mView.setSavedWiFiList(savedList.stream().sorted(new Comparator() { + mSavedWiFiList.setValue(savedList.stream().sorted(new Comparator() { @Override public int compare(WiFiInfo o1, WiFiInfo o2) { if (o1.isAvailable()) { @@ -122,6 +117,6 @@ public class WiFiPresenter implements WiFiContact.Presenter { } } }).collect(Collectors.toList())); - mView.setAvailableWiFiList(availableList); + mAvailableWiFiList.setValue(availableList); } } diff --git a/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java index c3ee060..1b08332 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/AppSelectedAdapter.java @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; -import com.uiuios.aios.activity.QuickAppActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.bean.AppSelectBean; import com.uiuios.aios.config.CommonConfig; diff --git a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java index 93b57fe..8d49066 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.ArticleActivity; +import com.uiuios.aios.activity.article.ArticleActivity; import com.uiuios.aios.bean.ArticleInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java index 002842a..2232ddc 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/GoodsAdapter.java @@ -2,12 +2,10 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -17,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.bean.GoodsInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java index 1b0afd2..320ecdc 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/GoodsListAdapter.java @@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.bean.GoodsInfo; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java index 05846df..13ce5ef 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java @@ -2,7 +2,6 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.shehuan.niv.NiceImageView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.DetailsActivity; +import com.uiuios.aios.activity.details.DetailsActivity; import com.uiuios.aios.activity.GoodsActivity; import com.uiuios.aios.bean.GoodsInfo; diff --git a/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java index d8a9669..e2b8a9a 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/SOSNnmberAdapter.java @@ -12,7 +12,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; import com.uiuios.aios.bean.Contact; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java index 62a3696..7247fd6 100644 --- a/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java +++ b/app/src/main/java/com/uiuios/aios/adapter/WechatContactAdapter.java @@ -3,7 +3,6 @@ package com.uiuios.aios.adapter; import android.content.Context; import android.content.Intent; import android.provider.Settings; -import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -16,17 +15,10 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; 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.callwechat.CallWechatActivity; -import com.uiuios.aios.alarm.AlarmClockData; import com.uiuios.aios.bean.Contact; -import com.uiuios.aios.bean.WechatInfo; -import com.uiuios.aios.db.ContactManager; -import com.uiuios.aios.dialog.DeleteContactDialog; -import com.uiuios.aios.dialog.DeleteDialog; -import com.uiuios.aios.service.WeAccessibilityService; import com.uiuios.aios.utils.AccessibilityUtils; import java.util.List; diff --git a/app/src/main/java/com/uiuios/aios/base/BaseApplication.java b/app/src/main/java/com/uiuios/aios/base/BaseApplication.java index 3f3b223..573efbb 100644 --- a/app/src/main/java/com/uiuios/aios/base/BaseApplication.java +++ b/app/src/main/java/com/uiuios/aios/base/BaseApplication.java @@ -17,7 +17,7 @@ import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.alarm.AlarmUtils; -import com.uiuios.aios.db.ContactManager; +import com.uiuios.aios.db.WechatContactManager; import com.uiuios.aios.manager.AmapManager; import com.uiuios.aios.manager.AppManager; import com.uiuios.aios.manager.AppStatusManager; @@ -76,7 +76,7 @@ public class BaseApplication extends Application { } catch (Exception e) { Log.e(TAG, "onCreate: " + e.getMessage()); } - ContactManager.init(this); + WechatContactManager.init(this); } private void aliyunPushInit() { diff --git a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java index f00867f..2d06076 100644 --- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java +++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java @@ -74,4 +74,8 @@ public class CommonConfig { public static final String EMERGENCY_CONTACT_KEY = "emergency_contact_phone"; public static final String FAMILY_ADDRESS_KEY = "Family_Address"; + public static final String FLOAT_WINDOW = "FloatWindowEnable"; + + public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key"; + public static final String AMAP_LOCATION_District = "AMapLocationMapBean_key"; } diff --git a/app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java b/app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java similarity index 72% rename from app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java rename to app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java index e4d3994..ef25128 100644 --- a/app/src/main/java/com/uiuios/aios/db/ContactDbHelper.java +++ b/app/src/main/java/com/uiuios/aios/db/WechatContactDbHelper.java @@ -10,27 +10,27 @@ import androidx.annotation.Nullable; import java.io.File; -public class ContactDbHelper extends SQLiteOpenHelper { +public class WechatContactDbHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "contactList.db"; public static final String TABLE_NAME = "contact_table"; private static final int DATABASE_VERSION = 1; - public ContactDbHelper(Context context) { + public WechatContactDbHelper(Context context) { // super(context, DATABASE_FILE_NAME, null, DATABASE_VERSION); super(context, context.getExternalCacheDir() + File.separator + DATABASE_NAME, null, DATABASE_VERSION); // super(context, Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_FILE_NAME, null, DATABASE_VERSION); } - public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { + public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } - public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) { + public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } -// public ContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) { +// public WechatContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) { // super(context, name, version, openParams); // } diff --git a/app/src/main/java/com/uiuios/aios/db/ContactManager.java b/app/src/main/java/com/uiuios/aios/db/WechatContactManager.java similarity index 75% rename from app/src/main/java/com/uiuios/aios/db/ContactManager.java rename to app/src/main/java/com/uiuios/aios/db/WechatContactManager.java index 3817d34..ef035dd 100644 --- a/app/src/main/java/com/uiuios/aios/db/ContactManager.java +++ b/app/src/main/java/com/uiuios/aios/db/WechatContactManager.java @@ -12,39 +12,39 @@ import com.uiuios.aios.bean.WechatInfo; import java.util.ArrayList; import java.util.List; -public class ContactManager { - private static String TAG = ContactManager.class.getSimpleName(); +public class WechatContactManager { + private static String TAG = WechatContactManager.class.getSimpleName(); @SuppressLint("StaticFieldLeak") - private static ContactManager sInstance; + private static WechatContactManager sInstance; private Context mContext; - private ContactDbHelper mDBHelper; + private WechatContactDbHelper mDBHelper; - private ContactManager(Context context) { + private WechatContactManager(Context context) { if (context == null) { throw new RuntimeException("Context is NULL"); } mContext = context; - mDBHelper = new ContactDbHelper(context); + mDBHelper = new WechatContactDbHelper(context); } public static void init(Context context) { if (sInstance == null) { - sInstance = new ContactManager(context); + sInstance = new WechatContactManager(context); } } - public static ContactManager getInstance() { + public static WechatContactManager getInstance() { if (sInstance == null) { - throw new IllegalStateException("You must be init ContactManager first"); + throw new IllegalStateException("You must be init WechatContactManager first"); } return sInstance; } - public ContactDbHelper getDBHelper() { + public WechatContactDbHelper getDBHelper() { if (mDBHelper == null) { - mDBHelper = new ContactDbHelper(mContext); + mDBHelper = new WechatContactDbHelper(mContext); } return mDBHelper; } @@ -57,11 +57,11 @@ public class ContactManager { values.put("wechatid", wechatInfo.getWechatId()); values.put("mobile", wechatInfo.getMobile()); values.put("avatar_path", wechatInfo.getAvatarPath()); -// long id = db.insert(ContactDbHelper.TABLE_NAME, null, values); +// long id = db.insert(WechatContactDbHelper.TABLE_NAME, null, values); long id = -1; db.beginTransaction(); try { - id = db.insertWithOnConflict(ContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); + id = db.insertWithOnConflict(WechatContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); db.setTransactionSuccessful(); } catch (Exception e) { Log.e(TAG, "addWechatInfo: " + e.getMessage()); @@ -73,13 +73,13 @@ public class ContactManager { public boolean delete(Integer sqlId) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); - long id = db.delete(ContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()}); + long id = db.delete(WechatContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()}); return id > 0; } public boolean deleteAll() { SQLiteDatabase db = mDBHelper.getWritableDatabase(); - long id = db.delete(ContactDbHelper.TABLE_NAME, "", null); + long id = db.delete(WechatContactDbHelper.TABLE_NAME, "", null); return id > 0; } @@ -91,7 +91,7 @@ public class ContactManager { values.put("wechatid", wechatInfo.getWechatId()); values.put("mobile", wechatInfo.getMobile()); values.put("avatar_path", wechatInfo.getAvatarPath()); - long id = db.update(ContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())}); + long id = db.update(WechatContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())}); return id > 0; } @@ -99,7 +99,7 @@ public class ContactManager { List wechatInfoList = new ArrayList<>(); SQLiteDatabase db = mDBHelper.getReadableDatabase(); long time = System.currentTimeMillis(); - String sql = "select * from " + ContactDbHelper.TABLE_NAME; + String sql = "select * from " + WechatContactDbHelper.TABLE_NAME; Cursor cursor = null; try { cursor = db.rawQuery(sql, null); diff --git a/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java index 6f29957..3105912 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; import android.content.pm.PackageManager; -import android.content.res.Configuration; import android.graphics.Rect; import android.os.Bundle; import android.os.Process; @@ -27,15 +26,13 @@ import com.hjq.toast.Toaster; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiuios.aios.R; -import com.uiuios.aios.activity.ScreenLockActivity; +import com.uiuios.aios.activity.screenlock.ScreenLockActivity; import com.uiuios.aios.activity.dailyapp.DailyAppActivity; -import com.uiuios.aios.activity.main.OldMainActivity; +import com.uiuios.aios.activity.main.deprecated.OldMainActivity; import com.uiuios.aios.base.BaseFragment; -import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.BaseResponse; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; -import com.uiuios.aios.databinding.FragmentApplistBinding; import com.uiuios.aios.dialog.DailyAppDialog; import com.uiuios.aios.dialog.ShortcutDialog; import com.uiuios.aios.manager.AppManager; 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 14c8a66..6435205 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 @@ -8,10 +8,17 @@ import android.view.Gravity; import android.view.View; import android.view.Window; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.qweather.sdk.bean.weather.WeatherDailyBean; +import com.qweather.sdk.bean.weather.WeatherHourlyBean; +import com.qweather.sdk.bean.weather.WeatherNowBean; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; import com.uiuios.aios.activity.contact.AddWechatContactActivity; import com.uiuios.aios.activity.contact.EditContactActivity; @@ -19,18 +26,22 @@ 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.bean.MapBean; +import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.FragmentContactHomeBinding; -import com.uiuios.aios.db.ContactManager; -import com.uiuios.aios.dialog.DeleteContactDialog; import com.uiuios.aios.dialog.EditContactDialog; +import com.uiuios.aios.utils.DayUtils; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; public class ContactFragment extends BaseMvvmFragment { private static final String TAG = ContactFragment.class.getSimpleName(); + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private FragmentActivity mContext; private WechatContactAdapter mContactAdapter; @Override @@ -40,6 +51,7 @@ public class ContactFragment extends BaseMvvmFragment() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + } + }); + } else { + + } } @Override protected void initData(Bundle savedInstanceState) { + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } +// mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); + } + }); + + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); + mViewModel.getContactList().observe(this, new Observer>() { @Override public void onChanged(List contacts) { @@ -94,13 +207,14 @@ public class ContactFragment extends BaseMvvmFragment { private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -52,40 +46,21 @@ public class ContactViewModel extends BaseViewModel>() { -// @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: "); -// } -// }); + public void getCacheContact() { + String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null); + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + if (!TextUtils.isEmpty(jsonString)) { + List contacts = gson.fromJson(jsonString, type); + if (contacts != null) { + mContactList.setValue(contacts); + } + } + getContact(); + } + public void getContact() { NetInterfaceManager.getInstance() .getContactListObservable() .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) diff --git a/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java index 8f4b20c..ded36a0 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java @@ -32,17 +32,14 @@ import android.view.WindowManager; import android.widget.SeekBar; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; -import com.hjq.toast.Toaster; -import com.jeremyliao.liveeventbus.LiveEventBus; import com.tencent.mmkv.MMKV; import com.uiuios.aios.R; +import com.uiuios.aios.activity.setting.SettingActivity; import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment; import com.uiuios.aios.bean.FamilyAddress; -import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.databinding.PhoneFragmentControlBinding; import com.uiuios.aios.manager.AmapManager; @@ -171,12 +168,13 @@ public class ControlFragment extends BaseMvvmFragment() { // @Override // public void onChanged(@Nullable MapBean mapBean) { diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java index 383fef1..e5cce6e 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java @@ -50,9 +50,9 @@ import com.qweather.sdk.view.QWeather; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.ControlActivity; -import com.uiuios.aios.activity.EmergencyActivity; -import com.uiuios.aios.activity.QuickAppActivity; +import com.uiuios.aios.activity.control.ControlActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; import com.uiuios.aios.activity.code.FamilySpaceActivity; import com.uiuios.aios.activity.contact.ContactActivity; @@ -79,6 +79,7 @@ import com.uiuios.aios.push.PushManager; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUtil; import com.uiuios.aios.utils.BitmapUtils; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.utils.NetStateUtils; import com.uiuios.aios.utils.SchemeUtils; @@ -902,7 +903,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom case "150": case "102": case "152": - if (isnight()) { + if (DayUtils.isNight()) { cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun)); } else { cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night)); @@ -974,14 +975,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom }); } - private boolean isnight() { - Calendar calendar = Calendar.getInstance(); - int hour = calendar.get(Calendar.HOUR_OF_DAY); - int minute = calendar.get(Calendar.MINUTE); - int second = calendar.get(Calendar.SECOND); - return hour >= 16 && minute >= 30; - } - private void killBackgroundApp() { List pkgList = ApkUtils.queryFilterAppList(mContext); for (String pkg : pkgList) { 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 26b94d4..376f641 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 @@ -26,11 +26,12 @@ import com.qweather.sdk.bean.weather.WeatherNowBean; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; import com.uiuios.aios.R; -import com.uiuios.aios.activity.EmergencyActivity; +import com.uiuios.aios.activity.emergency.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.setting.SettingActivity; import com.uiuios.aios.activity.weather.WeatherActivity; import com.uiuios.aios.adapter.HomeAppAdapter; import com.uiuios.aios.alarm.AlarmClockData; @@ -47,6 +48,7 @@ import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.push.PushManager; import com.uiuios.aios.utils.ApkUtils; import com.uiuios.aios.utils.AppUtil; +import com.uiuios.aios.utils.DayUtils; import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; import java.text.ParseException; @@ -128,7 +130,7 @@ public class HomeFragment extends BaseMvvmFragment() { - @Override - public void onChanged(WeatherNowBean.NowBaseBean nowBaseBean) { - mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); - if (isNight()) { - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); - } else { - switch (nowBaseBean.getIcon()) { - default: - case "100": - case "150": - //晴 - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); - break; - case "102": - case "152": - //少云 - mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); - break; - } - } + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } // mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); - } - }); - - mViewModel.getHourlyBeanData().observe(this, new Observer() { - @Override - public void onChanged(WeatherHourlyBean.HourlyBean hourlyBean) { - String imageName = "he" + hourlyBean.getIcon(); - Log.e(TAG, "onSuccess: " + imageName); - if (isAdded()) { - int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); - Log.e(TAG, "onSuccess: " + resId); - if (resId == 0) { - mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); - } else { - mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); } - mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); - } - } - }); + }); - mViewModel.getDailyBeanData().observe(this, new Observer() { - @Override - public void onChanged(WeatherDailyBean.DailyBean dailyBean) { - mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); - } - }); + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); } @@ -271,18 +297,6 @@ public class HomeFragment extends BaseMvvmFragment stringIntegerHashMap = new HashMap<>(); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); @@ -304,6 +318,8 @@ public class HomeFragment extends BaseMvvmFragment() { @Override public void onChanged(@Nullable MapBean mapBean) { - mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict()); - mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude()); mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); - mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude()); } }); + } else { + } } - - private boolean isNight() { - Calendar calendar = Calendar.getInstance(); - int hour = calendar.get(Calendar.HOUR_OF_DAY); - int minute = calendar.get(Calendar.MINUTE); - int second = calendar.get(Calendar.SECOND); - return hour >= 16 && minute >= 30; - } - public class BtnClick { public void edit(View view) { startActivity(new Intent(mContext, AddIconActivity.class)); @@ -537,6 +505,11 @@ public class HomeFragment extends BaseMvvmFragment mNowBaseBeanData = new MutableLiveData<>(); - - public MutableLiveData getNowBaseBeanData() { - return mNowBaseBeanData; - } - - public void getWeatherNow(String location) { - Log.e(TAG, "getWeatherNow: " + location); - /** - * 实况天气数据 - * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度 - * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负) - * @param lang (选填)多语言,可以不使用该参数,默认为简体中文 - * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位 - * @param listener 网络访问结果回调 - */ - QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() { - @Override - public void onError(Throwable e) { - Log.e("getWeatherNow", "onError: " + e); - } - - @Override - public void onSuccess(WeatherNowBean weatherBean) { - Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean)); - //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因 - if (Code.OK == weatherBean.getCode()) { - WeatherNowBean.NowBaseBean now = weatherBean.getNow(); - mNowBaseBeanData.postValue(now); - Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now)); - } else { - //在此查看返回数据失败的原因 - Code code = weatherBean.getCode(); - Log.d("getWeatherNow", "failed code: " + code); - } - } - }); - } - - private MutableLiveData mHourlyBeanData = new MutableLiveData<>(); - - public MutableLiveData getHourlyBeanData() { - return mHourlyBeanData; - } - - public void getWeather24Hourly(String location) { - QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() { - @Override - public void onError(Throwable throwable) { - Log.e("getWeather24Hourly", "onError: " + throwable); - } - - @Override - public void onSuccess(WeatherHourlyBean weatherHourlyBean) { - Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean)); - if (Code.OK == weatherHourlyBean.getCode()) { - List hourly = weatherHourlyBean.getHourly(); - if (hourly != null && hourly.size() != 0) { - WeatherHourlyBean.HourlyBean now = hourly.get(0); - mHourlyBeanData.postValue(now); - } - } else { - //在此查看返回数据失败的原因 - Code code = weatherHourlyBean.getCode(); - Log.e("getWeather24Hourly", "failed code: " + code); - } - } - }); - } - - private MutableLiveData DailyBeanData = new MutableLiveData<>(); - - public MutableLiveData getDailyBeanData() { - return DailyBeanData; - } - - public void getWeather7D(String location) { - QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() { - @Override - public void onError(Throwable throwable) { - Log.e("getWeather7D", "onError: " + throwable.getMessage()); - - } - - @Override - public void onSuccess(WeatherDailyBean weatherDailyBean) { - String jsonString = new Gson().toJson(weatherDailyBean); - Log.d("getWeather7D", "onSuccess: " + jsonString); - mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString); - List dailyBeans = weatherDailyBean.getDaily(); - if (dailyBeans != null && dailyBeans.size() != 0) { - WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0); - DailyBeanData.postValue(dailyBean); - } - } - }); - } - } diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java index 5e989a2..977a8d4 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java @@ -105,10 +105,10 @@ public class ContactFragment extends BaseMvvmFragment>() { + }.getType(); + if (!TextUtils.isEmpty(jsonString)) { + List contacts = gson.fromJson(jsonString, type); + if (contacts != null) { + mContactListData.setValue(contacts); + } + } + getContact(); + } + public void getContact() { NetInterfaceManager.getInstance() .getContactListObservable() @@ -62,7 +78,7 @@ public class ContactViewModel extends BaseViewModel()); } } @@ -75,7 +91,7 @@ public class ContactViewModel extends BaseViewModel contacts = gson.fromJson(jsonString, type); if (contacts == null) { -// mContactListData.setValue(null); + mContactListData.setValue(new ArrayList<>()); } else { mContactListData.setValue(contacts); } @@ -89,7 +105,7 @@ public class ContactViewModel extends BaseViewModel mDeleteData =new MutableLiveData<>(); + private MutableLiveData mDeleteData = new MutableLiveData<>(); public MutableLiveData getDeleteData() { return mDeleteData; diff --git a/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java new file mode 100644 index 0000000..877b3d5 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsFragment.java @@ -0,0 +1,315 @@ +package com.uiuios.aios.fragment.settings; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.blankj.utilcode.util.NetworkUtils; +import com.hjq.toast.Toaster; +import com.jeremyliao.liveeventbus.LiveEventBus; +import com.qweather.sdk.bean.weather.WeatherDailyBean; +import com.qweather.sdk.bean.weather.WeatherHourlyBean; +import com.qweather.sdk.bean.weather.WeatherNowBean; +import com.tencent.mmkv.MMKV; +import com.uiuios.aios.BuildConfig; +import com.uiuios.aios.R; +import com.uiuios.aios.activity.addicon.AddIconActivity; +import com.uiuios.aios.activity.alarm.port.PortAlarmActivity; +import com.uiuios.aios.activity.contact.AddContactActivity; +import com.uiuios.aios.activity.contact.ContactActivity; +import com.uiuios.aios.activity.dailyapp.DailyAppActivity; +import com.uiuios.aios.activity.emergency.EmergencyActivity; +import com.uiuios.aios.activity.setting.SettingActivity; +import com.uiuios.aios.activity.weather.WeatherActivity; +import com.uiuios.aios.adapter.HomeAppAdapter; +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.Contact; +import com.uiuios.aios.bean.DesktopIcon; +import com.uiuios.aios.bean.MapBean; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentHomeBinding; +import com.uiuios.aios.databinding.FragmentSettingsBinding; +import com.uiuios.aios.dialog.SingleDialog; +import com.uiuios.aios.fragment.home.HomeViewModel; +import com.uiuios.aios.manager.AmapManager; +import com.uiuios.aios.manager.RemoteManager; +import com.uiuios.aios.network.NetInterfaceManager; +import com.uiuios.aios.push.PushManager; +import com.uiuios.aios.utils.ApkUtils; +import com.uiuios.aios.utils.AppUtil; +import com.uiuios.aios.utils.DayUtils; +import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SettingsFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SettingsFragment extends BaseMvvmFragment implements NetworkUtils.OnNetworkStatusChangedListener { + private static final String TAG = SettingsFragment.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + private FragmentActivity mContext; + + public SettingsFragment() { + + } + + + public static SettingsFragment newInstance() { + SettingsFragment fragment = new SettingsFragment(); + return fragment; + } + + @Override + public void onDisconnected() { + Log.e(TAG, "onDisconnected: "); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Log.e(TAG, "onConnected: " + networkType); + initAmap(); + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_settings; + } + + @Override + protected void initDataBinding() { + mContext = getActivity(); + mViewModel.setCtx(mContext); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView(Bundle bundle) { + NetworkUtils.registerNetworkStatusChangedListener(this); + initView(); + } + + @Override + protected void initData(Bundle savedInstanceState) { + LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation2.setText(mapBean.getAddress()); + } + }); + LiveEventBus + .get("some_key1", WeatherNowBean.NowBaseBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) { + mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃"); + if (DayUtils.isNight()) { + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night)); + } else { + switch (nowBaseBean.getIcon()) { + default: + case "100": + case "150": + //晴 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather)); + break; + case "102": + case "152": + //少云 + mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain)); + break; + } + } +// mViewDataBinding.tvWeather.setText(nowBaseBean.getText()); + } + }); + + LiveEventBus + .get("some_key2", WeatherHourlyBean.HourlyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) { + String imageName = "he" + hourlyBean.getIcon(); + Log.e(TAG, "onSuccess: " + imageName); + if (isAdded()) { + int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName()); + Log.e(TAG, "onSuccess: " + resId); + if (resId == 0) { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100)); + } else { + mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId)); + } + mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃"); + } + } + }); + + LiveEventBus + .get("some_key3", WeatherDailyBean.DailyBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) { + mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃"); + } + }); + + LiveEventBus + .get("time", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvTime.setText(s); + } + }); + + LiveEventBus + .get("week", String.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable String s) { + mViewDataBinding.tvData.setText(s); + } + }); + + } + + private void initView() { + initAmap(); + setTime(); + getLocation(); + } + + @Override + public void onResume() { + super.onResume(); + Log.e(TAG, "onResume: "); + mViewModel.init(); + registerReceivers(); + String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT); + mViewDataBinding.tvLocation.setText(district); + } + + @Override + public void onPause() { + super.onPause(); + unregisterReceivers(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + NetworkUtils.unregisterNetworkStatusChangedListener(this); + } + + private void registerReceivers() { + + } + + private void unregisterReceivers() { + } + + + private void setTime() { + long time = System.currentTimeMillis(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); + Date date = new Date(time); + mViewDataBinding.tvTime.setText(sdf.format(date)); + SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日"); + Date date2 = new Date(time); + mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + DayUtils.getWeek()); + } + + + private void initAmap() { + boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false); + + if (!manual) { + LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class) + .observe(this, new Observer() { + @Override + public void onChanged(@Nullable MapBean mapBean) { + mViewDataBinding.tvLocation.setText(mapBean.getDistrict()); + } + }); + } else { + + } + } + + private void getLocation() { + String addr = mMMKV.decodeString(CommonConfig.MAP_ADDRESS_KEY); + if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) { + mViewDataBinding.tvLocation2.setText("获取地址失败"); + } else { + mViewDataBinding.tvLocation2.setText(addr); + } + } + + + public class BtnClick { + + public void toSn(View view) { + if (!ApkUtils.openPackage(mContext, "com.uiuios.sn")) { + Toaster.show("打开失败,请检查应用是否安装"); + } + } + + public void addContact(View view) { + startActivity(new Intent(mContext, AddContactActivity.class)); + } + + public void openWifi(View view) { + startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + + public void openNetwork(View view) { + startActivity(new Intent(Settings.ACTION_DATA_USAGE_SETTINGS)); +// startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); + } + + public void toWeather(View view) { + startActivity(new Intent(mContext, WeatherActivity.class)); + } + + public void getAddress(View view) { + AmapManager.getInstance().startLocation(); + } + + } +} diff --git a/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java new file mode 100644 index 0000000..938043f --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/settings/SettingsViewModel.java @@ -0,0 +1,29 @@ +package com.uiuios.aios.fragment.settings; + +import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentSettingsBinding; + +public class SettingsViewModel extends BaseViewModel { + private static final String TAG = SettingsViewModel.class.getSimpleName(); + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @Override + public FragmentSettingsBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public void init() { + + } + + +} diff --git a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java index 131da95..ac4cb7a 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java @@ -128,7 +128,7 @@ public class AmapManager { mMapBean = getMapBean(aMapLocation); saveMapResult(mMapBean); LiveEventBus - .get("MapBean") + .get(CommonConfig.AMAP_LOCATION_MAP_BEAN) .post(mMapBean); Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress()); sb.append(aMapLocation.getAddress()).append("\n"); 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 f8096c8..590b125 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java @@ -8,7 +8,7 @@ import android.content.pm.ResolveInfo; import android.util.Log; import com.tencent.mmkv.MMKV; -import com.uiuios.aios.activity.main.OldMainActivity; +import com.uiuios.aios.activity.main.deprecated.OldMainActivity; import com.uiuios.aios.bean.DailyAppBean; import com.uiuios.aios.config.CommonConfig; 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 45f8b86..16dc2ac 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 @@ -5,21 +5,33 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.graphics.PixelFormat; +import android.os.Build; import android.os.IBinder; import android.os.PowerManager; +import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.NetworkUtils; +import com.shehuan.niv.NiceImageView; +import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; +import com.uiuios.aios.R; +import com.uiuios.aios.activity.main.MainActivity; 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; import com.uiuios.aios.bean.BaseResponse; +import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.manager.RemoteManager; import com.uiuios.aios.network.NetInterfaceManager; import com.uiuios.aios.utils.ApkUtils; @@ -48,8 +60,18 @@ import okhttp3.RequestBody; public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainService.class.getSimpleName(); - @SuppressLint("StaticFieldLeak") - public MainSPresenter mPresenter; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + public MainSPresenter mPresenter; + + private boolean mFloatWindowEnable; + private WindowManager mWindowManager; + private View mBallView; + private WindowManager.LayoutParams mBallParams; + public boolean isBallShown = false; + + private static final String Float_Window_X = "float_window_x_key"; + private static final String Float_Window_Y = "float_window_y_key"; public MainService() { @@ -106,6 +128,11 @@ public class MainService extends BaseRxService implements MainSContact.MainSView // ApkUtils.UninstallAPP(this, "com.joytv.live"); // ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader"); + mFloatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false); + mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); + showPopupWindow(); + + Aria.init(this); Aria.download(this).register(); mPresenter = new MainSPresenter(this); @@ -113,10 +140,12 @@ public class MainService extends BaseRxService implements MainSContact.MainSView mPresenter.setLifecycle(lifecycleSubject); NetworkUtils.registerNetworkStatusChangedListener(this); mPresenter.addAlarmClock(); + registerAlarmReceiver(); registerTimeReceiver(); registerLockScreenReceiver(); registerRefreshReceiver(); + registerScreenLockReceiver(); } @Override @@ -142,6 +171,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView if (mUploadAlarmClockReceiver != null) { unregisterReceiver(mUploadAlarmClockReceiver); } + if (mWindowReceiver != null) { + unregisterReceiver(mWindowReceiver); + } } @Override @@ -455,6 +487,158 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } } + public static final String ACTION_FLOAT_WINDOW_ON = "com.tt.float.window.on"; + public static final String ACTION_FLOAT_WINDOW_OFF = "com.tt.float.window.off"; + + private WindowReceiver mWindowReceiver; + + private void registerScreenLockReceiver() { + if (null == mWindowReceiver) { + mWindowReceiver = new WindowReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction(ACTION_FLOAT_WINDOW_ON); + filter.addAction(ACTION_FLOAT_WINDOW_OFF); + registerReceiver(mWindowReceiver, filter); + } + + private class WindowReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + Log.e(TAG, "onReceive: " + action); + if (TextUtils.isEmpty(action)) { + return; + } + switch (action) { + case ACTION_FLOAT_WINDOW_ON: + mMMKV.encode(CommonConfig.FLOAT_WINDOW, true); + mFloatWindowEnable = true; + showPopupWindow(); + break; + case ACTION_FLOAT_WINDOW_OFF: + mMMKV.encode(CommonConfig.FLOAT_WINDOW, false); + mFloatWindowEnable = false; + if (mWindowManager != null && mBallView != null) { + if (mBallView.isAttachedToWindow()) { + mWindowManager.removeView(mBallView); + } + mMMKV.encode(Float_Window_X, mBallParams.x); + mMMKV.encode(Float_Window_Y, mBallParams.y); + } + isBallShown = false; + break; + default: + } + } + } + + /** + * 显示弹出框 + */ + @SuppressWarnings("WrongConstant") + public void showPopupWindow() { + if (!mFloatWindowEnable) { + Log.e(TAG, "showPopupWindow: not enable"); + return; + } + if (isBallShown) { + return; + } + if (!Settings.canDrawOverlays(this)) { + return; + } + mBallView = setUpView(); + mBallParams = new WindowManager.LayoutParams(); + // 类型,系统提示以及它总是出现在应用程序窗口之上。 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + mBallParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + mBallParams.type = WindowManager.LayoutParams.TYPE_PHONE; + } + // 设置flag + // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + // 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View收不到Back键的事件 + mBallParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH +// | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; + + // 不设置这个弹出框的透明遮罩显示为黑色 + mBallParams.format = PixelFormat.TRANSLUCENT; + // FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口 + // 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按 + // 不设置这个flag的话,home页的划屏会有问题 + mBallParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mBallParams.height = WindowManager.LayoutParams.WRAP_CONTENT; +// mBallParams.gravity = Gravity.TOP; + int x = mMMKV.decodeInt(Float_Window_X, 0); + int y = mMMKV.decodeInt(Float_Window_Y, 0); + mBallParams.x = x; + mBallParams.y = y; + mWindowManager.addView(mBallView, mBallParams); + isBallShown = true; + } + + private View setUpView() { + View view = LayoutInflater.from(this).inflate(R.layout.window_float_ball, null); + NiceImageView iv_ball = view.findViewById(R.id.iv_ball); + iv_ball.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e("iv_ball", "onClick: "); +// closeToolWindow(); + Intent intent = new Intent(MainService.this, MainActivity.class); + intent.setAction("android.intent.action.MAIN"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + }); + iv_ball.setOnTouchListener(new View.OnTouchListener() { + private float lastX; //上一次位置的X.Y坐标 + private float lastY; + private float nowX; //当前移动位置的X.Y坐标 + private float nowY; + private float tranX; //悬浮窗移动位置的相对值 + private float tranY; + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + // 获取按下时的X,Y坐标 + lastX = event.getRawX(); + lastY = event.getRawY(); + break; + case MotionEvent.ACTION_MOVE: + // 获取移动时的X,Y坐标 + nowX = event.getRawX(); + nowY = event.getRawY(); + // 计算XY坐标偏移量 + tranX = nowX - lastX; + tranY = nowY - lastY; + mBallParams.x += tranX; + mBallParams.y += tranY; + //更新悬浮窗位置 + mWindowManager.updateViewLayout(mBallView, mBallParams); + mMMKV.encode(Float_Window_X, mBallParams.x); + mMMKV.encode(Float_Window_Y, mBallParams.y); + //记录当前坐标作为下一次计算的上一次移动的位置坐标 + lastX = nowX; + lastY = nowY; + break; + case MotionEvent.ACTION_UP: + + break; + default: + } + return false; + } + }); + return view; + } + + //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning protected void running(DownloadTask task) { 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 c16d0e8..8e0c044 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,7 @@ import androidx.annotation.RequiresApi; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.uiuios.aios.BuildConfig; -import com.uiuios.aios.activity.QuickAppActivity; +import com.uiuios.aios.activity.quickapp.QuickAppActivity; import com.uiuios.aios.bean.DesktopIcon; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.manager.AppManager; @@ -163,6 +163,7 @@ public class ApkUtils { }}; private static List hideApp = new ArrayList() {{ + this.add("com.uiuios.sn"); this.add("com.uiuios.aios"); this.add("com.uiuios.appstore"); this.add("com.android.quicksearchbox"); @@ -373,12 +374,12 @@ public class ApkUtils { 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); - } +// 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)) { @@ -528,6 +529,7 @@ public class ApkUtils { pkgContext.startActivity(intent); return true; } + Toaster.show("应用未安装"); return false; } diff --git a/app/src/main/java/com/uiuios/aios/utils/DayUtils.java b/app/src/main/java/com/uiuios/aios/utils/DayUtils.java new file mode 100644 index 0000000..5a4e52e --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/utils/DayUtils.java @@ -0,0 +1,29 @@ +package com.uiuios.aios.utils; + +import java.util.Calendar; +import java.util.Date; + +public class DayUtils { + public static boolean isNight() { + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int second = calendar.get(Calendar.SECOND); + return hour >= 16 && minute >= 30; + } + + /** + * @return 根据日期取得星期几 + */ + public static String getWeek() { + Date date = new Date(); + String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (weekIndex < 0) { + weekIndex = 0; + } + return weeks[weekIndex]; + } +} diff --git a/app/src/main/res/drawable-hdpi/home_family_space.png b/app/src/main/res/drawable-hdpi/home_family_space.png index f22cdf8..cba1fd7 100644 Binary files a/app/src/main/res/drawable-hdpi/home_family_space.png and b/app/src/main/res/drawable-hdpi/home_family_space.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_accessibility.png b/app/src/main/res/drawable-hdpi/home_icon_accessibility.png new file mode 100644 index 0000000..1bf73c9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_accessibility.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_app.png b/app/src/main/res/drawable-hdpi/home_icon_app.png new file mode 100644 index 0000000..ab0ff10 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_app.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_appstore.png b/app/src/main/res/drawable-hdpi/home_icon_appstore.png new file mode 100644 index 0000000..4e5edf6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_appstore.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_calendar.png b/app/src/main/res/drawable-hdpi/home_icon_calendar.png new file mode 100644 index 0000000..5f77c4a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_calendar.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_clock.png b/app/src/main/res/drawable-hdpi/home_icon_clock.png new file mode 100644 index 0000000..3caa761 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_clock.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_dialer.png b/app/src/main/res/drawable-hdpi/home_icon_dialer.png new file mode 100644 index 0000000..1feb747 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_dialer.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_flash.png b/app/src/main/res/drawable-hdpi/home_icon_flash.png new file mode 100644 index 0000000..bf6975b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_flash.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_setting.png b/app/src/main/res/drawable-hdpi/home_icon_setting.png new file mode 100644 index 0000000..4ec0fca Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_setting.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_tiktok.png b/app/src/main/res/drawable-hdpi/home_icon_tiktok.png new file mode 100644 index 0000000..1633f4d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_tiktok.png differ diff --git a/app/src/main/res/drawable-hdpi/home_icon_wechat.png b/app/src/main/res/drawable-hdpi/home_icon_wechat.png new file mode 100644 index 0000000..24417ec Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_wechat.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_floatball.png b/app/src/main/res/drawable-hdpi/icon_floatball.png new file mode 100644 index 0000000..042bb8d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_floatball.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_more.png b/app/src/main/res/drawable-hdpi/icon_more.png index e41c9d8..02efbc7 100644 Binary files a/app/src/main/res/drawable-hdpi/icon_more.png and b/app/src/main/res/drawable-hdpi/icon_more.png differ diff --git a/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png b/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png new file mode 100644 index 0000000..c04d48e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png differ diff --git a/app/src/main/res/drawable-hdpi/setting_icon_bind.png b/app/src/main/res/drawable-hdpi/setting_icon_bind.png new file mode 100644 index 0000000..2b3e166 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/setting_icon_bind.png differ diff --git a/app/src/main/res/drawable-hdpi/setting_icon_network.png b/app/src/main/res/drawable-hdpi/setting_icon_network.png new file mode 100644 index 0000000..72ea1b8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/setting_icon_network.png differ diff --git a/app/src/main/res/drawable-hdpi/setting_icon_wifi.png b/app/src/main/res/drawable-hdpi/setting_icon_wifi.png new file mode 100644 index 0000000..458da6e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/setting_icon_wifi.png differ diff --git a/app/src/main/res/drawable/fragment_add_contact_background.xml b/app/src/main/res/drawable/fragment_add_contact_background.xml index 7a66681..a10881f 100644 --- a/app/src/main/res/drawable/fragment_add_contact_background.xml +++ b/app/src/main/res/drawable/fragment_add_contact_background.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/res/drawable/general_setting_bg.xml b/app/src/main/res/drawable/general_setting_bg.xml new file mode 100644 index 0000000..951d76e --- /dev/null +++ b/app/src/main/res/drawable/general_setting_bg.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_accessibility_bg.xml b/app/src/main/res/drawable/home_card_accessibility_bg.xml new file mode 100644 index 0000000..1305f8d --- /dev/null +++ b/app/src/main/res/drawable/home_card_accessibility_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_app_bg.xml b/app/src/main/res/drawable/home_card_app_bg.xml new file mode 100644 index 0000000..48f22aa --- /dev/null +++ b/app/src/main/res/drawable/home_card_app_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_appsotre_bg.xml b/app/src/main/res/drawable/home_card_appsotre_bg.xml new file mode 100644 index 0000000..4ea417f --- /dev/null +++ b/app/src/main/res/drawable/home_card_appsotre_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_clock_bg.xml b/app/src/main/res/drawable/home_card_clock_bg.xml new file mode 100644 index 0000000..133119c --- /dev/null +++ b/app/src/main/res/drawable/home_card_clock_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_card_setting_bg.xml b/app/src/main/res/drawable/home_card_setting_bg.xml new file mode 100644 index 0000000..4e382af --- /dev/null +++ b/app/src/main/res/drawable/home_card_setting_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_add_contact_bg.xml b/app/src/main/res/drawable/setting_card_add_contact_bg.xml new file mode 100644 index 0000000..272ecfa --- /dev/null +++ b/app/src/main/res/drawable/setting_card_add_contact_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_bind_bg.xml b/app/src/main/res/drawable/setting_card_bind_bg.xml new file mode 100644 index 0000000..4e382af --- /dev/null +++ b/app/src/main/res/drawable/setting_card_bind_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_location_bg.xml b/app/src/main/res/drawable/setting_card_location_bg.xml new file mode 100644 index 0000000..3338927 --- /dev/null +++ b/app/src/main/res/drawable/setting_card_location_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_network_bg.xml b/app/src/main/res/drawable/setting_card_network_bg.xml new file mode 100644 index 0000000..4ea417f --- /dev/null +++ b/app/src/main/res/drawable/setting_card_network_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_card_wifi_bg.xml b/app/src/main/res/drawable/setting_card_wifi_bg.xml new file mode 100644 index 0000000..48f22aa --- /dev/null +++ b/app/src/main/res/drawable/setting_card_wifi_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_control.xml b/app/src/main/res/layout-land/activity_control.xml index 5b6b497..157cb4b 100644 --- a/app/src/main/res/layout-land/activity_control.xml +++ b/app/src/main/res/layout-land/activity_control.xml @@ -1,469 +1,479 @@ - + tools:context=".activity.control.ControlActivity"> + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + - - - - - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="2" + android:orientation="horizontal"> - + android:background="@drawable/control_background_item"> - + - + + + + + android:background="@drawable/control_background_item"> + + + + + + + - - - - - - - - - - - - + - - - + + + - - - - - - - + app:layout_constraintEnd_toEndOf="@+id/linearLayout" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="@+id/linearLayout" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintStart_toEndOf="@+id/imageView" + app:layout_constraintTop_toBottomOf="@+id/seekBar"> + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + android:orientation="vertical"> - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_dailyapp.xml b/app/src/main/res/layout-land/activity_dailyapp.xml index 3de638c..af547f7 100644 --- a/app/src/main/res/layout-land/activity_dailyapp.xml +++ b/app/src/main/res/layout-land/activity_dailyapp.xml @@ -1,64 +1,71 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + - + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_dialer.xml b/app/src/main/res/layout-land/activity_dialer.xml index f9f7195..371c34c 100644 --- a/app/src/main/res/layout-land/activity_dialer.xml +++ b/app/src/main/res/layout-land/activity_dialer.xml @@ -1,465 +1,472 @@ - - + - + + + + + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout9" /> - - - - - - + android:layout_weight="1"> - + android:layout_margin="@dimen/dp_32" + android:background="@drawable/add_contact_background"> + android:layout_height="match_parent" + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_emergency.xml b/app/src/main/res/layout-land/activity_emergency.xml index 0aac31d..7bc3639 100644 --- a/app/src/main/res/layout-land/activity_emergency.xml +++ b/app/src/main/res/layout-land/activity_emergency.xml @@ -1,49 +1,56 @@ - + tools:context=".activity.emergency.EmergencyActivity"> - + - + - + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_control.xml b/app/src/main/res/layout-port/activity_control.xml index 528f0bc..d44a41b 100644 --- a/app/src/main/res/layout-port/activity_control.xml +++ b/app/src/main/res/layout-port/activity_control.xml @@ -1,447 +1,457 @@ - + tools:context=".activity.control.ControlActivity"> + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="4" + android:orientation="horizontal"> - + android:background="@drawable/control_background_item"> - + - + + + + + android:background="@drawable/control_background_item"> + + + + + + + - - - - - - - - - - - + - - + - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_dailyapp.xml b/app/src/main/res/layout-port/activity_dailyapp.xml index 9363681..97afa4c 100644 --- a/app/src/main/res/layout-port/activity_dailyapp.xml +++ b/app/src/main/res/layout-port/activity_dailyapp.xml @@ -1,64 +1,71 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + - + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_dialer.xml b/app/src/main/res/layout-port/activity_dialer.xml index fdaccb6..da8fbd5 100644 --- a/app/src/main/res/layout-port/activity_dialer.xml +++ b/app/src/main/res/layout-port/activity_dialer.xml @@ -1,458 +1,466 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> + android:layout_height="match_parent"> - - - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_32" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + android:layout_height="match_parent" + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + - + android:orientation="horizontal"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + 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-port/activity_emergency.xml b/app/src/main/res/layout-port/activity_emergency.xml index 5cc0c5a..ba4046e 100644 --- a/app/src/main/res/layout-port/activity_emergency.xml +++ b/app/src/main/res/layout-port/activity_emergency.xml @@ -1,50 +1,57 @@ - + tools:context=".activity.emergency.EmergencyActivity"> - + - + - + + + + + + + - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_home.xml b/app/src/main/res/layout-port/fragment_home.xml index 5ce1ff2..179293e 100644 --- a/app/src/main/res/layout-port/fragment_home.xml +++ b/app/src/main/res/layout-port/fragment_home.xml @@ -30,9 +30,8 @@ + + + + + + + + + @@ -181,6 +222,7 @@ android:textColor="#b48a5a" android:textSize="@dimen/sp_16" android:textStyle="bold" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -190,6 +232,7 @@ android:adjustViewBounds="true" android:scaleType="centerCrop" android:src="@drawable/icon_play" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/niceImageView2" @@ -275,6 +318,7 @@ android:layout_weight="1" android:background="@drawable/home_card_bg" android:onClick="@{click::killApp}" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -285,7 +329,7 @@ android:layout_marginBottom="@dimen/dp_8" android:text="一键加速" android:textColor="@color/white" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_17" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -309,6 +353,46 @@ + + + + + + + + + + + @@ -526,7 +622,7 @@ android:layout_marginBottom="@dimen/dp_8" android:text="更多应用" android:textColor="@color/white" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_17" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -574,11 +670,11 @@ app:layout_constraintTop_toBottomOf="@+id/tv_app" /> - + + + + + android:layout_height="match_parent" + android:background="@color/gray"> - + app:layout_constraintTop_toTopOf="parent"> - + - + + android:layout_width="match_parent" + android:layout_height="0dp" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout13"> - - - + + android:layout_marginStart="@dimen/dp_8" + android:layout_marginEnd="@dimen/dp_8" + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="4" + android:background="@drawable/add_alarm_background"> - - - - - - - - - - - - - - - - - - - - - - - - - + + android:layout_marginStart="@dimen/dp_48" + android:layout_marginEnd="@dimen/dp_48" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView24" /> - + - + + + + + + + + + + + + + + + + + + + + + + + + android:id="@+id/cl_type" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> - + - + + + + + + + + + + + + - - + - + - + + + + + + + + + + + + + android:layout_marginTop="@dimen/dp_8" + android:text="标题" + android:textColor="@color/black" + android:textSize="@dimen/sp_12" + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + android:id="@+id/cl_activation" + android:layout_width="0dp" + android:layout_height="@dimen/dp_28" + android:layout_marginStart="@dimen/dp_16" + android:layout_marginEnd="@dimen/dp_16" + android:background="@drawable/edit_background" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginBottom="@dimen/dp_8" + android:layout_weight="3" + android:background="@drawable/add_alarm_background"> + + + + + + + + + + + - + - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_item.xml b/app/src/main/res/layout/activity_add_item.xml new file mode 100644 index 0000000..c3ed03b --- /dev/null +++ b/app/src/main/res/layout/activity_add_item.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_articl.xml b/app/src/main/res/layout/activity_articl.xml index 1298e0e..ceb5282 100644 --- a/app/src/main/res/layout/activity_articl.xml +++ b/app/src/main/res/layout/activity_articl.xml @@ -1,92 +1,99 @@ - + tools:context=".activity.article.ArticleActivity"> + + + + - - - - - - - + android:layout_height="match_parent" + android:background="@color/white"> + android:layout_height="@dimen/dp_36" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - - + app:layout_constraintStart_toEndOf="@+id/iv_back" + 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_details.xml b/app/src/main/res/layout/activity_details.xml index 5e4f062..2ba4b0b 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -2,7 +2,7 @@ + tools:context=".activity.details.DetailsActivity"> diff --git a/app/src/main/res/layout/activity_info_list.xml b/app/src/main/res/layout/activity_info_list.xml index 2d87cb5..d806f3b 100644 --- a/app/src/main/res/layout/activity_info_list.xml +++ b/app/src/main/res/layout/activity_info_list.xml @@ -1,104 +1,111 @@ - + tools:context=".activity.infolist.InfoListActivity"> + + + + - - + android:layout_height="match_parent" + android:background="@color/gray"> - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_back" + 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_main_old.xml b/app/src/main/res/layout/activity_main_old.xml index c4d82b5..e9b812a 100644 --- a/app/src/main/res/layout/activity_main_old.xml +++ b/app/src/main/res/layout/activity_main_old.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/control_background" - tools:context=".activity.main.OldMainActivity"> + tools:context=".activity.main.deprecated.OldMainActivity"> - + tools:context=".activity.quickapp.QuickAppActivity"> - + + + + + android:layout_height="match_parent"> - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_records.xml b/app/src/main/res/layout/activity_records.xml index 3af15bb..db1bcd2 100644 --- a/app/src/main/res/layout/activity_records.xml +++ b/app/src/main/res/layout/activity_records.xml @@ -1,102 +1,109 @@ - - + - + + + + + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout3" /> - - - - - - - - - - - - + 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_screen_lock.xml b/app/src/main/res/layout/activity_screen_lock.xml index 63dd006..c93fd50 100644 --- a/app/src/main/res/layout/activity_screen_lock.xml +++ b/app/src/main/res/layout/activity_screen_lock.xml @@ -1,250 +1,258 @@ - + tools:context=".activity.screenlock.ScreenLockActivity" + xmlns:tools="http://schemas.android.com/tools"> - + - + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - - - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.11" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/activity_select_number.xml b/app/src/main/res/layout/activity_select_number.xml index e4e668e..b74ba41 100644 --- a/app/src/main/res/layout/activity_select_number.xml +++ b/app/src/main/res/layout/activity_select_number.xml @@ -1,14 +1,21 @@ - + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..3214c9e --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_touch.xml b/app/src/main/res/layout/activity_touch.xml new file mode 100644 index 0000000..028fc3b --- /dev/null +++ b/app/src/main/res/layout/activity_touch.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_wifi_manager.xml b/app/src/main/res/layout/activity_wifi_manager.xml index f479b56..942c64e 100644 --- a/app/src/main/res/layout/activity_wifi_manager.xml +++ b/app/src/main/res/layout/activity_wifi_manager.xml @@ -1,142 +1,150 @@ - + + + + + android:background="@color/wifi_background_color"> + + android:layout_height="match_parent" + android:background="@drawable/background_wifi"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + app:layout_constraintTop_toBottomOf="@+id/constraintLayout12"> + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/add_item_confirmation_activity.xml b/app/src/main/res/layout/add_item_confirmation_activity.xml deleted file mode 100644 index 35c80ca..0000000 --- a/app/src/main/res/layout/add_item_confirmation_activity.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contact_home.xml b/app/src/main/res/layout/fragment_contact_home.xml index 695eec8..abafdce 100644 --- a/app/src/main/res/layout/fragment_contact_home.xml +++ b/app/src/main/res/layout/fragment_contact_home.xml @@ -17,24 +17,136 @@ + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_24"> + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/cl_weather" /> diff --git a/app/src/main/res/layout/fragment_control.xml b/app/src/main/res/layout/fragment_control.xml index 5e72101..22f9bb8 100644 --- a/app/src/main/res/layout/fragment_control.xml +++ b/app/src/main/res/layout/fragment_control.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.ControlActivity"> + tools:context=".activity.control.ControlActivity"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_contact_wechat.xml b/app/src/main/res/layout/item_contact_wechat.xml index a327957..eb6adde 100644 --- a/app/src/main/res/layout/item_contact_wechat.xml +++ b/app/src/main/res/layout/item_contact_wechat.xml @@ -8,8 +8,8 @@ @@ -94,18 +94,18 @@ android:id="@+id/cl_1" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::mms}" + android:onClick="@{click::wechat}" android:visibility="visible"> @@ -114,7 +114,7 @@ android:id="@+id/tv_appname1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="信息" + android:text="微信" android:textColor="@color/white" android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="@+id/iv_icon1" @@ -126,18 +126,18 @@ android:id="@+id/cl_2" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::camera}" + android:onClick="@{click::toTiktok}" android:visibility="visible"> @@ -146,7 +146,7 @@ android:id="@+id/tv_appname2" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="相机" + android:text="抖音" android:textColor="@color/white" android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="@+id/iv_icon2" @@ -158,18 +158,18 @@ android:id="@+id/cl_3" android:layout_width="wrap_content" android:layout_height="match_parent" - android:onClick="@{click::sos}" + android:onClick="@{click::toCalendar}" android:visibility="visible"> @@ -178,7 +178,7 @@ android:id="@+id/tv_appname3" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="呼叫" + android:text="万年历" android:textColor="@color/white" android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="@+id/iv_icon3" @@ -186,6 +186,38 @@ app:layout_constraintTop_toBottomOf="@+id/iv_icon3" /> + + + + + + + diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml new file mode 100644 index 0000000..a0300d3 --- /dev/null +++ b/app/src/main/res/layout/settings_activity.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/window_float_ball.xml b/app/src/main/res/layout/window_float_ball.xml new file mode 100644 index 0000000..689ea21 --- /dev/null +++ b/app/src/main/res/layout/window_float_ball.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..6cf9ed4 --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,12 @@ + + + + Reply + Reply to all + + + + reply + reply_all + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b8796dd..a8caf91 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,6 +3,7 @@ #343336 #272727 #454347 + #ffffff #f5433f #F68F8C @@ -27,6 +28,7 @@ #2a2b35 #8e6afb + #00D56B #ffffff #ecfafd @@ -69,5 +71,6 @@ #3D54D9 #98999a - + #2384BC + #9D9D9D diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f14b297..e356319 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,4 +13,20 @@ 关爱守护快捷服务 关爱守护一键拨打视频 + Settings + + + Messages + Sync + + + Your signature + Default reply action + + + Sync email periodically + Download incoming attachments + Automatically download attachments for incoming emails + + Only download attachments when manually requested diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml new file mode 100644 index 0000000..7124ab7 --- /dev/null +++ b/app/src/main/res/xml/root_preferences.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + +