version:4.4

fix:
update:优化闹钟页面,优化日常应用
This commit is contained in:
2024-02-02 10:11:08 +08:00
parent 304d809ee9
commit 2e2d2ac818
163 changed files with 6128 additions and 1109 deletions

View File

@@ -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,

View File

@@ -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"

View 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();
}
}

View File

@@ -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: ");
}
});
}
}

View File

@@ -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);
}
}

View File

@@ -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() {
}
}

View File

@@ -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();
}
}

View File

@@ -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: ");
}
});
}
}

View File

@@ -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

View File

@@ -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");

View File

@@ -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;

View File

@@ -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");

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity.alarm;
package com.uiuios.aios.activity.alarmclock;
import android.content.Context;

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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() {

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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());

View 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);
}
}
}

View 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 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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View 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);
}
}
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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();
}
}

View File

@@ -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;

View 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;
}
}

View File

@@ -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;
}
}

View 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;
}
}

View 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;
}
}
}

View 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();
}
}

View 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;
}
}

View 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();
}
}

View File

@@ -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";
}

View File

@@ -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();
}

View File

@@ -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) {

View File

@@ -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 {
//在此查看返回数据失败的原因

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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: ");
}
});
}
}

View 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();
}
}

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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();
}

View File

@@ -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/";
}

View File

@@ -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
);
}

View File

@@ -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
);
}

View File

@@ -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
);
}

View File

@@ -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
);
}

View File

@@ -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
);
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;

View 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));
}
}

View 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;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Some files were not shown because too many files have changed in this diff Show More