From 1970a2724677107d9a7d03219fee7325fca3a98a Mon Sep 17 00:00:00 2001
From: fanhuitong <981964879@qq.com>
Date: Tue, 11 Oct 2022 20:07:11 +0800
Subject: [PATCH] =?UTF-8?q?version:=20fix:=20update:=E6=9B=B4=E6=94=B9?=
=?UTF-8?q?=E4=B8=BB=E9=A1=B5=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=81=94=E7=B3=BB?=
=?UTF-8?q?=E4=BA=BA(=E6=9C=AA=E5=AE=8C=E5=85=A8=E5=AE=9E=E7=8E=B0)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 1 +
.../uiui/aios/activity/EmergencyActivity.java | 12 +--
.../activity/contact/ContactActivity.java | 46 +++++++++
.../aios/activity/contact/ContactContact.java | 17 ++++
.../activity/contact/ContactPresenter.java | 76 +++++++++++++++
.../aios/activity/main/MainPresenter.java | 4 +-
.../com/uiui/aios/adapter/ContactAdapter.java | 60 ++++++++++++
.../uiui/aios/adapter/SOSNnmberAdapter.java | 14 +--
.../bean/{SOSSetting.java => Contact.java} | 2 +-
.../com/uiui/aios/bean/SystemSettings.java | 6 +-
.../uiui/aios/fragment/CustomFragment.java | 91 +++++++-----------
.../aios/network/NetInterfaceManager.java | 47 +++++++--
.../com/uiui/aios/network/URLAddress.java | 2 +
.../uiui/aios/network/api/GetMailList.java | 18 ++++
.../main/res/drawable-hdpi/contact_icon.png | Bin 0 -> 4019 bytes
.../main/res/drawable-hdpi/gallery_icon.png | Bin 0 -> 4157 bytes
.../main/res/drawable-hdpi/health_code.png | Bin 4499 -> 2672 bytes
.../main/res/layout-land/activity_contact.xml | 51 ++++++++++
.../main/res/layout-land/activity_weather.xml | 6 +-
.../main/res/layout-land/fragment_custom.xml | 49 +++++-----
.../res/layout-land/fragment_custom_back.xml | 6 +-
.../main/res/layout-port/activity_contact.xml | 51 ++++++++++
.../main/res/layout-port/fragment_custom.xml | 49 +++++-----
app/src/main/res/layout/item_contact.xml | 54 +++++++++++
24 files changed, 523 insertions(+), 139 deletions(-)
create mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java
create mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java
create mode 100644 app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java
create mode 100644 app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java
rename app/src/main/java/com/uiui/aios/bean/{SOSSetting.java => Contact.java} (96%)
create mode 100644 app/src/main/java/com/uiui/aios/network/api/GetMailList.java
create mode 100644 app/src/main/res/drawable-hdpi/contact_icon.png
create mode 100644 app/src/main/res/drawable-hdpi/gallery_icon.png
create mode 100644 app/src/main/res/layout-land/activity_contact.xml
create mode 100644 app/src/main/res/layout-port/activity_contact.xml
create mode 100644 app/src/main/res/layout/item_contact.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 850eebb..5be463b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -92,6 +92,7 @@
+
phoneListSet;
+ private List phoneListSet;
private CacheHelper mCacheHelper;
@Override
@@ -80,9 +76,9 @@ public class EmergencyActivity extends AppCompatActivity {
return;
}
Gson gson = new Gson();
- Type type = new TypeToken>() {
+ Type type = new TypeToken>() {
}.getType();
- List setting_sos = gson.fromJson(jsonString, type);
+ List setting_sos = gson.fromJson(jsonString, type);
if (setting_sos == null || setting_sos.size() == 0) {
return;
}
diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java
new file mode 100644
index 0000000..ff7c780
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/activity/contact/ContactActivity.java
@@ -0,0 +1,46 @@
+package com.uiui.aios.activity.contact;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.uiui.aios.R;
+import com.uiui.aios.adapter.ContactAdapter;
+import com.uiui.aios.base.BaseActivity;
+import com.uiui.aios.bean.Contact;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class ContactActivity extends BaseActivity implements ContactContact.ContactView {
+ @BindView(R.id.rv_contact)
+ RecyclerView rv_contact;
+
+ private ContactPresenter mContactPresenter;
+ private ContactAdapter mContactAdapter;
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_contact;
+ }
+
+ @Override
+ public void initView() {
+ ButterKnife.bind(this);
+ mContactPresenter = new ContactPresenter(this);
+ mContactPresenter.attachView(this);
+ mContactPresenter.setLifecycle(lifecycleSubject);
+ mContactAdapter = new ContactAdapter();
+ rv_contact.setAdapter(mContactAdapter);
+ }
+
+ @Override
+ public void initData() {
+ mContactPresenter.getContact();
+ }
+
+ @Override
+ public void setContact(List contactList) {
+ mContactAdapter.setContactList(contactList);
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java
new file mode 100644
index 0000000..20041c6
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/activity/contact/ContactContact.java
@@ -0,0 +1,17 @@
+package com.uiui.aios.activity.contact;
+
+import com.uiui.aios.base.BasePresenter;
+import com.uiui.aios.base.BaseView;
+import com.uiui.aios.bean.Contact;
+
+import java.util.List;
+
+public class ContactContact {
+ public interface Presenter extends BasePresenter {
+ void getContact();
+ }
+
+ public interface ContactView extends BaseView {
+ void setContact(List contactList);
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java b/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java
new file mode 100644
index 0000000..61bc49c
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/activity/contact/ContactPresenter.java
@@ -0,0 +1,76 @@
+package com.uiui.aios.activity.contact;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiui.aios.bean.BaseResponse;
+import com.uiui.aios.bean.Contact;
+import com.uiui.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 ContactPresenter implements ContactContact.Presenter {
+ private Context mContext;
+ private ContactContact.ContactView mView;
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ ContactPresenter(Context context) {
+ this.mContext = context;
+ }
+
+ @Override
+ public void attachView(@NonNull ContactContact.ContactView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+ @Override
+ public void getContact() {
+ NetInterfaceManager.getInstance()
+ .getContactListObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getContactList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getContactList", "onNext: " + listBaseResponse);
+ mView.setContact(listBaseResponse.data);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getContactList", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getContactList", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java b/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java
index 72304bb..b26193d 100644
--- a/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java
+++ b/app/src/main/java/com/uiui/aios/activity/main/MainPresenter.java
@@ -11,7 +11,7 @@ import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiui.aios.BuildConfig;
import com.uiui.aios.bean.BaseResponse;
import com.uiui.aios.bean.NetDesktopIcon;
-import com.uiui.aios.bean.SOSSetting;
+import com.uiui.aios.bean.Contact;
import com.uiui.aios.network.NetInterfaceManager;
import com.uiui.aios.utils.ApkUtils;
import com.uiui.aios.utils.AppUsedTimeUtils;
@@ -59,7 +59,7 @@ public class MainPresenter implements MainContact.Presenter {
NetInterfaceManager.getInstance().getSystemSettings(true, getLifecycle(), new NetInterfaceManager.SosNumberCallback() {
@Override
- public void setSosNumber(List setting_sos) {
+ public void setSosNumber(List setting_sos) {
Intent intent = new Intent("setting_sos");
mContext.sendBroadcast(intent);
}
diff --git a/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java b/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java
new file mode 100644
index 0000000..87967f4
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/adapter/ContactAdapter.java
@@ -0,0 +1,60 @@
+package com.uiui.aios.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.uiui.aios.R;
+import com.uiui.aios.bean.Contact;
+
+import java.util.List;
+
+public class ContactAdapter extends RecyclerView.Adapter {
+ private List mContactList;
+ private Context mContext;
+
+ public void setContactList(List contactList) {
+ this.mContactList = contactList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public ContactHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new ContactHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ContactHolder contactHolder, int position) {
+ Contact contact = mContactList.get(position);
+ Glide.with(contactHolder.iv_head).load(contact.getAvatar()).into(contactHolder.iv_head);
+ contactHolder.tv_name.setText(contact.getName());
+ contactHolder.tv_phone.setText(contact.getMobile());
+ }
+
+ @Override
+ public int getItemCount() {
+ return mContactList == null ? 0 : mContactList.size();
+ }
+
+ static class ContactHolder extends RecyclerView.ViewHolder {
+ ImageView iv_head;
+ TextView tv_name;
+ TextView tv_phone;
+
+ public ContactHolder(@NonNull View itemView) {
+ super(itemView);
+ iv_head = itemView.findViewById(R.id.iv_head);
+ tv_name = itemView.findViewById(R.id.tv_name);
+ tv_phone = itemView.findViewById(R.id.tv_phone);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java b/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java
index ec73c9c..0f01007 100644
--- a/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java
+++ b/app/src/main/java/com/uiui/aios/adapter/SOSNnmberAdapter.java
@@ -13,16 +13,16 @@ import androidx.recyclerview.widget.RecyclerView;
import com.uiui.aios.R;
import com.uiui.aios.activity.EmergencyActivity;
-import com.uiui.aios.bean.SOSSetting;
+import com.uiui.aios.bean.Contact;
import java.util.List;
public class SOSNnmberAdapter extends RecyclerView.Adapter {
- private List phoneNumberList;
+ private List phoneNumberList;
private Context mContext;
- public void setPhoneNumberList(List sosSettingList) {
- this.phoneNumberList = sosSettingList;
+ public void setPhoneNumberList(List contactList) {
+ this.phoneNumberList = contactList;
notifyDataSetChanged();
}
@@ -36,11 +36,11 @@ public class SOSNnmberAdapter extends RecyclerView.Adapter {
Intent intent = new Intent(mContext, EmergencyActivity.class);
- intent.putExtra("setting_sos", sosSetting.getMobile());
+ intent.putExtra("setting_sos", contact.getMobile());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
diff --git a/app/src/main/java/com/uiui/aios/bean/SOSSetting.java b/app/src/main/java/com/uiui/aios/bean/Contact.java
similarity index 96%
rename from app/src/main/java/com/uiui/aios/bean/SOSSetting.java
rename to app/src/main/java/com/uiui/aios/bean/Contact.java
index 152bc03..c26bd49 100644
--- a/app/src/main/java/com/uiui/aios/bean/SOSSetting.java
+++ b/app/src/main/java/com/uiui/aios/bean/Contact.java
@@ -7,7 +7,7 @@ import com.google.gson.JsonParser;
import java.io.Serializable;
-public class SOSSetting implements Serializable {
+public class Contact implements Serializable {
private static final long serialVersionUID = 8814155739557674021L;
int id;
diff --git a/app/src/main/java/com/uiui/aios/bean/SystemSettings.java b/app/src/main/java/com/uiui/aios/bean/SystemSettings.java
index e4c42ce..81946d5 100644
--- a/app/src/main/java/com/uiui/aios/bean/SystemSettings.java
+++ b/app/src/main/java/com/uiui/aios/bean/SystemSettings.java
@@ -37,7 +37,7 @@ public class SystemSettings implements Serializable {
int qch_restore;
int setting_browserInput;
int dev_mode;
- List setting_sos;
+ List setting_sos;
String setting_volume;
String setting_luminance;
String setting_typeface;
@@ -262,11 +262,11 @@ public class SystemSettings implements Serializable {
this.setting_hotspot = setting_hotspot;
}
- public List getSetting_sos() {
+ public List getSetting_sos() {
return setting_sos;
}
- public void setSetting_sos(List setting_sos) {
+ public void setSetting_sos(List setting_sos) {
this.setting_sos = setting_sos;
}
diff --git a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
index 90d85ef..d65d03a 100644
--- a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
+++ b/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java
@@ -20,7 +20,6 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Handler;
-import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -32,7 +31,6 @@ import android.widget.TextView;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.blankj.utilcode.util.NetworkUtils;
-import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.base.Code;
@@ -48,6 +46,7 @@ import com.uiui.aios.R;
import com.uiui.aios.activity.code.HealthCodeActivity;
import com.uiui.aios.activity.EmergencyActivity;
import com.uiui.aios.activity.alarm.AlarmClockActivity;
+import com.uiui.aios.activity.contact.ContactActivity;
import com.uiui.aios.activity.weather.WeatherActivity;
import com.uiui.aios.adapter.NotificationAdapter;
import com.uiui.aios.adapter.SOSNnmberAdapter;
@@ -55,7 +54,7 @@ import com.uiui.aios.bean.AlarmClockData;
import com.uiui.aios.bean.AlarmItem;
import com.uiui.aios.bean.BaseResponse;
import com.uiui.aios.bean.HealthCode;
-import com.uiui.aios.bean.SOSSetting;
+import com.uiui.aios.bean.Contact;
import com.uiui.aios.bean.SnInfo;
import com.uiui.aios.bean.UserAvatarInfo;
import com.uiui.aios.dialog.SingleDialog;
@@ -75,7 +74,6 @@ import com.uiui.aios.utils.Utils;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import butterknife.BindView;
@@ -94,12 +92,21 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
// @BindView(R.id.cl_alarm)
// ConstraintLayout cl_alarm;
- @BindView(R.id.cl_note)
- ConstraintLayout cl_note;
- @BindView(R.id.cl_sos)
- ConstraintLayout cl_soso;
@BindView(R.id.cl_weather)
ConstraintLayout cl_weather;
+ @BindView(R.id.cl_shared_space)
+ ConstraintLayout cl_shared_space;
+ @BindView(R.id.cl_sos)
+ ConstraintLayout cl_soso;
+ @BindView(R.id.cl_guard)
+ ConstraintLayout cl_guard;
+ @BindView(R.id.cl_health)
+ ConstraintLayout cl_health;
+ @BindView(R.id.cl_contact)
+ ConstraintLayout cl_contact;
+ @BindView(R.id.cl_ai)
+ ConstraintLayout cl_ai;
+
// @BindView(R.id.cl_battery)
// ConstraintLayout cl_battery;
// @BindView(R.id.tv_add)
@@ -130,15 +137,6 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
ImageView iv_note_nodata;
@BindView(R.id.iv_head)
NiceImageView iv_head;
-
- @BindView(R.id.cl_health)
- ConstraintLayout mClHealth;
- @BindView(R.id.cl_tongue)
- ConstraintLayout mClTongue;
- @BindView(R.id.cl_face)
- ConstraintLayout mClFace;
- @BindView(R.id.cl_hand)
- ConstraintLayout mClHand;
@BindView(R.id.tv_name)
TextView tv_name;
@@ -356,7 +354,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
// ApkUtils.openPackage(mContext, "com.alarmclock.uiui");
// }
// });
- cl_note.setOnClickListener(new View.OnClickListener() {
+ cl_guard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getAlarm();
@@ -382,9 +380,6 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
} else {
// wifi_ssid.setText("WiFi未连接");
}
-// alarmClockAdapter = new AlarmClockAdapter();
-// rv_clock.setLayoutManager(new LinearLayoutManager(mContext));
-// rv_clock.setAdapter(alarmClockAdapter);
sosNnmberAdapter = new SOSNnmberAdapter();
rv_sos.setLayoutManager(new LinearLayoutManager(mContext));
rv_sos.setAdapter(sosNnmberAdapter);
@@ -400,56 +395,37 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
startActivity(new Intent(mContext, WeatherActivity.class));
}
});
-// cl_battery.setOnClickListener(new View.OnClickListener() {
-// @Override
-// public void onClick(View view) {
-// Intent powerUsageIntent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
-// ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(powerUsageIntent, 0);
-//// check that the Battery app exists on this device
-// if (resolveInfo != null) {
-// startActivity(powerUsageIntent);
-// }
-// }
-// });
- mClHealth.setOnClickListener(new View.OnClickListener() {
+ cl_shared_space.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ToastUtil.show("此功能暂未上线");
+ }
+ });
+ cl_health.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getHealthCode();
-// SchemeUtils.openScheme(mContext, SchemeUtils.SCHEME_TONGUE);
}
});
- mClTongue.setOnClickListener(new View.OnClickListener() {
+ cl_contact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
-// startActivity(new Intent(mContext, CodeActivity.class));
-// startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网络设置界面
- openScheme(SchemeUtils.SCHEME_TONGUE);
+ startActivity(new Intent(getActivity(), ContactActivity.class));
}
});
- mClFace.setOnClickListener(new View.OnClickListener() {
+ cl_ai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
-// startActivity(new Intent(mContext, CodeActivity.class));
- openScheme(SchemeUtils.SCHEME_FACE);
- }
- });
- mClHand.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-// startActivity(new Intent(mContext, CodeActivity.class));
-// mContext.startActivity(new Intent(mContext, APPListActivity.class));
openScheme(SchemeUtils.SCHEME_HAND);
}
});
-
-// setAlarm();
refreshMemory();
}
private void checkSosNumber() {
NetInterfaceManager.getInstance().getSystemSettings(new NetInterfaceManager.SosNumberCallback() {
@Override
- public void setSosNumber(List setting_sos) {
+ public void setSosNumber(List setting_sos) {
Intent intent = new Intent(mContext, EmergencyActivity.class);
// intent.putExtra("setting_sos", phone);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -475,12 +451,12 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
public void setSnInfo(SnInfo snInfo) {
if (snInfo != null) {
if (TextUtils.isEmpty(snInfo.getSn_name())) {
- tv_name.setText("未设置");
+// tv_name.setText("未设置");
} else {
- tv_name.setText(snInfo.getSn_name());
+// tv_name.setText(snInfo.getSn_name());
}
} else {
- tv_name.setText("未设置");
+// tv_name.setText("未设置");
}
}
});
@@ -496,7 +472,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
Log.e("getUserAvatarInfoControl", "onNext: " + userAvatarInfoBaseResponse);
if (userAvatarInfoBaseResponse.code == 200) {
if (!mContext.isDestroyed()) {
- Glide.with(iv_head).load(userAvatarInfoBaseResponse.data.getAvatar()).into(iv_head);
+// Glide.with(iv_head).load(userAvatarInfoBaseResponse.data.getAvatar()).into(iv_head);
}
}
}
@@ -565,6 +541,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
dialog.setMessage("绑定手机才能使用");
dialog.show();
} else {
+ ApkUtils.openApp(mContext, "com.uiui.health");
SchemeUtils.openScheme(mContext, uri);
}
}
@@ -579,9 +556,9 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
// iv_sos.setVisibility(View.VISIBLE);
} else {
Gson gson = new Gson();
- Type type = new TypeToken>() {
+ Type type = new TypeToken>() {
}.getType();
- List setting_sos = gson.fromJson(jsonString, type);
+ List setting_sos = gson.fromJson(jsonString, type);
if (setting_sos == null || setting_sos.size() == 0) {
// rv_sos.setVisibility(View.VISIBLE);
// iv_sos.setVisibility(View.GONE);
diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
index 1b15e36..f8cf7d5 100644
--- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java
@@ -2,7 +2,6 @@ package com.uiui.aios.network;
import android.annotation.SuppressLint;
import android.content.Context;
-import android.text.TextUtils;
import android.util.Log;
import com.google.gson.Gson;
@@ -20,7 +19,7 @@ import com.uiui.aios.bean.DemandBean;
import com.uiui.aios.bean.GoodsInfo;
import com.uiui.aios.bean.HealthCode;
import com.uiui.aios.bean.NetDesktopIcon;
-import com.uiui.aios.bean.SOSSetting;
+import com.uiui.aios.bean.Contact;
import com.uiui.aios.bean.SnInfo;
import com.uiui.aios.bean.SystemSettings;
import com.uiui.aios.bean.UserAvatarInfo;
@@ -34,6 +33,7 @@ import com.uiui.aios.network.api.AppUsageRecordApi;
import com.uiui.aios.network.api.ArticleListApi;
import com.uiui.aios.network.api.DemandListApi;
import com.uiui.aios.network.api.GetDesktopApi;
+import com.uiui.aios.network.api.GetMailList;
import com.uiui.aios.network.api.GetUserIDApi;
import com.uiui.aios.network.api.GoodsListApi;
import com.uiui.aios.network.api.HealthCodeApi;
@@ -239,6 +239,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> getContactListObservable() {
+ return mRetrofit.create(GetMailList.class)
+ .getContact(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public interface onCompleteCallback {
void onComplete();
}
@@ -788,7 +795,7 @@ public class NetInterfaceManager {
}
public interface SosNumberCallback {
- void setSosNumber(List setting_sos);
+ void setSosNumber(List setting_sos);
void setEmpty();
@@ -809,9 +816,9 @@ public class NetInterfaceManager {
getSystemSettings(lifecycle, callback);
} else {
Gson gson = new Gson();
- Type type = new TypeToken>() {
+ Type type = new TypeToken>() {
}.getType();
- List setting_sos = gson.fromJson(jsonString, type);
+ List setting_sos = gson.fromJson(jsonString, type);
if (setting_sos == null || setting_sos.size() == 0) {
if (callback != null) callback.setEmpty();
} else {
@@ -853,7 +860,7 @@ public class NetInterfaceManager {
mMMKV.encode("is_health", systemSettings.getIs_health());
mMMKV.encode("is_shopping", systemSettings.getIs_shopping());
mMMKV.encode("is_info", systemSettings.getIs_info());
- List setting_sos = systemSettings.getSetting_sos();
+ List setting_sos = systemSettings.getSetting_sos();
if (setting_sos == null || setting_sos.size() == 0) {
mCacheHelper.put(URLAddress.GET_SETTINGS, "");
if (callback != null) callback.setEmpty();
@@ -876,9 +883,9 @@ public class NetInterfaceManager {
if (callback != null) callback.setEmpty();
} else {
Gson gson = new Gson();
- Type type = new TypeToken>() {
+ Type type = new TypeToken>() {
}.getType();
- List setting_sos = gson.fromJson(jsonString, type);
+ List setting_sos = gson.fromJson(jsonString, type);
if (setting_sos == null || setting_sos.size() == 0) {
if (callback != null) callback.setEmpty();
} else {
@@ -896,4 +903,28 @@ public class NetInterfaceManager {
}
};
}
+
+ public void getContactList() {
+ getContactListObservable().subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getContactList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getContactList", "onNext: " + listBaseResponse);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getContactList", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getContactList", "onComplete: ");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/uiui/aios/network/URLAddress.java b/app/src/main/java/com/uiui/aios/network/URLAddress.java
index 2d19589..f244b69 100644
--- a/app/src/main/java/com/uiui/aios/network/URLAddress.java
+++ b/app/src/main/java/com/uiui/aios/network/URLAddress.java
@@ -38,6 +38,8 @@ public class URLAddress {
public static final String GET_DEMAND_LIST = "demandList";
/*获取健康吗*/
public static final String GET_HEALTH_CODE = "getHealthCode";
+ /*获取联系人*/
+ public static final String GET_MAIL_LIST = "Control/getMailList";
public static final String GET_USER_ID = "getUserId";
diff --git a/app/src/main/java/com/uiui/aios/network/api/GetMailList.java b/app/src/main/java/com/uiui/aios/network/api/GetMailList.java
new file mode 100644
index 0000000..d24d4a6
--- /dev/null
+++ b/app/src/main/java/com/uiui/aios/network/api/GetMailList.java
@@ -0,0 +1,18 @@
+package com.uiui.aios.network.api;
+
+import com.uiui.aios.bean.BaseResponse;
+import com.uiui.aios.bean.Contact;
+import com.uiui.aios.network.URLAddress;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface GetMailList {
+ @GET(URLAddress.GET_MAIL_LIST)
+ Observable>> getContact(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/res/drawable-hdpi/contact_icon.png b/app/src/main/res/drawable-hdpi/contact_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..759569e02fb558ca209c55e91aab7936449b9b7a
GIT binary patch
literal 4019
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
T;k*QH{YKkaJ7R8G9zFR#UMKb5
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable-hdpi/gallery_icon.png b/app/src/main/res/drawable-hdpi/gallery_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f509ecef6a76fcce9fe01b619daccc66919a0186
GIT binary patch
literal 4157
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
Dc9Jy#
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable-hdpi/health_code.png b/app/src/main/res/drawable-hdpi/health_code.png
index a67a4a58ae42d0c63b10326b503c43936c3b1e77..f27a8bd00e28da60559c2ff724b4d061814e4ca2 100644
GIT binary patch
literal 2672
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
U87sDKodMtx$P8wb(xNl|0Pb~7K>z>%
literal 4499
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
diff --git a/app/src/main/res/layout-land/activity_contact.xml b/app/src/main/res/layout-land/activity_contact.xml
new file mode 100644
index 0000000..d66bab7
--- /dev/null
+++ b/app/src/main/res/layout-land/activity_contact.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_weather.xml b/app/src/main/res/layout-land/activity_weather.xml
index a7a3c76..f57a916 100644
--- a/app/src/main/res/layout-land/activity_weather.xml
+++ b/app/src/main/res/layout-land/activity_weather.xml
@@ -9,13 +9,15 @@
+ android:layout_height="wrap_content"
+ app:layout_constraintTop_toTopOf="parent">
+
-
-
-
+
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-port/fragment_custom.xml b/app/src/main/res/layout-port/fragment_custom.xml
index 0ebb9f1..50795a8 100644
--- a/app/src/main/res/layout-port/fragment_custom.xml
+++ b/app/src/main/res/layout-port/fragment_custom.xml
@@ -86,7 +86,7 @@
android:orientation="horizontal">
-
-
-
-->
+
+
+
@@ -329,7 +330,7 @@
android:orientation="horizontal">
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file