diff --git a/app/build.gradle b/app/build.gradle
index ffbf0f3..a2cb5e5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.uiuios.aios"
minSdkVersion 24
targetSdkVersion 29
- versionCode 31
- versionName "4.0"
+ versionCode 35
+ versionName "4.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -32,6 +32,10 @@ android {
]
}
+ dataBinding {
+ enabled true
+ }
+
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7e15889..cc63663 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,8 @@
-
+
+
@@ -123,6 +124,11 @@
android:name=".activity.weather.WeatherActivity"
android:launchMode="singleTask"
android:screenOrientation="landscape" />
+
@@ -140,17 +146,21 @@
android:theme="@style/activity_styles" />
+
+ android:screenOrientation="userLandscape" />
+ android:screenOrientation="userLandscape" />
+
+
CREATOR = new Creator() {
+ @Override
+ public VideoInfo createFromParcel(Parcel in) {
+ return new VideoInfo(in);
+ }
+
+ @Override
+ public VideoInfo[] newArray(int size) {
+ return new VideoInfo[size];
+ }
+ };
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getType_name() {
+ return type_name;
+ }
+
+ public void setType_name(String type_name) {
+ this.type_name = type_name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getRemarks() {
+ return remarks;
+ }
+
+ public void setRemarks(String remarks) {
+ this.remarks = remarks;
+ }
+
+ public String getVideo_file() {
+ return video_file;
+ }
+
+ public void setVideo_file(String video_file) {
+ this.video_file = video_file;
+ }
+
+ public String getVideo_cover() {
+ return video_cover;
+ }
+
+ public void setVideo_cover(String video_cover) {
+ this.video_cover = video_cover;
+ }
+
+ public double getVideo_duration() {
+ return video_duration;
+ }
+
+ public void setVideo_duration(double video_duration) {
+ this.video_duration = video_duration;
+ }
+
+ public long getVideo_size() {
+ return video_size;
+ }
+
+ public void setVideo_size(long video_size) {
+ this.video_size = video_size;
+ }
+
+ public int getWeigh() {
+ return weigh;
+ }
+
+ public void setWeigh(int weigh) {
+ this.weigh = weigh;
+ }
+
+ public int getPlay_count() {
+ return play_count;
+ }
+
+ public void setPlay_count(int play_count) {
+ this.play_count = play_count;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
new file mode 100644
index 0000000..81f1485
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/InformationActivity.java
@@ -0,0 +1,148 @@
+package com.uiuios.aios.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.R;
+import com.uiuios.aios.adapter.InformationAdapter;
+import com.uiuios.aios.adapter.TitleAdapter;
+import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.bean.ArticleInfo;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.bean.CategoryBean;
+import com.uiuios.aios.network.NetInterfaceManager;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class InformationActivity extends BaseActivity {
+
+ @BindView(R.id.rv_title)
+ RecyclerView rv_title;
+ @BindView(R.id.rv_video)
+ RecyclerView rv_video;
+ @BindView(R.id.cl_nodata)
+ ConstraintLayout cl_nodata;
+
+ private TitleAdapter mTitleAdapter;
+ private InformationAdapter mInformationAdapter;
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_information;
+ }
+
+ @Override
+ public void initView() {
+ ButterKnife.bind(this);
+ mTitleAdapter = new TitleAdapter();
+ mTitleAdapter.setTitleChangeCallback(new TitleAdapter.TitleChangeCallback() {
+ @Override
+ public void onTitleChange(CategoryBean categoryBean) {
+ int id = categoryBean.getId();
+ if (id == -100) {
+
+ } else {
+
+ }
+ }
+ });
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
+ linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+ rv_title.setLayoutManager(linearLayoutManager);
+ rv_title.setAdapter(mTitleAdapter);
+
+ mInformationAdapter =new InformationAdapter();
+ LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this);
+ linearLayoutManager1.setOrientation(LinearLayoutManager.VERTICAL);
+ rv_video.setLayoutManager(linearLayoutManager1);
+ rv_video.setAdapter(mInformationAdapter);
+ }
+
+ @Override
+ public void initData() {
+ getCategorys();
+ getArticleList();
+ }
+
+ private void getCategorys() {
+ NetInterfaceManager.getInstance().getCategorysObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getCategorys", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getCategorys", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ mTitleAdapter.setCategoryList(listBaseResponse.data);
+ } else {
+ mTitleAdapter.setCategoryList(null);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getCategorys", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getCategorys", "onComplete: ");
+ }
+ });
+
+ }
+
+ private void getArticleList() {
+ NetInterfaceManager.getInstance().getArticleListObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getArticle", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getArticle", "onNext: " + listBaseResponse);
+ List articleInfoList = listBaseResponse.data;
+ if (articleInfoList != null && articleInfoList.size() != 0) {
+ mInformationAdapter.setArticleInfos(articleInfoList);
+ rv_video.setVisibility(View.VISIBLE);
+ cl_nodata.setVisibility(android.view.View.GONE);
+ } else {
+ rv_video.setVisibility(android.view.View.GONE);
+ cl_nodata.setVisibility(android.view.View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getArticle", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getArticle", "onComplete: ");
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java b/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java
new file mode 100644
index 0000000..c3ae9f6
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/InformationDetailsActivity.java
@@ -0,0 +1,43 @@
+package com.uiuios.aios.activity;
+
+import android.content.Intent;
+
+import androidx.databinding.DataBindingUtil;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.base.BaseDataBindingActivity;
+import com.uiuios.aios.bean.ArticleInfo;
+import com.uiuios.aios.databinding.ActivityInfoDetailsBinding;
+
+public class InformationDetailsActivity extends BaseDataBindingActivity {
+
+// @BindView(R.id.tv_title)
+// TextView tv_title;
+// @BindView(R.id.tv_time)
+// TextView tv_time;
+// @BindView(R.id.niceImageView)
+// NiceImageView niceImageView;
+// @BindView(R.id.tv_content)
+// TextView tv_content;
+
+ private ActivityInfoDetailsBinding mBinding;
+
+ /**
+ * 初始化视图
+ */
+ @Override
+ public void initView() {
+ mBinding = DataBindingUtil.setContentView(this, R.layout.activity_info_details);
+
+ }
+
+ /**
+ * 初始化数据
+ */
+ @Override
+ public void initData() {
+ Intent intent = getIntent();
+ ArticleInfo articleInfo = (ArticleInfo) intent.getSerializableExtra("articleInfo");
+ mBinding.setArticleInfo(articleInfo);
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java
new file mode 100644
index 0000000..b17c27c
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmActivity.java
@@ -0,0 +1,300 @@
+package com.uiuios.aios.activity.alarm;
+
+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.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.alarmclock.AlarmClockAddActivity;
+import com.uiuios.aios.alarm.AlarmAdapter;
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.alarm.AlarmUtils;
+import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.dialog.DeleteDialog;
+import com.uiuios.aios.network.NetInterfaceManager;
+import com.uiuios.aios.utils.ToastUtil;
+
+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 BaseActivity implements AlarmContact.AlarmView {
+ 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
+ public int getLayoutId() {
+ return R.layout.activity_alarm;
+ }
+
+ /**
+ * 初始化视图
+ */
+ @Override
+ public void initView() {
+ ButterKnife.bind(this);
+ mPresenter = new AlarmPresenter(this);
+ mPresenter.attachView(this);
+ mPresenter.setLifecycle(lifecycleSubject);
+
+ mAlarmAdapter = new AlarmAdapter();
+ mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
+ @Override
+ public void onLongClick(AlarmClockData alarmClockData) {
+ showDialog(alarmClockData);
+ }
+ });
+ rv_data.setLayoutManager(new LinearLayoutManager(AlarmActivity.this));
+ rv_data.setAdapter(mAlarmAdapter);
+ switchItem(0);
+ cl_exit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ cl_all.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(0);
+ mPresenter.getAlarmClock(mType);
+ }
+ });
+ cl_medicine.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(1);
+ mPresenter.getAlarmClock(mType);
+ }
+ });
+ cl_look.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(2);
+ mPresenter.getAlarmClock(mType);
+ }
+ });
+ cl_reserve.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchItem(3);
+ mPresenter.getAlarmClock(mType);
+ }
+ });
+
+ iv_add.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(AlarmActivity.this, AlarmClockAddActivity.class));
+ }
+ });
+ }
+
+ /**
+ * 初始化数据
+ */
+ @Override
+ public void initData() {
+ mPresenter.getAlarmClock(mType);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mPresenter.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);
+
+ imageView2.setImageDrawable(null);
+ imageView4.setImageDrawable(null);
+ imageView6.setImageDrawable(null);
+ 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));
+ 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));
+ 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));
+ 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));
+ break;
+ }
+ }
+
+
+ private void showDialog(AlarmClockData alarmClockData) {
+ DeleteDialog dialog = new DeleteDialog(this);
+ dialog.setTitle("提醒")
+ .setMessage("是否要删除本次闹钟")
+ .setPositive("确定")
+ .setNegtive("取消")
+ .setOnClickBottomListener(new DeleteDialog.OnClickBottomListener() {
+ @Override
+ public void onPositiveClick() {
+ deleteAlarm(alarmClockData);
+ dialog.dismiss();
+ }
+
+ @Override
+ public void onNegtiveClick() {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ }
+
+ private void deleteAlarm(AlarmClockData alarmClockData) {
+ if (alarmClockData.isIs_local()) {
+ alarmClockData.setDeleted(true);
+ AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+ mPresenter.getAlarmClock(mType);
+ } else {
+ NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("deleteAlarm", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("deleteAlarm", "onNext: " + baseResponse);
+ if (baseResponse.code == 200) {
+ AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
+ ToastUtil.show("删除成功");
+ } else {
+ ToastUtil.show("删除失败:" + baseResponse.msg);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("deleteAlarm", "onError: " + e.getMessage());
+ alarmClockData.setDeleted(true);
+ AlarmUtils.getInstance().updateAlarmClock(alarmClockData);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("deleteAlarm", "onComplete: ");
+ mPresenter.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);
+ ToastUtil.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/AlarmContact.java b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java
new file mode 100644
index 0000000..41d289f
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmContact.java
@@ -0,0 +1,21 @@
+package com.uiuios.aios.activity.alarm;
+
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.base.BasePresenter;
+import com.uiuios.aios.base.BaseView;
+
+import 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/AlarmPresenter.java b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmPresenter.java
new file mode 100644
index 0000000..c7c0321
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmPresenter.java
@@ -0,0 +1,101 @@
+package com.uiuios.aios.activity.alarm;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.network.NetInterfaceManager;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+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;
+ }
+
+ @Override
+ public void attachView(@NonNull AlarmContact.AlarmView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+ @Override
+ public void getAlarmClock() {
+ NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
+ @Override
+ public void setAlarmClock(List alarmClockList) {
+ if (alarmClockList.size() == 0) {
+ setAlarmClockEmpty();
+ } else {
+
+ }
+ }
+
+ @Override
+ public void setAlarmClockEmpty() {
+
+ }
+
+ @Override
+ public void onError() {
+
+ }
+ });
+ }
+
+ @Override
+ public void getAlarmClock(int type) {
+ Log.e(TAG, "getAlarmClock: " + type);
+ NetInterfaceManager.getInstance().getAlarmClockObservable(type)
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAlarmClock", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAlarmClock", "onNext: " + listBaseResponse);
+ mView.setAlarmClock(listBaseResponse.data);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAlarmClock", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAlarmClock", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
similarity index 98%
rename from app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockActivity.java
rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
index 5f3b1b9..ec4a673 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockActivity.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.activity.alarm;
+package com.uiuios.aios.activity.alarmclock;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -56,7 +56,7 @@ public class AlarmClockActivity extends BaseLifecycleActivity implements AlarmCl
@Override
public int getLayoutId() {
- return R.layout.activity_alarm_clock;
+ return R.layout.activity_alarm;
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockAddActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
similarity index 72%
rename from app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockAddActivity.java
rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
index 5e7f6c0..d8a02b2 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockAddActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockAddActivity.java
@@ -1,5 +1,6 @@
-package com.uiuios.aios.activity.alarm;
+package com.uiuios.aios.activity.alarmclock;
+import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.text.TextUtils;
@@ -7,7 +8,6 @@ import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
@@ -30,33 +30,19 @@ 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.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.R;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
+import com.uiuios.aios.base.BaseLifecycleActivity;
import com.uiuios.aios.base.GlideEngine;
-import com.uiuios.aios.bean.AlarmClockId;
-import com.uiuios.aios.bean.BaseResponse;
-import com.uiuios.aios.manager.RemoteManager;
-import com.uiuios.aios.network.NetInterfaceManager;
+import com.uiuios.aios.service.main.MainService;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.FileUtil;
import com.uiuios.aios.utils.ScreenUtil;
import com.uiuios.aios.utils.TimeUtils;
import com.uiuios.aios.utils.ToastUtil;
import com.uiuios.aios.utils.Utils;
-import com.uiuios.aios.R;
-import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.alarm.AlarmUtils;
-import com.uiuios.aios.base.BaseLifecycleActivity;
-import com.uiuios.aios.base.GlideEngine;
-import com.uiuios.aios.bean.AlarmClockId;
-import com.uiuios.aios.bean.BaseResponse;
-import com.uiuios.aios.network.NetInterfaceManager;
-import com.uiuios.aios.utils.FileUtil;
-import com.uiuios.aios.utils.ToastUtil;
-import com.uiuios.aios.utils.Utils;
-import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.io.File;
@@ -96,10 +82,6 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
NiceImageView nv_pic;
@BindView(R.id.iv_back)
ImageView iv_back;
- @BindView(R.id.bt_confirm)
- Button bt_confirm;
- @BindView(R.id.bt_cancel)
- Button bt_cancel;
@BindView(R.id.tv_duration)
TextView tv_duration;
@@ -107,10 +89,15 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
RadioButton rb1;
@BindView(R.id.rb2)
RadioButton rb2;
- @BindView(R.id.rb3)
- RadioButton rb3;
- @BindView(R.id.rb4)
- RadioButton rb4;
+ @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;
@@ -118,11 +105,13 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
private String mPictrueFilePath;
private Date mDate;
/*类型 1一次性 2每天 3周一到周五 4周六周日*/
- private int mType = 1;
+ private int mDayType = 1;
+ private int mClockType = 1;
+
@Override
public int getLayoutId() {
- return R.layout.activity_add_alarm_clock;
+ return R.layout.activity_add_alarm;
}
@Override
@@ -136,14 +125,14 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
ButterKnife.bind(this);
initTimePicker();
-
+ rb1.setChecked(true);
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ if (isChecked) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb1.setTextColor(colorStateList);
- mType = 1;
+ mDayType = 1;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb1.setTextColor(colorStateList);
@@ -152,45 +141,50 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
});
rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ if (isChecked) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb2.setTextColor(colorStateList);
- mType = 2;
+ mDayType = 2;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb2.setTextColor(colorStateList);
}
}
});
- rb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
- rb3.setTextColor(colorStateList);
- mType = 3;
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 1;
+ et_activation.setText("用药闹钟");
} else {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
- rb3.setTextColor(colorStateList);
- }
- }
- });
- rb4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
- rb4.setTextColor(colorStateList);
- mType = 4;
- } else {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
- rb4.setTextColor(colorStateList);
- }
- }
- });
- rb1.setChecked(true);
+ }
+ }
+ });
+ rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 2;
+ et_activation.setText("接送闹钟");
+ } else {
+
+ }
+ }
+ });
+ rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 3;
+ et_activation.setText("预约闹钟");
+ } else {
+
+ }
+ }
+ });
cl_pic.setOnClickListener(new View.OnClickListener() {
@Override
@@ -210,18 +204,12 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
openSelector();
}
});
- bt_confirm.setOnClickListener(new View.OnClickListener() {
+ iv_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkContent();
}
});
- bt_cancel.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
iv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -247,7 +235,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
tvMenuOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 1;
+ mDayType = 1;
tv_type.setText("只响一次");
mPopupWindow.dismiss();
}
@@ -255,7 +243,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
tvMenuTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 2;
+ mDayType = 2;
tv_type.setText("每天");
mPopupWindow.dismiss();
}
@@ -263,7 +251,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
tvMenuThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 3;
+ mDayType = 3;
tv_type.setText("周一至周五");
mPopupWindow.dismiss();
}
@@ -271,7 +259,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
tvMenuFour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 4;
+ mDayType = 4;
tv_type.setText("周六至周日");
mPopupWindow.dismiss();
}
@@ -288,7 +276,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
}
}
- LoadingDialog mLoadingDialog;
+// LoadingDialog mLoadingDialog;
private void checkContent() {
@@ -310,80 +298,83 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
MediaType mediaType = MediaType.Companion.parse("image/png");
RequestBody requestBody = RequestBody.Companion.create(picFile, mediaType);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", picFile.getName(), requestBody);
+
AlarmClockData alarmClockData = new AlarmClockData();
alarmClockData.setFile(mPictrueFilePath);
- alarmClockData.setType(mType);
+ alarmClockData.setType(mDayType);
alarmClockData.setTime(timeStamp);
alarmClockData.setTitle(et_activation.getText().toString());
alarmClockData.setRemind_type(0);
alarmClockData.setIs_onoff(1);
+ alarmClockData.setClazz(mClockType);
Map params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("time", timeStamp);
- params.put("type", String.valueOf(mType));
+ params.put("type", String.valueOf(mDayType));
params.put("title", et_activation.getText().toString());
params.put("remind_type", "0");
params.put("is_onoff", "1");
+ params.put("class", String.valueOf(mClockType));
- mLoadingDialog = new LoadingDialog(this);
- mLoadingDialog.setLoadingText("正在上传")
- .setSuccessText("添加成功")
- .setFailedText("添加失败")
- .setInterceptBack(true)
- .setLoadSpeed(LoadingDialog.Speed.SPEED_ONE)
- .closeSuccessAnim()
- .show();
+// mLoadingDialog = new LoadingDialog(this);
+// mLoadingDialog.setLoadingText("正在上传")
+// .setSuccessText("添加成功")
+// .setFailedText("添加失败")
+// .setInterceptBack(true)
+// .setLoadSpeed(LoadingDialog.Speed.SPEED_ONE)
+// .closeSuccessAnim()
+// .show();
- NetInterfaceManager.getInstance().getAlarmClockAddObservable(params, body)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
- .subscribe(new Observer>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("checkContent", "onSubscribe: ");
- bt_confirm.setEnabled(false);
- }
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ int fakeId = random.nextInt(Integer.MAX_VALUE);
+ Log.e(TAG, "checkContent: fakeId = " + fakeId);
+ alarmClockData.setId(fakeId);
+ alarmClockData.setIs_local(true);
+ Log.e(TAG, "checkContent: addAlarmClock = " + AlarmUtils.getInstance().addAlarmClock(alarmClockData));
+ ToastUtil.show("添加成功");
+ Intent intent = new Intent(MainService.uploadAlarmClockReceiver.UPLOAD_ALARM_RECEIVER_ACTION);
+ sendBroadcast(intent);
+ finish();
- @Override
- public void onNext(@NonNull BaseResponse baseResponse) {
- Log.e("checkContent", "onNext: " + baseResponse);
- if (baseResponse.code == 200) {
- ToastUtil.show("添加成功");
-// int id = baseResponse.data.getId();
-// alarmClockData.setId(id);
-// AlarmUtils.getInstance().addAlarmClock(alarmClockData);
- mLoadingDialog.loadSuccess();
- mLoadingDialog.close();
- finish();
- } else {
- ToastUtil.show("添加失败:" + baseResponse.msg);
- bt_confirm.setEnabled(true);
- mLoadingDialog.loadFailed();
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("checkContent", "onError: " + e.getMessage());
- ToastUtil.show("已保存到本地");
- ThreadLocalRandom random = ThreadLocalRandom.current();
- int fakeId = random.nextInt(Integer.MAX_VALUE);
- Log.e(TAG, "onError: fakeId = " + fakeId);
- alarmClockData.setId(fakeId);
- alarmClockData.setIs_local(true);
- Log.e(TAG, "onError: addAlarmClock = " + AlarmUtils.getInstance().addAlarmClock(alarmClockData));
-
- onComplete();
- finish();
- }
-
- @Override
- public void onComplete() {
- Log.e("checkContent", "onComplete: ");
- mLoadingDialog.close();
- bt_confirm.setEnabled(true);
- }
- });
+// NetInterfaceManager.getInstance().getAlarmClockAddObservable(params, body)
+// .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+// .subscribe(new Observer>() {
+// @Override
+// public void onSubscribe(@NonNull Disposable d) {
+// Log.e("addAlarmClock", "onSubscribe: ");
+// iv_add.setEnabled(false);
+// }
+//
+// @Override
+// public void onNext(@NonNull BaseResponse baseResponse) {
+// Log.e("addAlarmClock", "onNext: " + baseResponse);
+// if (baseResponse.code == 200) {
+// ToastUtil.show("添加成功");
+//// int id = baseResponse.data.getId();
+//// alarmClockData.setId(id);
+//// AlarmUtils.getInstance().addAlarmClock(alarmClockData);
+// finish();
+// } else {
+// ToastUtil.show("添加失败:" + baseResponse.msg);
+// iv_add.setEnabled(true);
+// }
+// }
+//
+// @Override
+// public void onError(@NonNull Throwable e) {
+// Log.e("addAlarmClock", "onError: " + e.getMessage());
+// ToastUtil.show("已保存到本地");
+// onComplete();
+// finish();
+// }
+//
+// @Override
+// public void onComplete() {
+// Log.e("addAlarmClock", "onComplete: ");
+// iv_add.setEnabled(true);
+// }
+// });
}
private void openSelector() {
@@ -485,7 +476,7 @@ public class AlarmClockAddActivity extends BaseLifecycleActivity {
private String getTime(Date date) {
SimpleDateFormat format;
- if (mType == 1) {
+ if (mDayType == 1) {
format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
} else {
format = new SimpleDateFormat("HH:mm");
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockContact.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
similarity index 91%
rename from app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockContact.java
rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
index d4c911d..e5bd46a 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockContact.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.activity.alarm;
+package com.uiuios.aios.activity.alarmclock;
import com.uiuios.aios.base.BasePresenter;
import com.uiuios.aios.base.BaseView;
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockEditActivity.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java
similarity index 74%
rename from app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockEditActivity.java
rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java
index 04a56e2..7050baf 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockEditActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockEditActivity.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.activity.alarm;
+package com.uiuios.aios.activity.alarmclock;
import android.content.Intent;
import android.content.res.ColorStateList;
@@ -9,7 +9,6 @@ import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
@@ -46,7 +45,6 @@ import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.base.GlideEngine;
import com.uiuios.aios.bean.BaseResponse;
-import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.FileUtil;
@@ -99,12 +97,6 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
NiceImageView nv_pic;
@BindView(R.id.iv_back)
ImageView iv_back;
- @BindView(R.id.bt_confirm)
- Button bt_confirm;
- @BindView(R.id.bt_cancel)
- Button bt_cancel;
- @BindView(R.id.tv_title)
- TextView tv_title;
@BindView(R.id.tv_duration)
TextView tv_duration;
@@ -112,10 +104,15 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
RadioButton rb1;
@BindView(R.id.rb2)
RadioButton rb2;
- @BindView(R.id.rb3)
- RadioButton rb3;
- @BindView(R.id.rb4)
- RadioButton rb4;
+ @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;
@@ -124,7 +121,8 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
private Date mDate;
/*类型 1一次性 2每天 3周一到周五 4周六周日*/
- private int mType = 1;
+ private int mDayType = 1;
+ private int mClockType = 1;
private int mId;
private AlarmClockData mAlarmClockData;
@@ -187,7 +185,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_add_alarm_clock);
+ setContentView(R.layout.activity_add_alarm);
lifecycleSubject.onNext(ActivityEvent.CREATE);
UltimateBarX.statusBarOnly(this)
.colorRes(R.color.default_blue)
@@ -199,7 +197,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
private void initView() {
ButterKnife.bind(this);
- tv_title.setText("编辑闹钟");
+// tv_title.setText("编辑闹钟");
initTimePicker();
cl_pic.setOnClickListener(new View.OnClickListener() {
@@ -220,18 +218,6 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
openSelector();
}
});
- bt_confirm.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- checkContent();
- }
- });
- bt_cancel.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
iv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -244,7 +230,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
if (b) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb1.setTextColor(colorStateList);
- mType = 1;
+ mDayType = 1;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb1.setTextColor(colorStateList);
@@ -257,39 +243,50 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
if (b) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb2.setTextColor(colorStateList);
- mType = 2;
+ mDayType = 2;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb2.setTextColor(colorStateList);
}
}
});
- rb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+
+ rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
- rb3.setTextColor(colorStateList);
- mType = 3;
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 1;
} else {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
- rb3.setTextColor(colorStateList);
+
}
}
});
- rb4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
- rb4.setTextColor(colorStateList);
- mType = 4;
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 2;
} else {
- ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
- rb4.setTextColor(colorStateList);
+
}
}
});
+ rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mClockType = 3;
+ } else {
+
+ }
+ }
+ });
+ iv_add.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ checkContent();
+ }
+ });
}
private void initData() {
@@ -305,38 +302,45 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
finish();
return;
}
- NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
- .subscribe(new Observer>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getAlarmClockById", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse alarmClockDatabaseResponse) {
- Log.e("getAlarmClockById", "onNext: " + alarmClockDatabaseResponse);
- if (alarmClockDatabaseResponse.code == 200) {
- AlarmClockData alarmClockData = alarmClockDatabaseResponse.data;
- mAlarmClockData = alarmClockData;
- setAlarmClockInfo(alarmClockData);
+ HashMap clockDataHashMap = AlarmUtils.getInstance().getOldDataMap();
+ AlarmClockData alarmClockData = clockDataHashMap.get(mId);
+ if (alarmClockData == null || !alarmClockData.isIs_local()) {
+ NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId)
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAlarmClockById", "onSubscribe: ");
}
- }
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getAlarmClockById", "onError: " + e.getMessage());
- HashMap oldData = AlarmUtils.getInstance().getOldDataMap();
- mAlarmClockData = oldData.get(mId);
- setAlarmClockInfo(mAlarmClockData);
- onComplete();
- }
+ @Override
+ public void onNext(@NonNull BaseResponse alarmClockDatabaseResponse) {
+ Log.e("getAlarmClockById", "onNext: " + alarmClockDatabaseResponse);
+ if (alarmClockDatabaseResponse.code == 200) {
+ AlarmClockData alarmClockData = alarmClockDatabaseResponse.data;
+ mAlarmClockData = alarmClockData;
+ setAlarmClockInfo(alarmClockData);
+ }
+ }
- @Override
- public void onComplete() {
- Log.e("getAlarmClockById", "onComplete: ");
- }
- });
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAlarmClockById", "onError: " + e.getMessage());
+ HashMap oldData = AlarmUtils.getInstance().getOldDataMap();
+ mAlarmClockData = oldData.get(mId);
+ setAlarmClockInfo(mAlarmClockData);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAlarmClockById", "onComplete: ");
+ }
+ });
+ } else {
+ mAlarmClockData = alarmClockData;
+ setAlarmClockInfo(mAlarmClockData);
+ }
}
private void setAlarmClockInfo(AlarmClockData alarmClockData) {
@@ -345,24 +349,37 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
return;
}
Log.e(TAG, "setAlarmClockInfo: " + alarmClockData);
- mType = alarmClockData.getType();
- switch (mType) {
+ mDayType = alarmClockData.getType();
+ switch (mDayType) {
default:
case AlarmUtils.ONCE:
rb1.setChecked(true);
- tv_type.setText("只响一次");
+// tv_type.setText("只响一次");
break;
case AlarmUtils.LOOP:
rb2.setChecked(true);
- tv_type.setText("每天");
+// tv_type.setText("每天");
break;
- case AlarmUtils.WORKING_DAY:
- rb3.setChecked(true);
- tv_type.setText("周一至周五");
+// case AlarmUtils.WORKING_DAY:
+// rb3.setChecked(true);
+// tv_type.setText("周一至周五");
+// break;
+// case AlarmUtils.OFF_DAY:
+// rb4.setChecked(true);
+// tv_type.setText("周六至周日");
+// break;
+ }
+ mClockType = alarmClockData.getClazz();
+ switch (mClockType) {
+ case 1:
+ default:
+ rb_all.setChecked(true);
break;
- case AlarmUtils.OFF_DAY:
- rb4.setChecked(true);
- tv_type.setText("周六至周日");
+ case 2:
+ rb_look.setChecked(true);
+ break;
+ case 3:
+ rb_reserve.setChecked(true);
break;
}
String time = alarmClockData.getTime();
@@ -423,23 +440,26 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
}
mAlarmClockData.setId(mId);
- mAlarmClockData.setType(mType);
+ mAlarmClockData.setType(mDayType);
mAlarmClockData.setTime(timeStamp);
mAlarmClockData.setTitle(et_activation.getText().toString());
mAlarmClockData.setFile(mPictrueFilePath);
mAlarmClockData.setRemind_type(0);
mAlarmClockData.setIs_onoff(1);
mAlarmClockData.setFinished(false);
+ mAlarmClockData.setClazz(mClockType);
Map params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("id", String.valueOf(mId));
- params.put("type", String.valueOf(mType));
+ params.put("type", String.valueOf(mDayType));
params.put("time", timeStamp);
params.put("title", et_activation.getText().toString());
params.put("remind_type", "0");
params.put("is_onoff", "1");
+ params.put("class", String.valueOf(mClockType));
+
mLoadingDialog = new LoadingDialog(this);
mLoadingDialog.setLoadingText("正在上传")
@@ -450,48 +470,57 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
.closeSuccessAnim()
.show();
- NetInterfaceManager.getInstance().getAlarmClockEditObservable(params, body)
- .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("checkContent", "onSubscribe: ");
- ToastUtil.show("正在上传");
- bt_confirm.setEnabled(false);
- }
-
- @Override
- public void onNext(@NonNull BaseResponse baseResponse) {
- Log.e("checkContent", "onNext: " + baseResponse);
- if (baseResponse.code == 200) {
- ToastUtil.show("编辑成功");
- mLoadingDialog.loadSuccess();
- mLoadingDialog.close();
- mAlarmClockData.setEdited(false);
- AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData);
- finish();
- } else {
- ToastUtil.show("编辑失败:" + baseResponse.msg);
- mLoadingDialog.loadFailed();
+ if (mAlarmClockData.isIs_local()) {
+ ToastUtil.show("编辑成功");
+ mLoadingDialog.loadSuccess();
+ mLoadingDialog.close();
+ mAlarmClockData.setEdited(false);
+ AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData);
+ finish();
+ } else {
+ NetInterfaceManager.getInstance().getAlarmClockEditObservable(params, body)
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("checkContent", "onSubscribe: ");
+ ToastUtil.show("正在上传");
+ iv_add.setEnabled(false);
}
- }
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("checkContent", "onError: " + e.getMessage());
- mAlarmClockData.setEdited(true);
- AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData);
- onComplete();
- }
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("checkContent", "onNext: " + baseResponse);
+ if (baseResponse.code == 200) {
+ ToastUtil.show("编辑成功");
+ mLoadingDialog.loadSuccess();
+ mLoadingDialog.close();
+ mAlarmClockData.setEdited(false);
+ AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData);
+ finish();
+ } else {
+ ToastUtil.show("编辑失败:" + baseResponse.msg);
+ mLoadingDialog.loadFailed();
+ }
+ }
- @Override
- public void onComplete() {
- Log.e("checkContent", "onComplete: ");
- bt_confirm.setEnabled(true);
- finish();
- mLoadingDialog.close();
- }
- });
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("checkContent", "onError: " + e.getMessage());
+ mAlarmClockData.setEdited(true);
+ AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("checkContent", "onComplete: ");
+ iv_add.setEnabled(true);
+ finish();
+ mLoadingDialog.close();
+ }
+ });
+ }
}
@@ -507,7 +536,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
tvMenuOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 1;
+ mDayType = 1;
tv_type.setText("只响一次");
mMenuPopupWindow.dismiss();
}
@@ -515,7 +544,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
tvMenuTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 2;
+ mDayType = 2;
tv_type.setText("每天");
mMenuPopupWindow.dismiss();
}
@@ -523,7 +552,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
tvMenuThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 3;
+ mDayType = 3;
tv_type.setText("周一至周五");
mMenuPopupWindow.dismiss();
}
@@ -531,7 +560,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
tvMenuFour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- mType = 4;
+ mDayType = 4;
tv_type.setText("周六至周日");
mMenuPopupWindow.dismiss();
}
@@ -612,7 +641,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
startDate.set(2013, 0, 23);
Calendar endDate = Calendar.getInstance();
- endDate.set(2019, 11, 28);
+ endDate.set(2099, 11, 28);
//时间选择器
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
@@ -647,7 +676,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
private String getTime(Date date) {
SimpleDateFormat format;
- if (mType == 1) {
+ if (mDayType == 1) {
format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
} else {
format = new SimpleDateFormat("HH:mm");
@@ -658,7 +687,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
private Calendar getTime(String timeString) {
SimpleDateFormat sdf;
Calendar calendar = Calendar.getInstance();
- if (mType == 1) {
+ if (mDayType == 1) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
} else {
sdf = new SimpleDateFormat("HH:mm");
diff --git a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockPresenter.java b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java
similarity index 97%
rename from app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockPresenter.java
rename to app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java
index 453d9fd..40b31f6 100644
--- a/app/src/main/java/com/uiuios/aios/activity/alarm/AlarmClockPresenter.java
+++ b/app/src/main/java/com/uiuios/aios/activity/alarmclock/AlarmClockPresenter.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.activity.alarm;
+package com.uiuios.aios.activity.alarmclock;
import android.content.Context;
diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java
new file mode 100644
index 0000000..681cf0b
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java
@@ -0,0 +1,228 @@
+package com.uiuios.aios.activity.location;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.adapter.CityAdapter;
+import com.uiuios.aios.adapter.DistrictAdapter;
+import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.bean.AddressBean;
+import com.uiuios.aios.manager.RemoteManager;
+import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class LocationAcivity extends BaseActivity implements LocationContact.LocationView, CityAdapter.CityCallback, DistrictAdapter.DistrictCallback {
+
+ @BindView(R.id.bg)
+ ConstraintLayout bg;
+ @BindView(R.id.root)
+ ConstraintLayout root;
+ @BindView(R.id.rv_area)
+ RecyclerView rv_area;
+
+ @BindView(R.id.edit_search)
+ EditText edit_search;
+ @BindView(R.id.rv_city)
+ RecyclerView rv_city;
+ @BindView(R.id.cl_location)
+ ConstraintLayout cl_location;
+
+ private List popularCities = new ArrayList() {{
+ this.add(new AddressBean("北京"));
+ this.add(new AddressBean("上海"));
+ this.add(new AddressBean("深圳"));
+ this.add(new AddressBean("广州"));
+ this.add(new AddressBean("武汉"));
+ this.add(new AddressBean("长沙"));
+ this.add(new AddressBean("南京"));
+ this.add(new AddressBean("苏州"));
+ this.add(new AddressBean("西安"));
+ this.add(new AddressBean("济南"));
+ this.add(new AddressBean("青岛"));
+ this.add(new AddressBean("沈阳"));
+ this.add(new AddressBean("重庆"));
+ this.add(new AddressBean("郑州"));
+ this.add(new AddressBean("成都"));
+ this.add(new AddressBean("杭州"));
+ this.add(new AddressBean("厦门"));
+ }};
+
+ private LocationPresenter mPresenter;
+ private CityAdapter mCityAdapter;
+ private DistrictAdapter mDistrictAdapter;
+
+ private List mDistrict;
+ private AddressBean mAddressBean;
+
+ /**
+ * 设置布局
+ */
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_location;
+ }
+
+ /**
+ * 初始化视图
+ */
+ @Override
+ public void initView() {
+ ButterKnife.bind(this);
+ mPresenter = new LocationPresenter(this);
+ mPresenter.attachView(this);
+ mPresenter.setLifecycle(lifecycleSubject);
+ bg.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
+ root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ rv_area.setVisibility(View.GONE);
+ }
+ });
+ cl_location.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mAddressBean = new AddressBean(RemoteManager.getInstance().getDistrict());
+ setIntent();
+ }
+ });
+ edit_search.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
+ edit_search.setInputType(EditorInfo.TYPE_CLASS_TEXT);
+ edit_search.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_SEND ||
+ (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
+ switch (event.getAction()) {
+ case KeyEvent.ACTION_UP:
+ //do it
+ if (actionId == EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
+ //do something;
+ ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
+ .hideSoftInputFromWindow(LocationAcivity.this.getCurrentFocus()
+ .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ String text = edit_search.getText().toString();
+ checkContent(text);
+ }
+ return true;
+ default:
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ }
+
+ private void checkContent(String text) {
+ if (TextUtils.isEmpty(text)) {
+ rv_area.setVisibility(View.GONE);
+ } else {
+ rv_area.setVisibility(View.VISIBLE);
+ List area = mDistrict.stream().filter(new Predicate() {
+ @Override
+ public boolean test(AddressBean addressBean) {
+ return addressBean.toString().contains(text);
+ }
+ }).collect(Collectors.toList());
+ mDistrictAdapter.setDistrict(area);
+ }
+ }
+
+ /**
+ * 初始化数据
+ */
+ @Override
+ public void initData() {
+ HashMap stringIntegerHashMap = new HashMap<>();
+ WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getRealMetrics(dm);
+ float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 4));//top间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 4));//底部间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 30));//左间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 30));//右间距
+ rv_city.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
+ mCityAdapter = new CityAdapter();
+ mCityAdapter.setCityList(popularCities);
+ mCityAdapter.setCityCallback(this::onCitySelected);
+ rv_city.setLayoutManager(new GridLayoutManager(this, 3));
+ rv_city.setAdapter(mCityAdapter);
+
+ mDistrictAdapter = new DistrictAdapter();
+ mDistrictAdapter.setDistrictCallback(this::onDistrictSelected);
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
+ linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ rv_area.setLayoutManager(linearLayoutManager);
+ rv_area.setAdapter(mDistrictAdapter);
+
+ mPresenter.initJsonData();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mPresenter.detachView();
+ }
+
+ @Override
+ public void setJsonData(List area) {
+ this.mDistrict = area;
+ mDistrictAdapter.setDistrict(area);
+ }
+
+ @Override
+ public void onDistrictSelected(AddressBean addressBean) {
+ mAddressBean = addressBean;
+ setIntent();
+ }
+
+ @Override
+ public void onCitySelected(AddressBean addressBean) {
+ mAddressBean = addressBean;
+ setIntent();
+ }
+
+ private void setIntent() {
+ Intent intent = new Intent();
+ Bundle bundle = new Bundle();
+ bundle.putString("address", mAddressBean.toString());
+ bundle.putString("district", mAddressBean.getDistrict());
+ intent.putExtras(bundle);
+ // 携带意图返回上一个页面 RESULT_OK代表处理成功了
+ setResult(Activity.RESULT_OK, intent);
+ // 结束当前页面
+ finish();
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java
new file mode 100644
index 0000000..70cba09
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationContact.java
@@ -0,0 +1,17 @@
+package com.uiuios.aios.activity.location;
+
+import com.uiuios.aios.base.BasePresenter;
+import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.bean.AddressBean;
+
+import java.util.List;
+
+public class LocationContact {
+ interface Presenter extends BasePresenter {
+ void initJsonData();
+ }
+
+ public interface LocationView extends BaseView {
+ void setJsonData(List area);
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationPresenter.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationPresenter.java
new file mode 100644
index 0000000..52e9820
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationPresenter.java
@@ -0,0 +1,122 @@
+package com.uiuios.aios.activity.location;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.google.gson.Gson;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.bean.AddressBean;
+import com.uiuios.aios.bean.JsonBean;
+import com.uiuios.aios.gson.GetJsonDataUtil;
+
+import org.json.JSONArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class LocationPresenter implements LocationContact.Presenter {
+ private Context mContext;
+
+
+ LocationPresenter(Context context) {
+ this.mContext = context;
+ }
+
+ private LocationContact.LocationView mView;
+
+ private BehaviorSubject lifecycle;
+
+ public void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ @Override
+ public void attachView(LocationContact.LocationView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+ @Override
+ public void initJsonData() {
+ long time = System.currentTimeMillis();
+ Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable {
+ List areaList = new ArrayList<>();
+ String JsonData = new GetJsonDataUtil().getJson(mContext, "province.json");//获取assets目录下的json文件数据
+ ArrayList jsonBeanList = parseData(JsonData);//用Gson 转成实体
+ for (JsonBean jsonBean : jsonBeanList) {//遍历省份
+ String province = jsonBean.getName();
+ for (JsonBean.CityBean cityBean : jsonBean.getCityList()) {//遍历该省份的所有城市
+ String city = cityBean.getName();
+ for (String district : cityBean.getArea()) {//遍历该省份的所有城市
+ areaList.add(new AddressBean(province , city , district));
+ }
+ }
+ }
+ emitter.onNext(areaList);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("initJsonData", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(List s) {
+ Log.e("initJsonData", "onNext: ");
+ Log.e("initJsonData", "initdatetime = " + (System.currentTimeMillis() - time) + "ms");
+ mView.setJsonData(s);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("initJsonData", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("initJsonData", "onComplete: ");
+ }
+ });
+
+
+ }
+
+
+ public ArrayList parseData(String result) {//Gson 解析
+ ArrayList detail = new ArrayList<>();
+ try {
+ JSONArray data = new JSONArray(result);
+ Gson gson = new Gson();
+ for (int i = 0; i < data.length(); i++) {
+ JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
+ detail.add(entity);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return detail;
+ }
+}
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 b265a9f..00fc6ae 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
@@ -81,11 +81,11 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
private ControlFragment mControlFragment;
private HomeFragment mHomeFragment;
// private CustomFragment mCustomFragment;
-// private SecondFragment mSecondFragment;
+ private SecondFragment mSecondFragment;
private boolean is_twoscreen = false;
- private int appListIndex = 2;
- private int defaultCurrent = 1;
+ private int appListIndex = 3;
+ private int defaultCurrent = 2;
@Override
public int getLayoutId() {
@@ -111,18 +111,18 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments);
// fragmentTransaction.add(R.id.viewPager, appListFragment);
// fragmentTransaction.commit();
-
+ mControlFragment =new ControlFragment();
+ mFragments.add(mControlFragment);
// is_twoscreen = Settings.Global.getInt(getContentResolver(), "is_twoscreen", 1) == 1;
// if (is_twoscreen) {
// appListIndex = 2;
// defaultCurrent = 1;
-// mSecondFragment = new SecondFragment();
-// mFragments.add(mSecondFragment);
+ mSecondFragment = new SecondFragment();
+ mFragments.add(mSecondFragment);
// }
// mCustomFragment = new CustomFragment();
// mFragments.add(mCustomFragment);
- mControlFragment =new ControlFragment();
- mFragments.add(mControlFragment);
+
mHomeFragment =new HomeFragment();
mFragments.add(mHomeFragment);
@@ -155,7 +155,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
});
mViewPager.setAdapter(mBaseFragmentPagerAdapter);
- mViewPager.setOffscreenPageLimit(2);
+ mViewPager.setOffscreenPageLimit(3);
mMagicIndicator.setNavigator(scaleCircleNavigator);
ViewPagerHelper.bind(mMagicIndicator, mViewPager);
if (mFragments.size() > 1) {
@@ -380,6 +380,8 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_PHONE_STATE,
Permission.WRITE_SETTINGS,
+ Permission.READ_CALL_LOG,
+ Permission.WRITE_CALL_LOG,
};
private void getPermission() {
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
index 8814537..d0b75c5 100644
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
@@ -1,33 +1,88 @@
package com.uiuios.aios.activity.weather;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
import android.view.View;
+import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
+import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
+import com.bigkoo.pickerview.view.OptionsPickerView;
+import com.google.gson.Gson;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
+import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
+import com.uiuios.aios.activity.location.LocationAcivity;
import com.uiuios.aios.adapter.WeatherDayApdapter;
import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.bean.JsonBean;
+import com.uiuios.aios.bean.MapGeoResult;
+import com.uiuios.aios.config.CommonConfig;
+import com.uiuios.aios.gson.GetJsonDataUtil;
+import com.uiuios.aios.manager.RemoteManager;
+import com.uiuios.aios.utils.ToastUtil;
import com.uiuios.aios.view.HorizontalItemDecoration;
+
+import org.json.JSONArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
import butterknife.BindView;
import butterknife.ButterKnife;
public class WeatherActivity extends BaseActivity implements WeatherContact.WeatherView {
+ private static final String TAG = WeatherActivity.class.getSimpleName();
+
@BindView(R.id.rv_weather)
RecyclerView rv_weather;
@BindView(R.id.tv_location)
TextView tv_location;
@BindView(R.id.iv_back)
ImageView iv_back;
+ @BindView(R.id.tv_refresh)
+ TextView tv_refresh;
private WeatherPresenter mPresenter;
private WeatherDayApdapter mWeatherDayApdapter;
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
+ private List options1Items = new ArrayList<>();
+ private ArrayList> options2Items = new ArrayList<>();
+ private ArrayList>> options3Items = new ArrayList<>();
+ private Thread thread;
+ private static final int MSG_LOAD_DATA = 0x0001;
+ private static final int MSG_LOAD_SUCCESS = 0x0002;
+ private static final int MSG_LOAD_FAILED = 0x0003;
+ private static boolean isLoaded = false;
+
+
+ private String mProvince;
+ private String mCity;
+ private String mDistrict;
+
+ private ActivityResultLauncher register;
+
@Override
public int getLayoutId() {
@@ -40,6 +95,7 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
mPresenter = new WeatherPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(lifecycleSubject);
+ RemoteManager.getInstance().getLocation();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
Resources resources = getResources();
if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
@@ -59,16 +115,120 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
finish();
}
});
+ tv_refresh.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, "");
+ String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, "");
+ if (TextUtils.isEmpty(tude)) {
+ mPresenter.getLocation();
+ } else {
+ tv_location.setText(district);
+ mPresenter.getWeather(tude);
+ }
+ ToastUtil.show("刷新成功");
+ }
+ });
+ tv_location.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ hideSoftKeyBoard(v);
+ if (!isLoaded) {
+ ToastUtil.show("位置数据没有加载完成");
+ } else {
+// showPickerView();
+ register.launch(new Intent(WeatherActivity.this, LocationAcivity.class));
+ }
+ }
+ });
+ register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
+ @Override
+ public void onActivityResult(ActivityResult result) {
+ Log.e(TAG, "onActivityResult: " + result);
+ if (result != null) {
+ Intent intent = result.getData();
+ if (intent != null && result.getResultCode() == Activity.RESULT_OK) {
+ Bundle bundle = intent.getExtras();
+ Log.e(TAG, "onActivityResult: " + bundle);
+ String address = bundle.getString("address");
+ mDistrict = bundle.getString("district");
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mDistrict);
+ mPresenter.decodeGeo(address);
+ tv_location.setText(mDistrict);
+ }
+ }
+ }
+ });
+ }
+
+ private void showPickerView() {// 弹出选择器
+ OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
+ @Override
+ public void onOptionsSelect(int options1, int options2, int options3, View v) {
+ //返回的分别是三个级别的选中位置
+ mProvince = options1Items.size() > 0 ?
+ options1Items.get(options1).getPickerViewText() : "";
+
+ mCity = options2Items.size() > 0
+ && options2Items.get(options1).size() > 0 ?
+ options2Items.get(options1).get(options2) : "";
+
+ mDistrict = options2Items.size() > 0
+ && options3Items.get(options1).size() > 0
+ && options3Items.get(options1).get(options2).size() > 0 ?
+ options3Items.get(options1).get(options2).get(options3) : "";
+
+ String address = mProvince + mCity + mDistrict;
+ Log.e(TAG, "onOptionsSelect: " + address);
+ tv_location.setText(mDistrict);
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_ADDRESS, address);
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mDistrict);
+ mPresenter.decodeGeo(address);
+
+ }
+ })
+
+ .setTitleText("城市选择")
+ .setDividerColor(Color.BLACK)
+ .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
+ .setContentTextSize(20)
+ .setLineSpacingMultiplier(2.5f)
+ .build();
+
+// pvOptions.setPicker(options1Items);//一级选择器
+// pvOptions.setPicker(options1Items, options2Items);//二级选择器
+ pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
+ pvOptions.show();
}
@Override
public void initData() {
- mPresenter.getLocation();
+ mHandler.sendEmptyMessage(MSG_LOAD_DATA);
+ String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, "");
+ String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, "");
+ if (TextUtils.isEmpty(tude)) {
+ mPresenter.getLocation();
+ } else {
+ tv_location.setText(district);
+ mPresenter.getWeather(tude);
+ }
+ }
+
+ @Override
+ public void setGeo(MapGeoResult mapGeoresult) {
+ if (mapGeoresult != null) {
+ mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoresult.getLocation().toString());
+ mPresenter.getWeather(mapGeoresult.getLocation().toString());
+ } else {
+ ToastUtil.show("获取位置信息失败");
+ }
}
@Override
public void setLocation(String location) {
tv_location.setText(location);
+ ToastUtil.show("刷新成功");
mPresenter.getWeatherCache();
}
@@ -77,8 +237,7 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
if (weatherCache != null) {
mWeatherDayApdapter.setDailyBeans(weatherCache.getDaily());
}
- mPresenter.getWeather();
-
+ mPresenter.getWeather(RemoteManager.getInstance().getLocationTude());
}
@Override
@@ -103,4 +262,113 @@ public class WeatherActivity extends BaseActivity implements WeatherContact.Weat
super.onDestroy();
mPresenter.detachView();
}
+
+ private void hideSoftKeyBoard(View view) {
+ if (view != null) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+ }
+
+ @SuppressLint("HandlerLeak")
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_LOAD_DATA:
+ if (thread == null) {//如果已创建就不再重新创建子线程了
+ Log.e(TAG, "handleMessage: Begin Parse Data");
+ thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ // 子线程中解析省市区数据
+ initJsonData();
+ }
+ });
+ thread.start();
+ }
+ break;
+
+ case MSG_LOAD_SUCCESS:
+ Log.e(TAG, "handleMessage: Parse Succeed");
+ isLoaded = true;
+ break;
+
+ case MSG_LOAD_FAILED:
+ Log.e(TAG, "handleMessage: Parse Failed");
+ break;
+ default:
+ }
+ }
+ };
+
+
+ private void initJsonData() {//解析数据
+
+ /**
+ * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
+ * 关键逻辑在于循环体
+ *
+ * */
+ String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
+
+ ArrayList jsonBean = parseData(JsonData);//用Gson 转成实体
+
+ /**
+ * 添加省份数据
+ *
+ * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
+ * PickerView会通过getPickerViewText方法获取字符串显示出来。
+ */
+ options1Items = jsonBean;
+
+ for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
+ ArrayList cityList = new ArrayList<>();//该省的城市列表(第二级)
+ ArrayList> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
+
+ for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
+ String cityName = jsonBean.get(i).getCityList().get(c).getName();
+ cityList.add(cityName);//添加城市
+ ArrayList city_AreaList = new ArrayList<>();//该城市的所有地区列表
+
+ //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
+ /*if (jsonBean.get(i).getCityList().get(c).getArea() == null
+ || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
+ city_AreaList.add("");
+ } else {
+ city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
+ }*/
+ city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
+ province_AreaList.add(city_AreaList);//添加该省所有地区数据
+ }
+
+ /**
+ * 添加城市数据
+ */
+ options2Items.add(cityList);
+
+ /**
+ * 添加地区数据
+ */
+ options3Items.add(province_AreaList);
+ }
+
+ mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);
+ }
+
+ public ArrayList parseData(String result) {//Gson 解析
+ ArrayList detail = new ArrayList<>();
+ try {
+ JSONArray data = new JSONArray(result);
+ Gson gson = new Gson();
+ for (int i = 0; i < data.length(); i++) {
+ JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
+ detail.add(entity);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ mHandler.sendEmptyMessage(MSG_LOAD_FAILED);
+ }
+ return detail;
+ }
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java
index 3fbbf69..4f53f4d 100644
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java
+++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherContact.java
@@ -3,24 +3,26 @@ package com.uiuios.aios.activity.weather;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.uiuios.aios.base.BasePresenter;
import com.uiuios.aios.base.BaseView;
+import com.uiuios.aios.bean.MapGeoResult;
public class WeatherContact {
public interface Presenter extends BasePresenter {
+ void decodeGeo(String address);
//获取定位缓存
void getLocation();
//获取天气缓存
void getWeatherCache();
//获取天气
- void getWeather();
+ void getWeather(String locationTude);
}
public interface WeatherView extends BaseView {
+ void setGeo(MapGeoResult mapGeoresult);
//设置定位缓存
void setLocation(String location);
//设置天气缓存
void setWeatherCache(WeatherDailyBean weatherCache);
//设置天气
void setWeather(WeatherDailyBean weather);
-
}
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java
index 3e6e1ba..ab0c0e4 100644
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java
+++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherPresenter.java
@@ -3,19 +3,23 @@ package com.uiuios.aios.activity.weather;
import android.content.Context;
import android.util.Log;
-import androidx.annotation.NonNull;
-
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.qweather.sdk.view.QWeather;
import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.bean.MapGeoBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.manager.RemoteManager;
+import com.uiuios.aios.network.NetInterfaceManager;
import java.lang.reflect.Type;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
/**
@@ -40,7 +44,7 @@ public class WeatherPresenter implements WeatherContact.Presenter {
return lifecycle;
}
- public WeatherPresenter(Context context) {
+ WeatherPresenter(Context context) {
this.mContext = context;
Log.e(TAG, "WeatherPresenter: " + context.getClass());
}
@@ -56,9 +60,45 @@ public class WeatherPresenter implements WeatherContact.Presenter {
}
+ @Override
+ public void decodeGeo(String address) {
+ Log.e(TAG, "decodeGeo: " + address);
+ NetInterfaceManager.getInstance().getGeoObservable(address)
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("decodeGeo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull MapGeoBean mapGeoBean) {
+ Log.e("decodeGeo", "onNext: " + mapGeoBean);
+ if (mapGeoBean.getStatus() == 0) {
+ mView.setGeo(mapGeoBean.getResult());
+ } else {
+ mView.setGeo(null);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("decodeGeo", "onError: " + e.getMessage());
+ mView.setGeo(null);
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("decodeGeo", "onComplete: ");
+ }
+ });
+
+ }
+
@Override
public void getLocation() {
- String location = RemoteManager.getInstance().getCityDistrict();
+ String location = RemoteManager.getInstance().getDistrict();
mView.setLocation(location);
}
@@ -73,8 +113,8 @@ public class WeatherPresenter implements WeatherContact.Presenter {
}
@Override
- public void getWeather() {
- QWeather.getWeather7D(mContext, RemoteManager.getInstance().getLocationTude(), new QWeather.OnResultWeatherDailyListener() {
+ public void getWeather(String locationTude) {
+ QWeather.getWeather7D(mContext, locationTude, new QWeather.OnResultWeatherDailyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather", "onError: " + throwable.getMessage());
diff --git a/app/src/main/java/com/uiuios/aios/adapter/CityAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/CityAdapter.java
new file mode 100644
index 0000000..3e8b7cf
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/CityAdapter.java
@@ -0,0 +1,77 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.bean.AddressBean;
+
+import java.util.List;
+
+public class CityAdapter extends RecyclerView.Adapter {
+
+ private List mCityList;
+ private Context mContext;
+
+ public void setCityList(List cityList) {
+ mCityList = cityList;
+ notifyDataSetChanged();
+ }
+
+ public interface CityCallback {
+ void onCitySelected(AddressBean addressBean);
+ }
+
+ private CityCallback mCityCallback;
+
+ public void setCityCallback(CityCallback cityCallback) {
+ mCityCallback = cityCallback;
+ }
+
+ @NonNull
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_city, parent, false));
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ AddressBean addressBean = mCityList.get(position);
+ String city = addressBean.toString();
+ holder.tv_city.setText(city);
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (mCityCallback != null) {
+ mCityCallback.onCitySelected(addressBean);
+ }
+ }
+ });
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return mCityList == null ? 0 : mCityList.size();
+ }
+
+ class Holder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ TextView tv_city;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ tv_city = itemView.findViewById(R.id.tv_city);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/DistrictAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/DistrictAdapter.java
new file mode 100644
index 0000000..8e6558b
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/DistrictAdapter.java
@@ -0,0 +1,77 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.bean.AddressBean;
+
+import java.util.List;
+
+public class DistrictAdapter extends RecyclerView.Adapter {
+
+ private List mDistrict;
+ private Context mContext;
+
+ public void setDistrict(List district) {
+ mDistrict = district;
+ notifyDataSetChanged();
+ }
+
+ public interface DistrictCallback {
+ void onDistrictSelected(AddressBean district);
+ }
+
+ private DistrictCallback mDistrictCallback;
+
+ public void setDistrictCallback(DistrictCallback districtCallback) {
+ mDistrictCallback = districtCallback;
+ }
+
+ @NonNull
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_district, parent, false));
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ AddressBean addressBean = mDistrict.get(position);
+ String city = addressBean.toString();
+ holder.tv_district.setText(city);
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (mDistrictCallback != null) {
+ mDistrictCallback.onDistrictSelected(addressBean);
+ }
+ }
+ });
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return mDistrict == null ? 0 : mDistrict.size();
+ }
+
+ class Holder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ TextView tv_district;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ tv_district = itemView.findViewById(R.id.tv_district);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java
new file mode 100644
index 0000000..76c315d
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/InformationAdapter.java
@@ -0,0 +1,75 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.shehuan.niv.NiceImageView;
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.InformationDetailsActivity;
+import com.uiuios.aios.bean.ArticleInfo;
+import com.uiuios.aios.utils.GlideLoadUtils;
+import com.uiuios.aios.utils.TimeUtils;
+
+import java.util.List;
+
+public class InformationAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+ private List mArticleInfos;
+
+ public void setArticleInfos(List articleInfos) {
+ mArticleInfos = articleInfos;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new InformationAdapter.Holder(LayoutInflater.from(mContext).inflate(R.layout.item_information, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ ArticleInfo articleInfo = mArticleInfos.get(position);
+ holder.tv_consult_title.setText(articleInfo.getTitle());
+ GlideLoadUtils.getInstance().glideLoad(mContext, articleInfo.getImg(), holder.nv_consult);
+ holder.tv_time.setText(TimeUtils.transferSecondgToDate(articleInfo.getUpdate_time()));
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mContext, InformationDetailsActivity.class);
+ intent.putExtra("articleInfo", articleInfo);
+ mContext.startActivity(intent);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mArticleInfos == null ? 0 : mArticleInfos.size();
+ }
+
+ class Holder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ NiceImageView nv_consult;
+ TextView tv_consult_title;
+ TextView tv_time;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ nv_consult = itemView.findViewById(R.id.nv_consult);
+ tv_consult_title = itemView.findViewById(R.id.tv_consult_title);
+ tv_time = itemView.findViewById(R.id.tv_time);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java
new file mode 100644
index 0000000..28ae1a4
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java
@@ -0,0 +1,81 @@
+package com.uiuios.aios.adapter;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.shehuan.niv.NiceImageView;
+import com.uiui.video.bean.VideoInfo;
+import com.uiuios.aios.R;
+
+import java.util.ArrayList;
+
+public class KnowledgeVideoAdapter extends RecyclerView.Adapter {
+ private static final String TAG = KnowledgeVideoAdapter.class.getSimpleName();
+
+ private Context mContext;
+ private ArrayList mKnowledgeVideoList;
+
+ public void setLivenVideoList(ArrayList livenVideoList) {
+ mKnowledgeVideoList = livenVideoList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public LivenVideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new KnowledgeVideoAdapter.LivenVideoHolder(LayoutInflater.from(mContext).inflate(R.layout.item_knowledge_video, parent, false));
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull LivenVideoHolder holder, int position) {
+ VideoInfo videoInfo = mKnowledgeVideoList.get(position);
+ Glide.with(holder.nv_cover).load(videoInfo.getVideo_cover()).into(holder.nv_cover);
+ holder.tv_title.setText(videoInfo.getName());
+ holder.nv_cover.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(new ComponentName("com.uiui.video", "com.uiui.video.activity.TikTokActivity"));
+ intent.putExtra("position", position);
+ intent.putParcelableArrayListExtra("list", mKnowledgeVideoList);
+ try {
+ mContext.startActivity(intent);
+ } catch (Exception e) {
+ Log.e(TAG, "onClick: " + e.getMessage());
+ }
+ }
+ });
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return mKnowledgeVideoList == null ? 0 : mKnowledgeVideoList.size();
+ }
+
+ class LivenVideoHolder extends RecyclerView.ViewHolder {
+
+ NiceImageView nv_cover;
+ TextView tv_title;
+
+ public LivenVideoHolder(@NonNull View itemView) {
+ super(itemView);
+ nv_cover = itemView.findViewById(R.id.nv_cover);
+ tv_title = itemView.findViewById(R.id.tv_title);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/LivenVideoAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/LivenVideoAdapter.java
new file mode 100644
index 0000000..f24c20a
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/LivenVideoAdapter.java
@@ -0,0 +1,77 @@
+package com.uiuios.aios.adapter;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.shehuan.niv.NiceImageView;
+import com.uiui.video.bean.VideoInfo;
+import com.uiuios.aios.R;
+
+import java.util.ArrayList;
+
+public class LivenVideoAdapter extends RecyclerView.Adapter {
+ private static final String TAG = LivenVideoAdapter.class.getSimpleName();
+
+ private Context mContext;
+ private ArrayList mLivenVideoList;
+
+ public void setLivenVideoList(ArrayList livenVideoList) {
+ mLivenVideoList = livenVideoList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public LivenVideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new LivenVideoAdapter.LivenVideoHolder(LayoutInflater.from(mContext).inflate(R.layout.item_liven_video, parent, false));
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull LivenVideoHolder holder, int position) {
+ VideoInfo videoInfo = mLivenVideoList.get(position);
+ Glide.with(holder.iv_cover).load(videoInfo.getVideo_cover()).into(holder.iv_cover);
+ holder.iv_cover.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(new ComponentName("com.uiui.video", "com.uiui.video.activity.TikTokActivity"));
+ intent.putExtra("position", position);
+ intent.putParcelableArrayListExtra("list", mLivenVideoList);
+ try {
+ mContext.startActivity(intent);
+ } catch (Exception e) {
+ Log.e(TAG, "onClick: " + e.getMessage());
+ }
+ }
+ });
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return mLivenVideoList == null ? 0 : mLivenVideoList.size();
+ }
+
+ class LivenVideoHolder extends RecyclerView.ViewHolder {
+
+ NiceImageView iv_cover;
+
+ public LivenVideoHolder(@NonNull View itemView) {
+ super(itemView);
+ iv_cover = itemView.findViewById(R.id.iv_cover);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/NewArticleAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/NewArticleAdapter.java
new file mode 100644
index 0000000..6ef0e9f
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/NewArticleAdapter.java
@@ -0,0 +1,71 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.shehuan.niv.NiceImageView;
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.ArticleActivity;
+import com.uiuios.aios.activity.InformationActivity;
+import com.uiuios.aios.bean.ArticleInfo;
+
+import java.util.List;
+
+public class NewArticleAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+ private List mArticleBeanList;
+
+ public void setArticleBeanList(List list) {
+ this.mArticleBeanList = list;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new NewArticleAdapter.Holder(LayoutInflater.from(mContext).inflate(R.layout.item_new_article, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ ArticleInfo articleInfo = mArticleBeanList.get(position);
+ Glide.with(holder.nv_consult).load(articleInfo.getImg()).into(holder.nv_consult);
+ holder.tv_consult_title.setText(articleInfo.getTitle());
+ holder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mContext, InformationActivity.class);
+ mContext.startActivity(intent);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mArticleBeanList == null ? 0 : mArticleBeanList.size();
+ }
+
+ class Holder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ NiceImageView nv_consult;
+ TextView tv_consult_title;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ nv_consult = itemView.findViewById(R.id.nv_consult);
+ tv_consult_title = itemView.findViewById(R.id.tv_consult_title);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java
new file mode 100644
index 0000000..45cc892
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/NewGoodsAdapter.java
@@ -0,0 +1,68 @@
+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;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+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.bean.GoodsInfo;
+
+import java.util.List;
+
+public class NewGoodsAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+ private List goodsInfoList;
+
+ public void setGoodsInfoList(List list) {
+ this.goodsInfoList = list;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public GoodsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new NewGoodsAdapter.GoodsHolder(LayoutInflater.from(mContext).inflate(R.layout.item_new_goods, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull GoodsHolder holder, int position) {
+ GoodsInfo goodsInfo = goodsInfoList.get(position);
+ Glide.with(holder.nv_goods_pic).load(goodsInfo.getImg()).error(mContext.getResources().getDrawable(R.drawable.nodata)).into(holder.nv_goods_pic);
+ holder.tv_goods_title.setText(goodsInfo.getGoods_desc());
+ holder.tv_goods_pirce.setText("热卖促销¥" + goodsInfo.getBuying_price());
+ }
+
+ @Override
+ public int getItemCount() {
+ return goodsInfoList == null ? 0 : goodsInfoList.size();
+ }
+
+ static class GoodsHolder extends RecyclerView.ViewHolder {
+ NiceImageView nv_goods_pic;
+ TextView tv_goods_title;
+ TextView tv_goods_pirce;
+ TextView tv_buy;
+
+ public GoodsHolder(@NonNull View itemView) {
+ super(itemView);
+ nv_goods_pic = itemView.findViewById(R.id.nv_goods_pic);
+ tv_goods_title = itemView.findViewById(R.id.tv_goods_title);
+ tv_goods_pirce = itemView.findViewById(R.id.tv_goods_pirce);
+ tv_buy = itemView.findViewById(R.id.tv_buy);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/TitleAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/TitleAdapter.java
new file mode 100644
index 0000000..544592c
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/adapter/TitleAdapter.java
@@ -0,0 +1,91 @@
+package com.uiuios.aios.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.bean.CategoryBean;
+
+import java.util.List;
+
+public class TitleAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private List mCategoryList;
+ private String mTitle = "";
+
+ public void setCategoryList(List categoryList) {
+ mCategoryList = categoryList;
+ notifyDataSetChanged();
+ }
+
+ public String getTitle() {
+ return mTitle;
+ }
+
+ public interface TitleChangeCallback {
+ void onTitleChange(CategoryBean categoryBean);
+ }
+
+ private TitleChangeCallback mTitleChangeCallback;
+
+ public void setTitleChangeCallback(TitleChangeCallback titleChangeCallback) {
+ mTitleChangeCallback = titleChangeCallback;
+ }
+
+ @NonNull
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_title, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ CategoryBean videoCategory = mCategoryList.get(position);
+ String title = videoCategory.getName();
+ holder.tv_title.setText(title);
+ if (mTitle.equals(title)) {
+ holder.tv_title.setBackground(mContext.getDrawable(R.drawable.title_select_background));
+ holder.tv_title.setTextColor(mContext.getColor(R.color.black));
+ } else {
+ holder.tv_title.setBackground(mContext.getDrawable(R.drawable.title_background));
+ holder.tv_title.setTextColor(mContext.getColor(R.color.white));
+ }
+ holder.tv_title.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTitle = title;
+ notifyDataSetChanged();
+ if (mTitleChangeCallback != null) {
+ mTitleChangeCallback.onTitleChange(videoCategory);
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return mCategoryList == null ? 0 : mCategoryList.size();
+ }
+
+ class Holder extends RecyclerView.ViewHolder {
+
+ TextView tv_title;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ tv_title = itemView.findViewById(R.id.tv_title);
+
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/alarm/AlarmAdapter.java b/app/src/main/java/com/uiuios/aios/alarm/AlarmAdapter.java
index a7bbc89..7b9c97c 100644
--- a/app/src/main/java/com/uiuios/aios/alarm/AlarmAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/alarm/AlarmAdapter.java
@@ -21,7 +21,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.uiuios.aios.R;
-import com.uiuios.aios.activity.alarm.AlarmClockEditActivity;
+import com.uiuios.aios.activity.alarmclock.AlarmClockEditActivity;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.ScreenUtils;
import com.uiuios.aios.utils.Utils;
diff --git a/app/src/main/java/com/uiuios/aios/alarm/AlarmClockData.java b/app/src/main/java/com/uiuios/aios/alarm/AlarmClockData.java
index de26715..258eedc 100644
--- a/app/src/main/java/com/uiuios/aios/alarm/AlarmClockData.java
+++ b/app/src/main/java/com/uiuios/aios/alarm/AlarmClockData.java
@@ -8,6 +8,7 @@ import androidx.annotation.Nullable;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
+import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.text.ParseException;
@@ -29,6 +30,8 @@ public class AlarmClockData implements Serializable {
String file_md5;
int remind_type;
int is_onoff;//0关闭 1开启
+ @SerializedName("class")
+ int clazz;
boolean finished = false;
boolean is_local = false;
@@ -123,6 +126,14 @@ public class AlarmClockData implements Serializable {
this.is_onoff = is_onoff;
}
+ public int getClazz() {
+ return clazz;
+ }
+
+ public void setClazz(int clazz) {
+ this.clazz = clazz;
+ }
+
public boolean isIs_local() {
return is_local;
}
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java b/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java
new file mode 100644
index 0000000..5f88113
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/BaseDataBindingActivity.java
@@ -0,0 +1,123 @@
+package com.uiuios.aios.base;
+
+import android.os.Bundle;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.CheckResult;
+import androidx.annotation.ContentView;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.trello.rxlifecycle4.LifecycleProvider;
+import com.trello.rxlifecycle4.LifecycleTransformer;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
+import com.uiuios.aios.R;
+import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
+
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public abstract class BaseDataBindingActivity extends AppCompatActivity implements LifecycleProvider {
+ public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+
+ public BaseDataBindingActivity() {
+ super();
+ }
+
+ @ContentView
+ public BaseDataBindingActivity(@LayoutRes int contentLayoutId) {
+ super(contentLayoutId);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final Observable lifecycle() {
+ return lifecycleSubject.hide();
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
+ return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindToLifecycle() {
+ return RxLifecycleAndroid.bindActivity(lifecycleSubject);
+ }
+
+ @Override
+ @CallSuper
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ lifecycleSubject.onNext(ActivityEvent.CREATE);
+// StatusBarUtil.init(this);
+ UltimateBarX.statusBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(true)
+ .apply();
+ UltimateBarX.navigationBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(true)
+ .apply();
+ initView();
+ initData();
+ }
+
+
+ /**
+ * 初始化视图
+ */
+ public abstract void initView();
+
+
+ /**
+ * 初始化数据
+ */
+ public abstract void initData();
+
+ @Override
+ @CallSuper
+ protected void onStart() {
+ super.onStart();
+ lifecycleSubject.onNext(ActivityEvent.START);
+ }
+
+ @Override
+ @CallSuper
+ protected void onResume() {
+ super.onResume();
+ lifecycleSubject.onNext(ActivityEvent.RESUME);
+ }
+
+ @Override
+ @CallSuper
+ protected void onPause() {
+ lifecycleSubject.onNext(ActivityEvent.PAUSE);
+ super.onPause();
+ }
+
+ @Override
+ @CallSuper
+ protected void onStop() {
+ lifecycleSubject.onNext(ActivityEvent.STOP);
+ super.onStop();
+ }
+
+ @Override
+ @CallSuper
+ protected void onDestroy() {
+ lifecycleSubject.onNext(ActivityEvent.DESTROY);
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/BaseFragment.java b/app/src/main/java/com/uiuios/aios/base/BaseFragment.java
index 502b33f..d7a30f9 100644
--- a/app/src/main/java/com/uiuios/aios/base/BaseFragment.java
+++ b/app/src/main/java/com/uiuios/aios/base/BaseFragment.java
@@ -83,7 +83,7 @@ public abstract class BaseFragment extends Fragment implements LifecycleProvider
public boolean prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
fetchData();
- isDataInitiated = true;
+// isDataInitiated = true;
return true;
}
return false;
diff --git a/app/src/main/java/com/uiuios/aios/bean/AddressBean.java b/app/src/main/java/com/uiuios/aios/bean/AddressBean.java
new file mode 100644
index 0000000..99e9bea
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/AddressBean.java
@@ -0,0 +1,63 @@
+package com.uiuios.aios.bean;
+
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+
+import java.io.Serializable;
+
+public class AddressBean implements Serializable {
+ private static final long serialVersionUID = 5408415869212907187L;
+
+ private String mProvince;
+ private String mCity;
+ private String mDistrict;
+
+ public AddressBean(String province, String city, String district) {
+ mProvince = province;
+ mCity = city;
+ mDistrict = district;
+ }
+
+
+ public AddressBean(String district) {
+ mDistrict = district;
+ }
+
+ public String getProvince() {
+ return mProvince;
+ }
+
+ public void setProvince(String province) {
+ mProvince = province;
+ }
+
+ public String getCity() {
+ return mCity;
+ }
+
+ public void setCity(String city) {
+ mCity = city;
+ }
+
+ public String getDistrict() {
+ return mDistrict;
+ }
+
+ public void setDistrict(String district) {
+ mDistrict = district;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ String s = "";
+ if (!TextUtils.isEmpty(mProvince))
+ s += mProvince;
+ if (!TextUtils.isEmpty(mCity))
+ s += mCity;
+ if (!TextUtils.isEmpty(mDistrict))
+ s += mDistrict;
+ return s;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/ArticleInfo.java b/app/src/main/java/com/uiuios/aios/bean/ArticleInfo.java
index 82d0efa..d157cf8 100644
--- a/app/src/main/java/com/uiuios/aios/bean/ArticleInfo.java
+++ b/app/src/main/java/com/uiuios/aios/bean/ArticleInfo.java
@@ -15,6 +15,11 @@ public class ArticleInfo implements Serializable {
/*跳转链接*/
String jump_url;
+ int weight;
+ int click_count;
+ String third_url;
+ long update_time;
+
public int getId() {
return id;
}
@@ -54,4 +59,36 @@ public class ArticleInfo implements Serializable {
public void setJump_url(String jump_url) {
this.jump_url = jump_url;
}
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+ public int getClick_count() {
+ return click_count;
+ }
+
+ public void setClick_count(int click_count) {
+ this.click_count = click_count;
+ }
+
+ public String getThird_url() {
+ return third_url;
+ }
+
+ public void setThird_url(String third_url) {
+ this.third_url = third_url;
+ }
+
+ public long getUpdate_time() {
+ return update_time;
+ }
+
+ public void setUpdate_time(long update_time) {
+ this.update_time = update_time;
+ }
}
diff --git a/app/src/main/java/com/uiuios/aios/bean/CategoryBean.java b/app/src/main/java/com/uiuios/aios/bean/CategoryBean.java
new file mode 100644
index 0000000..85d2329
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/CategoryBean.java
@@ -0,0 +1,26 @@
+package com.uiuios.aios.bean;
+
+import java.io.Serializable;
+
+public class CategoryBean implements Serializable {
+ private static final long serialVersionUID = -1254376015727204975L;
+
+ int id;
+ String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/JsonBean.java b/app/src/main/java/com/uiuios/aios/bean/JsonBean.java
new file mode 100644
index 0000000..eda2b02
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/JsonBean.java
@@ -0,0 +1,76 @@
+package com.uiuios.aios.bean;
+
+
+import com.contrarywind.interfaces.IPickerViewData;
+
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @author: 小嵩
+ * @date: 2017/3/16 15:36
+ */
+
+public class JsonBean implements IPickerViewData {
+
+
+ /**
+ * name : 省份
+ * city : [{"name":"北京市","area":["东城区","西城区","崇文区","宣武区","朝阳区"]}]
+ */
+
+ private String name;
+ private List city;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List getCityList() {
+ return city;
+ }
+
+ public void setCityList(List city) {
+ this.city = city;
+ }
+
+ // 实现 IPickerViewData 接口,
+ // 这个用来显示在PickerView上面的字符串,
+ // PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。
+ @Override
+ public String getPickerViewText() {
+ return this.name;
+ }
+
+
+ public static class CityBean {
+ /**
+ * name : 城市
+ * area : ["东城区","西城区","崇文区","昌平区"]
+ */
+
+ private String name;
+ private List area;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List getArea() {
+ return area;
+ }
+
+ public void setArea(List area) {
+ this.area = area;
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/MapGeoBean.java b/app/src/main/java/com/uiuios/aios/bean/MapGeoBean.java
new file mode 100644
index 0000000..4fca8e3
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/MapGeoBean.java
@@ -0,0 +1,37 @@
+package com.uiuios.aios.bean;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonParser;
+
+import java.io.Serializable;
+
+public class MapGeoBean implements Serializable {
+ private static final long serialVersionUID = 3502542257994267517L;
+
+ int status;
+ MapGeoResult result;
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public MapGeoResult getResult() {
+ return result;
+ }
+
+ public void setResult(MapGeoResult result) {
+ this.result = result;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/MapGeoLocation.java b/app/src/main/java/com/uiuios/aios/bean/MapGeoLocation.java
new file mode 100644
index 0000000..de84acf
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/MapGeoLocation.java
@@ -0,0 +1,34 @@
+package com.uiuios.aios.bean;
+
+import androidx.annotation.NonNull;
+
+import java.io.Serializable;
+
+public class MapGeoLocation implements Serializable {
+ private static final long serialVersionUID = -1877191050083863647L;
+
+ String lng;
+ String lat;
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return lng + "," + lat;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/MapGeoResult.java b/app/src/main/java/com/uiuios/aios/bean/MapGeoResult.java
new file mode 100644
index 0000000..e62bdb2
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/bean/MapGeoResult.java
@@ -0,0 +1,64 @@
+package com.uiuios.aios.bean;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonParser;
+
+import java.io.Serializable;
+
+public class MapGeoResult implements Serializable {
+ private static final long serialVersionUID = 2065809223607379059L;
+
+ MapGeoLocation location;
+ int precise;
+ int confidence;
+ int comprehension;
+ String level;
+
+ public MapGeoLocation getLocation() {
+ return location;
+ }
+
+ public void setLocation(MapGeoLocation location) {
+ this.location = location;
+ }
+
+ public int getPrecise() {
+ return precise;
+ }
+
+ public void setPrecise(int precise) {
+ this.precise = precise;
+ }
+
+ public int getConfidence() {
+ return confidence;
+ }
+
+ public void setConfidence(int confidence) {
+ this.confidence = confidence;
+ }
+
+ public int getComprehension() {
+ return comprehension;
+ }
+
+ public void setComprehension(int comprehension) {
+ this.comprehension = comprehension;
+ }
+
+ public String getLevel() {
+ return level;
+ }
+
+ public void setLevel(String level) {
+ this.level = level;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+}
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 ee8b6cb..03aead2 100644
--- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
+++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
@@ -22,4 +22,14 @@ public class CommonConfig {
public static final String UIUI_EXPIRE_TIME_KEY = "aios_uiui_expire_time";
public static final String SETTING_OTHER_APPINSTALLER_KEY = "setting_other_appInstaller";
+
+ public static final String VIDEO_INFO_BUNDLE = "video_bundle_info";
+
+ /*手动选择位置地址*/
+ public static final String MANUALLY_SELECT_LOCATION_ADDRESS = "map_manually_select_location";
+ /*手动选择位置 区*/
+ public static final String MANUALLY_SELECT_LOCATION_DISTRICT = "map_manually_select_district";
+ /*手动选择位置 经纬度*/
+ public static final String MANUALLY_SELECT_LOCATION_TUDE = "map_manually_select_tude";
+
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java
index c784d05..2a48234 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java
@@ -175,7 +175,7 @@ public class AppListFragment extends BaseFragment {
desktopIcon.setIcon(mContext.getResources().getDrawable(resID));
}
} else {
- iv.setImageBitmap(BitmapUtils.getIconBitmap(rootView.getContext(), desktopIcon.getIcon()));
+ iv.setImageDrawable( desktopIcon.getIcon());
}
tv.setText(desktopIcon.getLable());
// linearLayout.setEnabled(true);
@@ -323,7 +323,8 @@ public class AppListFragment extends BaseFragment {
dailyAppDialog.setOnClickBottomListener(new DailyAppDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
- updateAppDisableStatus(pkg, label);
+// updateAppDisableStatus(pkg, label);
+ AppStatusManager.getInstance().addHidedApp(pkg);
dailyAppDialog.dismiss();
}
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 271ceaf..9f431f2 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
@@ -1,7 +1,6 @@
package com.uiuios.aios.fragment.custom;
import android.app.Activity;
-import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -53,12 +52,11 @@ import com.uiuios.aios.R;
import com.uiuios.aios.activity.ControlActivity;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.QuickAppActivity;
-import com.uiuios.aios.activity.alarm.AlarmClockActivity;
+import com.uiuios.aios.activity.alarm.AlarmActivity;
import com.uiuios.aios.activity.code.FamilySpaceActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
import com.uiuios.aios.activity.weather.WeatherPresenter;
-import com.uiuios.aios.activity.wifi.WiFiManagerActivity;
import com.uiuios.aios.adapter.NotificationAdapter;
import com.uiuios.aios.adapter.SOSNnmberAdapter;
import com.uiuios.aios.alarm.AlarmUtils;
@@ -73,12 +71,10 @@ import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.dialog.PasswordDialog;
import com.uiuios.aios.dialog.SingleDialog;
import com.uiuios.aios.disklrucache.CacheHelper;
-import com.uiuios.aios.gson.GsonUtils;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.network.UrlAddress;
import com.uiuios.aios.push.PushManager;
-import com.uiuios.aios.service.main.MainService;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUtil;
import com.uiuios.aios.utils.BitmapUtils;
@@ -87,9 +83,7 @@ import com.uiuios.aios.utils.SchemeUtils;
import com.uiuios.aios.utils.ToastUtil;
import com.uiuios.aios.utils.Utils;
-import java.lang.reflect.Method;
import java.lang.reflect.Type;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -889,7 +883,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
}
private void getAlarm() {
- startActivity(new Intent(mContext, AlarmClockActivity.class));
+ startActivity(new Intent(mContext, AlarmActivity.class));
// NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() {
// @Override
// public void setAlarmClock(List alarmClockList) {
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 dca38c8..36d0c17 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
@@ -5,14 +5,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
-
-import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -23,6 +15,13 @@ import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.google.gson.Gson;
import com.king.view.circleprogressview.CircleProgressView;
import com.qweather.sdk.bean.base.Code;
@@ -36,7 +35,7 @@ import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
-import com.uiuios.aios.activity.alarm.AlarmClockActivity;
+import com.uiuios.aios.activity.alarm.AlarmActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
import com.uiuios.aios.activity.weather.WeatherPresenter;
@@ -290,12 +289,18 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
ApkUtils.openPackage(mContext, "com.uiuios.appstore");
}
});
+ iv_note_nodata.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(mContext, AlarmActivity.class));
+ }
+ });
}
@Override
public void onResume() {
super.onResume();
- Log.e(TAG, "onResume: " );
+ Log.e(TAG, "onResume: ");
mHomePresenter.getInstalledApp();
}
@@ -395,7 +400,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
}
private void getAlarm() {
- startActivity(new Intent(mContext, AlarmClockActivity.class));
+ startActivity(new Intent(mContext, AlarmActivity.class));
}
private void checkSosNumber() {
@@ -501,7 +506,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
}
- private boolean isnight() {
+ private boolean isNight() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
@@ -542,19 +547,22 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
tv_weather.setText(now.getText());
String iconDay = weatherBean.getNow().getIcon();
Log.e("getweather", "onSuccess: iconDay = " + iconDay);
- switch (iconDay) {
- case "100":
- case "150":
- case "102":
- case "152":
- if (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));
- }
- break;
- default:
-// cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain));
+ if (isNight()) {
+ cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
+ } else {
+ switch (weatherBean.getNow().getIcon()) {
+ default:
+ case "100":
+ case "150":
+ //晴
+ cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
+ break;
+ case "102":
+ case "152":
+ //少云
+ cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
+ break;
+ }
}
} else {
//在此查看返回数据失败的原因
diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
index 65b04a0..00d09db 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondContact.java
@@ -1,23 +1,26 @@
package com.uiuios.aios.fragment.second;
+import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.base.BasePresenter;
import com.uiuios.aios.base.BaseView;
-import com.uiuios.aios.bean.ActivityBean;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.GoodsInfo;
+import java.util.ArrayList;
import java.util.List;
public class SecondContact {
public interface Presenter extends BasePresenter {
void getGoods();
void getArticle();
- void getActivityList();
+ void getLivenVideoList();
+ void getKnowledgeVideoList();
}
public interface View extends BaseView {
void setGoods(List goodsInfos);
void setArticle(List articleInfoList);
- void setActivityList(List activityList);
+ void setLivenVideoList(ArrayList livenVideoList);
+ void setKnowledgeVideoList(ArrayList knowledgeVideoList);
}
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
index 7e123f2..2201285 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java
@@ -5,35 +5,31 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.NetworkUtils;
-import com.bumptech.glide.Glide;
-import com.shehuan.niv.NiceImageView;
+import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.R;
-import com.uiuios.aios.activity.InfoListActivity;
-import com.uiuios.aios.activity.SpikeListActivity;
-import com.uiuios.aios.adapter.ActivityAdapter;
-import com.uiuios.aios.adapter.ArticleAdapter;
-import com.uiuios.aios.adapter.GoodsAdapter;
+import com.uiuios.aios.adapter.KnowledgeVideoAdapter;
+import com.uiuios.aios.adapter.LivenVideoAdapter;
+import com.uiuios.aios.adapter.NewArticleAdapter;
+import com.uiuios.aios.adapter.NewGoodsAdapter;
import com.uiuios.aios.base.BaseFragment;
-import com.uiuios.aios.bean.ActivityBean;
import com.uiuios.aios.bean.ArticleInfo;
-import com.uiuios.aios.bean.DemandBean;
import com.uiuios.aios.bean.GoodsInfo;
-import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.JGYUtils;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -48,86 +44,36 @@ import butterknife.ButterKnife;
public class SecondFragment extends BaseFragment implements SecondContact.View, NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = SecondFragment.class.getSimpleName();
- @BindView(R.id.iv_aimg)
- ImageView iv_aimg;
- @BindView(R.id.tv_title)
- TextView tv_title;
- @BindView(R.id.tv_content)
- TextView tv_content;
-
- @BindView(R.id.iv_avatar_a)
- ImageView iv_avatar_a;
- @BindView(R.id.tv_title_a)
- TextView tv_title_a;
- @BindView(R.id.tc_joined_num_a)
- TextView tc_joined_num_a;
- @BindView(R.id.tv_time_a)
- TextView tv_time_a;
- @BindView(R.id.tv_address_a)
- TextView tv_address_a;
-
- @BindView(R.id.iv_avatar_d)
- ImageView iv_avatar_d;
- @BindView(R.id.tv_title_d)
- TextView tv_title_d;
- @BindView(R.id.tc_joined_num_d)
- TextView tc_joined_num_d;
- @BindView(R.id.tv_time_d)
- TextView tv_time_d;
- @BindView(R.id.tv_address_d)
- TextView tv_address_d;
-
- @BindView(R.id.iv1)
- ImageView iv1;
- @BindView(R.id.iv2)
- ImageView iv2;
- @BindView(R.id.iv3)
- ImageView iv3;
- @BindView(R.id.iv4)
- ImageView iv4;
-
- @BindView(R.id.cl_activity)
- ConstraintLayout cl_activity;
-
- @BindView(R.id.cl_demand)
- ConstraintLayout cl_demand;
- // @BindView(R.id.cl1)
-// ConstraintLayout cl1;
- @BindView(R.id.cl2)
- ConstraintLayout cl2;
- @BindView(R.id.cl3)
- ConstraintLayout cl3;
- @BindView(R.id.cl4)
- ConstraintLayout cl4;
@BindView(R.id.rv_goods)
RecyclerView rv_goods;
@BindView(R.id.rv_article)
RecyclerView rv_article;
- @BindView(R.id.rv_activity)
- RecyclerView rv_activity;
-
-
- @BindView(R.id.nv_pic)
- NiceImageView nv_pic;
- @BindView(R.id.tv_like)
- TextView tv_like;
- @BindView(R.id.tv_comment)
- TextView tv_comment;
-
- @BindView(R.id.tv_spike_more)
- TextView tv_spike_more;
- @BindView(R.id.tv_info_more)
- TextView tv_info_more;
+ @BindView(R.id.rv_liven)
+ RecyclerView rv_liven;
+ @BindView(R.id.rv_knowledge)
+ RecyclerView rv_knowledge;
private View rootView;
private Context mContext;
private ContentResolver mCRv;
private SecondPresenter mPresenter;
- private GoodsAdapter mGoodsAdapter;
- private ArticleAdapter mArticleAdapter;
- private ActivityAdapter mActivityAdapter;
+ private NewGoodsAdapter mNewGoodsAdapter;
+ private NewArticleAdapter mNewArticleAdapter;
+ private LivenVideoAdapter mLivenVideoAdapter;
+ private KnowledgeVideoAdapter mKnowledgeVideoAdapter;
+
+ private int mCurrentGoodsIndex = 0;
+ private boolean mGoodsScrolling = false;
+ private Handler mGoodsHandler;
+ private Runnable mGoodsRunnable;
+
+ private int mCurrentArticleIndex = 0;
+ private boolean mArticleScrolling = false;
+ private Handler mArticleHandler;
+ private Runnable mArticleRunnable;
+
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
@@ -180,10 +126,13 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
mParam2 = getArguments().getString(ARG_PARAM2);
}
NetworkUtils.registerNetworkStatusChangedListener(this);
+
+
}
@Override
public void fetchData() {
+ Log.e(TAG, "fetchData: ");
initData();
}
@@ -191,60 +140,148 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
- rootView = inflater.inflate(R.layout.fragment_second, container, false);
- mContext = rootView.getContext();
- mCRv = mContext.getContentResolver();
- mPresenter = new SecondPresenter(mContext);
- mPresenter.attachView(this);
- mPresenter.setLifecycle(lifecycleSubject);
- ButterKnife.bind(this, rootView);
- initView();
+ long time = System.currentTimeMillis();
+ Log.e(TAG, "onCreateView: rootView = " + rootView);
+ if (null != rootView) {
+ ViewGroup parent = (ViewGroup) rootView.getParent();
+ if (null != parent) {
+ parent.removeView(rootView);
+ }
+ } else { // 如ongoing果rootView为空 ,就实例化该视图
+ rootView = inflater.inflate(R.layout.fragment_second, container, false);
+ mContext = rootView.getContext();
+ mCRv = mContext.getContentResolver();
+ ButterKnife.bind(this, rootView);
+ mPresenter = new SecondPresenter(mContext);
+ mPresenter.attachView(this);
+ mPresenter.setLifecycle(lifecycleSubject);
+ initView();
+ initData();
+ }
+ Log.e(TAG, "onCreateView: tiem = " + (System.currentTimeMillis() - time));
return rootView;
}
private void initView() {
- mGoodsAdapter = new GoodsAdapter();
- mArticleAdapter = new ArticleAdapter();
- mActivityAdapter = new ActivityAdapter();
+ mNewGoodsAdapter = new NewGoodsAdapter();
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
+ linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+ rv_goods.setLayoutManager(linearLayoutManager);
+ rv_goods.setAdapter(mNewGoodsAdapter);
+ LinearSnapHelper snapHelper = new LinearSnapHelper();
+ snapHelper.attachToRecyclerView(rv_goods);
+ rv_goods.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ Log.e("rv_goods", "onScrollStateChanged: newState = " + newState);
+ if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ mGoodsScrolling = false;
+ // 获取当前滚动到的条目位置
+ int firstIndex = linearLayoutManager.findFirstVisibleItemPosition();
+ Log.e("rv_goods", "onScrollStateChanged: firstIndex = " + firstIndex);
+ Log.e("rv_goods", "onScrollStateChanged: mCurrentGoodsIndex = " + mCurrentGoodsIndex);
+ mCurrentGoodsIndex = firstIndex + 1;
+ } else {
+ mGoodsScrolling = true;
+ }
+ }
- rv_goods.setLayoutManager(new LinearLayoutManager(mContext));
- rv_goods.setAdapter(mGoodsAdapter);
- rv_article.setLayoutManager(new LinearLayoutManager(mContext));
- rv_article.setAdapter(mArticleAdapter);
- rv_activity.setLayoutManager(new LinearLayoutManager(mContext));
- rv_activity.setAdapter(mActivityAdapter);
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ }
+ });
- cl_activity.setOnClickListener(new View.OnClickListener() {
+ mNewArticleAdapter = new NewArticleAdapter();
+ LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(mContext);
+ linearLayoutManager2.setOrientation(LinearLayoutManager.HORIZONTAL);
+ rv_article.setLayoutManager(linearLayoutManager2);
+ rv_article.setAdapter(mNewArticleAdapter);
+ LinearSnapHelper snapHelper2 = new LinearSnapHelper();
+ snapHelper2.attachToRecyclerView(rv_article);
+ rv_article.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
- public void onClick(View view) {
- openApp(0);
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ Log.e("rv_article", "onScrollStateChanged: newState = " + newState);
+ if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ mArticleScrolling = false;
+ // 获取当前滚动到的条目位置
+ int firstIndex = linearLayoutManager2.findFirstVisibleItemPosition();
+ Log.e("rv_article", "onScrollStateChanged: firstIndex = " + firstIndex);
+ Log.e("rv_article", "onScrollStateChanged: mCurrentArticleIndex = " + mCurrentArticleIndex);
+ mCurrentArticleIndex = firstIndex + 1;
+ } else {
+ mArticleScrolling = true;
+ }
+ }
+
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
}
});
- cl_demand.setOnClickListener(new View.OnClickListener() {
+
+ mGoodsHandler = new Handler();
+ mGoodsRunnable = new Runnable() {
@Override
- public void onClick(View view) {
- openApp(1);
+ public void run() {
+ if (mNewGoodsAdapter.getItemCount() == 0 || mGoodsScrolling) {
+ return;
+ }
+ Log.e(TAG, "run: " + mNewGoodsAdapter.getItemCount());
+ if (mNewGoodsAdapter.getItemCount() <= mCurrentGoodsIndex) {
+ mCurrentGoodsIndex = 0;
+ } else {
+ mCurrentGoodsIndex++;
+ }
+ rv_goods.smoothScrollToPosition(mCurrentGoodsIndex);
+ mGoodsHandler.postDelayed(this, 3000);
}
- });
- tv_spike_more.setOnClickListener(new View.OnClickListener() {
+ };
+
+ mArticleHandler = new Handler();
+ mArticleRunnable = new Runnable() {
@Override
- public void onClick(View view) {
- startActivity(new Intent(mContext, SpikeListActivity.class));
+ public void run() {
+ if (mNewArticleAdapter.getItemCount() == 0 || mArticleScrolling) {
+ return;
+ }
+ if (mNewArticleAdapter.getItemCount() <= mCurrentArticleIndex) {
+ mCurrentArticleIndex = 0;
+ } else {
+ mCurrentArticleIndex++;
+ }
+ rv_article.smoothScrollToPosition(mCurrentArticleIndex);
+ mArticleHandler.postDelayed(this, 3000);
}
- });
- tv_info_more.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- startActivity(new Intent(mContext, InfoListActivity.class));
- }
- });
+ };
+
+
+ mLivenVideoAdapter = new LivenVideoAdapter();
+ LinearLayoutManager linearLayoutManager3 = new LinearLayoutManager(mContext);
+ linearLayoutManager3.setOrientation(LinearLayoutManager.HORIZONTAL);
+ rv_liven.setLayoutManager(linearLayoutManager3);
+ rv_liven.setAdapter(mLivenVideoAdapter);
+ LinearSnapHelper snapHelper3 = new LinearSnapHelper();
+ snapHelper3.attachToRecyclerView(rv_liven);
+
+ mKnowledgeVideoAdapter = new KnowledgeVideoAdapter();
+ LinearLayoutManager linearLayoutManager4 = new LinearLayoutManager(mContext);
+ linearLayoutManager4.setOrientation(LinearLayoutManager.HORIZONTAL);
+ rv_knowledge.setLayoutManager(linearLayoutManager4);
+ rv_knowledge.setAdapter(mKnowledgeVideoAdapter);
+ LinearSnapHelper snapHelper4 = new LinearSnapHelper();
+ snapHelper4.attachToRecyclerView(rv_knowledge);
}
private void initData() {
mPresenter.getGoods();
mPresenter.getArticle();
- mPresenter.getActivityList();
- getDemandList();
+ mPresenter.getLivenVideoList();
+ mPresenter.getKnowledgeVideoList();
+
}
@Override
@@ -253,54 +290,6 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
NetworkUtils.unregisterNetworkStatusChangedListener(this);
}
- private void getDemandList() {
- NetInterfaceManager.getInstance().getDemandList(true, lifecycleSubject, new NetInterfaceManager.DemandListCallback() {
- @Override
- public void setDemandList(List demandBeans) {
- cl4.setVisibility(View.VISIBLE);
- iv4.setVisibility(View.GONE);
- DemandBean demandBean = demandBeans.get(0);
- setDemand(demandBean);
- }
-
- @Override
- public void noData() {
- cl4.setVisibility(View.GONE);
- iv4.setVisibility(View.VISIBLE);
- }
-
- @Override
- public void onError() {
-
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- }
-
- private void setDemand(DemandBean demandBean) {
- Glide.with(iv_avatar_d).load(demandBean.getAvatar()).error(getResources().getDrawable(R.drawable.default_head)).into(iv_avatar_d);
- tv_title_d.setText(demandBean.getTitle());
-// tv_price.setText(String.valueOf(demandBean.getPrice()));
- tc_joined_num_d.setText(demandBean.getLike_count() + "人参加");
- tv_time_d.setText(getTime(demandBean.getDemand_time()));
- tv_address_d.setText(demandBean.getAddress());
- }
-
- private void setActivity(ActivityBean activity) {
- Glide.with(iv_avatar_a).load(activity.getAvatar()).error(getResources().getDrawable(R.drawable.default_head)).into(iv_avatar_a);
- tv_title_a.setText(activity.getName());
- tc_joined_num_a.setText(activity.getJoin_num() + "人参加");
- tv_time_a.setText(getTime(activity.getAdd_time()));
- tv_address_a.setText(activity.getLocation());
- Glide.with(nv_pic).load(activity.getFile()).centerCrop().into(nv_pic);
- tv_like.setText(activity.getLike_count() + "");
- tv_comment.setText(activity.getComment_count() + "");
- }
-
private String getTime(long second) {
long ms = second * 1000L;
SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日");
@@ -327,34 +316,33 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
@Override
public void setGoods(List goodsInfos) {
if (goodsInfos != null && goodsInfos.size() != 0) {
- iv1.setVisibility(View.GONE);
- mGoodsAdapter.setGoodsInfoList(goodsInfos);
+ mNewGoodsAdapter.setGoodsInfoList(goodsInfos);
+ mGoodsHandler.removeCallbacks(mGoodsRunnable);
+ mGoodsHandler.postDelayed(mGoodsRunnable, 3000);
} else {
- iv1.setVisibility(View.VISIBLE);
+
}
}
@Override
public void setArticle(List articleInfoList) {
if (articleInfoList != null && articleInfoList.size() != 0) {
-// cl2.setVisibility(View.VISIBLE);
- iv2.setVisibility(View.GONE);
- mArticleAdapter.setArticleBeanList(articleInfoList);
+ mNewArticleAdapter.setArticleBeanList(articleInfoList);
+ mArticleHandler.removeCallbacks(mArticleRunnable);
+ mArticleHandler.postDelayed(mArticleRunnable, 3000);
} else {
-// cl2.setVisibility(View.GONE);
- iv2.setVisibility(View.VISIBLE);
+
}
}
@Override
- public void setActivityList(List activityList) {
- if (activityList != null && activityList.size() != 0) {
-// cl3.setVisibility(View.VISIBLE);
- iv3.setVisibility(View.GONE);
- mActivityAdapter.setActivityBeans(activityList);
- } else {
-// cl3.setVisibility(View.GONE);
- iv3.setVisibility(View.VISIBLE);
- }
+ public void setLivenVideoList(ArrayList livenVideoList) {
+ mLivenVideoAdapter.setLivenVideoList(livenVideoList);
}
+
+ @Override
+ public void setKnowledgeVideoList(ArrayList knowledgeVideoList) {
+ mKnowledgeVideoAdapter.setLivenVideoList(knowledgeVideoList);
+ }
+
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java
index b53e80a..fa67f34 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondPresenter.java
@@ -5,12 +5,13 @@ import android.util.Log;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.FragmentEvent;
-import com.uiuios.aios.bean.ActivityBean;
+import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.GoodsInfo;
import com.uiuios.aios.network.NetInterfaceManager;
+import java.util.ArrayList;
import java.util.List;
import io.reactivex.rxjava3.annotations.NonNull;
@@ -107,27 +108,62 @@ public class SecondPresenter implements SecondContact.Presenter {
}
@Override
- public void getActivityList() {
- NetInterfaceManager.getInstance().getActivityList(true, getLifecycle(), new NetInterfaceManager.ActivitiesListCallback() {
- @Override
- public void setActivitiesList(List activityBeans) {
- mView.setActivityList(activityBeans);
- }
+ public void getLivenVideoList() {
+ NetInterfaceManager.getInstance().getLivenVideoListObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getLivenVideoList", "onSubscribe: ");
+ }
- @Override
- public void noData() {
- mView.setActivityList(null);
- }
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getLivenVideoList", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code==200){
+ mView.setLivenVideoList(listBaseResponse.data);
+ }
+ }
- @Override
- public void onError() {
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getLivenVideoList", "onError: " + e.getMessage());
+ }
- }
-
- @Override
- public void onComplete() {
-
- }
- });
+ @Override
+ public void onComplete() {
+ Log.e("getLivenVideoList", "onComplete: ");
+ }
+ });
}
+
+ @Override
+ public void getKnowledgeVideoList() {
+ NetInterfaceManager.getInstance().getKnowledgeVideoListObservable()
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getKnowledgeVideoList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getKnowledgeVideoList", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code==200){
+ mView.setKnowledgeVideoList(listBaseResponse.data);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getKnowledgeVideoList", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getKnowledgeVideoList", "onComplete: ");
+ }
+ });
+ }
+
}
diff --git a/app/src/main/java/com/uiuios/aios/gson/GetJsonDataUtil.java b/app/src/main/java/com/uiuios/aios/gson/GetJsonDataUtil.java
new file mode 100644
index 0000000..3148651
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/gson/GetJsonDataUtil.java
@@ -0,0 +1,38 @@
+package com.uiuios.aios.gson;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * <读取Json文件的工具类>
+ *
+ * @author: 小嵩
+ * @date: 2017/3/16 16:22
+
+ */
+
+public class GetJsonDataUtil {
+
+
+ public String getJson(Context context, String fileName) {
+
+ StringBuilder stringBuilder = new StringBuilder();
+ try {
+ AssetManager assetManager = context.getAssets();
+ BufferedReader bf = new BufferedReader(new InputStreamReader(
+ assetManager.open(fileName)));
+ String line;
+ while ((line = bf.readLine()) != null) {
+ stringBuilder.append(line);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return stringBuilder.toString();
+ }
+}
+
diff --git a/app/src/main/java/com/uiuios/aios/manager/AppManager.java b/app/src/main/java/com/uiuios/aios/manager/AppManager.java
index f723f5a..ecb8e57 100644
--- a/app/src/main/java/com/uiuios/aios/manager/AppManager.java
+++ b/app/src/main/java/com/uiuios/aios/manager/AppManager.java
@@ -66,6 +66,10 @@ public class AppManager {
return sInstance;
}
+ public Set getShowPackages() {
+ return showPackages;
+ }
+
public void addPakcage(String packageName) {
this.showPackages.add(packageName);
mMMKV.encode(SHOW_PACKAGE_KEY, showPackages);
diff --git a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java
index ad69b11..2eff83d 100644
--- a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java
+++ b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java
@@ -14,6 +14,7 @@ import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
+import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.disklrucache.CacheHelper;
@@ -118,6 +119,7 @@ public class RemoteManager {
* @return 获取sn
*/
public String getSerial() {
+// if (BuildConfig.DEBUG) return "MTK0002306120556370";
if (mGetInfoInterface != null) {
try {
return mGetInfoInterface.getSerial();
@@ -180,6 +182,16 @@ public class RemoteManager {
}
}
+ public String getDistrict() {
+ getLocation();
+ MapBean mapBean = getMapBean();
+ if (mapBean == null) {
+ return "北京";
+ } else {
+ return mapBean.getDistrict();
+ }
+ }
+
public double getLongitude() {
MapBean mapBean = getMapBean();
if (mapBean == null) {
diff --git a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
index 9198694..dffe7ee 100644
--- a/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiuios/aios/network/NetInterfaceManager.java
@@ -10,16 +10,19 @@ import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiui.video.bean.VideoInfo;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.bean.ActivityBean;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.bean.AlarmClockId;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.bean.CategoryBean;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.DemandBean;
import com.uiuios.aios.bean.GoodsInfo;
import com.uiuios.aios.bean.HealthCode;
+import com.uiuios.aios.bean.MapGeoBean;
import com.uiuios.aios.bean.NetDesktopIcon;
import com.uiuios.aios.bean.SnInfo;
import com.uiuios.aios.bean.SystemSettings;
@@ -39,6 +42,7 @@ import com.uiuios.aios.network.api.AlarmClockEditApi;
import com.uiuios.aios.network.api.AlarmClockQueryApi;
import com.uiuios.aios.network.api.AppUsageRecordApi;
import com.uiuios.aios.network.api.ArticleListApi;
+import com.uiuios.aios.network.api.CategorysApi;
import com.uiuios.aios.network.api.DemandListApi;
import com.uiuios.aios.network.api.GetAdminSnSettingApi;
import com.uiuios.aios.network.api.GetDesktopApi;
@@ -46,6 +50,8 @@ import com.uiuios.aios.network.api.GetMailList;
import com.uiuios.aios.network.api.GetUserIDApi;
import com.uiuios.aios.network.api.GoodsListApi;
import com.uiuios.aios.network.api.HealthCodeApi;
+import com.uiuios.aios.network.api.KnowledgeVideoListApi;
+import com.uiuios.aios.network.api.LivenVideoListApi;
import com.uiuios.aios.network.api.MailListAddApi;
import com.uiuios.aios.network.api.RunNewApp;
import com.uiuios.aios.network.api.SNInfoApi;
@@ -56,11 +62,12 @@ import com.uiuios.aios.network.api.UpdateAlarmClockApi;
import com.uiuios.aios.network.api.UpdateAppIconApi;
import com.uiuios.aios.network.api.UpdateDesktopApi;
import com.uiuios.aios.network.api.UserInfoControl;
+import com.uiuios.aios.network.api.amap.GeocodingApi;
import com.uiuios.aios.network.interceptor.RepeatRequestInterceptor;
-import com.uiuios.aios.utils.Utils;
import java.io.File;
import java.lang.reflect.Type;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -91,6 +98,8 @@ public class NetInterfaceManager {
private Retrofit mRetrofit;
private OkHttpClient okHttpClient;
+ private Retrofit mAmapRetrofit;
+ private OkHttpClient mAmapOkHttpClient;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private final ConcurrentHashMap requestIdsMap = new ConcurrentHashMap<>();
@@ -130,6 +139,31 @@ public class NetInterfaceManager {
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
}
+
+ if (mAmapOkHttpClient == null) {
+ //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
+ OkHttpClient.Builder builder = new OkHttpClient.Builder();
+ builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间
+ builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间
+ builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间
+ builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
+ builder.addInterceptor(new RepeatRequestInterceptor());
+
+ // 设置缓存文件路径
+ String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache";
+ Cache cache = new Cache(new File(cacheDirectory), cacheSize);
+ builder.cache(cache);// 设置缓存
+ mAmapOkHttpClient = builder.build();
+ }
+
+ if (mAmapRetrofit == null) {
+ mAmapRetrofit = new Retrofit.Builder()
+ .client(mAmapOkHttpClient)
+ .baseUrl(UrlAddress.AMAP_ROOT_URL)
+ .addConverterFactory(GsonConverterFactory.create())
+ .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
+ .build();
+ }
}
/**
@@ -169,6 +203,13 @@ public class NetInterfaceManager {
return okHttpClient;
}
+ public Observable getGeoObservable(String address) {
+ return mAmapRetrofit.create(GeocodingApi.class)
+ .geocoding(address, "json", "RGAsG7hN9gbDxeruqF4Lsf0ro6pp362O")
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
/**
* 通过sn获取设备的信息
*
@@ -237,6 +278,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> getCategorysObservable() {
+ return mRetrofit.create(CategorysApi.class)
+ .getCategorys(RemoteManager.getInstance().getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public Observable>> getArticleListObservable() {
return mRetrofit.create(ArticleListApi.class)
.getArticleList(RemoteManager.getInstance().getSerial())
@@ -279,7 +327,15 @@ public class NetInterfaceManager {
public Observable>> getAlarmClockObservable() {
return mRetrofit
.create(AlarmClockApi.class)
- .getAlarmClockApiApi(RemoteManager.getInstance().getSerial())
+ .getAlarmClock(RemoteManager.getInstance().getSerial(), 0)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable>> getAlarmClockObservable(int type) {
+ return mRetrofit
+ .create(AlarmClockApi.class)
+ .getAlarmClock(RemoteManager.getInstance().getSerial(), type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -312,6 +368,21 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> getLivenVideoListObservable() {
+ return mRetrofit.create(LivenVideoListApi.class)
+ .getLivenVideoList(RemoteManager.getInstance().getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable>> getKnowledgeVideoListObservable() {
+ return mRetrofit.create(KnowledgeVideoListApi.class)
+ .getKnowledgeVideoList(RemoteManager.getInstance().getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+
public interface onCompleteCallback {
void onComplete();
}
diff --git a/app/src/main/java/com/uiuios/aios/network/UrlAddress.java b/app/src/main/java/com/uiuios/aios/network/UrlAddress.java
index 2b13a13..25708d0 100644
--- a/app/src/main/java/com/uiuios/aios/network/UrlAddress.java
+++ b/app/src/main/java/com/uiuios/aios/network/UrlAddress.java
@@ -2,6 +2,8 @@ package com.uiuios.aios.network;
public class UrlAddress {
public static final String ROOT_URL = "https://led.zuoyepad.com/android/";
+ public static final String AMAP_ROOT_URL = "https://api.map.baidu.com/";
+
/*设备信息接口*/
public static final String SNINFO = "sn/getSnInfo";
/*获取用户头像和信息*/
@@ -24,6 +26,8 @@ public class UrlAddress {
public static final String GET_DESKTOP_LAYOUT = "getDesktopLayout";
/*获取抢购列表*/
public static final String GET_GOODS_LIST = "getGoodsList";
+ /*养生资讯分类*/
+ public static final String CATEGORYS = "article/categorys";
/*获取资讯列表*/
public static final String GET_ARTICLE_LIST = "getArticleList";
/*获取抢购详情*/
@@ -65,4 +69,13 @@ public class UrlAddress {
public static final String GET_USER_ID = "getUserId";
+
+
+ /*养生视频列表*/
+ public static final String GET_LIVEN_VIDEO_LIST = "livenVideo/getLivenVideoList";
+ /*知识视频列表*/
+ public static final String GET_KNOWLEDGE_VIDEO_LIST = "knowledgeVideo/getKnowledgeVideoList";
+
+ public static final String geocoding = "geocoding/v3/";
+
}
diff --git a/app/src/main/java/com/uiuios/aios/network/api/AlarmClockApi.java b/app/src/main/java/com/uiuios/aios/network/api/AlarmClockApi.java
index 1a4e68b..91b36a8 100644
--- a/app/src/main/java/com/uiuios/aios/network/api/AlarmClockApi.java
+++ b/app/src/main/java/com/uiuios/aios/network/api/AlarmClockApi.java
@@ -12,7 +12,8 @@ import retrofit2.http.Query;
public interface AlarmClockApi {
@GET(UrlAddress.GET_ALARM_CLOCK)
- Observable>> getAlarmClockApiApi(
- @Query("sn") String sn
+ Observable>> getAlarmClock(
+ @Query("sn") String sn,
+ @Query("class") int clazz
);
}
diff --git a/app/src/main/java/com/uiuios/aios/network/api/CategorysApi.java b/app/src/main/java/com/uiuios/aios/network/api/CategorysApi.java
new file mode 100644
index 0000000..291a1a0
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/network/api/CategorysApi.java
@@ -0,0 +1,18 @@
+package com.uiuios.aios.network.api;
+
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.bean.CategoryBean;
+import com.uiuios.aios.network.UrlAddress;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface CategorysApi {
+ @GET(UrlAddress.CATEGORYS)
+ Observable>> getCategorys(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/uiuios/aios/network/api/KnowledgeVideoListApi.java b/app/src/main/java/com/uiuios/aios/network/api/KnowledgeVideoListApi.java
new file mode 100644
index 0000000..c49450c
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/network/api/KnowledgeVideoListApi.java
@@ -0,0 +1,19 @@
+package com.uiuios.aios.network.api;
+
+import com.uiui.video.bean.VideoInfo;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.network.UrlAddress;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface KnowledgeVideoListApi {
+ @GET(UrlAddress.GET_KNOWLEDGE_VIDEO_LIST)
+ Observable>> getKnowledgeVideoList(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/uiuios/aios/network/api/LivenVideoListApi.java b/app/src/main/java/com/uiuios/aios/network/api/LivenVideoListApi.java
new file mode 100644
index 0000000..eadd885
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/network/api/LivenVideoListApi.java
@@ -0,0 +1,18 @@
+package com.uiuios.aios.network.api;
+
+import com.uiui.video.bean.VideoInfo;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.network.UrlAddress;
+
+import java.util.ArrayList;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface LivenVideoListApi {
+ @GET(UrlAddress.GET_LIVEN_VIDEO_LIST)
+ Observable>> getLivenVideoList(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/uiuios/aios/network/api/amap/GeocodingApi.java b/app/src/main/java/com/uiuios/aios/network/api/amap/GeocodingApi.java
new file mode 100644
index 0000000..28fb6f2
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/network/api/amap/GeocodingApi.java
@@ -0,0 +1,17 @@
+package com.uiuios.aios.network.api.amap;
+
+import com.uiuios.aios.bean.MapGeoBean;
+import com.uiuios.aios.network.UrlAddress;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface GeocodingApi {
+ @GET(UrlAddress.geocoding)
+ Observable geocoding(
+ @Query("address") String address,
+ @Query("output") String output,
+ @Query("ak") String key
+ );
+}
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 bb5ce9e..536ad75 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
@@ -70,6 +70,31 @@ public class MainService extends BaseService implements MainSContact.MainSView,
}
}
+ private uploadAlarmClockReceiver mUploadAlarmClockReceiver;
+
+ private void registerRefreshReceiver() {
+ if (mUploadAlarmClockReceiver == null) {
+ mUploadAlarmClockReceiver = new uploadAlarmClockReceiver();
+ }
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(uploadAlarmClockReceiver.UPLOAD_ALARM_RECEIVER_ACTION);
+ registerReceiver(mUploadAlarmClockReceiver, filter);
+ }
+
+
+ public class uploadAlarmClockReceiver extends BroadcastReceiver {
+ public static final String UPLOAD_ALARM_RECEIVER_ACTION = "Receiver_Upload_AlarmClock_Action";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ Log.e("uploadAlarmClockReceiver", "onReceive: " + action);
+ if (!TextUtils.isEmpty(action)) {
+ mPresenter.addAlarmClock();
+ }
+ }
+ }
+
@Override
public IBinder onBind(Intent intent) {
Log.e(TAG, "onBind: ");
@@ -94,6 +119,7 @@ public class MainService extends BaseService implements MainSContact.MainSView,
registerAlarmReceiver();
registerTimeReceiver();
registerLockScreenReceiver();
+ registerRefreshReceiver();
}
@Override
@@ -116,6 +142,9 @@ public class MainService extends BaseService implements MainSContact.MainSView,
if (lockScreenReceiver != null) {
unregisterReceiver(lockScreenReceiver);
}
+ if (mUploadAlarmClockReceiver != null) {
+ unregisterReceiver(mUploadAlarmClockReceiver);
+ }
}
@Override
@@ -139,7 +168,7 @@ public class MainService extends BaseService implements MainSContact.MainSView,
return powerManager.isInteractive();
}
- public static final String ALARMWAKEUP = "ALARM_WAKEUP";
+ public static final String ALARMWAKEUP = "AIOS_ALARM_WAKEUP";
private void registerAlarmReceiver() {
if (alarmReceiver == null) {
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 b4c51bb..a2b536f 100644
--- a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java
@@ -19,7 +19,9 @@ import androidx.annotation.RequiresApi;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
+import com.uiuios.aios.activity.QuickAppActivity;
import com.uiuios.aios.bean.DesktopIcon;
+import com.uiuios.aios.manager.AppManager;
import com.uiuios.aios.manager.AppStatusManager;
import com.uiuios.aios.receiver.InstallResultReceiver;
@@ -34,6 +36,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
+import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
@@ -156,6 +159,8 @@ public class ApkUtils {
* @return
*/
public static ArrayList queryFilterAppInfo(Context context) {
+ List quickApps= new ArrayList<>(AppManager.getInstance().getAddPackages());
+
PackageManager pm = context.getPackageManager();
// 查询所有已经安装的应用程序
List resolveInfos = new ArrayList<>();
@@ -179,6 +184,9 @@ public class ApkUtils {
}
for (ResolveInfo resolveInfo : resolveinfoList) {
String pkg = resolveInfo.activityInfo.packageName;
+ if (quickApps.contains(pkg)) {
+ continue;
+ }
if (appIsDisable(context, pkg)) {
Log.e(TAG, "queryFilterAppInfo: disable = " + pkg);
continue;
diff --git a/app/src/main/java/com/uiuios/aios/utils/BitmapUtils.java b/app/src/main/java/com/uiuios/aios/utils/BitmapUtils.java
index 150513b..f5cd100 100644
--- a/app/src/main/java/com/uiuios/aios/utils/BitmapUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/BitmapUtils.java
@@ -13,7 +13,9 @@ import android.graphics.Typeface;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.VectorDrawable;
import android.os.Build;
+import android.util.Log;
import com.uiuios.aios.R;
@@ -64,15 +66,24 @@ public class BitmapUtils {
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && drawable instanceof AdaptiveIconDrawable) {
+
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return Utils.getRoundedBitmap(bitmap, context);
+ } else if (drawable instanceof VectorDrawable) {
+ Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
+ drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
+ drawable.draw(canvas);
+ return Utils.getRoundedBitmap(bitmap, context);
} else {
return Utils.getRoundedBitmap(((BitmapDrawable) drawable).getBitmap(), context);
}
} catch (Exception e) {
+ Log.e("getIconBitmap", "getIconBitmap: " + e.getMessage());
return null;
}
}
diff --git a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
index 18eb897..e0b58e7 100644
--- a/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
+++ b/app/src/main/java/com/uiuios/aios/utils/TimeUtils.java
@@ -27,6 +27,12 @@ public class TimeUtils {
return sdf.format(date);
}
+ public static String transferSecondgToDate(long second) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = new Date(second * 1000);
+ return sdf.format(date);
+ }
+
public static String secToTime(int totalSecs) {
int hours = totalSecs / 3600;
int minutes = (totalSecs % 3600) / 60;
diff --git a/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java b/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
new file mode 100644
index 0000000..fd442db
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
@@ -0,0 +1,66 @@
+package com.uiuios.aios.view;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.databinding.BindingAdapter;
+
+import com.bumptech.glide.Glide;
+import com.uiuios.aios.utils.TimeUtils;
+
+public class ImageViewAdapter {
+// @BindingAdapter("android:src")
+// public static void setSrc(ImageView view, Bitmap bitmap) {
+// view.setImageBitmap(bitmap);
+// }
+//
+// @BindingAdapter("android:src")
+// public static void setSrc(ImageView view, int resId) {
+// view.setImageResource(resId);
+// }
+//
+// @BindingAdapter("imageUrl")
+// public static void setSrc(ImageView imageView, String url) {
+// Glide.with(imageView.getContext())
+// .load(url)
+// .error(R.mipmap.ic_launcher)
+// .into(imageView);
+// }
+//
+// @BindingAdapter({"app:imageUrl", "app:placeHolder", "app:error"})
+// public static void loadImage(ImageView imageView, String url, Drawable holderDrawable, Drawable errorDrawable) {
+// Glide.with(imageView.getContext())
+// .load(url)
+// .placeholder(holderDrawable)
+// .error(errorDrawable)
+// .into(imageView);
+// }
+//
+// @BindingAdapter({"app:imageUrl", "app:errorDrawableId", "app:placeDrawableId"})
+// public static void loadImage(ImageView imageView, String url, int errorDrawableId, int placeDrawableId) {
+// Glide.with(imageView.getContext())
+// .load(url)
+// .error(errorDrawableId)
+// .placeholder(placeDrawableId)
+// .into(imageView);
+// }
+
+ /**
+ * 自定义设置图片属性 - 在匹配时自定义命名空间会被忽略
+ */
+ @BindingAdapter({"imageUrl", "error"})
+ public static void loadImage(ImageView imageView, String url, Drawable error) {
+ Glide.with(imageView.getContext())
+ .load(url)
+ .error(error)
+ .into(imageView);
+ }
+ @BindingAdapter({"setTime"})
+ public static void setTime(TextView textView, long timestamp) {
+ textView.setText(TimeUtils.transferSecondgToDate(timestamp));
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uiuios/aios/view/StartSnapHelper.java b/app/src/main/java/com/uiuios/aios/view/StartSnapHelper.java
new file mode 100644
index 0000000..794fb7d
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/view/StartSnapHelper.java
@@ -0,0 +1,105 @@
+package com.uiuios.aios.view;
+
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSnapHelper;
+import androidx.recyclerview.widget.OrientationHelper;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Created by zhouwei on 17/3/30.
+ */
+
+public class StartSnapHelper extends LinearSnapHelper {
+
+ private OrientationHelper mHorizontalHelper, mVerticalHelper;
+
+ @Nullable
+ @Override
+ public int[] calculateDistanceToFinalSnap(RecyclerView.LayoutManager layoutManager, View targetView) {
+ int[] out = new int[2];
+ if (layoutManager.canScrollHorizontally()) {
+ out[0] = distanceToStart(targetView, getHorizontalHelper(layoutManager));
+ } else {
+ out[0] = 0;
+ }
+ if (layoutManager.canScrollVertically()) {
+ out[1] = distanceToStart(targetView, getVerticalHelper(layoutManager));
+ } else {
+ out[1] = 0;
+ }
+ return out;
+ }
+
+ private int distanceToStart(View targetView, OrientationHelper helper) {
+ return helper.getDecoratedStart(targetView) - helper.getStartAfterPadding();
+ }
+
+ @Nullable
+ @Override
+ public View findSnapView(RecyclerView.LayoutManager layoutManager) {
+ if (layoutManager instanceof LinearLayoutManager) {
+
+ if (layoutManager.canScrollHorizontally()) {
+ return findStartView(layoutManager, getHorizontalHelper(layoutManager));
+ } else {
+ return findStartView(layoutManager, getVerticalHelper(layoutManager));
+ }
+ }
+
+ return super.findSnapView(layoutManager);
+ }
+
+
+
+ private View findStartView(RecyclerView.LayoutManager layoutManager,
+ OrientationHelper helper) {
+ if (layoutManager instanceof LinearLayoutManager) {
+ int firstChild = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
+ //需要判断是否是最后一个Item,如果是最后一个则不让对齐,以免出现最后一个显示不完全。
+ boolean isLastItem = ((LinearLayoutManager) layoutManager)
+ .findLastCompletelyVisibleItemPosition()
+ == layoutManager.getItemCount() - 1;
+
+ if (firstChild == RecyclerView.NO_POSITION || isLastItem) {
+ return null;
+ }
+
+ View child = layoutManager.findViewByPosition(firstChild);
+
+ if (helper.getDecoratedEnd(child) >= helper.getDecoratedMeasurement(child) / 2
+ && helper.getDecoratedEnd(child) > 0) {
+ return child;
+ } else {
+ if (((LinearLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition()
+ == layoutManager.getItemCount() - 1) {
+ return null;
+ } else {
+ return layoutManager.findViewByPosition(firstChild + 1);
+ }
+ }
+ }
+
+ return super.findSnapView(layoutManager);
+ }
+
+
+ private OrientationHelper getHorizontalHelper(
+ @NonNull RecyclerView.LayoutManager layoutManager) {
+ if (mHorizontalHelper == null) {
+ mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager);
+ }
+ return mHorizontalHelper;
+ }
+
+ private OrientationHelper getVerticalHelper(RecyclerView.LayoutManager layoutManager) {
+ if (mVerticalHelper == null) {
+ mVerticalHelper = OrientationHelper.createVerticalHelper(layoutManager);
+ }
+ return mVerticalHelper;
+
+ }
+}
diff --git a/app/src/main/res/drawable-hdpi/actions_about.png b/app/src/main/res/drawable-hdpi/actions_about.png
index bf8fb68..b4a331e 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_about.png and b/app/src/main/res/drawable-hdpi/actions_about.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_account.png b/app/src/main/res/drawable-hdpi/actions_account.png
index 83f3f49..e926efb 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_account.png and b/app/src/main/res/drawable-hdpi/actions_account.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_booktag.png b/app/src/main/res/drawable-hdpi/actions_booktag.png
index 538c60d..96aa302 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_booktag.png and b/app/src/main/res/drawable-hdpi/actions_booktag.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_cent.png b/app/src/main/res/drawable-hdpi/actions_cent.png
index 02b6df9..1d66499 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_cent.png and b/app/src/main/res/drawable-hdpi/actions_cent.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_comment.png b/app/src/main/res/drawable-hdpi/actions_comment.png
index 22246f2..77e1efb 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_comment.png and b/app/src/main/res/drawable-hdpi/actions_comment.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_feedback.png b/app/src/main/res/drawable-hdpi/actions_feedback.png
index f47cfa1..9c88237 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_feedback.png and b/app/src/main/res/drawable-hdpi/actions_feedback.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_order.png b/app/src/main/res/drawable-hdpi/actions_order.png
index 065ec3d..902f8d6 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_order.png and b/app/src/main/res/drawable-hdpi/actions_order.png differ
diff --git a/app/src/main/res/drawable-hdpi/actions_weibo.png b/app/src/main/res/drawable-hdpi/actions_weibo.png
index 402d9b7..4b4dbaa 100644
Binary files a/app/src/main/res/drawable-hdpi/actions_weibo.png and b/app/src/main/res/drawable-hdpi/actions_weibo.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_appstore.png b/app/src/main/res/drawable-hdpi/com_android_appstore.png
index dda8263..dc93645 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_appstore.png and b/app/src/main/res/drawable-hdpi/com_android_appstore.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_browser.png b/app/src/main/res/drawable-hdpi/com_android_browser.png
index a0bb4a3..c811122 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_browser.png and b/app/src/main/res/drawable-hdpi/com_android_browser.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_calculator2.png b/app/src/main/res/drawable-hdpi/com_android_calculator2.png
index 31402e7..4f5b3ab 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_calculator2.png and b/app/src/main/res/drawable-hdpi/com_android_calculator2.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_calendar.png b/app/src/main/res/drawable-hdpi/com_android_calendar.png
index ef5e141..0e63be3 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_calendar.png and b/app/src/main/res/drawable-hdpi/com_android_calendar.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_camera.png b/app/src/main/res/drawable-hdpi/com_android_camera.png
index 6e3f4af..472415b 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_camera.png and b/app/src/main/res/drawable-hdpi/com_android_camera.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_clean.png b/app/src/main/res/drawable-hdpi/com_android_clean.png
index 5d8431c..6f507bb 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_clean.png and b/app/src/main/res/drawable-hdpi/com_android_clean.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_contacts.png b/app/src/main/res/drawable-hdpi/com_android_contacts.png
index 62b572e..04fddf1 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_contacts.png and b/app/src/main/res/drawable-hdpi/com_android_contacts.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_deskclock.png b/app/src/main/res/drawable-hdpi/com_android_deskclock.png
index e240294..08f8f2f 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_deskclock.png and b/app/src/main/res/drawable-hdpi/com_android_deskclock.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_dialer.png b/app/src/main/res/drawable-hdpi/com_android_dialer.png
index 80a0eb9..bb01bd0 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_dialer.png and b/app/src/main/res/drawable-hdpi/com_android_dialer.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_email.png b/app/src/main/res/drawable-hdpi/com_android_email.png
index 2eb7a70..3cc1963 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_email.png and b/app/src/main/res/drawable-hdpi/com_android_email.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png b/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png
index 938d2cd..6eb0503 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png and b/app/src/main/res/drawable-hdpi/com_android_gallery3d_app.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png b/app/src/main/res/drawable-hdpi/com_android_mms_ui.png
index 7550ec4..5b3d49b 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_mms_ui.png and b/app/src/main/res/drawable-hdpi/com_android_mms_ui.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_music.png b/app/src/main/res/drawable-hdpi/com_android_music.png
index af5a0aa..bb1385d 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_music.png and b/app/src/main/res/drawable-hdpi/com_android_music.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png b/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png
index 55cd1e9..896e10f 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png and b/app/src/main/res/drawable-hdpi/com_android_providers_downloads_ui.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_settings.png b/app/src/main/res/drawable-hdpi/com_android_settings.png
index 1a01dc3..864cf0e 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_settings.png and b/app/src/main/res/drawable-hdpi/com_android_settings.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png b/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png
index 6c54e53..8c04966 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png and b/app/src/main/res/drawable-hdpi/com_android_soundrecorder.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png b/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png
index eb953e6..6600495 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png and b/app/src/main/res/drawable-hdpi/com_android_stk_stkmain.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_android_vdieo.png b/app/src/main/res/drawable-hdpi/com_android_vdieo.png
index 9b3b17b..c3ed71b 100644
Binary files a/app/src/main/res/drawable-hdpi/com_android_vdieo.png and b/app/src/main/res/drawable-hdpi/com_android_vdieo.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png b/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png
index da3b15f..82e89e9 100644
Binary files a/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png and b/app/src/main/res/drawable-hdpi/com_mediatek_filemanager.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png b/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png
index 2a2cea8..af83c28 100644
Binary files a/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png and b/app/src/main/res/drawable-hdpi/com_mediatek_fmradio.png differ
diff --git a/app/src/main/res/drawable-hdpi/com_uiui_sn.png b/app/src/main/res/drawable-hdpi/com_uiui_sn.png
index 2e27daa..ec5bb9b 100644
Binary files a/app/src/main/res/drawable-hdpi/com_uiui_sn.png and b/app/src/main/res/drawable-hdpi/com_uiui_sn.png differ
diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png
index ffb5e8e..b703024 100644
Binary files a/app/src/main/res/drawable-hdpi/default_avatar.png and b/app/src/main/res/drawable-hdpi/default_avatar.png differ
diff --git a/app/src/main/res/drawable-hdpi/default_head.png b/app/src/main/res/drawable-hdpi/default_head.png
index d94aae5..8eefcd7 100644
Binary files a/app/src/main/res/drawable-hdpi/default_head.png and b/app/src/main/res/drawable-hdpi/default_head.png differ
diff --git a/app/src/main/res/drawable-hdpi/exit_icon.png b/app/src/main/res/drawable-hdpi/exit_icon.png
index 5a609fc..fa4f4d1 100644
Binary files a/app/src/main/res/drawable-hdpi/exit_icon.png and b/app/src/main/res/drawable-hdpi/exit_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_application_icon.png b/app/src/main/res/drawable-hdpi/home_application_icon.png
index 78aaf14..af24a8b 100644
Binary files a/app/src/main/res/drawable-hdpi/home_application_icon.png and b/app/src/main/res/drawable-hdpi/home_application_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_avatar_icon.png b/app/src/main/res/drawable-hdpi/home_avatar_icon.png
index 840560e..1a35e0e 100644
Binary files a/app/src/main/res/drawable-hdpi/home_avatar_icon.png and b/app/src/main/res/drawable-hdpi/home_avatar_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_dialer.png b/app/src/main/res/drawable-hdpi/home_dialer.png
index 4220d90..460c8d9 100644
Binary files a/app/src/main/res/drawable-hdpi/home_dialer.png and b/app/src/main/res/drawable-hdpi/home_dialer.png differ
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 b3e7501..f22cdf8 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_sos.png b/app/src/main/res/drawable-hdpi/home_icon_sos.png
new file mode 100644
index 0000000..fd5fb3e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_sos.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_add_alarm.png b/app/src/main/res/drawable-hdpi/icon_add_alarm.png
index 895cf4c..900386c 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_add_alarm.png and b/app/src/main/res/drawable-hdpi/icon_add_alarm.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_add_alarm_clock.png b/app/src/main/res/drawable-hdpi/icon_add_alarm_clock.png
new file mode 100644
index 0000000..895cf4c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_add_alarm_clock.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_all.png b/app/src/main/res/drawable-hdpi/icon_alarm_all.png
new file mode 100644
index 0000000..b37b194
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_all.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_all_pressed.png b/app/src/main/res/drawable-hdpi/icon_alarm_all_pressed.png
new file mode 100644
index 0000000..1c7e578
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_all_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_look.png b/app/src/main/res/drawable-hdpi/icon_alarm_look.png
new file mode 100644
index 0000000..2708e22
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_look.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_look_pressed.png b/app/src/main/res/drawable-hdpi/icon_alarm_look_pressed.png
new file mode 100644
index 0000000..5f7fe9e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_look_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_medicine.png b/app/src/main/res/drawable-hdpi/icon_alarm_medicine.png
new file mode 100644
index 0000000..64233bf
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_medicine.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_medicine_pressed.png b/app/src/main/res/drawable-hdpi/icon_alarm_medicine_pressed.png
new file mode 100644
index 0000000..20d5d86
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_medicine_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_reserve.png b/app/src/main/res/drawable-hdpi/icon_alarm_reserve.png
new file mode 100644
index 0000000..57cd35c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_reserve.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm_reserve_pressed.png b/app/src/main/res/drawable-hdpi/icon_alarm_reserve_pressed.png
new file mode 100644
index 0000000..04f3818
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm_reserve_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_contact_add.png b/app/src/main/res/drawable-hdpi/icon_contact_add.png
index 7815b55..397641e 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_contact_add.png and b/app/src/main/res/drawable-hdpi/icon_contact_add.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_daily_app.png b/app/src/main/res/drawable-hdpi/icon_daily_app.png
index 497d4e8..b93fa9d 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_daily_app.png and b/app/src/main/res/drawable-hdpi/icon_daily_app.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_day_normal.png b/app/src/main/res/drawable-hdpi/icon_day_normal.png
new file mode 100644
index 0000000..8223211
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_day_normal.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_day_pressed.png b/app/src/main/res/drawable-hdpi/icon_day_pressed.png
new file mode 100644
index 0000000..f6909db
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_day_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_once_normal.png b/app/src/main/res/drawable-hdpi/icon_once_normal.png
new file mode 100644
index 0000000..f4d24ff
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_once_normal.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_once_pressed.png b/app/src/main/res/drawable-hdpi/icon_once_pressed.png
new file mode 100644
index 0000000..200ac1a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_once_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_play.png b/app/src/main/res/drawable-hdpi/icon_play.png
new file mode 100644
index 0000000..ac30feb
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_play.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_search.png b/app/src/main/res/drawable-hdpi/icon_search.png
new file mode 100644
index 0000000..1df716a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_search.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_touch.png b/app/src/main/res/drawable-hdpi/icon_touch.png
new file mode 100644
index 0000000..4deab18
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_touch.png differ
diff --git a/app/src/main/res/drawable-hdpi/mask.png b/app/src/main/res/drawable-hdpi/mask.png
index 1facd94..e1434c1 100644
Binary files a/app/src/main/res/drawable-hdpi/mask.png and b/app/src/main/res/drawable-hdpi/mask.png differ
diff --git a/app/src/main/res/drawable-hdpi/ship.png b/app/src/main/res/drawable-hdpi/ship.png
index e1ef521..41aa8d8 100644
Binary files a/app/src/main/res/drawable-hdpi/ship.png and b/app/src/main/res/drawable-hdpi/ship.png differ
diff --git a/app/src/main/res/drawable/alarm_pressed_background.xml b/app/src/main/res/drawable/alarm_pressed_background.xml
new file mode 100644
index 0000000..6390975
--- /dev/null
+++ b/app/src/main/res/drawable/alarm_pressed_background.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_second_card.xml b/app/src/main/res/drawable/background_second_card.xml
new file mode 100644
index 0000000..0e6b016
--- /dev/null
+++ b/app/src/main/res/drawable/background_second_card.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_second_title.xml b/app/src/main/res/drawable/background_second_title.xml
new file mode 100644
index 0000000..ccf33e0
--- /dev/null
+++ b/app/src/main/res/drawable/background_second_title.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/badge_bg.xml b/app/src/main/res/drawable/badge_bg.xml
index 49d698d..bf6a71b 100644
--- a/app/src/main/res/drawable/badge_bg.xml
+++ b/app/src/main/res/drawable/badge_bg.xml
@@ -6,8 +6,8 @@
android:color="@color/red" />
+ android:topLeftRadius="@dimen/dp_20"
+ android:topRightRadius="@dimen/dp_20"
+ android:bottomLeftRadius="@dimen/dp_20"
+ android:bottomRightRadius="@dimen/dp_20" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_black_transparent.xml b/app/src/main/res/drawable/bg_black_transparent.xml
new file mode 100644
index 0000000..0c684db
--- /dev/null
+++ b/app/src/main/res/drawable/bg_black_transparent.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/buy_button_bg.xml b/app/src/main/res/drawable/buy_button_bg.xml
new file mode 100644
index 0000000..a0fbef1
--- /dev/null
+++ b/app/src/main/res/drawable/buy_button_bg.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_weather.xml b/app/src/main/res/drawable/custom_bg_weather.xml
index 490912e..f76bd5c 100644
--- a/app/src/main/res/drawable/custom_bg_weather.xml
+++ b/app/src/main/res/drawable/custom_bg_weather.xml
@@ -1,19 +1,17 @@
-
-
+
+ android:topLeftRadius="@dimen/dp_8"
+ android:topRightRadius="@dimen/dp_8"
+ android:bottomLeftRadius="@dimen/dp_8"
+ android:bottomRightRadius="@dimen/dp_8" />
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_weather_night.xml b/app/src/main/res/drawable/custom_bg_weather_night.xml
new file mode 100644
index 0000000..489af90
--- /dev/null
+++ b/app/src/main/res/drawable/custom_bg_weather_night.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/custom_bg_weather_rain.xml b/app/src/main/res/drawable/custom_bg_weather_rain.xml
new file mode 100644
index 0000000..8c5aefa
--- /dev/null
+++ b/app/src/main/res/drawable/custom_bg_weather_rain.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/item_city_background.xml b/app/src/main/res/drawable/item_city_background.xml
new file mode 100644
index 0000000..19bcb1f
--- /dev/null
+++ b/app/src/main/res/drawable/item_city_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/location_background.xml b/app/src/main/res/drawable/location_background.xml
new file mode 100644
index 0000000..c42196d
--- /dev/null
+++ b/app/src/main/res/drawable/location_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/location_search_background.xml b/app/src/main/res/drawable/location_search_background.xml
new file mode 100644
index 0000000..379cce1
--- /dev/null
+++ b/app/src/main/res/drawable/location_search_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/position_background.xml b/app/src/main/res/drawable/position_background.xml
new file mode 100644
index 0000000..4ab9b85
--- /dev/null
+++ b/app/src/main/res/drawable/position_background.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/refresh_bg.xml b/app/src/main/res/drawable/refresh_bg.xml
new file mode 100644
index 0000000..8fe3b88
--- /dev/null
+++ b/app/src/main/res/drawable/refresh_bg.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/title_background.xml b/app/src/main/res/drawable/title_background.xml
new file mode 100644
index 0000000..601cba7
--- /dev/null
+++ b/app/src/main/res/drawable/title_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/title_select_background.xml b/app/src/main/res/drawable/title_select_background.xml
new file mode 100644
index 0000000..a66a521
--- /dev/null
+++ b/app/src/main/res/drawable/title_select_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_times_bg_look.xml b/app/src/main/res/drawable/tv_times_bg_look.xml
new file mode 100644
index 0000000..d0de8a8
--- /dev/null
+++ b/app/src/main/res/drawable/tv_times_bg_look.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_times_bg_loop_selector.xml b/app/src/main/res/drawable/tv_times_bg_loop_selector.xml
index 95d6366..0c4d930 100644
--- a/app/src/main/res/drawable/tv_times_bg_loop_selector.xml
+++ b/app/src/main/res/drawable/tv_times_bg_loop_selector.xml
@@ -2,8 +2,8 @@
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_times_bg_medicine.xml b/app/src/main/res/drawable/tv_times_bg_medicine.xml
new file mode 100644
index 0000000..dd0a6c4
--- /dev/null
+++ b/app/src/main/res/drawable/tv_times_bg_medicine.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_times_bg_once.xml b/app/src/main/res/drawable/tv_times_bg_once.xml
index 2469bdb..3fce221 100644
--- a/app/src/main/res/drawable/tv_times_bg_once.xml
+++ b/app/src/main/res/drawable/tv_times_bg_once.xml
@@ -1,7 +1,7 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_times_bg_reserve.xml b/app/src/main/res/drawable/tv_times_bg_reserve.xml
new file mode 100644
index 0000000..cd88b40
--- /dev/null
+++ b/app/src/main/res/drawable/tv_times_bg_reserve.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_weather.xml b/app/src/main/res/layout-land/activity_weather.xml
index 255b9ea..4f310e0 100644
--- a/app/src/main/res/layout-land/activity_weather.xml
+++ b/app/src/main/res/layout-land/activity_weather.xml
@@ -35,12 +35,31 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toEndOf="@id/imageView11"
+ app:layout_constraintTop_toTopOf="parent" />
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/fragment_second.xml b/app/src/main/res/layout-land/fragment_second.xml
index 6f85edb..1261c2b 100644
--- a/app/src/main/res/layout-land/fragment_second.xml
+++ b/app/src/main/res/layout-land/fragment_second.xml
@@ -6,531 +6,711 @@
android:layout_height="match_parent"
tools:context="fragment.second.SecondFragment">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="0dp"
+ android:layout_weight="3"
+ android:orientation="horizontal">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent"
+ android:layout_marginStart="@dimen/dp_8"
+ android:layout_marginTop="@dimen/dp_8"
+ android:layout_marginEnd="@dimen/dp_8"
+ android:layout_marginBottom="@dimen/dp_4"
+ android:layout_weight="2"
+ android:background="@drawable/background_second_card">
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/textView14">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_marginTop="@dimen/dp_8"
+ android:layout_marginEnd="@dimen/dp_8"
+ android:layout_marginBottom="@dimen/dp_4"
+ android:layout_weight="1"
+ android:background="@drawable/background_second_card">
-
+
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-port/activity_weather.xml b/app/src/main/res/layout-port/activity_weather.xml
index 255b9ea..50a2526 100644
--- a/app/src/main/res/layout-port/activity_weather.xml
+++ b/app/src/main/res/layout-port/activity_weather.xml
@@ -35,12 +35,31 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toEndOf="@id/imageView11"
+ app:layout_constraintTop_toTopOf="parent" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_alarm.xml b/app/src/main/res/layout/activity_add_alarm.xml
new file mode 100644
index 0000000..3065d00
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_alarm.xml
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_alarm_clock.xml b/app/src/main/res/layout/activity_add_alarm_clock.xml
index 22481ae..95d785f 100644
--- a/app/src/main/res/layout/activity_add_alarm_clock.xml
+++ b/app/src/main/res/layout/activity_add_alarm_clock.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray"
- tools:context=".activity.alarm.AlarmClockAddActivity">
+ tools:context=".activity.alarmclock.AlarmClockAddActivity">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_alarm_clock.xml b/app/src/main/res/layout/activity_alarm_clock.xml
index 450b947..d7c1179 100644
--- a/app/src/main/res/layout/activity_alarm_clock.xml
+++ b/app/src/main/res/layout/activity_alarm_clock.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".activity.alarm.AlarmClockActivity">
+ tools:context=".activity.alarmclock.AlarmClockActivity">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_information.xml b/app/src/main/res/layout/activity_information.xml
new file mode 100644
index 0000000..7daf3f1
--- /dev/null
+++ b/app/src/main/res/layout/activity_information.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_location.xml b/app/src/main/res/layout/activity_location.xml
new file mode 100644
index 0000000..90cd141
--- /dev/null
+++ b/app/src/main/res/layout/activity_location.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8024338..4ff441c 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -22,7 +22,7 @@
android:id="@+id/cl_weather"
android:layout_width="@dimen/dp_157"
android:layout_height="@dimen/dp_96"
- android:background="@drawable/home_weather_calendar"
+ android:background="@drawable/custom_bg_weather"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -115,17 +115,30 @@
android:layout_width="@dimen/dp_157"
android:layout_height="@dimen/dp_203"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/home_daily_app"
+ android:background="@drawable/bg_black_transparent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_weather">
+
+
+ app:layout_constraintTop_toBottomOf="@+id/tv_app" />
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/textView3" />
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toTopOf="@+id/cl_contact">
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_actions.xml b/app/src/main/res/layout/item_actions.xml
index 510cdb8..9abbc16 100644
--- a/app/src/main/res/layout/item_actions.xml
+++ b/app/src/main/res/layout/item_actions.xml
@@ -62,16 +62,18 @@
diff --git a/app/src/main/res/layout/item_city.xml b/app/src/main/res/layout/item_city.xml
new file mode 100644
index 0000000..f0f54fd
--- /dev/null
+++ b/app/src/main/res/layout/item_city.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_district.xml b/app/src/main/res/layout/item_district.xml
new file mode 100644
index 0000000..6612255
--- /dev/null
+++ b/app/src/main/res/layout/item_district.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_information.xml b/app/src/main/res/layout/item_information.xml
new file mode 100644
index 0000000..9e7450d
--- /dev/null
+++ b/app/src/main/res/layout/item_information.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_knowledge_video.xml b/app/src/main/res/layout/item_knowledge_video.xml
new file mode 100644
index 0000000..85fff05
--- /dev/null
+++ b/app/src/main/res/layout/item_knowledge_video.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_liven_video.xml b/app/src/main/res/layout/item_liven_video.xml
new file mode 100644
index 0000000..8f50814
--- /dev/null
+++ b/app/src/main/res/layout/item_liven_video.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_new_article.xml b/app/src/main/res/layout/item_new_article.xml
new file mode 100644
index 0000000..02db498
--- /dev/null
+++ b/app/src/main/res/layout/item_new_article.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_new_goods.xml b/app/src/main/res/layout/item_new_goods.xml
new file mode 100644
index 0000000..8a852f6
--- /dev/null
+++ b/app/src/main/res/layout/item_new_goods.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_title.xml b/app/src/main/res/layout/item_title.xml
new file mode 100644
index 0000000..c729b5a
--- /dev/null
+++ b/app/src/main/res/layout/item_title.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ 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 1a67b91..706312f 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -61,4 +61,8 @@
#F19149
#7a4014
#65000000
+
+ #e6e6e6
+ #3D54D9
+