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 +