diff --git a/app/build.gradle b/app/build.gradle
index bb346c2..ade7b1b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.application'
def appName() {
- return "XiaoxintongOS"
+ return "QinQingOS"
}
def releaseTime() {
@@ -16,8 +16,8 @@ android {
minSdkVersion 24
targetSdkVersion 29
- versionCode 201
- versionName "2.0.0"
+ versionCode 207
+ versionName "2.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6de01da..563d615 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -196,6 +196,7 @@
contactList) {
+ mContactListData.setValue(contactList);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
NetInterfaceManager.getInstance()
- .getContactListObservable()
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
- .subscribe(new Observer>>() {
+ .getContactList(getLifecycle(), new NetInterfaceManager.ContactCallback() {
@Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getContactList", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getContactList", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data));
- mContactListData.setValue(listBaseResponse.data);
- } else {
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
- mContactListData.setValue(new ArrayList<>());
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getContactList", "onError: " + e.getMessage());
- String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- List contacts = gson.fromJson(jsonString, type);
- if (contacts == null) {
- mContactListData.setValue(new ArrayList<>());
- } else {
- mContactListData.setValue(contacts);
- }
- onComplete();
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
}
@Override
public void onComplete() {
- Log.e("getContactList", "onComplete: ");
+
}
});
}
@@ -125,6 +106,9 @@ public class ContactListViewModel extends BaseViewModel transition) {
mPictrueFilePath = FileUtil.bitmapToFile(EditContactActivity.this, resource, "avatar").getAbsolutePath();
+ mViewDataBinding.nvAvatar.setImageBitmap(resource);
Log.e(TAG, "onResourceReady: " + mPictrueFilePath);
}
});
diff --git a/app/src/main/java/com/vscool/os/activity/emergency/EmergencyActivity.java b/app/src/main/java/com/vscool/os/activity/emergency/EmergencyActivity.java
index 94c7e02..ed432f5 100644
--- a/app/src/main/java/com/vscool/os/activity/emergency/EmergencyActivity.java
+++ b/app/src/main/java/com/vscool/os/activity/emergency/EmergencyActivity.java
@@ -130,12 +130,6 @@ public class EmergencyActivity extends BaseMvvmActivity {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@@ -44,70 +29,30 @@ public class EmergencyViewModel extends BaseViewModel> mContactListData = new MutableLiveData<>();
- public void getCacheContact() {
- String jsonString = mMMKV.getString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- if (!TextUtils.isEmpty(jsonString)) {
- List contacts = gson.fromJson(jsonString, type);
- if (contacts != null) {
- mContactListData.setValue(contacts);
- }
- }
- getContact();
- }
-
public void getContact() {
+ NetInterfaceManager.getInstance().getContactListObserverCache(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, new NetInterfaceManager.ContactCallback() {
+ @Override
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
NetInterfaceManager.getInstance()
- .getContactListObservable()
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
- .subscribe(new Observer>>() {
+ .getContactList(getLifecycle(), new NetInterfaceManager.ContactCallback() {
@Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getContactList", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getContactList", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- List contactList = listBaseResponse.data;
- if (contactList != null && !contactList.isEmpty()) {
- List emergencyConcacts = contactList.stream().filter(new Predicate() {
- @Override
- public boolean test(Contact contact) {
- return contact.getIs_urgent() == 1;
- }
- }).collect(Collectors.toList());
- mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, GsonUtils.toJSONString(emergencyConcacts));
- mContactListData.setValue(emergencyConcacts);
- }
- } else {
- mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, "");
- mContactListData.setValue(new ArrayList<>());
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getContactList", "onError: " + e.getMessage());
- String jsonString = mMMKV.getString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- List contacts = gson.fromJson(jsonString, type);
- if (contacts == null) {
- mContactListData.setValue(new ArrayList<>());
- } else {
- mContactListData.setValue(contacts);
- }
- onComplete();
+ public void setContact(List contactList) {
+ List emergencyConcacts = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
+ mContactListData.setValue(emergencyConcacts);
}
@Override
public void onComplete() {
- Log.e("getContactList", "onComplete: ");
+
}
});
}
diff --git a/app/src/main/java/com/vscool/os/activity/main/MainActivity.java b/app/src/main/java/com/vscool/os/activity/main/MainActivity.java
index bed26ff..6bf315a 100644
--- a/app/src/main/java/com/vscool/os/activity/main/MainActivity.java
+++ b/app/src/main/java/com/vscool/os/activity/main/MainActivity.java
@@ -11,6 +11,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.database.Cursor;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
@@ -93,13 +94,19 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
+import me.jessyan.autosize.AutoSizeCompat;
+import me.jessyan.autosize.AutoSizeConfig;
+
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
public class MainActivity extends BaseMvvmActivity implements NetworkUtils.OnNetworkStatusChangedListener,
- NotificationService.NotificationListener, TextToSpeech.OnInitListener {
+ NotificationService.NotificationListener, TextToSpeech.OnInitListener
+// , CustomAdapt
+{
private static final String TAG = "MainActivity";
+
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentManager mFragmentManager;
@@ -127,6 +134,32 @@ public class MainActivity extends BaseMvvmActivity height);
+ return super.getResources();
+ }
+
@Override
public void onDisconnected() {
Log.e(TAG, "onDisconnected: ");
diff --git a/app/src/main/java/com/vscool/os/activity/main/MainViewModel.java b/app/src/main/java/com/vscool/os/activity/main/MainViewModel.java
index f79379f..b740025 100644
--- a/app/src/main/java/com/vscool/os/activity/main/MainViewModel.java
+++ b/app/src/main/java/com/vscool/os/activity/main/MainViewModel.java
@@ -397,7 +397,8 @@ public class MainViewModel extends BaseViewModel contactList = ContactCacheUtils.getInstance().getDatabaseContact();
- if (contactList == null || contactList.size() == 0) {
+ Log.e(TAG, "uploadContacts: " + contactList.size());
+ if (contactList.size() == 0) {
Log.e(TAG, "uploadContacts: not found local contacts");
} else {
for (Contact contact : contactList) {
diff --git a/app/src/main/java/com/vscool/os/activity/noti/NoticeInfoActivity.java b/app/src/main/java/com/vscool/os/activity/noti/NoticeInfoActivity.java
index d775e58..6a1db95 100644
--- a/app/src/main/java/com/vscool/os/activity/noti/NoticeInfoActivity.java
+++ b/app/src/main/java/com/vscool/os/activity/noti/NoticeInfoActivity.java
@@ -231,7 +231,7 @@ public class NoticeInfoActivity extends BaseMvvmActivity
implements NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = "WeatherActivity";
-
- private WeatherDayApdapterPort mWeatherDayApdapter;
+ private WeatherDayApdapter mWeatherDayApdapter;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
- private List options1Items = new ArrayList<>();
- private ArrayList> options2Items = new ArrayList<>();
- private ArrayList>> options3Items = new ArrayList<>();
- private boolean mLoaded = false;
-
private ActivityResultLauncher register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -115,44 +103,40 @@ public class WeatherActivity extends BaseMvvmActivity() {
-// @Override
-// public void onChanged(MapGeoResult mapGeoResult) {
-// if (mapGeoResult != null) {
-// mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoResult.getLocation().toString());
-// mViewModel.getWeather(mapGeoResult.getLocation().toString());
-// } else {
-// Toaster.show("获取位置信息失败");
-// }
-// }
-// });
mViewModel.mQweatherLocationData.observe(this, new Observer() {
@Override
public void onChanged(QweatherLocation qweatherLocation) {
@@ -163,19 +147,21 @@ public class WeatherActivity extends BaseMvvmActivity() {
@Override
public void onChanged(String s) {
mViewDataBinding.tvLocation.setText(s);
- Toaster.show("刷新成功");
mViewModel.cityLookup(s);
}
});
mViewModel.mWeatherNowData.observe(this, new Observer() {
@Override
public void onChanged(WeatherNowBean weatherNowBean) {
+ mViewDataBinding.swipeRefreshLayout.setRefreshing(false);
+
//先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因
if (weatherNowBean != null) {
if (Code.OK == weatherNowBean.getCode()) {
@@ -197,21 +183,21 @@ public class WeatherActivity extends BaseMvvmActivity() {
@Override
public void onChanged(WeatherDailyBean weatherDailyBean) {
+ mViewDataBinding.swipeRefreshLayout.setRefreshing(false);
+
if (weatherDailyBean != null) {
mWeatherDayApdapter.setDailyBeans(weatherDailyBean.getDaily());
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
- mViewDataBinding.tvMinMax.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
+// mViewDataBinding.tvMinMax.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
}
}
});
-// mViewModel.loadProvince();
getWeather();
}
private void getWeather() {
-// mViewModel.getWeatherCache();
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, CommonConfig.DEFAULT_LOCATION_TUDE);
if (TextUtils.isEmpty(tude)) {
@@ -243,11 +229,7 @@ public class WeatherActivity extends BaseMvvmActivity mGeoResultData = new MutableLiveData<>();
-
- @Deprecated
- public void decodeGeo(String address) {
- Log.e(TAG, "decodeGeo: " + address);
-// NetInterfaceManager.getInstance().getGeoObservable(address)
-// .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
-// .subscribe(new Observer() {
-// @Override
-// public void onSubscribe(@NonNull Disposable d) {
-// Log.e("decodeGeo", "onSubscribe: ");
-// }
-//
-// @Override
-// public void onNext(@NonNull BaiduMapGeoBean baiduMapGeoBean) {
-// Log.e("decodeGeo", "onNext: " + baiduMapGeoBean);
-// if (baiduMapGeoBean.getStatus() == 0) {
-// mGeoResultData.setValue(baiduMapGeoBean.getResult());
-// } else {
-// mGeoResultData.setValue(null);
-// }
-// }
-//
-// @Override
-// public void onError(@NonNull Throwable e) {
-// Log.e("decodeGeo", "onError: " + e.getMessage());
-// mGeoResultData.setValue(null);
-// onComplete();
-// }
-//
-// @Override
-// public void onComplete() {
-// Log.e("decodeGeo", "onComplete: ");
-// }
-// });
-
- }
-
public MutableLiveData mQweatherLocationData = new MutableLiveData<>();
public void cityLookup(String city) {
@@ -124,29 +83,6 @@ public class WeatherViewModel extends BaseViewModel() {
- }.getType();
- try {
- WeatherNowBean weatherNowBean = new Gson().fromJson(nowJsonString, nowType);
- mWeatherNowData.setValue(weatherNowBean);
- } catch (Exception e) {
- Log.e(TAG, "getWeatherCache: now = " + e.getMessage());
- }
-
- String jsonString = mMMKV.decodeString(CommonConfig.WEATHER_DAILY_KEY, "");
- Type type = new TypeToken() {
- }.getType();
- try {
- WeatherDailyBean weatherDailyBean = new Gson().fromJson(jsonString, type);
- mWeatherDailyData.setValue(weatherDailyBean);
- } catch (Exception e) {
- Log.e(TAG, "getWeatherCache: Daily = " + e.getMessage());
- }
- }
-
public MutableLiveData mLocationData = new MutableLiveData<>();
public void getLocation() {
@@ -210,7 +146,6 @@ public class WeatherViewModel extends BaseViewModel {
- private static final String TAG = "WeatherDayApdapterPort";
+public class WeatherDayApdapter extends RecyclerView.Adapter {
+ private static final String TAG = "WeatherDayApdapter";
private List mDailyBeans;
private Context mContext;
@@ -34,7 +35,7 @@ public class WeatherDayApdapterPort extends RecyclerView.Adapter() {
- @Override
- public void onChanged(@Nullable MapBean mapBean) {
- mViewDataBinding.tvLocation.setText(mapBean.getDistrict());
- }
- });
- } else {
-
- }
- }
+ private List mContacts = new ArrayList() {{
+ this.add(new Contact("未设置"));
+ this.add(new Contact("未设置"));
+ this.add(new Contact("未设置"));
+ this.add(new Contact("未设置"));
+ this.add(new Contact("未设置"));
+ this.add(new Contact("未设置"));
+ }};
@Override
protected void initData(Bundle savedInstanceState) {
- LiveEventBus
- .get("getWeatherNowKey", WeatherNowBean.NowBaseBean.class)
- .observe(this, new Observer() {
- @Override
- public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) {
- mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "℃");
- if (DayUtils.isNight()) {
-// mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
- } else {
- switch (nowBaseBean.getIcon()) {
- default:
- case "100":
- case "150":
- //晴
-// mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
- break;
- case "102":
- case "152":
- //少云
-// mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
- break;
- }
- }
-// mViewDataBinding.tvWeather.setText(nowBaseBean.getText());
- }
- });
-
-// LiveEventBus
-// .get("getWeather24HourlyKey", WeatherHourlyBean.HourlyBean.class)
-// .observe(this, new Observer() {
-// @Override
-// public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
-// String imageName = "he" + hourlyBean.getIcon();
-// Log.e(TAG, "onSuccess: " + imageName);
-// if (isAdded()) {
-// int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
-//// Log.e(TAG, "onSuccess: " + resId);
-//// if (resId == 0) {
-//// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
-//// } else {
-//// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
-//// }
-// mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃");
-// }
-// }
-// });
-//
-// LiveEventBus
-// .get("getWeather7DKey", WeatherDailyBean.DailyBean.class)
-// .observe(this, new Observer() {
-// @Override
-// public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
-// mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
-// }
-// });
-//
-// LiveEventBus
-// .get("time", String.class)
-// .observe(this, new Observer() {
-// @Override
-// public void onChanged(@Nullable String s) {
-// mViewDataBinding.tvTime.setText(s);
-// }
-// });
-//
-// LiveEventBus
-// .get("date", String.class)
-// .observe(this, new Observer() {
-// @Override
-// public void onChanged(@Nullable String s) {
-// mViewDataBinding.tvData.setText(s);
-// }
-// });
-//
-// LiveEventBus
-// .get("week", String.class)
-// .observe(this, new Observer() {
-// @Override
-// public void onChanged(@Nullable String s) {
-// mViewDataBinding.tvWeek.setText(s);
-// }
-// });
-
mViewModel.mContactListData.observe(this, new Observer>() {
@Override
public void onChanged(List contacts) {
- if (contacts == null || contacts.size() == 0) {
- contacts .add(new Contact("未设置"));
- contacts .add(new Contact("未设置"));
- contacts .add(new Contact("未设置"));
- contacts .add(new Contact("未设置"));
- contacts .add(new Contact("未设置"));
- contacts .add(new Contact("未设置"));
-// mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
-// mViewDataBinding.rvContact.setVisibility(View.GONE);
+ if (contacts == null || contacts.isEmpty()) {
+ mContactAdapter.setContactList(mContacts);
} else {
-// mViewDataBinding.clNodata.setVisibility(View.GONE);
-// mViewDataBinding.rvContact.setVisibility(View.VISIBLE);
-// List sim = getSIMContacts();
-// if (sim.size() != 0) {
-// contacts.addAll(sim);
-// }
+ mContactAdapter.setContactList(contacts);
}
- mContactAdapter.setContactList(contacts);
- }
- });
- mViewModel.mDeleteData.observe(this, new Observer() {
- @Override
- public void onChanged(BaseResponse baseResponse) {
- if (baseResponse.code == 200) {
- Toaster.show("删除成功");
- } else {
- Toaster.show("删除失败:" + baseResponse.msg);
- }
- mViewModel.getContact();
}
});
+
+ Log.e(TAG, "initData: ");
}
@Override
public void fetchData() {
Log.e(TAG, "fetchData: ");
- mViewModel.getCacheContact();
+ mViewModel.getContact();
}
@Override
public void onResume() {
super.onResume();
- String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
- mViewDataBinding.tvLocation.setText(district);
- }
-
- private EditContactDialog mEditContactDialog;
-
- private void showDialog(Contact contact) {
- if (mEditContactDialog == null) {
- mEditContactDialog = new EditContactDialog(getContext());
- }
- mEditContactDialog
- .setPhoneNumber(contact.getMobile())
- .setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() {
- @Override
- public void onEditClick() {
- Intent intent = new Intent(getContext(), EditContactActivity.class);
- intent.putExtra("Contact", contact);
- startActivity(intent);
- mEditContactDialog.dismiss();
- }
-
- @Override
- public void onDeleteClick() {
- mViewModel.deleteContact(contact.getId());
- mEditContactDialog.dismiss();
- }
-
- @Override
- public void onCancelClick() {
- mEditContactDialog.dismiss();
- }
- });
- Window window = mEditContactDialog.getWindow();
- window.setGravity(Gravity.BOTTOM);
- mEditContactDialog.show();
+ mViewModel.getContact();
}
public static final String NAME = "name";
diff --git a/app/src/main/java/com/vscool/os/fragment/contact/ContactViewModel.java b/app/src/main/java/com/vscool/os/fragment/contact/ContactViewModel.java
index 00e9e03..dbc459a 100644
--- a/app/src/main/java/com/vscool/os/fragment/contact/ContactViewModel.java
+++ b/app/src/main/java/com/vscool/os/fragment/contact/ContactViewModel.java
@@ -1,34 +1,18 @@
package com.vscool.os.fragment.contact;
-import android.text.TextUtils;
-import android.util.Log;
-
import androidx.lifecycle.MutableLiveData;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
import com.tencent.mmkv.MMKV;
-import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.vscool.os.base.mvvm.BaseViewModel;
-import com.vscool.os.bean.BaseResponse;
import com.vscool.os.bean.Contact;
import com.vscool.os.config.CommonConfig;
import com.vscool.os.databinding.FragmentContactHomeBinding;
-import com.vscool.os.db.ContactCacheUtils;
-import com.vscool.os.gson.GsonUtils;
import com.vscool.os.network.NetInterfaceManager;
import com.vscool.os.network.UrlAddress;
-import com.vscool.os.utils.ContactsUtils;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
import java.util.List;
-import io.reactivex.rxjava3.annotations.NonNull;
-import io.reactivex.rxjava3.core.Observer;
-import io.reactivex.rxjava3.disposables.Disposable;
-
public class ContactViewModel extends BaseViewModel {
private static final String TAG = "ContactListViewModel";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@@ -45,98 +29,29 @@ public class ContactViewModel extends BaseViewModel> mContactListData = new MutableLiveData<>();
- public void getCacheContact() {
- String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- if (!TextUtils.isEmpty(jsonString)) {
- List contacts = gson.fromJson(jsonString, type);
- if (contacts != null) {
- contacts.addAll(ContactCacheUtils.getInstance().getDatabaseContact());
- mContactListData.setValue(contacts);
+ public void getContact() {
+ NetInterfaceManager.getInstance().getContactListObserverCache(UrlAddress.GET_MAIL_LIST, new NetInterfaceManager.ContactCallback() {
+ @Override
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
+ }
+
+ @Override
+ public void onComplete() {
}
- }
- getContact();
- }
+ });
- public void getContact() {
NetInterfaceManager.getInstance()
- .getContactListObservable()
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
- .subscribe(new Observer>>() {
+ .getContactListFragment(getLifecycle(), new NetInterfaceManager.ContactCallback() {
@Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getContactList", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getContactList", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- List contactList = listBaseResponse.data;
- String oldCache = mMMKV.getString(UrlAddress.GET_MAIL_LIST, "");
- if (!oldCache.equals(GsonUtils.toJSONString(listBaseResponse.data))) {
- ContactsUtils.saveContactPhone(getCtx(), contactList);
- }
- mContactListData.setValue(contactList);
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data));
- } else {
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
- mContactListData.setValue(new ArrayList<>());
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getContactList", "onError: " + e.getMessage());
- String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- List contacts = gson.fromJson(jsonString, type);
- if (contacts == null) {
- mContactListData.setValue(ContactCacheUtils.getInstance().getDatabaseContact());
- } else {
- contacts.addAll(ContactCacheUtils.getInstance().getDatabaseContact());
- mContactListData.setValue(contacts);
- }
- onComplete();
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
}
@Override
public void onComplete() {
- Log.e("getContactList", "onComplete: ");
- }
- });
- }
- public MutableLiveData mDeleteData = new MutableLiveData<>();
-
- public void deleteContact(long id) {
- NetInterfaceManager.getInstance().getMailListDeleteObservable(id)
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("deleteContact", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse baseResponse) {
- Log.e("deleteContact", "onNext: " + baseResponse);
- mDeleteData.setValue(baseResponse);
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("deleteContact", "onError: " + e.getMessage());
- }
-
- @Override
- public void onComplete() {
- Log.e("deleteContact", "onComplete: ");
}
});
}
diff --git a/app/src/main/java/com/vscool/os/fragment/phone/contact/ContactFragment.java b/app/src/main/java/com/vscool/os/fragment/phone/contact/ContactFragment.java
index ac76ee4..bf096b8 100644
--- a/app/src/main/java/com/vscool/os/fragment/phone/contact/ContactFragment.java
+++ b/app/src/main/java/com/vscool/os/fragment/phone/contact/ContactFragment.java
@@ -123,19 +123,19 @@ public class ContactFragment extends BaseMvvmFragment> mContactListData = new MutableLiveData<>();
- public void getCacheContact() {
- String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- if (!TextUtils.isEmpty(jsonString)) {
- List contacts = gson.fromJson(jsonString, type);
- if (contacts != null) {
- mContactListData.setValue(contacts);
- }
- }
- getContact();
- }
-
public void getContact() {
- NetInterfaceManager.getInstance()
- .getContactListObservable()
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
- .subscribe(new Observer>>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getContactList", "onSubscribe: ");
- }
+ NetInterfaceManager.getInstance().getContactListObserverCache(UrlAddress.GET_MAIL_LIST, new NetInterfaceManager.ContactCallback() {
+ @Override
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
+ }
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getContactList", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- List contactList = listBaseResponse.data;
- String oldCache = mMMKV.getString(UrlAddress.GET_MAIL_LIST, "");
- if (!oldCache.equals(GsonUtils.toJSONString(contactList))) {
- ContactsUtils.saveContactPhone(getCtx(), contactList);
- }
- mContactListData.setValue(contactList);
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(contactList));
- } else {
- mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
- mContactListData.setValue(new ArrayList<>());
- }
- }
+ @Override
+ public void onComplete() {
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getContactList", "onError: " + e.getMessage());
- String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- List contacts = gson.fromJson(jsonString, type);
- if (contacts == null) {
- mContactListData.setValue(new ArrayList<>());
- } else {
- mContactListData.setValue(contacts);
- }
- onComplete();
- }
+ }
+ });
- @Override
- public void onComplete() {
- Log.e("getContactList", "onComplete: ");
- }
- });
+ NetInterfaceManager.getInstance().getContactListFragment(getLifecycle(), new NetInterfaceManager.ContactCallback() {
+ @Override
+ public void setContact(List contactList) {
+ mContactListData.setValue(contactList);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
}
public MutableLiveData mDeleteData = new MutableLiveData<>();
@@ -135,6 +92,9 @@ public class ContactViewModel extends BaseViewModel mExcludeApp = new HashSet() {{
this.add("com.android.contacts");
- this.add("com.android.dialer");
+// this.add("com.android.dialer");
// this.add("com.mediatek.camera");
this.add("cn.etouch.ecalendar");
}};
diff --git a/app/src/main/java/com/vscool/os/manager/DesktopIconManager.java b/app/src/main/java/com/vscool/os/manager/DesktopIconManager.java
index 42e5c72..257de7e 100644
--- a/app/src/main/java/com/vscool/os/manager/DesktopIconManager.java
+++ b/app/src/main/java/com/vscool/os/manager/DesktopIconManager.java
@@ -76,8 +76,6 @@ public class DesktopIconManager {
public Drawable getPackageIcon(String pkg) {
switch (pkg) {
- case PackagesName.VSCOOL_SERVICE:
- return mContext.getDrawable(R.drawable.icon_wechat_service);
case PackagesName.VSCOOL_EXIT_DESKTOP:
return mContext.getDrawable(R.drawable.exit_icon);
default:
diff --git a/app/src/main/java/com/vscool/os/network/NetInterfaceManager.java b/app/src/main/java/com/vscool/os/network/NetInterfaceManager.java
index e96b290..c2f4650 100644
--- a/app/src/main/java/com/vscool/os/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/vscool/os/network/NetInterfaceManager.java
@@ -3,6 +3,7 @@ package com.vscool.os.network;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Environment;
+import android.text.TextUtils;
import android.util.Log;
import com.google.gson.Gson;
@@ -92,10 +93,12 @@ import com.vscool.os.network.api.uiui.sn.SnInfoApi;
import com.vscool.os.network.api.uiui.sn.SosRecordApi;
import com.vscool.os.network.api.uiui.sn.UpdateAddressApi;
import com.vscool.os.network.interceptor.RepeatRequestInterceptor;
+import com.vscool.os.utils.ContactsUtils;
import com.vscool.os.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;
@@ -121,6 +124,8 @@ import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class NetInterfaceManager {
+ private static final String TAG = "NetInterfaceManager";
+
@SuppressLint("StaticFieldLeak")
private static NetInterfaceManager INSTANCE;
private Context mContext;
@@ -1105,16 +1110,6 @@ public class NetInterfaceManager {
});
}
- public interface ContactCallback {
- void setContact(List contactList);
-
- void setEmergencyContact(List emergencyContact);
-
- void setEmpty();
-
- void onComplete();
- }
-
// public void getSystemSettings(boolean refresh, BehaviorSubject lifecycle, ContactCallback callback) {
// ConnectMode connectMode = ConnectMode.ONE_MINUTE;
// if (refresh) {
@@ -1176,7 +1171,7 @@ public class NetInterfaceManager {
String s = systemSettings.getSetting_sos();
} else {
mCacheHelper.put(UrlAddress.GET_SETTINGS, "");
- if (callback != null) callback.setEmpty();
+ if (callback != null) callback.setContact(null);
}
}
@@ -1186,14 +1181,14 @@ public class NetInterfaceManager {
String jsonString = mCacheHelper.getAsString(UrlAddress.GET_SETTINGS);
//为 "" 是已经请求成功的
if (jsonString == null) {
- if (callback != null) callback.setEmpty();
+ if (callback != null) callback.setContact(null);
} else {
Gson gson = new Gson();
Type type = new TypeToken>() {
}.getType();
List setting_sos = gson.fromJson(jsonString, type);
if (setting_sos == null || setting_sos.size() == 0) {
- if (callback != null) callback.setEmpty();
+ if (callback != null) callback.setContact(null);
} else {
if (callback != null) callback.setContact(setting_sos);
}
@@ -1210,32 +1205,10 @@ public class NetInterfaceManager {
};
}
+ public interface ContactCallback {
+ void setContact(List contactList);
- public void getContactList(boolean refresh, BehaviorSubject lifecycle, ContactCallback callback) {
- ConnectMode connectMode = ConnectMode.ONE_MINUTE;
- if (refresh) {
- connectMode = ConnectMode.DEFAULT;
- }
- if (ConnectManager.getInstance().isNeedConnect(UrlAddress.GET_MAIL_LIST, connectMode)) {
- getContactList(lifecycle, callback);
- } else {
- String jsonString = mCacheHelper.getAsString(UrlAddress.GET_MAIL_LIST);
- //为 "" 是已经请求成功的
- if (jsonString == null) {
- getContactList(lifecycle, callback);
- } else {
- Gson gson = new Gson();
- Type type = new TypeToken>() {
- }.getType();
- List setting_sos = gson.fromJson(jsonString, type);
- if (setting_sos == null || setting_sos.size() == 0) {
- if (callback != null) callback.setEmpty();
- } else {
- if (callback != null) callback.setContact(setting_sos);
- }
- if (callback != null) callback.onComplete();
- }
- }
+ void onComplete();
}
public void getContactList(BehaviorSubject lifecycle, ContactCallback callback) {
@@ -1244,16 +1217,12 @@ public class NetInterfaceManager {
.subscribe(getContactListObserver(callback));
}
- public void getContactList(ContactCallback callback) {
+ public void getContactListFragment(BehaviorSubject lifecycle, ContactCallback callback) {
getContactListObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY))
.subscribe(getContactListObserver(callback));
}
- public void getContactList() {
- getContactListObservable()
- .subscribe(getContactListObserver(null));
- }
-
public Observer>> getContactListObserver(ContactCallback callback) {
return new Observer>>() {
@Override
@@ -1267,25 +1236,27 @@ public class NetInterfaceManager {
if (listBaseResponse.code == 200) {
List contactList = listBaseResponse.data;
if (contactList == null || contactList.size() == 0) {
- mCacheHelper.put(UrlAddress.GET_MAIL_LIST, "");
- if (callback != null) callback.setEmpty();
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
+ if (callback != null) callback.setContact(new ArrayList<>());
} else {
- mCacheHelper.put(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(contactList));
- List emergencyContact = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(contactList));
+ ContactsUtils.saveContactPhone(mContext, contactList);
+ List emergencyConcacts = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
+ mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, GsonUtils.toJSONString(emergencyConcacts));
if (callback != null) {
callback.setContact(contactList);
- callback.setEmergencyContact(emergencyContact);
}
}
} else {
- mCacheHelper.put(UrlAddress.GET_MAIL_LIST, "");
- if (callback != null) callback.setEmpty();
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
+ if (callback != null) callback.setContact(new ArrayList<>());
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getContactList", "onError: " + e.getMessage());
+ getContactListObserverCache(UrlAddress.GET_MAIL_LIST, callback);
onComplete();
}
@@ -1298,6 +1269,49 @@ public class NetInterfaceManager {
};
}
+ public void addContactCache(String tag, Contact contact) {
+ String jsonString = mMMKV.getString(tag, null);
+ Gson gson = new Gson();
+ Type type = new TypeToken>() {
+ }.getType();
+ if (TextUtils.isEmpty(jsonString)) {
+ List contacts = new ArrayList<>();
+ contacts.add(contact);
+ mMMKV.putString(tag, GsonUtils.toJSONString(contacts));
+ } else {
+ try {
+ List contacts = gson.fromJson(jsonString, type);
+ if (contacts == null) {
+ contacts = new ArrayList<>();
+ }
+ contacts.add(contact);
+ mMMKV.putString(tag, GsonUtils.toJSONString(contacts));
+ } catch (Exception e) {
+ Log.e(TAG, "addContactCache: " + e.getMessage());
+ mMMKV.remove(tag);
+ }
+ }
+ }
+
+ public void getContactListObserverCache(String tag, ContactCallback callback) {
+ String jsonString = mMMKV.getString(tag, null);
+ Gson gson = new Gson();
+ Type type = new TypeToken>() {
+ }.getType();
+ if (TextUtils.isEmpty(jsonString)) {
+ if (callback != null) callback.setContact(new ArrayList<>());
+ } else {
+ try {
+ List contacts = gson.fromJson(jsonString, type);
+ if (callback != null) callback.setContact(contacts);
+ } catch (Exception e) {
+ Log.e(TAG, "getContactListObserverCache: " + e.getMessage());
+ mMMKV.remove(tag);
+ if (callback != null) callback.setContact(new ArrayList<>());
+ }
+ }
+ }
+
public void getAdminSnSetting(boolean refresh, BehaviorSubject lifecycle, onCompleteCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_MINUTE;
if (refresh) {
diff --git a/app/src/main/java/com/vscool/os/service/WeAccessibilityService.java b/app/src/main/java/com/vscool/os/service/WeAccessibilityService.java
index 8fe67ba..d997f98 100644
--- a/app/src/main/java/com/vscool/os/service/WeAccessibilityService.java
+++ b/app/src/main/java/com/vscool/os/service/WeAccessibilityService.java
@@ -19,10 +19,13 @@ import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;
+import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.vscool.os.bean.Contact;
import com.vscool.os.config.CommonConfig;
+import java.util.List;
+
/**
* 通过微信标签最高支持8.0.49,8.0.50 获取不到数据
*/
@@ -35,7 +38,7 @@ public class WeAccessibilityService extends AccessibilityService {
private static final String DIALER_TEXT = "音视频通话";
private static final String CONTACT_TEXT = "通讯录";
private static final String TAG_TEXT = "标签";
- private static final String TAG_NAME = "孝心通";
+ private static final String TAG_NAME = "亲情桌面";
private static final String MORE_NAME = "更多功能按钮,已折叠";
private static final String PARENT_VIDEO_TEXT = "视频通话";
@@ -129,6 +132,21 @@ public class WeAccessibilityService extends AccessibilityService {
* @param event
*/
private void _onAccessibilityEvent(AccessibilityEvent event) {
+
+ switch (mCurrentStep) {
+ case WAITING:
+ break;
+ default:
+ if (!TextUtils.isEmpty(event.getClassName())) {
+ if ("com.tencent.mm.ui.LauncherUI".contentEquals(event.getClassName())) {
+ if (mCurrentStep != Step.FIND_CONTACT) {
+ mCurrentStep = Step.CLICK_CONTACT;
+ }
+ } else if ("com.tencent.mm.plugin.label.ui.ContactLabelManagerUI".contentEquals(event.getClassName())) {
+
+ }
+ }
+ }
Log.e(TAG, "_onAccessibilityEvent: " + mCurrentStep);
switch (mCurrentStep) {
case WAITING:
@@ -149,10 +167,12 @@ public class WeAccessibilityService extends AccessibilityService {
break;
case CLICK_CONTACT://进入通讯录界面
- step(Property.TEXT, CONTACT_TEXT, Step.FIND_TAG);
+ touchContact();
+// step(Property.TEXT, CONTACT_TEXT, Step.FIND_TAG);
break;
case FIND_CONTACT://模拟滑动找到联系人
findContact(Property.TEXT, mName, Step.CLICK_NAME);
+ break;
case FIND_TAG:
step(Property.TEXT, TAG_TEXT, Step.CLICK_TAG);
break;
@@ -213,6 +233,12 @@ public class WeAccessibilityService extends AccessibilityService {
private boolean step(Property type, String text, Step nextStep) {
AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text);
if (node != null) {
+ Rect rect = new Rect();
+ node.getBoundsInScreen(rect);
+ Log.e(TAG, "step: rect = " + rect);
+ if (rect.left < 0 || rect.top < 0 || rect.right < 0 || rect.bottom < 0) {
+ return false;
+ }
clickNode(node);
Log.e(TAG, "step: mCurrentStep: " + mCurrentStep + " done");
mCurrentStep = nextStep;
@@ -223,6 +249,40 @@ public class WeAccessibilityService extends AccessibilityService {
}
}
+ private void touchContact() {
+ boolean successful = clickByPoint(268, 1440);
+ if (successful) {
+ mCurrentStep = Step.FIND_TAG;
+ } else {
+ mCurrentStep = Step.WAITING;
+ Toaster.show("点击失败,请重试");
+ }
+ }
+
+ private List findNodesByViewId(String id) {
+ List accessibilityNodeInfos = getRootInActiveWindow().findAccessibilityNodeInfosByViewId(id);
+ return accessibilityNodeInfos;
+ }
+
+ private AccessibilityNodeInfo findNodeByText(AccessibilityNodeInfo root, String text) {
+ if (root == null) return null;
+ Log.e(TAG, "findNodeByText: getText = " + root.getText());
+ Log.e(TAG, "findNodeByText: getContentDescription = " + root.getContentDescription());
+ boolean found = root.getText() != null && text.contentEquals(root.getText());
+ if (found) {
+ return root;
+ } else {
+ for (int i = 0; i < root.getChildCount(); i++) {
+ AccessibilityNodeInfo result = findNodeByText(root.getChild(i), text);
+ if (result != null) {
+ return result;
+ }
+ }
+ }
+ root.recycle();
+ return null;
+ }
+
private boolean stepCallDialog(Property type, String text, Step nextStep) {
AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text);
if (node != null) {
@@ -234,12 +294,23 @@ public class WeAccessibilityService extends AccessibilityService {
Log.e(TAG, "stepCallDialog: next: " + mCurrentStep);
return true;
} else {
- scrolDown();
+ scrollDown();
return false;
}
} else {
- scrolDown();
- return false;
+ if (mFindCount == mMaxCount) {
+ Log.e("stepCallDialog", "mCurrentStep: max");
+ Toast.makeText(this, "没有找到联系人", Toast.LENGTH_LONG).show();
+ mCurrentStep = Step.WAITING;
+ mFindCount = 0;
+ return false;
+ } else {
+ Log.e("stepCallDialog", "mCurrentStep: not found");
+ mFindCount++;
+ Log.e("stepCallDialog", "mCurrentStep: mFindCount = " + mFindCount);
+ scrollDown();
+ return false;
+ }
}
}
@@ -281,7 +352,7 @@ public class WeAccessibilityService extends AccessibilityService {
Log.e("findContact", "mCurrentStep: not found");
mFindCount++;
Log.e("findContact", "mCurrentStep: mFindCount = " + mFindCount);
- scrolDown();
+ scrollDown();
return false;
}
}
@@ -324,32 +395,37 @@ public class WeAccessibilityService extends AccessibilityService {
private void clickNode(AccessibilityNodeInfo node) {
try {
Log.e(TAG, "clickNode: getText = " + node.getText());
+ Log.e(TAG, "clickNode: isClickable = " + node.isClickable());
} catch (Exception e) {
Log.e(TAG, "clickNode: e = " + e.getMessage());
}
- Log.e(TAG, "clickNode: isClickable = " + node.isClickable());
if (node.isClickable()) {
boolean performAction = node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
Log.e(TAG, "clickNode: performAction = " + performAction);
if (!performAction) {
Rect rect = new Rect();
node.getBoundsInScreen(rect);
- int x = rect.left;
- int y = rect.top;
- Log.e(TAG, "clickNode: x = " + x);
- Log.e(TAG, "clickNode: y = " + y);
- int width = rect.width();
- int height = rect.height();
- Log.e(TAG, "clickNode: width = " + width);
- Log.e(TAG, "clickNode: height = " + height);
- Log.e(TAG, "clickNode: clickByNode = " + clickByNode(x + width / 2, y + height / 2));
+ Log.e(TAG, "clickNode: rect = " + rect);
+ // 点击节点的中心位置
+ int centerX = (rect.left + rect.right) / 2;
+ int centerY = (rect.top + rect.bottom) / 2;
+ Log.e(TAG, "clickNode: clickByNode = " + clickByPoint(centerX, centerY));
}
node.recycle();
} else {
- AccessibilityNodeInfo parent = node.getParent();
- node.recycle();
- clickNode(parent);
+ Rect rect = new Rect();
+ node.getBoundsInScreen(rect);
+ Log.e(TAG, "clickNode: rect = " + rect);
+ // 点击节点的中心位置
+ int centerX = (rect.left + rect.right) / 2;
+ int centerY = (rect.top + rect.bottom) / 2;
+ Log.e(TAG, "clickNode: clickByNode = " + clickByPoint(centerX, centerY));
}
+// else {
+// AccessibilityNodeInfo parent = node.getParent();
+// node.recycle();
+// clickNode(parent);
+// }
}
private boolean stepCall(Property type, String text) {
@@ -357,7 +433,7 @@ public class WeAccessibilityService extends AccessibilityService {
if (node != null) {
Point point = getPointtByNode(node);
Log.e(TAG, "stepCall: " + point);
- clickByNode(point.x, point.y + 30);
+ clickByPoint(point.x, point.y + 30);
// clickNode(node);
Log.e(TAG, "stepCall: mCurrentStep " + mCurrentStep + " done");
mCurrentStep = Step.CLICK_CALL;
@@ -374,8 +450,8 @@ public class WeAccessibilityService extends AccessibilityService {
if (node != null) {
Point point = getPointtByNode(node);
Log.e(TAG, "stepAnswer: " + point);
- clickByNode(point.x, point.y - 50);
- clickByNode(point.x, point.y);
+ clickByPoint(point.x, point.y - 50);
+ clickByPoint(point.x, point.y);
// clickNode(node);
Log.e(TAG, "stepAnswer: mCurrentStep " + mCurrentStep + " done");
mCurrentStep = Step.WAITING;
@@ -399,14 +475,16 @@ public class WeAccessibilityService extends AccessibilityService {
}
//实现对(x,y)坐标进行点击操作。
- private boolean clickByNode(int x, int y) {
+ private boolean clickByPoint(int x, int y) {
+ Log.e(TAG, "clickByNode: x = " + x);
+ Log.e(TAG, "clickByNode: y = " + y);
Point point = new Point(x, y);
Path path = new Path();
path.moveTo(point.x, point.y);
GestureDescription.Builder builder = new GestureDescription.Builder();
builder.addStroke(new GestureDescription.StrokeDescription(path, 0, 200));
GestureDescription gesture = builder.build();
- boolean isDispatched = dispatchGesture(gesture, new GestureResultCallback() {
+ boolean dispatched = dispatchGesture(gesture, new GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
super.onCompleted(gestureDescription);
@@ -419,10 +497,10 @@ public class WeAccessibilityService extends AccessibilityService {
Log.e("clickByNode", "onCompleted: ");
}
}, null);
- return isDispatched;
+ return dispatched;
}
- private boolean scrolDown() {
+ private boolean scrollScreen(double startY, double endY) {
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
@@ -433,34 +511,40 @@ public class WeAccessibilityService extends AccessibilityService {
// 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
// int screenWidth = (int) (width / density); // 屏幕宽度(dp)
// int screenHeight = (int) (height / density);// 屏幕高度(dp)
- Log.e(TAG, "scrolDown: screenWidth = " + width);
- Log.e(TAG, "scrolDown: screenHeight = " + height);
+ Log.e(TAG, "scrollScreen: screenWidth = " + width);
+ Log.e(TAG, "scrollScreen: screenHeight = " + height);
int center_X = width / 2;
int center_Y = height / 2;
- Log.e("scrolDown", "center position:" + "(" + center_X + "," + center_Y + ")");
+ Log.e("scrollScreen", "center position:" + "(" + center_X + "," + center_Y + ")");
Path path = new Path();
- path.moveTo(center_X, (int) (center_Y * 1.5)); //起点坐标。
- path.lineTo(center_X, (int) (center_Y * 0.5)); //终点坐标。
+ path.moveTo(center_X, (int) (center_Y * startY)); //起点坐标。
+ path.lineTo(center_X, (int) (center_Y * endY)); //终点坐标。
GestureDescription.Builder builder = new GestureDescription.Builder();
GestureDescription gestureDescription = builder.addStroke(new GestureDescription.StrokeDescription(path, 0, 200)).build();
- boolean isDispatched = dispatchGesture(gestureDescription, new GestureResultCallback() {
+ boolean dispatched = dispatchGesture(gestureDescription, new GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
super.onCompleted(gestureDescription);
- Log.d("scrolDown", "dispatchGesture ScrollUp onCompleted.");
+ Log.d("scrollScreen", "dispatchGesture ScrollUp onCompleted.");
path.close();
}
@Override
public void onCancelled(GestureDescription gestureDescription) {
super.onCancelled(gestureDescription);
- Log.d("scrolDown", "dispatchGesture ScrollUp cancel.");
+ Log.d("scrollScreen", "dispatchGesture ScrollUp cancel.");
}
}, null);
-
- return isDispatched;
+ return dispatched;
}
+ private boolean scrollDown() {
+ return scrollScreen(1.5, 0.5);
+ }
+
+ private boolean scrollUp() {
+ return scrollScreen(0.5, 1.5);
+ }
private enum Step {
WAITING,
diff --git a/app/src/main/java/com/vscool/os/service/main/MainService.java b/app/src/main/java/com/vscool/os/service/main/MainService.java
index 03ee04c..3a54d9f 100644
--- a/app/src/main/java/com/vscool/os/service/main/MainService.java
+++ b/app/src/main/java/com/vscool/os/service/main/MainService.java
@@ -28,6 +28,8 @@ import com.google.gson.reflect.TypeToken;
import com.hjq.toast.Toaster;
import com.shehuan.niv.NiceImageView;
import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
import com.vscool.os.BuildConfig;
import com.vscool.os.R;
import com.vscool.os.activity.main.MainActivity;
@@ -55,8 +57,10 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
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;
@@ -222,6 +226,38 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
registerOperateAlarmClockReceiver();
registerScreenLockReceiver();
registerSmsReceiver();
+
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
+ mTimeSignalCallback = emitter::onNext;
+ }
+ }).throttleFirst(1, TimeUnit.MINUTES)
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("mTimeSignalCallback", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull Integer hour) {
+ Log.e("mTimeSignalCallback", "onNext: ");
+ mSoundPool.play(soundMap.get(hour), 1, 1, 0, 0, 1);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("mTimeSignalCallback", "onError: ");
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("mTimeSignalCallback", "onComplete: ");
+ }
+ });
}
@Override
@@ -374,19 +410,31 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
@Override
public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) {
- Log.e(TAG, "TimeChangedReceiver:" + "data changed");
- } else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
- Log.e(TAG, "TimeChangedReceiver:" + "time changed");
- } else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
- Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
- } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
- Log.e(TAG, "TimeChangedReceiver:" + "time tick");
- hourlyTimeSignal();
+ switch (intent.getAction()) {
+ case Intent.ACTION_DATE_CHANGED:
+ Log.e(TAG, "TimeChangedReceiver:" + "data changed");
+ break;
+ case Intent.ACTION_TIME_CHANGED:
+ Log.e(TAG, "TimeChangedReceiver:" + "time changed");
+ break;
+ case Intent.ACTION_TIMEZONE_CHANGED:
+ Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
+ break;
+ case Intent.ACTION_TIME_TICK:
+ Log.e(TAG, "TimeChangedReceiver:" + "time tick");
+ hourlyTimeSignal();
+ break;
+ default:
}
}
}
+ private interface TimeSignalCallback {
+ void timeTick(int hour);
+ }
+
+ private TimeSignalCallback mTimeSignalCallback;
+
private void hourlyTimeSignal() {
boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
if (hourly_time) {
@@ -396,7 +444,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
int min = cal.get(Calendar.MINUTE);
Log.e(TAG, "hourlyTimeSignal: min = " + min);
if (min == 0) {
- mSoundPool.play(soundMap.get(hour), 1, 1, 0, 0, 1);
+ mTimeSignalCallback.timeTick(hour);
}
} else {
Log.e(TAG, "hourlyTimeSignal: not enable hourly time signal");
@@ -409,12 +457,14 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
}
IntentFilter filter = new IntentFilter();
filter.addAction(HOURLY_TIME_SIGNAL_KEY);
+ filter.addAction(WECHAT_AUTO_ACCEPT);
registerReceiver(mTimeSignalReceiver, filter);
}
private TimeSignalReceiver mTimeSignalReceiver;
private static final String HOURLY_TIME_SIGNAL_KEY = "hourly_time_signal";
+ private static final String WECHAT_AUTO_ACCEPT = "wechat_auto_accept";
private class TimeSignalReceiver extends BroadcastReceiver {
@@ -422,11 +472,18 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e("TimeSignalReceiver", "onReceive: " + action);
- if (HOURLY_TIME_SIGNAL_KEY.equals(action)) {
- int hour_notify = intent.getIntExtra("hour_notify", 0);
- Log.e("TimeSignalReceiver", "onReceive: hour_notify = " + hour_notify);
- mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, hour_notify == 1);
-
+ switch (action) {
+ case HOURLY_TIME_SIGNAL_KEY:
+ int hour_notify = intent.getIntExtra("hour_notify", 0);
+ Log.e("TimeSignalReceiver", "onReceive: hour_notify = " + hour_notify);
+ mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, hour_notify == 1);
+ break;
+ case WECHAT_AUTO_ACCEPT:
+ int wechat_auto_accept = intent.getIntExtra("wechat_auto_accept", 0);
+ Log.e("TimeSignalReceiver", "onReceive: wechat_auto_accept = " + wechat_auto_accept);
+ mMMKV.encode(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, wechat_auto_accept == 1);
+ break;
+ default:
}
}
}
@@ -756,7 +813,8 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
}
killBackgroundProcesses(pkg);
}
- Toaster.show(String.format(getString(R.string.clear_app_size), pkgList.size()));
+// Toaster.show(String.format(getString(R.string.clear_app_size), pkgList.size()));
+ Toaster.show("后台清理应用中");
}
private void killBackgroundProcesses(String packageName) {
diff --git a/app/src/main/java/com/vscool/os/utils/ApkUtils.java b/app/src/main/java/com/vscool/os/utils/ApkUtils.java
index 2494130..83fe11d 100644
--- a/app/src/main/java/com/vscool/os/utils/ApkUtils.java
+++ b/app/src/main/java/com/vscool/os/utils/ApkUtils.java
@@ -82,7 +82,7 @@ public class ApkUtils {
this.add("com.uiui.aios");
this.add("com.uiui.videoplayer");
// this.add("com.uiui.health");
- this.add("com.tencent.android.qqdownloader");
+// this.add("com.tencent.android.qqdownloader");
// this.add("com.vscool.store");
this.add("com.joytv.live");
this.add("com.vscool.store");
diff --git a/app/src/main/java/com/vscool/os/utils/ContactsUtils.java b/app/src/main/java/com/vscool/os/utils/ContactsUtils.java
index 0e39ec4..0bee311 100644
--- a/app/src/main/java/com/vscool/os/utils/ContactsUtils.java
+++ b/app/src/main/java/com/vscool/os/utils/ContactsUtils.java
@@ -1,5 +1,7 @@
package com.vscool.os.utils;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -41,82 +43,24 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
public class ContactsUtils {
private static final String TAG = "ContactsUtils";
-
- public static void saveContactPhone(Context context, List contactList) {
- Log.e(TAG, "saveContactPhone: ");
-// List contactIdList = ContactsUtils.getLocalContacts(context);
+ public static void saveContactPhone(Context context, Contact contact) {
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
- for (Contact contact : contactList) {
- if (TextUtils.isEmpty(contact.getMobile())) {
- continue;
+ Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
+ Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget() {
+ @Override
+ public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
+ if (ContactsUtils.isExist(context, contact.getMobile())) {
+ updateContactPhone(context, contact, resource);
+ } else {
+ insertContactPhone(context, contact, resource);
+ }
}
- if (ContactsUtils.isExist(context, contact.getMobile())) {
- long rawContactId = ContactsUtils.getContactId(context, contact.getMobile());
- Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget() {
- @Override
- public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
- ContentResolver resolver = context.getContentResolver();
- ContentValues nameValues = new ContentValues();
- //add Name
- nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
- nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
- resolver.update(ContactsContract.Data.CONTENT_URI, nameValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
-
- ContentValues photoValues = new ContentValues();
- photoValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- resource.compress(Bitmap.CompressFormat.PNG, 100, out);
- photoValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
- photoValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
- resolver.update(ContactsContract.Data.CONTENT_URI, photoValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
-
- ContentValues phoneValues = new ContentValues();
- phoneValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- phoneValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
- phoneValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
- phoneValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
- resolver.update(ContactsContract.Data.CONTENT_URI, phoneValues, "raw_contact_id=?" + rawContactId, new String[]{ContactsContract.Data.CONTACT_ID});
- }
- });
- } else {
- ContentValues values = new ContentValues();
- long rawContactId = ContentUris.parseId(context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values));
- Glide.with(context).asBitmap().load(contact.getAvatar()).override(200, 200).into(new SimpleTarget() {
- @Override
- public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
- ContentResolver resolver = context.getContentResolver();
- ContentValues nameValues = new ContentValues();
- //add Name
- nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
- nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
- resolver.insert(ContactsContract.Data.CONTENT_URI, nameValues);
-
- ContentValues photoValues = new ContentValues();
- photoValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- resource.compress(Bitmap.CompressFormat.PNG, 100, out);
- photoValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
- photoValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
- resolver.insert(ContactsContract.Data.CONTENT_URI, photoValues);
-
- ContentValues phoneValues = new ContentValues();
- phoneValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- phoneValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
- phoneValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
- phoneValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
- resolver.insert(ContactsContract.Data.CONTENT_URI, phoneValues);
- }
- });
- }
- }
+ });
emitter.onNext(1L);
}
- })
- .subscribeOn(Schedulers.io())
+ }).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
@@ -141,6 +85,275 @@ public class ContactsUtils {
});
}
+ public static void saveContactPhone(Context context, List contactList) {
+ Log.e(TAG, "saveContactPhone: ");
+// List contactIdList = ContactsUtils.getLocalContacts(context);
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
+ for (Contact contact : contactList) {
+ if (TextUtils.isEmpty(contact.getMobile())) {
+ continue;
+ }
+ Log.e(TAG, "saveContactPhone: " + contact.getMobile() + " isExist = " + ContactsUtils.isExist(context, contact.getMobile()));
+ Glide.with(context).asBitmap().load(contact.getAvatar()).error(R.drawable.default_avatar).override(200, 200).into(new SimpleTarget() {
+ @Override
+ public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
+ if (ContactsUtils.isExist(context, contact.getMobile())) {
+ updateContactPhone(context, contact, resource);
+ emitter.onNext(0L);
+ } else {
+ insertContactPhone(context, contact, resource);
+ emitter.onNext(1L);
+ }
+ }
+ });
+ }
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("saveContactPhone", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull Long aLong) {
+ Log.e("saveContactPhone", "onNext: " + aLong);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("saveContactPhone", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("saveContactPhone", "onComplete: ");
+ }
+ });
+ }
+
+ public static void insertContactPhone(Context context, Contact contact, Bitmap bitmap) {
+ ContentValues values = new ContentValues();
+ long rawContactId = ContentUris.parseId(context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values));
+ Log.e(TAG, "insertContactPhone: rawContactId = " + rawContactId);
+ ContentResolver resolver = context.getContentResolver();
+
+ values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+ values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
+ values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
+ resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+ values.clear();
+
+ values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+ values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
+ values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
+ resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+ values.clear();
+
+ values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+ values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
+ values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
+ resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+ }
+
+
+ public static void updateContactPhone(Context context, Contact contact, Bitmap bitmap) {
+ long rawContactId = ContactsUtils.getRawContactId(context, contact.getMobile());
+ Log.e(TAG, "updateContactPhone: rawContactId = " + rawContactId);
+ ContentResolver resolver = context.getContentResolver();
+
+ ContentValues values = new ContentValues();
+ values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+ values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
+ values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getName());
+ resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+ values.clear();
+
+ values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+ values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
+ values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());
+ resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+ values.clear();
+
+// values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
+// values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+// values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getMobile());
+// values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
+// resolver.insert(ContactsContract.Data.CONTENT_URI, values);
+
+// Log.e(TAG, "updateContactPhone: phoneValues = " +
+// resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data.RAW_CONTACT_ID + "='" + rawContactId+"'", null));
+
+// String selection = ContactsContract.Data.CONTACT_ID + "=" + contacts.getContactId() + " AND " + Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'";
+// ContentValues values = new ContentValues();
+// values.put(StructuredName.DISPLAY_NAME, contacts.getName()); // make sure getName() returns a String!!!
+// getContentResolver().update(Data.CONTENT_URI, values, selection, null);
+
+// ContentValues values = new ContentValues();
+// values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
+// values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
+// Log.d("updateContact", "values已经产生");
+// int result = resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{String.valueOf(bean.getId())});
+ }
+
+ public static void update(Context context, Contact contact, Bitmap bitmap) {
+ long rawContactId = ContactsUtils.getRawContactId(context, contact.getMobile());
+
+ ArrayList ops = new ArrayList();
+ ContentProviderOperation op1 = ContentProviderOperation
+ .newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(
+ ContactsContract.Data.RAW_CONTACT_ID + "=? and "
+ + ContactsContract.Data.MIMETYPE + "=?",
+ new String[]{
+ String.valueOf(rawContactId),
+ ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE})
+ .withValue(
+ ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,// 对应data表中的data1字段
+ contact.getName()).build();
+ ops.add(op1);
+
+ ContentProviderOperation op2 = ContentProviderOperation
+ .newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(
+ ContactsContract.Data.RAW_CONTACT_ID + "=? and "
+ + ContactsContract.Data.MIMETYPE + "=?",
+ new String[]{String.valueOf(rawContactId),
+ ContactsContract.CommonDataKinds.Phone.MIMETYPE})
+ .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,// 对应data表中的data1字段
+ contact.getMobile()).build();
+ ops.add(op2);
+
+// ContentProviderOperation op3 = ContentProviderOperation
+// .newUpdate(ContactsContract.Data.CONTENT_URI)
+// .withSelection(
+// ContactsContract.Data.RAW_CONTACT_ID + "=? and "
+// + ContactsContract.Data.MIMETYPE + "=?",
+// new String[]{String.valueOf(rawContactId),
+// ContactsContract.CommonDataKinds.Phone.MIMETYPE})
+// .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS,// 对应data表中的data1字段
+// "test@email.com").build();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+ ContentProviderOperation op3 = ContentProviderOperation
+ .newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(
+ ContactsContract.Data.RAW_CONTACT_ID + "=? and "
+ + ContactsContract.Data.MIMETYPE + "=?",
+ new String[]{String.valueOf(rawContactId),
+ ContactsContract.CommonDataKinds.Photo.MIMETYPE})
+ .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,// 对应data表中的data1字段
+ out.toByteArray()).build();
+ ops.add(op3);
+
+ try {
+ ContentProviderResult[] contentProviderResults = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+ Log.e(TAG, "update: " + Arrays.toString(contentProviderResults));
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "update: " + e.getMessage());
+ }
+ }
+
+ public static void deleteContactPhone(Context context, Contact contact) {
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
+ deleteRawContact(context, contact.getMobile());
+ emitter.onNext(0L);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("deleteContactPhone", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull Long aLong) {
+ Log.e("deleteContactPhone", "onNext: " + aLong);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("deleteContactPhone", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("deleteContactPhone", "onComplete: ");
+ }
+ });
+ }
+
+ public static void deleteRawContact(Context context, String phoneNum) {
+ ContentResolver resolver = context.getContentResolver();
+ Cursor cursor = null;
+ try {
+ cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
+ new String[]{ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME},
+ ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum}, null);
+ if (cursor.moveToFirst()) {
+ long rawContactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.RAW_CONTACT_ID));
+ Log.e(TAG, "deleteRawContact: rawContactId = " + rawContactId);
+// int idCode = resolver.delete(ContactsContract.Contacts.CONTENT_URI, ContactsContract.Contacts._ID + " =?", new String[]{String.valueOf(rawContactId)});
+// Log.e(TAG, "deleteRawContact: idCode = " + idCode);
+// int phoneCode = resolver.delete(ContactsContract.Data.CONTENT_URI, ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum});
+// Log.e(TAG, "deleteRawContact: phoneCode = " + phoneCode);
+// int contactIdCode = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts.CONTACT_ID + " =?", new String[]{String.valueOf(rawContactId)});
+// Log.e(TAG, "deleteRawContact: contactIdCode = " + contactIdCode);
+// String name
+// int nameCode = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, "display_name=?", new String[]{name});
+// Log.e(TAG, "deleteRawContact: nameCode = " + nameCode);
+
+ int result = resolver.delete(ContactsContract.RawContacts.CONTENT_URI,
+ ContactsContract.RawContacts._ID + "=?",
+ new String[]{String.valueOf(rawContactId)});
+ Log.e(TAG, "deleteRawContact: result = " + result);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "deleteRawContact: " + e.getMessage());
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ public static long getRawContactId(Context context, String phoneNum) {
+ ContentResolver resolver = context.getContentResolver();
+ Cursor cursor = null;
+ try {
+ cursor = resolver.query(ContactsContract.Data.CONTENT_URI,
+ new String[]{ContactsContract.Data.RAW_CONTACT_ID, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME},
+ ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNum}, null);
+ if (cursor.moveToFirst()) {
+ long rawContactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.RAW_CONTACT_ID));
+ Log.e(TAG, "getRawContactId: rawContactId = " + rawContactId);
+ return rawContactId;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "deleteRawContact: " + e.getMessage());
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return -1;
+ }
+
/**
* 添加联系人信息
*/
@@ -156,7 +369,7 @@ public class ContactsUtils {
//插入data表
//add Name
nameValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
- nameValues.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
+ nameValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
nameValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
resolver.insert(ContactsContract.Data.CONTENT_URI, nameValues);
diff --git a/app/src/main/java/com/vscool/os/utils/DayUtils.java b/app/src/main/java/com/vscool/os/utils/DayUtils.java
index 0fb9f4d..242e90c 100644
--- a/app/src/main/java/com/vscool/os/utils/DayUtils.java
+++ b/app/src/main/java/com/vscool/os/utils/DayUtils.java
@@ -12,18 +12,30 @@ public class DayUtils {
return hour >= 16 && minute >= 30;
}
+ private static final String[] WEEKS = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+
+
/**
* @return 根据日期取得星期几
*/
- public static String getWeek() {
- Date date = new Date();
- String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+ public static String getWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (weekIndex < 0) {
weekIndex = 0;
}
- return weeks[weekIndex];
+ return WEEKS[weekIndex];
+ }
+
+ public static String getWeek() {
+ Date date = new Date();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1;
+ if (weekIndex < 0) {
+ weekIndex = 0;
+ }
+ return WEEKS[weekIndex];
}
}
diff --git a/app/src/main/java/com/vscool/os/utils/TimeUtils.java b/app/src/main/java/com/vscool/os/utils/TimeUtils.java
index 3cb92ad..0b9a39d 100644
--- a/app/src/main/java/com/vscool/os/utils/TimeUtils.java
+++ b/app/src/main/java/com/vscool/os/utils/TimeUtils.java
@@ -69,4 +69,8 @@ public class TimeUtils {
return sdf2.format(date2);
}
+ public static String getDateWeek(Date date) {
+ SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd");
+ return sdf2.format(date);
+ }
}
diff --git a/app/src/main/res/drawable-hdpi/call_service.png b/app/src/main/res/drawable-hdpi/call_service.png
new file mode 100644
index 0000000..8aca768
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/call_service.png differ
diff --git a/app/src/main/res/drawable-hdpi/dialer_call.png b/app/src/main/res/drawable-hdpi/dialer_call.png
index 6c914f5..d234908 100644
Binary files a/app/src/main/res/drawable-hdpi/dialer_call.png and b/app/src/main/res/drawable-hdpi/dialer_call.png differ
diff --git a/app/src/main/res/drawable-hdpi/he100.png b/app/src/main/res/drawable-hdpi/he100.png
index 6669841..e600626 100644
Binary files a/app/src/main/res/drawable-hdpi/he100.png and b/app/src/main/res/drawable-hdpi/he100.png differ
diff --git a/app/src/main/res/drawable-hdpi/he101.png b/app/src/main/res/drawable-hdpi/he101.png
index 2f74dcf..099d8e6 100644
Binary files a/app/src/main/res/drawable-hdpi/he101.png and b/app/src/main/res/drawable-hdpi/he101.png differ
diff --git a/app/src/main/res/drawable-hdpi/he102.png b/app/src/main/res/drawable-hdpi/he102.png
index 784b078..2a738fb 100644
Binary files a/app/src/main/res/drawable-hdpi/he102.png and b/app/src/main/res/drawable-hdpi/he102.png differ
diff --git a/app/src/main/res/drawable-hdpi/he103.png b/app/src/main/res/drawable-hdpi/he103.png
index 8767acb..fd15992 100644
Binary files a/app/src/main/res/drawable-hdpi/he103.png and b/app/src/main/res/drawable-hdpi/he103.png differ
diff --git a/app/src/main/res/drawable-hdpi/he104.png b/app/src/main/res/drawable-hdpi/he104.png
index 6420624..8033ea8 100644
Binary files a/app/src/main/res/drawable-hdpi/he104.png and b/app/src/main/res/drawable-hdpi/he104.png differ
diff --git a/app/src/main/res/drawable-hdpi/he150.png b/app/src/main/res/drawable-hdpi/he150.png
index df55ec5..d66bf5a 100644
Binary files a/app/src/main/res/drawable-hdpi/he150.png and b/app/src/main/res/drawable-hdpi/he150.png differ
diff --git a/app/src/main/res/drawable-hdpi/he151.png b/app/src/main/res/drawable-hdpi/he151.png
new file mode 100644
index 0000000..2ad8289
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/he151.png differ
diff --git a/app/src/main/res/drawable-hdpi/he152.png b/app/src/main/res/drawable-hdpi/he152.png
new file mode 100644
index 0000000..bb4451f
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/he152.png differ
diff --git a/app/src/main/res/drawable-hdpi/he153.png b/app/src/main/res/drawable-hdpi/he153.png
index f018af0..2bfa038 100644
Binary files a/app/src/main/res/drawable-hdpi/he153.png and b/app/src/main/res/drawable-hdpi/he153.png differ
diff --git a/app/src/main/res/drawable-hdpi/he154.png b/app/src/main/res/drawable-hdpi/he154.png
index 22f42c0..d16a4a7 100644
Binary files a/app/src/main/res/drawable-hdpi/he154.png and b/app/src/main/res/drawable-hdpi/he154.png differ
diff --git a/app/src/main/res/drawable-hdpi/he300.png b/app/src/main/res/drawable-hdpi/he300.png
index 1de84ba..b6a29fd 100644
Binary files a/app/src/main/res/drawable-hdpi/he300.png and b/app/src/main/res/drawable-hdpi/he300.png differ
diff --git a/app/src/main/res/drawable-hdpi/he301.png b/app/src/main/res/drawable-hdpi/he301.png
index 0fc3b9d..5dbc7e3 100644
Binary files a/app/src/main/res/drawable-hdpi/he301.png and b/app/src/main/res/drawable-hdpi/he301.png differ
diff --git a/app/src/main/res/drawable-hdpi/he302.png b/app/src/main/res/drawable-hdpi/he302.png
index 61c4406..5a1d109 100644
Binary files a/app/src/main/res/drawable-hdpi/he302.png and b/app/src/main/res/drawable-hdpi/he302.png differ
diff --git a/app/src/main/res/drawable-hdpi/he303.png b/app/src/main/res/drawable-hdpi/he303.png
index 6a8b3c4..fceaeff 100644
Binary files a/app/src/main/res/drawable-hdpi/he303.png and b/app/src/main/res/drawable-hdpi/he303.png differ
diff --git a/app/src/main/res/drawable-hdpi/he304.png b/app/src/main/res/drawable-hdpi/he304.png
index 19a2556..5ebe66c 100644
Binary files a/app/src/main/res/drawable-hdpi/he304.png and b/app/src/main/res/drawable-hdpi/he304.png differ
diff --git a/app/src/main/res/drawable-hdpi/he305.png b/app/src/main/res/drawable-hdpi/he305.png
index 1105af0..f3a5869 100644
Binary files a/app/src/main/res/drawable-hdpi/he305.png and b/app/src/main/res/drawable-hdpi/he305.png differ
diff --git a/app/src/main/res/drawable-hdpi/he306.png b/app/src/main/res/drawable-hdpi/he306.png
index b307070..2197557 100644
Binary files a/app/src/main/res/drawable-hdpi/he306.png and b/app/src/main/res/drawable-hdpi/he306.png differ
diff --git a/app/src/main/res/drawable-hdpi/he307.png b/app/src/main/res/drawable-hdpi/he307.png
index 810a23a..2d88355 100644
Binary files a/app/src/main/res/drawable-hdpi/he307.png and b/app/src/main/res/drawable-hdpi/he307.png differ
diff --git a/app/src/main/res/drawable-hdpi/he308.png b/app/src/main/res/drawable-hdpi/he308.png
index 9600919..4dce9ff 100644
Binary files a/app/src/main/res/drawable-hdpi/he308.png and b/app/src/main/res/drawable-hdpi/he308.png differ
diff --git a/app/src/main/res/drawable-hdpi/he309.png b/app/src/main/res/drawable-hdpi/he309.png
index 9c805d8..2968d52 100644
Binary files a/app/src/main/res/drawable-hdpi/he309.png and b/app/src/main/res/drawable-hdpi/he309.png differ
diff --git a/app/src/main/res/drawable-hdpi/he310.png b/app/src/main/res/drawable-hdpi/he310.png
index 9608b6e..fa733f7 100644
Binary files a/app/src/main/res/drawable-hdpi/he310.png and b/app/src/main/res/drawable-hdpi/he310.png differ
diff --git a/app/src/main/res/drawable-hdpi/he311.png b/app/src/main/res/drawable-hdpi/he311.png
index 59c74ed..29c9de4 100644
Binary files a/app/src/main/res/drawable-hdpi/he311.png and b/app/src/main/res/drawable-hdpi/he311.png differ
diff --git a/app/src/main/res/drawable-hdpi/he312.png b/app/src/main/res/drawable-hdpi/he312.png
index 1daa1da..93c9fdc 100644
Binary files a/app/src/main/res/drawable-hdpi/he312.png and b/app/src/main/res/drawable-hdpi/he312.png differ
diff --git a/app/src/main/res/drawable-hdpi/he313.png b/app/src/main/res/drawable-hdpi/he313.png
index 11ca685..5cef950 100644
Binary files a/app/src/main/res/drawable-hdpi/he313.png and b/app/src/main/res/drawable-hdpi/he313.png differ
diff --git a/app/src/main/res/drawable-hdpi/he314.png b/app/src/main/res/drawable-hdpi/he314.png
index 3b6ac91..4ccad8e 100644
Binary files a/app/src/main/res/drawable-hdpi/he314.png and b/app/src/main/res/drawable-hdpi/he314.png differ
diff --git a/app/src/main/res/drawable-hdpi/he315.png b/app/src/main/res/drawable-hdpi/he315.png
index 8f06fae..21e958e 100644
Binary files a/app/src/main/res/drawable-hdpi/he315.png and b/app/src/main/res/drawable-hdpi/he315.png differ
diff --git a/app/src/main/res/drawable-hdpi/he316.png b/app/src/main/res/drawable-hdpi/he316.png
index b3395ac..6e73a13 100644
Binary files a/app/src/main/res/drawable-hdpi/he316.png and b/app/src/main/res/drawable-hdpi/he316.png differ
diff --git a/app/src/main/res/drawable-hdpi/he317.png b/app/src/main/res/drawable-hdpi/he317.png
index 8441d41..b7ebe6a 100644
Binary files a/app/src/main/res/drawable-hdpi/he317.png and b/app/src/main/res/drawable-hdpi/he317.png differ
diff --git a/app/src/main/res/drawable-hdpi/he318.png b/app/src/main/res/drawable-hdpi/he318.png
index af60e09..3000732 100644
Binary files a/app/src/main/res/drawable-hdpi/he318.png and b/app/src/main/res/drawable-hdpi/he318.png differ
diff --git a/app/src/main/res/drawable-hdpi/he350.png b/app/src/main/res/drawable-hdpi/he350.png
index 3976006..e22774f 100644
Binary files a/app/src/main/res/drawable-hdpi/he350.png and b/app/src/main/res/drawable-hdpi/he350.png differ
diff --git a/app/src/main/res/drawable-hdpi/he351.png b/app/src/main/res/drawable-hdpi/he351.png
index b436ea4..fddbb1f 100644
Binary files a/app/src/main/res/drawable-hdpi/he351.png and b/app/src/main/res/drawable-hdpi/he351.png differ
diff --git a/app/src/main/res/drawable-hdpi/he399.png b/app/src/main/res/drawable-hdpi/he399.png
index 44a094c..2ada0e1 100644
Binary files a/app/src/main/res/drawable-hdpi/he399.png and b/app/src/main/res/drawable-hdpi/he399.png differ
diff --git a/app/src/main/res/drawable-hdpi/he400.png b/app/src/main/res/drawable-hdpi/he400.png
index e512d55..600ee46 100644
Binary files a/app/src/main/res/drawable-hdpi/he400.png and b/app/src/main/res/drawable-hdpi/he400.png differ
diff --git a/app/src/main/res/drawable-hdpi/he401.png b/app/src/main/res/drawable-hdpi/he401.png
index 4765e28..b9fc8d9 100644
Binary files a/app/src/main/res/drawable-hdpi/he401.png and b/app/src/main/res/drawable-hdpi/he401.png differ
diff --git a/app/src/main/res/drawable-hdpi/he402.png b/app/src/main/res/drawable-hdpi/he402.png
index 4fab297..f8c3e3a 100644
Binary files a/app/src/main/res/drawable-hdpi/he402.png and b/app/src/main/res/drawable-hdpi/he402.png differ
diff --git a/app/src/main/res/drawable-hdpi/he403.png b/app/src/main/res/drawable-hdpi/he403.png
index 77f12a6..730eda4 100644
Binary files a/app/src/main/res/drawable-hdpi/he403.png and b/app/src/main/res/drawable-hdpi/he403.png differ
diff --git a/app/src/main/res/drawable-hdpi/he404.png b/app/src/main/res/drawable-hdpi/he404.png
index a70a3d0..7149994 100644
Binary files a/app/src/main/res/drawable-hdpi/he404.png and b/app/src/main/res/drawable-hdpi/he404.png differ
diff --git a/app/src/main/res/drawable-hdpi/he405.png b/app/src/main/res/drawable-hdpi/he405.png
index 697c726..395f250 100644
Binary files a/app/src/main/res/drawable-hdpi/he405.png and b/app/src/main/res/drawable-hdpi/he405.png differ
diff --git a/app/src/main/res/drawable-hdpi/he406.png b/app/src/main/res/drawable-hdpi/he406.png
index 38657ca..6409361 100644
Binary files a/app/src/main/res/drawable-hdpi/he406.png and b/app/src/main/res/drawable-hdpi/he406.png differ
diff --git a/app/src/main/res/drawable-hdpi/he407.png b/app/src/main/res/drawable-hdpi/he407.png
index 12647d2..1ac5975 100644
Binary files a/app/src/main/res/drawable-hdpi/he407.png and b/app/src/main/res/drawable-hdpi/he407.png differ
diff --git a/app/src/main/res/drawable-hdpi/he408.png b/app/src/main/res/drawable-hdpi/he408.png
index 5e11377..2b166cf 100644
Binary files a/app/src/main/res/drawable-hdpi/he408.png and b/app/src/main/res/drawable-hdpi/he408.png differ
diff --git a/app/src/main/res/drawable-hdpi/he409.png b/app/src/main/res/drawable-hdpi/he409.png
index 5794537..f8c3e3a 100644
Binary files a/app/src/main/res/drawable-hdpi/he409.png and b/app/src/main/res/drawable-hdpi/he409.png differ
diff --git a/app/src/main/res/drawable-hdpi/he410.png b/app/src/main/res/drawable-hdpi/he410.png
index b2077a1..0aff7a3 100644
Binary files a/app/src/main/res/drawable-hdpi/he410.png and b/app/src/main/res/drawable-hdpi/he410.png differ
diff --git a/app/src/main/res/drawable-hdpi/he456.png b/app/src/main/res/drawable-hdpi/he456.png
index 1664034..fe7d043 100644
Binary files a/app/src/main/res/drawable-hdpi/he456.png and b/app/src/main/res/drawable-hdpi/he456.png differ
diff --git a/app/src/main/res/drawable-hdpi/he457.png b/app/src/main/res/drawable-hdpi/he457.png
index 1f56270..aabc47e 100644
Binary files a/app/src/main/res/drawable-hdpi/he457.png and b/app/src/main/res/drawable-hdpi/he457.png differ
diff --git a/app/src/main/res/drawable-hdpi/he499.png b/app/src/main/res/drawable-hdpi/he499.png
index bc2fbd4..95be990 100644
Binary files a/app/src/main/res/drawable-hdpi/he499.png and b/app/src/main/res/drawable-hdpi/he499.png differ
diff --git a/app/src/main/res/drawable-hdpi/he500.png b/app/src/main/res/drawable-hdpi/he500.png
index d2ec7d6..3826ab6 100644
Binary files a/app/src/main/res/drawable-hdpi/he500.png and b/app/src/main/res/drawable-hdpi/he500.png differ
diff --git a/app/src/main/res/drawable-hdpi/he501.png b/app/src/main/res/drawable-hdpi/he501.png
index ef3bc16..3826ab6 100644
Binary files a/app/src/main/res/drawable-hdpi/he501.png and b/app/src/main/res/drawable-hdpi/he501.png differ
diff --git a/app/src/main/res/drawable-hdpi/he502.png b/app/src/main/res/drawable-hdpi/he502.png
index e7816da..8180aa2 100644
Binary files a/app/src/main/res/drawable-hdpi/he502.png and b/app/src/main/res/drawable-hdpi/he502.png differ
diff --git a/app/src/main/res/drawable-hdpi/he503.png b/app/src/main/res/drawable-hdpi/he503.png
index 0e5b5d1..22514c2 100644
Binary files a/app/src/main/res/drawable-hdpi/he503.png and b/app/src/main/res/drawable-hdpi/he503.png differ
diff --git a/app/src/main/res/drawable-hdpi/he504.png b/app/src/main/res/drawable-hdpi/he504.png
index 185b37d..0a01fbe 100644
Binary files a/app/src/main/res/drawable-hdpi/he504.png and b/app/src/main/res/drawable-hdpi/he504.png differ
diff --git a/app/src/main/res/drawable-hdpi/he507.png b/app/src/main/res/drawable-hdpi/he507.png
index 4a6403d..ddfbb6b 100644
Binary files a/app/src/main/res/drawable-hdpi/he507.png and b/app/src/main/res/drawable-hdpi/he507.png differ
diff --git a/app/src/main/res/drawable-hdpi/he508.png b/app/src/main/res/drawable-hdpi/he508.png
index a3a333f..7026e61 100644
Binary files a/app/src/main/res/drawable-hdpi/he508.png and b/app/src/main/res/drawable-hdpi/he508.png differ
diff --git a/app/src/main/res/drawable-hdpi/he509.png b/app/src/main/res/drawable-hdpi/he509.png
index 5900d5c..6e17e1a 100644
Binary files a/app/src/main/res/drawable-hdpi/he509.png and b/app/src/main/res/drawable-hdpi/he509.png differ
diff --git a/app/src/main/res/drawable-hdpi/he510.png b/app/src/main/res/drawable-hdpi/he510.png
index fdf6422..e2357e7 100644
Binary files a/app/src/main/res/drawable-hdpi/he510.png and b/app/src/main/res/drawable-hdpi/he510.png differ
diff --git a/app/src/main/res/drawable-hdpi/he511.png b/app/src/main/res/drawable-hdpi/he511.png
index 40cfd0e..44a1249 100644
Binary files a/app/src/main/res/drawable-hdpi/he511.png and b/app/src/main/res/drawable-hdpi/he511.png differ
diff --git a/app/src/main/res/drawable-hdpi/he512.png b/app/src/main/res/drawable-hdpi/he512.png
index 22ab63a..607030d 100644
Binary files a/app/src/main/res/drawable-hdpi/he512.png and b/app/src/main/res/drawable-hdpi/he512.png differ
diff --git a/app/src/main/res/drawable-hdpi/he513.png b/app/src/main/res/drawable-hdpi/he513.png
index 6e8c4e3..9829a3d 100644
Binary files a/app/src/main/res/drawable-hdpi/he513.png and b/app/src/main/res/drawable-hdpi/he513.png differ
diff --git a/app/src/main/res/drawable-hdpi/he514.png b/app/src/main/res/drawable-hdpi/he514.png
index 5892ad0..0ea5946 100644
Binary files a/app/src/main/res/drawable-hdpi/he514.png and b/app/src/main/res/drawable-hdpi/he514.png differ
diff --git a/app/src/main/res/drawable-hdpi/he515.png b/app/src/main/res/drawable-hdpi/he515.png
index 518137a..0ea5946 100644
Binary files a/app/src/main/res/drawable-hdpi/he515.png and b/app/src/main/res/drawable-hdpi/he515.png differ
diff --git a/app/src/main/res/drawable-hdpi/he900.png b/app/src/main/res/drawable-hdpi/he900.png
index 020b8e3..f436010 100644
Binary files a/app/src/main/res/drawable-hdpi/he900.png and b/app/src/main/res/drawable-hdpi/he900.png differ
diff --git a/app/src/main/res/drawable-hdpi/he901.png b/app/src/main/res/drawable-hdpi/he901.png
index df59561..1c8a390 100644
Binary files a/app/src/main/res/drawable-hdpi/he901.png and b/app/src/main/res/drawable-hdpi/he901.png differ
diff --git a/app/src/main/res/drawable-hdpi/he999.png b/app/src/main/res/drawable-hdpi/he999.png
index bb0c9f9..2a1752b 100644
Binary files a/app/src/main/res/drawable-hdpi/he999.png and b/app/src/main/res/drawable-hdpi/he999.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_dialer.png b/app/src/main/res/drawable-hdpi/home_icon_dialer.png
index 908bebb..ea7f6bf 100644
Binary files a/app/src/main/res/drawable-hdpi/home_icon_dialer.png and b/app/src/main/res/drawable-hdpi/home_icon_dialer.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_alarm.png b/app/src/main/res/drawable-hdpi/icon_alarm.png
new file mode 100644
index 0000000..ecd1156
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_alarm.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_call_incoming.png b/app/src/main/res/drawable-hdpi/icon_call_incoming.png
index 484aa46..aee0ded 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_call_incoming.png and b/app/src/main/res/drawable-hdpi/icon_call_incoming.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_call_missed.png b/app/src/main/res/drawable-hdpi/icon_call_missed.png
index ae7a67f..a8655ce 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_call_missed.png and b/app/src/main/res/drawable-hdpi/icon_call_missed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_call_outgoing.png b/app/src/main/res/drawable-hdpi/icon_call_outgoing.png
index 12dd83c..5c28f7f 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_call_outgoing.png and b/app/src/main/res/drawable-hdpi/icon_call_outgoing.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_call_phone.png b/app/src/main/res/drawable-hdpi/icon_call_phone.png
deleted file mode 100644
index 481115b..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_call_phone.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_contact_add.png b/app/src/main/res/drawable-hdpi/icon_contact_add.png
index 397641e..0c5fc72 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_contact_add.png and b/app/src/main/res/drawable-hdpi/icon_contact_add.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_location.png b/app/src/main/res/drawable-hdpi/icon_location.png
index ab55c2a..665df11 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_location.png and b/app/src/main/res/drawable-hdpi/icon_location.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_settings.png b/app/src/main/res/drawable-hdpi/icon_settings.png
new file mode 100644
index 0000000..514dfde
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_settings.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_sos_cancel.png b/app/src/main/res/drawable-hdpi/icon_sos_cancel.png
new file mode 100644
index 0000000..925216e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_sos_cancel.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_sos_dialer.png b/app/src/main/res/drawable-hdpi/icon_sos_dialer.png
index a999b60..b956f24 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_sos_dialer.png and b/app/src/main/res/drawable-hdpi/icon_sos_dialer.png differ
diff --git a/app/src/main/res/drawable-hdpi/number_delete.png b/app/src/main/res/drawable-hdpi/number_delete.png
index 84bb9ce..872bc3b 100644
Binary files a/app/src/main/res/drawable-hdpi/number_delete.png and b/app/src/main/res/drawable-hdpi/number_delete.png differ
diff --git a/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png b/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png
deleted file mode 100644
index c04d48e..0000000
Binary files a/app/src/main/res/drawable-hdpi/setting_icon_add_contact.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/setting_icon_bind.png b/app/src/main/res/drawable-hdpi/setting_icon_bind.png
deleted file mode 100644
index a1c2394..0000000
Binary files a/app/src/main/res/drawable-hdpi/setting_icon_bind.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/setting_icon_network.png b/app/src/main/res/drawable-hdpi/setting_icon_network.png
deleted file mode 100644
index 72ea1b8..0000000
Binary files a/app/src/main/res/drawable-hdpi/setting_icon_network.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/setting_icon_wifi.png b/app/src/main/res/drawable-hdpi/setting_icon_wifi.png
deleted file mode 100644
index 458da6e..0000000
Binary files a/app/src/main/res/drawable-hdpi/setting_icon_wifi.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/sim_card_1.png b/app/src/main/res/drawable-hdpi/sim_card_1.png
index f44a522..ada7e6a 100644
Binary files a/app/src/main/res/drawable-hdpi/sim_card_1.png and b/app/src/main/res/drawable-hdpi/sim_card_1.png differ
diff --git a/app/src/main/res/drawable-hdpi/sim_card_2.png b/app/src/main/res/drawable-hdpi/sim_card_2.png
index 7d1b9f8..aeca504 100644
Binary files a/app/src/main/res/drawable-hdpi/sim_card_2.png and b/app/src/main/res/drawable-hdpi/sim_card_2.png differ
diff --git a/app/src/main/res/drawable-xhdpi/he100.png b/app/src/main/res/drawable-xhdpi/he100.png
deleted file mode 100644
index faf04c8..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he100.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he101.png b/app/src/main/res/drawable-xhdpi/he101.png
deleted file mode 100644
index 17841e4..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he101.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he102.png b/app/src/main/res/drawable-xhdpi/he102.png
deleted file mode 100644
index 51bc5a8..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he102.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he103.png b/app/src/main/res/drawable-xhdpi/he103.png
deleted file mode 100644
index 5fd9957..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he103.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he104.png b/app/src/main/res/drawable-xhdpi/he104.png
deleted file mode 100644
index 9628fbd..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he104.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he150.png b/app/src/main/res/drawable-xhdpi/he150.png
deleted file mode 100644
index eaee769..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he150.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he153.png b/app/src/main/res/drawable-xhdpi/he153.png
deleted file mode 100644
index 346a2c2..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he153.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he154.png b/app/src/main/res/drawable-xhdpi/he154.png
deleted file mode 100644
index 358be1a..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he154.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he300.png b/app/src/main/res/drawable-xhdpi/he300.png
deleted file mode 100644
index 24ba9bc..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he300.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he301.png b/app/src/main/res/drawable-xhdpi/he301.png
deleted file mode 100644
index ad65de8..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he301.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he302.png b/app/src/main/res/drawable-xhdpi/he302.png
deleted file mode 100644
index 4a018ee..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he302.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he303.png b/app/src/main/res/drawable-xhdpi/he303.png
deleted file mode 100644
index aa8d273..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he303.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he304.png b/app/src/main/res/drawable-xhdpi/he304.png
deleted file mode 100644
index 3155a49..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he304.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he305.png b/app/src/main/res/drawable-xhdpi/he305.png
deleted file mode 100644
index f76f6e3..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he305.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he306.png b/app/src/main/res/drawable-xhdpi/he306.png
deleted file mode 100644
index ffb6804..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he306.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he307.png b/app/src/main/res/drawable-xhdpi/he307.png
deleted file mode 100644
index 1e33073..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he307.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he308.png b/app/src/main/res/drawable-xhdpi/he308.png
deleted file mode 100644
index 2586187..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he308.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he309.png b/app/src/main/res/drawable-xhdpi/he309.png
deleted file mode 100644
index 9beebe3..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he309.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he310.png b/app/src/main/res/drawable-xhdpi/he310.png
deleted file mode 100644
index 624b04e..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he310.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he311.png b/app/src/main/res/drawable-xhdpi/he311.png
deleted file mode 100644
index 5fcc3fc..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he311.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he312.png b/app/src/main/res/drawable-xhdpi/he312.png
deleted file mode 100644
index 0e93ff7..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he312.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he313.png b/app/src/main/res/drawable-xhdpi/he313.png
deleted file mode 100644
index ba783d6..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he313.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he314.png b/app/src/main/res/drawable-xhdpi/he314.png
deleted file mode 100644
index 9e93846..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he314.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he315.png b/app/src/main/res/drawable-xhdpi/he315.png
deleted file mode 100644
index 527e6fe..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he315.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he316.png b/app/src/main/res/drawable-xhdpi/he316.png
deleted file mode 100644
index 8309afb..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he316.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he317.png b/app/src/main/res/drawable-xhdpi/he317.png
deleted file mode 100644
index 2e9a702..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he317.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he318.png b/app/src/main/res/drawable-xhdpi/he318.png
deleted file mode 100644
index b99b851..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he318.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he350.png b/app/src/main/res/drawable-xhdpi/he350.png
deleted file mode 100644
index a9a0c52..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he350.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he351.png b/app/src/main/res/drawable-xhdpi/he351.png
deleted file mode 100644
index f7bdda3..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he351.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he399.png b/app/src/main/res/drawable-xhdpi/he399.png
deleted file mode 100644
index 321233b..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he399.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he400.png b/app/src/main/res/drawable-xhdpi/he400.png
deleted file mode 100644
index 532879b..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he400.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he401.png b/app/src/main/res/drawable-xhdpi/he401.png
deleted file mode 100644
index 4a92fc7..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he401.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he402.png b/app/src/main/res/drawable-xhdpi/he402.png
deleted file mode 100644
index ccc2dab..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he402.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he403.png b/app/src/main/res/drawable-xhdpi/he403.png
deleted file mode 100644
index da32ebe..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he403.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he404.png b/app/src/main/res/drawable-xhdpi/he404.png
deleted file mode 100644
index 99a3d9d..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he404.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he405.png b/app/src/main/res/drawable-xhdpi/he405.png
deleted file mode 100644
index c3ac8d4..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he405.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he406.png b/app/src/main/res/drawable-xhdpi/he406.png
deleted file mode 100644
index 01348b1..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he406.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he407.png b/app/src/main/res/drawable-xhdpi/he407.png
deleted file mode 100644
index 37cdd78..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he407.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he408.png b/app/src/main/res/drawable-xhdpi/he408.png
deleted file mode 100644
index f8d216c..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he408.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he409.png b/app/src/main/res/drawable-xhdpi/he409.png
deleted file mode 100644
index e7e729b..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he409.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he410.png b/app/src/main/res/drawable-xhdpi/he410.png
deleted file mode 100644
index 3e4dcf2..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he410.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he456.png b/app/src/main/res/drawable-xhdpi/he456.png
deleted file mode 100644
index 1b080c7..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he456.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he457.png b/app/src/main/res/drawable-xhdpi/he457.png
deleted file mode 100644
index 1b610d2..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he457.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he499.png b/app/src/main/res/drawable-xhdpi/he499.png
deleted file mode 100644
index c486a59..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he499.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he500.png b/app/src/main/res/drawable-xhdpi/he500.png
deleted file mode 100644
index dcecc31..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he500.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he501.png b/app/src/main/res/drawable-xhdpi/he501.png
deleted file mode 100644
index 41fba52..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he501.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he502.png b/app/src/main/res/drawable-xhdpi/he502.png
deleted file mode 100644
index 6ffda43..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he502.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he503.png b/app/src/main/res/drawable-xhdpi/he503.png
deleted file mode 100644
index f7e2296..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he503.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he504.png b/app/src/main/res/drawable-xhdpi/he504.png
deleted file mode 100644
index b26ea7b..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he504.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he507.png b/app/src/main/res/drawable-xhdpi/he507.png
deleted file mode 100644
index 43b1e6e..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he507.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he508.png b/app/src/main/res/drawable-xhdpi/he508.png
deleted file mode 100644
index f932cd9..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he508.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he509.png b/app/src/main/res/drawable-xhdpi/he509.png
deleted file mode 100644
index b1a8adb..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he509.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he510.png b/app/src/main/res/drawable-xhdpi/he510.png
deleted file mode 100644
index eecaf5d..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he510.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he511.png b/app/src/main/res/drawable-xhdpi/he511.png
deleted file mode 100644
index b0bcd8e..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he511.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he512.png b/app/src/main/res/drawable-xhdpi/he512.png
deleted file mode 100644
index 0d98a13..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he512.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he513.png b/app/src/main/res/drawable-xhdpi/he513.png
deleted file mode 100644
index e1128ff..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he513.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he514.png b/app/src/main/res/drawable-xhdpi/he514.png
deleted file mode 100644
index cb9adbc..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he514.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he515.png b/app/src/main/res/drawable-xhdpi/he515.png
deleted file mode 100644
index 2faa917..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he515.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he900.png b/app/src/main/res/drawable-xhdpi/he900.png
deleted file mode 100644
index cbdb3e7..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he900.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he901.png b/app/src/main/res/drawable-xhdpi/he901.png
deleted file mode 100644
index bc6d105..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he901.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/he999.png b/app/src/main/res/drawable-xhdpi/he999.png
deleted file mode 100644
index 4ce8569..0000000
Binary files a/app/src/main/res/drawable-xhdpi/he999.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he100.png b/app/src/main/res/drawable-xxhdpi/he100.png
deleted file mode 100644
index faf04c8..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he100.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he101.png b/app/src/main/res/drawable-xxhdpi/he101.png
deleted file mode 100644
index 17841e4..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he101.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he102.png b/app/src/main/res/drawable-xxhdpi/he102.png
deleted file mode 100644
index 51bc5a8..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he102.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he103.png b/app/src/main/res/drawable-xxhdpi/he103.png
deleted file mode 100644
index 5fd9957..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he103.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he104.png b/app/src/main/res/drawable-xxhdpi/he104.png
deleted file mode 100644
index 9628fbd..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he104.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he150.png b/app/src/main/res/drawable-xxhdpi/he150.png
deleted file mode 100644
index eaee769..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he150.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he153.png b/app/src/main/res/drawable-xxhdpi/he153.png
deleted file mode 100644
index 346a2c2..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he153.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he154.png b/app/src/main/res/drawable-xxhdpi/he154.png
deleted file mode 100644
index 358be1a..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he154.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he300.png b/app/src/main/res/drawable-xxhdpi/he300.png
deleted file mode 100644
index 24ba9bc..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he300.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he301.png b/app/src/main/res/drawable-xxhdpi/he301.png
deleted file mode 100644
index ad65de8..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he301.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he302.png b/app/src/main/res/drawable-xxhdpi/he302.png
deleted file mode 100644
index 4a018ee..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he302.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he303.png b/app/src/main/res/drawable-xxhdpi/he303.png
deleted file mode 100644
index aa8d273..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he303.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he304.png b/app/src/main/res/drawable-xxhdpi/he304.png
deleted file mode 100644
index 3155a49..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he304.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he305.png b/app/src/main/res/drawable-xxhdpi/he305.png
deleted file mode 100644
index f76f6e3..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he305.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he306.png b/app/src/main/res/drawable-xxhdpi/he306.png
deleted file mode 100644
index ffb6804..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he306.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he307.png b/app/src/main/res/drawable-xxhdpi/he307.png
deleted file mode 100644
index 1e33073..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he307.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he308.png b/app/src/main/res/drawable-xxhdpi/he308.png
deleted file mode 100644
index 2586187..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he308.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he309.png b/app/src/main/res/drawable-xxhdpi/he309.png
deleted file mode 100644
index 9beebe3..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he309.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he310.png b/app/src/main/res/drawable-xxhdpi/he310.png
deleted file mode 100644
index 624b04e..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he310.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he311.png b/app/src/main/res/drawable-xxhdpi/he311.png
deleted file mode 100644
index 5fcc3fc..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he311.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he312.png b/app/src/main/res/drawable-xxhdpi/he312.png
deleted file mode 100644
index 0e93ff7..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he312.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he313.png b/app/src/main/res/drawable-xxhdpi/he313.png
deleted file mode 100644
index ba783d6..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he313.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he314.png b/app/src/main/res/drawable-xxhdpi/he314.png
deleted file mode 100644
index 9e93846..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he314.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he315.png b/app/src/main/res/drawable-xxhdpi/he315.png
deleted file mode 100644
index 527e6fe..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he315.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he316.png b/app/src/main/res/drawable-xxhdpi/he316.png
deleted file mode 100644
index 8309afb..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he316.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he317.png b/app/src/main/res/drawable-xxhdpi/he317.png
deleted file mode 100644
index 2e9a702..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he317.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he318.png b/app/src/main/res/drawable-xxhdpi/he318.png
deleted file mode 100644
index b99b851..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he318.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he350.png b/app/src/main/res/drawable-xxhdpi/he350.png
deleted file mode 100644
index a9a0c52..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he350.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he351.png b/app/src/main/res/drawable-xxhdpi/he351.png
deleted file mode 100644
index f7bdda3..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he351.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he399.png b/app/src/main/res/drawable-xxhdpi/he399.png
deleted file mode 100644
index 321233b..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he399.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he400.png b/app/src/main/res/drawable-xxhdpi/he400.png
deleted file mode 100644
index 532879b..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he400.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he401.png b/app/src/main/res/drawable-xxhdpi/he401.png
deleted file mode 100644
index 4a92fc7..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he401.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he402.png b/app/src/main/res/drawable-xxhdpi/he402.png
deleted file mode 100644
index ccc2dab..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he402.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he403.png b/app/src/main/res/drawable-xxhdpi/he403.png
deleted file mode 100644
index da32ebe..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he403.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he404.png b/app/src/main/res/drawable-xxhdpi/he404.png
deleted file mode 100644
index 99a3d9d..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he404.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he405.png b/app/src/main/res/drawable-xxhdpi/he405.png
deleted file mode 100644
index c3ac8d4..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he405.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he406.png b/app/src/main/res/drawable-xxhdpi/he406.png
deleted file mode 100644
index 01348b1..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he406.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he407.png b/app/src/main/res/drawable-xxhdpi/he407.png
deleted file mode 100644
index 37cdd78..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he407.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he408.png b/app/src/main/res/drawable-xxhdpi/he408.png
deleted file mode 100644
index f8d216c..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he408.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he409.png b/app/src/main/res/drawable-xxhdpi/he409.png
deleted file mode 100644
index e7e729b..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he409.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he410.png b/app/src/main/res/drawable-xxhdpi/he410.png
deleted file mode 100644
index 3e4dcf2..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he410.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he456.png b/app/src/main/res/drawable-xxhdpi/he456.png
deleted file mode 100644
index 1b080c7..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he456.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he457.png b/app/src/main/res/drawable-xxhdpi/he457.png
deleted file mode 100644
index 1b610d2..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he457.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he499.png b/app/src/main/res/drawable-xxhdpi/he499.png
deleted file mode 100644
index c486a59..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he499.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he500.png b/app/src/main/res/drawable-xxhdpi/he500.png
deleted file mode 100644
index dcecc31..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he500.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he501.png b/app/src/main/res/drawable-xxhdpi/he501.png
deleted file mode 100644
index 41fba52..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he501.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he502.png b/app/src/main/res/drawable-xxhdpi/he502.png
deleted file mode 100644
index 6ffda43..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he502.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he503.png b/app/src/main/res/drawable-xxhdpi/he503.png
deleted file mode 100644
index f7e2296..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he503.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he504.png b/app/src/main/res/drawable-xxhdpi/he504.png
deleted file mode 100644
index b26ea7b..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he504.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he507.png b/app/src/main/res/drawable-xxhdpi/he507.png
deleted file mode 100644
index 43b1e6e..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he507.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he508.png b/app/src/main/res/drawable-xxhdpi/he508.png
deleted file mode 100644
index f932cd9..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he508.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he509.png b/app/src/main/res/drawable-xxhdpi/he509.png
deleted file mode 100644
index b1a8adb..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he509.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he510.png b/app/src/main/res/drawable-xxhdpi/he510.png
deleted file mode 100644
index eecaf5d..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he510.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he511.png b/app/src/main/res/drawable-xxhdpi/he511.png
deleted file mode 100644
index b0bcd8e..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he511.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he512.png b/app/src/main/res/drawable-xxhdpi/he512.png
deleted file mode 100644
index 0d98a13..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he512.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he513.png b/app/src/main/res/drawable-xxhdpi/he513.png
deleted file mode 100644
index e1128ff..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he513.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he514.png b/app/src/main/res/drawable-xxhdpi/he514.png
deleted file mode 100644
index cb9adbc..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he514.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he515.png b/app/src/main/res/drawable-xxhdpi/he515.png
deleted file mode 100644
index 2faa917..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he515.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he900.png b/app/src/main/res/drawable-xxhdpi/he900.png
deleted file mode 100644
index cbdb3e7..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he900.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he901.png b/app/src/main/res/drawable-xxhdpi/he901.png
deleted file mode 100644
index bc6d105..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he901.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/he999.png b/app/src/main/res/drawable-xxhdpi/he999.png
deleted file mode 100644
index 4ce8569..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/he999.png and /dev/null differ
diff --git a/app/src/main/res/drawable/background_weather.xml b/app/src/main/res/drawable/background_weather.xml
new file mode 100644
index 0000000..5cab915
--- /dev/null
+++ b/app/src/main/res/drawable/background_weather.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/notice_voice_background.xml b/app/src/main/res/drawable/notice_voice_background.xml
index d69f3e7..4ab35c8 100644
--- a/app/src/main/res/drawable/notice_voice_background.xml
+++ b/app/src/main/res/drawable/notice_voice_background.xml
@@ -4,14 +4,14 @@
+ android:bottomLeftRadius="8dp"
+ android:bottomRightRadius="8dp"
+ android:topLeftRadius="8dp"
+ android:topRightRadius="8dp" />
+ android:top="8dp" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ok_background.xml b/app/src/main/res/drawable/ok_background.xml
index d219707..f63ac06 100644
--- a/app/src/main/res/drawable/ok_background.xml
+++ b/app/src/main/res/drawable/ok_background.xml
@@ -2,12 +2,11 @@
+
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_contact_add.xml b/app/src/main/res/layout/activity_contact_add.xml
index 440b154..657be28 100644
--- a/app/src/main/res/layout/activity_contact_add.xml
+++ b/app/src/main/res/layout/activity_contact_add.xml
@@ -80,7 +80,9 @@
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
+ android:adjustViewBounds="true"
android:onClick="@{click::selectPic}"
+ android:scaleType="centerCrop"
android:src="@drawable/default_avatar"
app:is_circle="true"
app:layout_constraintBottom_toBottomOf="parent"
@@ -283,9 +285,9 @@
diff --git a/app/src/main/res/layout/activity_contact_edit.xml b/app/src/main/res/layout/activity_contact_edit.xml
index eafe62e..bc7f0b7 100644
--- a/app/src/main/res/layout/activity_contact_edit.xml
+++ b/app/src/main/res/layout/activity_contact_edit.xml
@@ -100,7 +100,9 @@
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
+ android:adjustViewBounds="true"
android:onClick="@{click::selectPic}"
+ android:scaleType="centerCrop"
android:src="@drawable/default_avatar"
app:is_circle="true"
app:layout_constraintBottom_toBottomOf="parent"
@@ -305,9 +307,9 @@
diff --git a/app/src/main/res/layout/activity_emergency.xml b/app/src/main/res/layout/activity_emergency.xml
index 003e949..bce195d 100644
--- a/app/src/main/res/layout/activity_emergency.xml
+++ b/app/src/main/res/layout/activity_emergency.xml
@@ -22,130 +22,72 @@
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
- android:background="@drawable/bt_sos_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_info_details.xml b/app/src/main/res/layout/activity_info_details.xml
index 240cd92..859ed25 100644
--- a/app/src/main/res/layout/activity_info_details.xml
+++ b/app/src/main/res/layout/activity_info_details.xml
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
+
@@ -10,8 +11,8 @@
+ android:layout_height="match_parent"
+ android:background="@color/white">
@@ -39,13 +40,13 @@
android:layout_marginTop="8dp"
android:gravity="center"
android:maxLines="2"
- app:setTime="@{articleInfo.update_time}"
android:text="2004/01/24"
android:textColor="@color/black"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/tv_title" />
+ app:layout_constraintTop_toBottomOf="@+id/tv_title"
+ app:setTime="@{articleInfo.update_time}" />
diff --git a/app/src/main/res/layout/activity_notice.xml b/app/src/main/res/layout/activity_notice.xml
index 3abf2b3..9cac05d 100644
--- a/app/src/main/res/layout/activity_notice.xml
+++ b/app/src/main/res/layout/activity_notice.xml
@@ -20,7 +20,6 @@
android:background="@drawable/bg_dialog"
android:minWidth="240dp"
android:orientation="vertical"
- android:paddingTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -30,62 +29,43 @@
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
android:gravity="center"
android:orientation="horizontal"
- app:layout_constraintBottom_toTopOf="@+id/message"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />
+ android:layout_marginBottom="16dp"
+ app:layout_constraintBottom_toBottomOf="parent">
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_info.xml b/app/src/main/res/layout/activity_notice_info.xml
index 1277f7d..6bc1554 100644
--- a/app/src/main/res/layout/activity_notice_info.xml
+++ b/app/src/main/res/layout/activity_notice_info.xml
@@ -15,134 +15,114 @@
-
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintStart_toStartOf="parent" />
-
+
diff --git a/app/src/main/res/layout/activity_phone.xml b/app/src/main/res/layout/activity_phone.xml
index 8b43400..534b53b 100644
--- a/app/src/main/res/layout/activity_phone.xml
+++ b/app/src/main/res/layout/activity_phone.xml
@@ -24,7 +24,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
- app:tl_indicator_color="@color/black"
+ app:tl_indicator_color="@color/transparent"
app:tl_indicator_style="TRIANGLE"
app:tl_indicator_width_equal_title="true"
app:tl_selectTextSize="22sp"
diff --git a/app/src/main/res/layout/activity_service.xml b/app/src/main/res/layout/activity_service.xml
index 23196d3..199c88d 100644
--- a/app/src/main/res/layout/activity_service.xml
+++ b/app/src/main/res/layout/activity_service.xml
@@ -22,7 +22,6 @@
android:layout_height="493dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/wechat_service"
app:corner_radius="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index 7f584b2..5135e3a 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -25,6 +25,18 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
+
+
@@ -65,6 +76,31 @@
android:layout_height="wrap_content"
android:orientation="vertical">
+
+
+
+
+
+
+
+
@@ -83,8 +119,8 @@
-
-
-
-
-
-
-
-
+
+
diff --git a/app/src/main/res/layout/activity_weather.xml b/app/src/main/res/layout/activity_weather.xml
index bbf8b66..504de3b 100644
--- a/app/src/main/res/layout/activity_weather.xml
+++ b/app/src/main/res/layout/activity_weather.xml
@@ -19,7 +19,7 @@
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/weather_background_day">
+ android:background="@color/black">
-
-
@@ -89,116 +72,28 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent">
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_wechat_call.xml b/app/src/main/res/layout/activity_wechat_call.xml
index c1b1763..07b300a 100644
--- a/app/src/main/res/layout/activity_wechat_call.xml
+++ b/app/src/main/res/layout/activity_wechat_call.xml
@@ -209,14 +209,13 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+ tools:text="取消" />
+
+
-
+ tools:text="确定" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_contact_home.xml b/app/src/main/res/layout/fragment_contact_home.xml
index 8d75f07..a351ac3 100644
--- a/app/src/main/res/layout/fragment_contact_home.xml
+++ b/app/src/main/res/layout/fragment_contact_home.xml
@@ -24,129 +24,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent">
@@ -421,7 +421,7 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
- android:background="@drawable/bt_dialer_other_background"
+ android:background="@drawable/bt_dialer_background"
android:clickable="true"
android:focusable="true"
android:onClick="@{click::numberSharp}">
@@ -486,8 +486,8 @@
@@ -199,10 +200,13 @@
android:text="--"
android:textColor="@color/white"
android:textSize="16sp"
+ android:maxLines="1"
+ android:singleLine="true"
+ android:maxEms="4"
app:layout_constraintBottom_toBottomOf="@+id/imageView11"
app:layout_constraintStart_toEndOf="@+id/imageView11"
app:layout_constraintTop_toTopOf="@+id/imageView11"
- tools:text="位置" />
+ tools:text="地址" />
@@ -266,7 +270,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_bind"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView19"
app:layout_constraintEnd_toEndOf="parent"
@@ -385,7 +388,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_add_contact"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView20"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index cc20310..509cbe0 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -53,7 +53,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_add_contact"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView22"
app:layout_constraintEnd_toEndOf="parent"
@@ -90,7 +89,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_bind"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView21"
app:layout_constraintEnd_toEndOf="parent"
@@ -126,7 +124,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_bind"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView21"
app:layout_constraintEnd_toEndOf="parent"
@@ -207,7 +204,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_network"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -251,7 +247,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_wifi"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -311,7 +306,6 @@
android:layout_height="80dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/setting_icon_network"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/item_call_record.xml b/app/src/main/res/layout/item_call_record.xml
index 5a55893..fbef4bb 100644
--- a/app/src/main/res/layout/item_call_record.xml
+++ b/app/src/main/res/layout/item_call_record.xml
@@ -17,19 +17,19 @@
android:id="@+id/tv_state"
android:layout_width="32dp"
android:layout_height="32dp"
- android:adjustViewBounds="true"
android:layout_marginStart="8dp"
- app:layout_constraintStart_toStartOf="parent"
+ android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/icon_call_incoming"
app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -71,26 +71,46 @@
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_contact_wechat.xml b/app/src/main/res/layout/item_contact_wechat.xml
index 46918b2..6aec044 100644
--- a/app/src/main/res/layout/item_contact_wechat.xml
+++ b/app/src/main/res/layout/item_contact_wechat.xml
@@ -19,9 +19,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
- android:src="@drawable/app_card_backround"
android:adjustViewBounds="true"
- android:scaleType="fitXY"/>
+ android:scaleType="fitXY"
+ android:src="@drawable/app_card_backround" />
diff --git a/app/src/main/res/layout/item_weather.xml b/app/src/main/res/layout/item_weather.xml
new file mode 100644
index 0000000..bc1f2b2
--- /dev/null
+++ b/app/src/main/res/layout/item_weather.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_weather_port.xml b/app/src/main/res/layout/item_weather_port.xml
deleted file mode 100644
index dcf4884..0000000
--- a/app/src/main/res/layout/item_weather_port.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/raw/ni.mp3 b/app/src/main/res/raw/ni.mp3
index 68f3449..2998bfd 100644
Binary files a/app/src/main/res/raw/ni.mp3 and b/app/src/main/res/raw/ni.mp3 differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 05b5667..d05cb90 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -30,4 +30,6 @@
Automatically download attachments for incoming emails
Only download attachments when manually requested
+ 移动%s到日常应用
+ 移动%s到桌面
diff --git a/settings.gradle b/settings.gradle
index 7d2b57b..f89424a 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,2 @@
include ':app', ':niceimageview', ':verification-view', ':FlycoTabLayoutZ_Lib'
-rootProject.name='孝心平安通讯SystemOS'
\ No newline at end of file
+rootProject.name='亲情桌面'
\ No newline at end of file