version:4.4
fix: update:优化闹钟页面,优化日常应用
@@ -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,
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CALL_LOG" />
|
||||
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
|
||||
|
||||
<!-- 允许访问网络,必选权限 -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
@@ -123,6 +124,11 @@
|
||||
android:name=".activity.weather.WeatherActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="landscape" />
|
||||
<activity
|
||||
android:name=".activity.location.LocationAcivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/activity_styles"
|
||||
android:screenOrientation="sensorLandscape" />
|
||||
<activity
|
||||
android:name=".activity.EmergencyActivity"
|
||||
android:launchMode="singleTask" />
|
||||
@@ -140,17 +146,21 @@
|
||||
android:theme="@style/activity_styles" />
|
||||
<activity android:name=".activity.APPListActivity" />
|
||||
<activity
|
||||
android:name=".activity.alarm.AlarmClockActivity"
|
||||
android:name=".activity.alarm.AlarmActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userLandscape" />
|
||||
<activity
|
||||
android:name=".activity.alarmclock.AlarmClockActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppWhiteTheme" />
|
||||
<activity
|
||||
android:name=".activity.alarm.AlarmClockAddActivity"
|
||||
android:name=".activity.alarmclock.AlarmClockAddActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userPortrait" />
|
||||
android:screenOrientation="userLandscape" />
|
||||
<activity
|
||||
android:name=".activity.alarm.AlarmClockEditActivity"
|
||||
android:name=".activity.alarmclock.AlarmClockEditActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userPortrait" />
|
||||
android:screenOrientation="userLandscape" />
|
||||
<activity
|
||||
android:name=".activity.ScreenLockActivity"
|
||||
android:configChanges="keyboardHidden"
|
||||
@@ -159,6 +169,13 @@
|
||||
android:name=".activity.AddIconActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:screenOrientation="userLandscape" />
|
||||
<activity
|
||||
android:name=".activity.InformationActivity"
|
||||
android:screenOrientation="sensorPortrait"
|
||||
android:launchMode="singleTask" />
|
||||
<activity android:name=".activity.InformationDetailsActivity"
|
||||
android:screenOrientation="sensorPortrait"
|
||||
android:launchMode="singleTask"/>
|
||||
|
||||
<receiver
|
||||
android:name=".receiver.BootReceiver"
|
||||
|
||||
158
app/src/main/java/com/uiui/video/bean/VideoInfo.java
Normal file
@@ -0,0 +1,158 @@
|
||||
package com.uiui.video.bean;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class VideoInfo implements Serializable, Parcelable {
|
||||
private static final long serialVersionUID = -6934564449880301237L;
|
||||
|
||||
int id;
|
||||
@SerializedName(value = "type_name", alternate = {"liven_type_name", "knowledge_type_name"})
|
||||
String type_name;//分类名
|
||||
String name;//视频名称
|
||||
String remarks;//简介
|
||||
String video_file;
|
||||
String video_cover;
|
||||
double video_duration; //时长 单位秒
|
||||
long video_size;//大小 单位字节
|
||||
int weigh;
|
||||
int play_count;//播放次数
|
||||
|
||||
protected VideoInfo(Parcel in) {
|
||||
id = in.readInt();
|
||||
type_name = in.readString();
|
||||
name = in.readString();
|
||||
remarks = in.readString();
|
||||
video_file = in.readString();
|
||||
video_cover = in.readString();
|
||||
video_duration = in.readDouble();
|
||||
video_size = in.readLong();
|
||||
weigh = in.readInt();
|
||||
play_count = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(id);
|
||||
dest.writeString(type_name);
|
||||
dest.writeString(name);
|
||||
dest.writeString(remarks);
|
||||
dest.writeString(video_file);
|
||||
dest.writeString(video_cover);
|
||||
dest.writeDouble(video_duration);
|
||||
dest.writeLong(video_size);
|
||||
dest.writeInt(weigh);
|
||||
dest.writeInt(play_count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static final Creator<VideoInfo> CREATOR = new Creator<VideoInfo>() {
|
||||
@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();
|
||||
}
|
||||
}
|
||||
@@ -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<BaseResponse<List<CategoryBean>>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getCategorys", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<List<CategoryBean>> listBaseResponse) {
|
||||
Log.e("getCategorys", "onNext: " + listBaseResponse);
|
||||
if (listBaseResponse.code == 200) {
|
||||
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<BaseResponse<List<ArticleInfo>>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getArticle", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<List<ArticleInfo>> listBaseResponse) {
|
||||
Log.e("getArticle", "onNext: " + listBaseResponse);
|
||||
List<ArticleInfo> 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: ");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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<BaseResponse>() {
|
||||
@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> alarmClockData) {
|
||||
List<AlarmClockData> 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() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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<AlarmView> {
|
||||
void getAlarmClock();
|
||||
|
||||
void getAlarmClock(int type);
|
||||
}
|
||||
|
||||
public interface AlarmView extends BaseView {
|
||||
void setAlarmClock(List<AlarmClockData> alarmClockData);
|
||||
|
||||
void setAlarmClockEmpty();
|
||||
}
|
||||
}
|
||||
@@ -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<ActivityEvent> lifecycle;
|
||||
|
||||
void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
|
||||
this.lifecycle = lifecycle;
|
||||
}
|
||||
|
||||
public BehaviorSubject<ActivityEvent> 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<AlarmClockData> 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<BaseResponse<List<AlarmClockData>>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getAlarmClock", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<List<AlarmClockData>> 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: ");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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<String, String> 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<BaseResponse<AlarmClockId>>() {
|
||||
@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<AlarmClockId> 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<BaseResponse<AlarmClockId>>() {
|
||||
// @Override
|
||||
// public void onSubscribe(@NonNull Disposable d) {
|
||||
// Log.e("addAlarmClock", "onSubscribe: ");
|
||||
// iv_add.setEnabled(false);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onNext(@NonNull BaseResponse<AlarmClockId> 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");
|
||||
@@ -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;
|
||||
@@ -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<BaseResponse<AlarmClockData>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getAlarmClockById", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<AlarmClockData> alarmClockDatabaseResponse) {
|
||||
Log.e("getAlarmClockById", "onNext: " + alarmClockDatabaseResponse);
|
||||
if (alarmClockDatabaseResponse.code == 200) {
|
||||
AlarmClockData alarmClockData = alarmClockDatabaseResponse.data;
|
||||
mAlarmClockData = alarmClockData;
|
||||
setAlarmClockInfo(alarmClockData);
|
||||
HashMap<Integer, AlarmClockData> 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<BaseResponse<AlarmClockData>>() {
|
||||
@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<Integer, AlarmClockData> oldData = AlarmUtils.getInstance().getOldDataMap();
|
||||
mAlarmClockData = oldData.get(mId);
|
||||
setAlarmClockInfo(mAlarmClockData);
|
||||
onComplete();
|
||||
}
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<AlarmClockData> 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<Integer, AlarmClockData> 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<String, String> 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<BaseResponse>() {
|
||||
@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<BaseResponse>() {
|
||||
@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");
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.uiuios.aios.activity.alarm;
|
||||
package com.uiuios.aios.activity.alarmclock;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
@@ -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<AddressBean> popularCities = new ArrayList<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("杭州"));
|
||||
this.add(new AddressBean("厦门"));
|
||||
}};
|
||||
|
||||
private LocationPresenter mPresenter;
|
||||
private CityAdapter mCityAdapter;
|
||||
private DistrictAdapter mDistrictAdapter;
|
||||
|
||||
private List<AddressBean> 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<AddressBean> area = mDistrict.stream().filter(new Predicate<AddressBean>() {
|
||||
@Override
|
||||
public boolean test(AddressBean addressBean) {
|
||||
return addressBean.toString().contains(text);
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
mDistrictAdapter.setDistrict(area);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
@Override
|
||||
public void initData() {
|
||||
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
|
||||
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics dm = new DisplayMetrics();
|
||||
wm.getDefaultDisplay().getRealMetrics(dm);
|
||||
float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
|
||||
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 4));//top间距
|
||||
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 4));//底部间距
|
||||
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 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<AddressBean> 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();
|
||||
}
|
||||
}
|
||||
@@ -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<LocationView> {
|
||||
void initJsonData();
|
||||
}
|
||||
|
||||
public interface LocationView extends BaseView {
|
||||
void setJsonData(List<AddressBean> area);
|
||||
}
|
||||
}
|
||||
@@ -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<ActivityEvent> lifecycle;
|
||||
|
||||
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
|
||||
this.lifecycle = lifecycle;
|
||||
}
|
||||
|
||||
public BehaviorSubject<ActivityEvent> 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<List<AddressBean>>() {
|
||||
@Override
|
||||
public void subscribe(@NonNull ObservableEmitter<List<AddressBean>> emitter) throws Throwable {
|
||||
List<AddressBean> areaList = new ArrayList<>();
|
||||
String JsonData = new GetJsonDataUtil().getJson(mContext, "province.json");//获取assets目录下的json文件数据
|
||||
ArrayList<JsonBean> jsonBeanList = parseData(JsonData);//用Gson 转成实体
|
||||
for (JsonBean jsonBean : jsonBeanList) {//遍历省份
|
||||
String province = jsonBean.getName();
|
||||
for (JsonBean.CityBean cityBean : jsonBean.getCityList()) {//遍历该省份的所有城市
|
||||
String city = cityBean.getName();
|
||||
for (String district : cityBean.getArea()) {//遍历该省份的所有城市
|
||||
areaList.add(new AddressBean(province , city , district));
|
||||
}
|
||||
}
|
||||
}
|
||||
emitter.onNext(areaList);
|
||||
}
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<List<AddressBean>>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
Log.e("initJsonData", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(List<AddressBean> 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<JsonBean> parseData(String result) {//Gson 解析
|
||||
ArrayList<JsonBean> 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;
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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<JsonBean> options1Items = new ArrayList<>();
|
||||
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
|
||||
private ArrayList<ArrayList<ArrayList<String>>> 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<Intent> 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<ActivityResult>() {
|
||||
@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> jsonBean = parseData(JsonData);//用Gson 转成实体
|
||||
|
||||
/**
|
||||
* 添加省份数据
|
||||
*
|
||||
* 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
|
||||
* PickerView会通过getPickerViewText方法获取字符串显示出来。
|
||||
*/
|
||||
options1Items = jsonBean;
|
||||
|
||||
for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
|
||||
ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)
|
||||
ArrayList<ArrayList<String>> 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<String> 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<JsonBean> parseData(String result) {//Gson 解析
|
||||
ArrayList<JsonBean> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<WeatherView> {
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MapGeoBean>() {
|
||||
@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());
|
||||
|
||||
77
app/src/main/java/com/uiuios/aios/adapter/CityAdapter.java
Normal file
@@ -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<CityAdapter.Holder> {
|
||||
|
||||
private List<AddressBean> mCityList;
|
||||
private Context mContext;
|
||||
|
||||
public void setCityList(List<AddressBean> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<DistrictAdapter.Holder> {
|
||||
|
||||
private List<AddressBean> mDistrict;
|
||||
private Context mContext;
|
||||
|
||||
public void setDistrict(List<AddressBean> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<InformationAdapter.Holder> {
|
||||
|
||||
private Context mContext;
|
||||
private List<ArticleInfo> mArticleInfos;
|
||||
|
||||
public void setArticleInfos(List<ArticleInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<KnowledgeVideoAdapter.LivenVideoHolder> {
|
||||
private static final String TAG = KnowledgeVideoAdapter.class.getSimpleName();
|
||||
|
||||
private Context mContext;
|
||||
private ArrayList<VideoInfo> mKnowledgeVideoList;
|
||||
|
||||
public void setLivenVideoList(ArrayList<VideoInfo> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<LivenVideoAdapter.LivenVideoHolder> {
|
||||
private static final String TAG = LivenVideoAdapter.class.getSimpleName();
|
||||
|
||||
private Context mContext;
|
||||
private ArrayList<VideoInfo> mLivenVideoList;
|
||||
|
||||
public void setLivenVideoList(ArrayList<VideoInfo> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<NewArticleAdapter.Holder> {
|
||||
|
||||
private Context mContext;
|
||||
private List<ArticleInfo> mArticleBeanList;
|
||||
|
||||
public void setArticleBeanList(List<ArticleInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<NewGoodsAdapter.GoodsHolder> {
|
||||
|
||||
private Context mContext;
|
||||
private List<GoodsInfo> goodsInfoList;
|
||||
|
||||
public void setGoodsInfoList(List<GoodsInfo> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
91
app/src/main/java/com/uiuios/aios/adapter/TitleAdapter.java
Normal file
@@ -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<TitleAdapter.Holder> {
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private List<CategoryBean> mCategoryList;
|
||||
private String mTitle = "";
|
||||
|
||||
public void setCategoryList(List<CategoryBean> 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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<ActivityEvent> {
|
||||
public final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
|
||||
|
||||
public BaseDataBindingActivity() {
|
||||
super();
|
||||
}
|
||||
|
||||
@ContentView
|
||||
public BaseDataBindingActivity(@LayoutRes int contentLayoutId) {
|
||||
super(contentLayoutId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
@CheckResult
|
||||
public final Observable<ActivityEvent> lifecycle() {
|
||||
return lifecycleSubject.hide();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
@CheckResult
|
||||
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
|
||||
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
@CheckResult
|
||||
public final <T> LifecycleTransformer<T> 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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
63
app/src/main/java/com/uiuios/aios/bean/AddressBean.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
26
app/src/main/java/com/uiuios/aios/bean/CategoryBean.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
76
app/src/main/java/com/uiuios/aios/bean/JsonBean.java
Normal file
@@ -0,0 +1,76 @@
|
||||
package com.uiuios.aios.bean;
|
||||
|
||||
|
||||
import com.contrarywind.interfaces.IPickerViewData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO<json数据源>
|
||||
*
|
||||
* @author: 小嵩
|
||||
* @date: 2017/3/16 15:36
|
||||
*/
|
||||
|
||||
public class JsonBean implements IPickerViewData {
|
||||
|
||||
|
||||
/**
|
||||
* name : 省份
|
||||
* city : [{"name":"北京市","area":["东城区","西城区","崇文区","宣武区","朝阳区"]}]
|
||||
*/
|
||||
|
||||
private String name;
|
||||
private List<CityBean> city;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<CityBean> getCityList() {
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCityList(List<CityBean> 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<String> area;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<String> getArea() {
|
||||
return area;
|
||||
}
|
||||
|
||||
public void setArea(List<String> area) {
|
||||
this.area = area;
|
||||
}
|
||||
}
|
||||
}
|
||||
37
app/src/main/java/com/uiuios/aios/bean/MapGeoBean.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
34
app/src/main/java/com/uiuios/aios/bean/MapGeoLocation.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
64
app/src/main/java/com/uiuios/aios/bean/MapGeoResult.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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<AlarmClockData> alarmClockList) {
|
||||
|
||||
@@ -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 {
|
||||
//在此查看返回数据失败的原因
|
||||
|
||||
@@ -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<View> {
|
||||
void getGoods();
|
||||
void getArticle();
|
||||
void getActivityList();
|
||||
void getLivenVideoList();
|
||||
void getKnowledgeVideoList();
|
||||
}
|
||||
|
||||
public interface View extends BaseView {
|
||||
void setGoods(List<GoodsInfo> goodsInfos);
|
||||
void setArticle(List<ArticleInfo> articleInfoList);
|
||||
void setActivityList(List<ActivityBean> activityList);
|
||||
void setLivenVideoList(ArrayList<VideoInfo> livenVideoList);
|
||||
void setKnowledgeVideoList(ArrayList<VideoInfo> knowledgeVideoList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<DemandBean> 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<GoodsInfo> 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<ArticleInfo> 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<ActivityBean> 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<VideoInfo> livenVideoList) {
|
||||
mLivenVideoAdapter.setLivenVideoList(livenVideoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setKnowledgeVideoList(ArrayList<VideoInfo> knowledgeVideoList) {
|
||||
mKnowledgeVideoAdapter.setLivenVideoList(knowledgeVideoList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<ActivityBean> activityBeans) {
|
||||
mView.setActivityList(activityBeans);
|
||||
}
|
||||
public void getLivenVideoList() {
|
||||
NetInterfaceManager.getInstance().getLivenVideoListObservable()
|
||||
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
|
||||
.subscribe(new Observer<BaseResponse<ArrayList<VideoInfo>>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getLivenVideoList", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noData() {
|
||||
mView.setActivityList(null);
|
||||
}
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<ArrayList<VideoInfo>> 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<BaseResponse<ArrayList<VideoInfo>>>() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
Log.e("getKnowledgeVideoList", "onSubscribe: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull BaseResponse<ArrayList<VideoInfo>> 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: ");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
38
app/src/main/java/com/uiuios/aios/gson/GetJsonDataUtil.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,10 @@ public class AppManager {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public Set<String> getShowPackages() {
|
||||
return showPackages;
|
||||
}
|
||||
|
||||
public void addPakcage(String packageName) {
|
||||
this.showPackages.add(packageName);
|
||||
mMMKV.encode(SHOW_PACKAGE_KEY, showPackages);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<String, Long> 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<MapGeoBean> 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<BaseResponse<List<CategoryBean>>> getCategorysObservable() {
|
||||
return mRetrofit.create(CategorysApi.class)
|
||||
.getCategorys(RemoteManager.getInstance().getSerial())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Observable<BaseResponse<List<ArticleInfo>>> getArticleListObservable() {
|
||||
return mRetrofit.create(ArticleListApi.class)
|
||||
.getArticleList(RemoteManager.getInstance().getSerial())
|
||||
@@ -279,7 +327,15 @@ public class NetInterfaceManager {
|
||||
public Observable<BaseResponse<List<AlarmClockData>>> getAlarmClockObservable() {
|
||||
return mRetrofit
|
||||
.create(AlarmClockApi.class)
|
||||
.getAlarmClockApiApi(RemoteManager.getInstance().getSerial())
|
||||
.getAlarmClock(RemoteManager.getInstance().getSerial(), 0)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Observable<BaseResponse<List<AlarmClockData>>> 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<BaseResponse<ArrayList<VideoInfo>>> getLivenVideoListObservable() {
|
||||
return mRetrofit.create(LivenVideoListApi.class)
|
||||
.getLivenVideoList(RemoteManager.getInstance().getSerial())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Observable<BaseResponse<ArrayList<VideoInfo>>> getKnowledgeVideoListObservable() {
|
||||
return mRetrofit.create(KnowledgeVideoListApi.class)
|
||||
.getKnowledgeVideoList(RemoteManager.getInstance().getSerial())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
|
||||
public interface onCompleteCallback {
|
||||
void onComplete();
|
||||
}
|
||||
|
||||
@@ -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/";
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ import retrofit2.http.Query;
|
||||
|
||||
public interface AlarmClockApi {
|
||||
@GET(UrlAddress.GET_ALARM_CLOCK)
|
||||
Observable<BaseResponse<List<AlarmClockData>>> getAlarmClockApiApi(
|
||||
@Query("sn") String sn
|
||||
Observable<BaseResponse<List<AlarmClockData>>> getAlarmClock(
|
||||
@Query("sn") String sn,
|
||||
@Query("class") int clazz
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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<BaseResponse<List<CategoryBean>>> getCategorys(
|
||||
@Query("sn") String sn
|
||||
);
|
||||
}
|
||||
@@ -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<BaseResponse<ArrayList<VideoInfo>>> getKnowledgeVideoList(
|
||||
@Query("sn") String sn
|
||||
);
|
||||
}
|
||||
@@ -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<BaseResponse<ArrayList<VideoInfo>>> getLivenVideoList(
|
||||
@Query("sn") String sn
|
||||
);
|
||||
}
|
||||
@@ -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<MapGeoBean> geocoding(
|
||||
@Query("address") String address,
|
||||
@Query("output") String output,
|
||||
@Query("ak") String key
|
||||
);
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<DesktopIcon> queryFilterAppInfo(Context context) {
|
||||
List<String> quickApps= new ArrayList<>(AppManager.getInstance().getAddPackages());
|
||||
|
||||
PackageManager pm = context.getPackageManager();
|
||||
// 查询所有已经安装的应用程序
|
||||
List<ResolveInfo> 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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
66
app/src/main/java/com/uiuios/aios/view/ImageViewAdapter.java
Normal file
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
105
app/src/main/java/com/uiuios/aios/view/StartSnapHelper.java
Normal file
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 112 KiB |
BIN
app/src/main/res/drawable-hdpi/home_icon_sos.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.2 KiB |