diff --git a/.gitignore b/.gitignore
index 6ed3b0e..486e39a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@
/app/src/test/java/com/uiui/os/
/.idea/
/app/proguardbuild/
+/dependencies.txt
diff --git a/app/build.gradle b/app/build.gradle
index f7e92f0..b10f30d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.xxpatx.os"
minSdkVersion 24
targetSdkVersion 29
- versionCode 1010
- versionName "1.0.9"
+ versionCode 1016
+ versionName "1.1.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -27,7 +27,7 @@ android {
}
manifestPlaceholders = [
- AMAP_KEY: "723704391181f6b0b478eecf8e6fcde6"
+ AMAP_KEY: "963a156c0e1b525856d9b1d304666fe9"
]
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a820608..1085e14 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -124,15 +124,15 @@
android:requestLegacyExternalStorage="true"
android:restoreAnyVersion="true"
android:supportsRtl="true"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppThemeFitsSystem">
+ android:resizeableActivity="true"
+ android:screenOrientation="portrait"
+ android:theme="@style/AppTheme">
@@ -143,7 +143,11 @@
-
+
-
+
-
-
@@ -336,6 +339,21 @@
+
+
+
+
+
+
{
+ private static final String TAG = "ActivationActivity";
+
+ @Override
+ public boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_activation;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ public void initView() {
+
+ }
+
+ @Override
+ public void initData() {
+
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
+ return false;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+
+ public void activation(View view) {
+ ApkUtils.openApp(ActivationActivity.this, "com.xxpatx.sn");
+ }
+
+ public void openWifi(View view) {
+ startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
+ }
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/activation/ActivationViewModel.java b/app/src/main/java/com/xxpatx/os/activity/activation/ActivationViewModel.java
new file mode 100644
index 0000000..04d6c5d
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/activity/activation/ActivationViewModel.java
@@ -0,0 +1,19 @@
+package com.xxpatx.os.activity.activation;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.xxpatx.os.base.mvvm.BaseViewModel;
+import com.xxpatx.os.databinding.ActivityActivationBinding;
+
+public class ActivationViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityActivationBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java
index a87da96..6760167 100644
--- a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java
@@ -38,6 +38,11 @@ public class PortAlarmActivity extends BaseMvvmActivity {
@@ -38,6 +41,17 @@ public class CallWechatActivity extends BaseMvvmActivity params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("name", name);
params.put("mobile", phone);
params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn()));
diff --git a/app/src/main/java/com/xxpatx/os/activity/contact/AddWechatContactActivity.java b/app/src/main/java/com/xxpatx/os/activity/contact/AddWechatContactActivity.java
index c3f8d41..066c2a3 100644
--- a/app/src/main/java/com/xxpatx/os/activity/contact/AddWechatContactActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/contact/AddWechatContactActivity.java
@@ -1,11 +1,14 @@
package com.xxpatx.os.activity.contact;
import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
@@ -21,14 +24,14 @@ import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
+import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.xxpatx.os.R;
import com.xxpatx.os.base.GlideEngine;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.databinding.ActivityAddWechatContactBinding;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.utils.ScreenUtil;
-import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
+import com.xxpatx.os.utils.Utils;
import java.io.File;
import java.io.FileOutputStream;
@@ -46,6 +49,11 @@ public class AddWechatContactActivity extends BaseMvvmActivity params = new HashMap<>();
+ params.put("sn", Utils.getSerial());
+ params.put("name", name);
+ params.put("mobile", phone);
+ params.put("tag", groupTag);
+ params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn()));
+ mViewModel.addContact(params, body);
}
- MediaType mediaType = MediaType.Companion.parse("image/png");
- RequestBody requestBody = RequestBody.Companion.create(avatarFile, mediaType);
- MultipartBody.Part body = MultipartBody.Part.createFormData("avatar", avatarFile.getName(), requestBody);
- Map params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
- params.put("name", name);
- params.put("mobile", phone);
- params.put("tag", groupTag);
- params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn()));
- mViewModel.addContact(params, body);
+
mLoadingDialog.show();
}
@@ -234,6 +247,47 @@ public class AddWechatContactActivity extends BaseMvvmActivity params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("id", mContact.getId());
params.put("name", name);
params.put("mobile", phone);
diff --git a/app/src/main/java/com/xxpatx/os/activity/control/ControlActivity.java b/app/src/main/java/com/xxpatx/os/activity/control/ControlActivity.java
index dcdfbee..3f318b0 100644
--- a/app/src/main/java/com/xxpatx/os/activity/control/ControlActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/control/ControlActivity.java
@@ -30,7 +30,6 @@ import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.databinding.ActivityControlBinding;
import com.xxpatx.os.manager.AmapManager;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.utils.BrightnessUtils;
import java.lang.reflect.InvocationTargetException;
@@ -204,20 +203,6 @@ public class ControlActivity extends BaseMvvmActivity appBeanList = AppStatusManager.getInstance().getPackageList();
- mDailyAppAdapter.setDailyAppBeans(appBeanList);
- mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), appBeanList.size()));
+ mViewModel.getDailyAppData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List dailyAppBeans) {
+ mDailyAppAdapter.setDailyAppBeans(dailyAppBeans);
+ mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), dailyAppBeans.size()));
+ }
+ });
+ mViewModel.getPackageList();
}
-}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/xxpatx/os/activity/dailyapp/DailyAppViewModel.java b/app/src/main/java/com/xxpatx/os/activity/dailyapp/DailyAppViewModel.java
index ff885be..325e0f9 100644
--- a/app/src/main/java/com/xxpatx/os/activity/dailyapp/DailyAppViewModel.java
+++ b/app/src/main/java/com/xxpatx/os/activity/dailyapp/DailyAppViewModel.java
@@ -1,8 +1,14 @@
package com.xxpatx.os.activity.dailyapp;
+import androidx.lifecycle.MutableLiveData;
+
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.xxpatx.os.base.mvvm.BaseViewModel;
+import com.xxpatx.os.bean.DailyAppBean;
import com.xxpatx.os.databinding.ActivityDailyappBinding;
+import com.xxpatx.os.manager.AppStatusManager;
+
+import java.util.List;
public class DailyAppViewModel extends BaseViewModel {
@@ -15,4 +21,15 @@ public class DailyAppViewModel extends BaseViewModel> mDailyAppData = new MutableLiveData<>();
+
+ public MutableLiveData> getDailyAppData() {
+ return mDailyAppData;
+ }
+
+ public void getPackageList() {
+ List appBeanList = AppStatusManager.getInstance().getPackageList();
+ mDailyAppData.setValue(appBeanList);
+ }
}
diff --git a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java
index c371488..0b2efcf 100644
--- a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java
@@ -57,7 +57,7 @@ public class EmergencyActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener, NetworkUtils.OnNetworkStatusChangedListener {
+public class MainActivity extends BaseMvvmActivity implements NetworkUtils.OnNetworkStatusChangedListener, NotificationService.NotificationListener {
private static final String TAG = "MainActivity";
@@ -102,9 +103,9 @@ public class MainActivity extends BaseMvvmActivity 1) {
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
}
+ NotificationService.setListener(this);
+ updateIconBg();
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
@@ -231,6 +231,40 @@ public class MainActivity extends BaseMvvmActivity() {
+ @Override
+ public void onChanged(Integer integer) {
+ if (integer == 0) {
+ if (WiFiUtils.getInstance().isNetworkConnected()) {
+ Toaster.showLong("请先激活设备");
+ startActivity(new Intent(MainActivity.this, ActivationActivity.class));
+ }
+ } else {
+ Log.e("getActivationData", "onChanged: 已激活");
+ }
+ }
+ });
+
+ mViewModel.getSnIsActivation();
+
+ mViewModel.getAppInfoData().observe(this, new Observer() {
+ @Override
+ public void onChanged(AppInfo appInfo) {
+ if (appInfo == null) {
+ Log.e("getAppInfoData", "onChanged: not found update");
+ } else {
+ if (ApkUtils.checkAppUpdate(MainActivity.this, appInfo)) {
+ Intent intent = new Intent(MainActivity.this, UpdateActivity.class);
+ intent.putExtra("appUpdateInfo", appInfo);
+ startActivity(intent);
+ } else {
+ Log.e("getAppInfoData", "onChanged: not found update");
+ }
+ }
+ }
+ });
+ mViewModel.checkUpdate();
registReceiver();
- RemoteManager.setListener(this);
initAmap();
}
@@ -359,6 +425,7 @@ public class MainActivity extends BaseMvvmActivity mActivationData = new MutableLiveData<>();
+
+ public MutableLiveData getActivationData() {
+ return mActivationData;
+ }
+
+ public void getSnIsActivation() {
+ NetInterfaceManager.getInstance().getSnIsActivationObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getSnIsActivation", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("getSnIsActivation", "onNext: " + baseResponse);
+ if (baseResponse.code == 200) {
+ ActivationBean activationBean = baseResponse.data;
+ if (activationBean != null) {
+ MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).encode(CommonConfig.ACTIVATION_BEAN_KEY, GsonUtils.toJSONString(activationBean));
+ int is_activation = activationBean.getIs_activation();
+ Settings.Global.putInt(getCtx().getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, is_activation);
+ int code_type = activationBean.getCode_type();
+ Settings.Global.putInt(getCtx().getContentResolver(), CommonConfig.UIUI_CODE_TYPE_KEY, code_type);
+ long expire_time = activationBean.getExpire_time();
+ Settings.Global.putLong(getCtx().getContentResolver(), CommonConfig.UIUI_EXPIRE_TIME_KEY, expire_time);
+ mActivationData.setValue(is_activation);
+ } else {
+ mActivationData.setValue(0);
+ }
+ } else {
+ mActivationData.setValue(0);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getSnIsActivation", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getSnIsActivation", "onComplete: ");
+ }
+ });
+ }
+
+ private MutableLiveData mAppInfoData = new MutableLiveData<>();
+
+ public MutableLiveData getAppInfoData() {
+ return mAppInfoData;
+ }
+
+ public void checkUpdate() {
+ NetInterfaceManager.getInstance().getUpdateObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("checkUpdate", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse appInfoBaseResponse) {
+ Log.e("checkUpdate", "onNext: " + appInfoBaseResponse);
+ if (appInfoBaseResponse.code == 200) {
+ AppInfo appInfo = appInfoBaseResponse.data;
+ mAppInfoData.setValue(appInfo);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("checkUpdate", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("checkUpdate", "onComplete: ");
+ }
+ });
+ }
@Deprecated
public void getDesktopLayout() {
@@ -299,7 +391,7 @@ public class MainViewModel extends BaseViewModel {
private static final String TAG = "ScreenLockActivity";
@@ -155,7 +154,7 @@ public class ScreenLockActivity extends BaseMvvmActivity() {
+ @Override
+ public void onChanged(AppInfo appInfo) {
+ if (appInfo == null) {
+ Log.e("getAppInfoData", "onChanged: not found update");
+ Toaster.show("已是最新版本");
+ } else {
+ if (ApkUtils.checkAppUpdate(SettingActivity.this, appInfo)) {
+ Intent intent = new Intent(SettingActivity.this, UpdateActivity.class);
+ intent.putExtra("appUpdateInfo", appInfo);
+ startActivity(intent);
+ } else {
+ Log.e("getAppInfoData", "onChanged: not found update");
+ Toaster.show("已是最新版本");
+ }
+ }
+ }
+ });
}
@Override
@@ -231,23 +252,23 @@ public class SettingActivity extends BaseMvvmActivity {
@@ -15,4 +27,40 @@ public class SettingViewModel extends BaseViewModel mAppInfoData = new MutableLiveData<>();
+
+ public MutableLiveData getAppInfoData() {
+ return mAppInfoData;
+ }
+
+ public void checkUpdate() {
+ NetInterfaceManager.getInstance().getUpdateObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("checkUpdate", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse appInfoBaseResponse) {
+ Log.e("checkUpdate", "onNext: " + appInfoBaseResponse);
+ if (appInfoBaseResponse.code == 200) {
+ AppInfo appInfo = appInfoBaseResponse.data;
+ mAppInfoData.setValue(appInfo);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("checkUpdate", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("checkUpdate", "onComplete: ");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/xxpatx/os/activity/update/UpdateActivity.java b/app/src/main/java/com/xxpatx/os/activity/update/UpdateActivity.java
new file mode 100644
index 0000000..8d8f70b
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/activity/update/UpdateActivity.java
@@ -0,0 +1,85 @@
+package com.xxpatx.os.activity.update;
+
+import android.content.Intent;
+import android.view.View;
+
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadEntity;
+import com.hjq.toast.Toaster;
+import com.xxpatx.os.R;
+import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
+import com.xxpatx.os.bean.AppInfo;
+import com.xxpatx.os.databinding.ActivityUpdateBinding;
+import com.xxpatx.os.service.main.MainService;
+import com.xxpatx.os.utils.ApkUtils;
+
+import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
+
+public class UpdateActivity extends BaseMvvmActivity {
+
+ private AppInfo mAppInfoData;
+
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_update;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ protected void initView() {
+
+ }
+
+ @Override
+ protected void initData() {
+ Intent intent = getIntent();
+ mAppInfoData = (AppInfo) intent.getSerializableExtra("appUpdateInfo");
+ mViewDataBinding.setAppInfo(mAppInfoData);
+ mViewDataBinding.setMsg("检测到新版本,是否更新");
+ }
+
+
+ public class BtnClick {
+ public void empty(View view) {
+
+ }
+
+ public void exit(View view) {
+ finish();
+ }
+
+ public void upgrade(View view) {
+ startService(new Intent(UpdateActivity.this, MainService.class));
+ if (mAppInfoData != null) {
+ DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(mAppInfoData.getApp_url());
+ if (null != entity) {
+ if (entity.isComplete()) {
+ ApkUtils.installApp(UpdateActivity.this, entity.getFilePath());
+ } else {
+ if (entity.getState() == STATE_RUNNING) {
+ Toaster.show("文件正在下载中");
+ finish();
+ } else {
+ Aria.download(this).resumeAllTask();
+ Toaster.show("正在下载");
+ finish();
+ }
+ }
+ } else {
+ ApkUtils.ariaDownload(UpdateActivity.this, mAppInfoData.getApp_url(), mAppInfoData);
+ Toaster.show("正在下载更新");
+ finish();
+ }
+ }
+
+ }
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/update/UpdateViewModel.java b/app/src/main/java/com/xxpatx/os/activity/update/UpdateViewModel.java
new file mode 100644
index 0000000..e7960c9
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/activity/update/UpdateViewModel.java
@@ -0,0 +1,18 @@
+package com.xxpatx.os.activity.update;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.xxpatx.os.base.mvvm.BaseViewModel;
+import com.xxpatx.os.databinding.ActivityUpdateBinding;
+
+public class UpdateViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityUpdateBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/weather/WeatherViewModel.java b/app/src/main/java/com/xxpatx/os/activity/weather/WeatherViewModel.java
index 4d9fcf2..5e2f658 100644
--- a/app/src/main/java/com/xxpatx/os/activity/weather/WeatherViewModel.java
+++ b/app/src/main/java/com/xxpatx/os/activity/weather/WeatherViewModel.java
@@ -25,6 +25,7 @@ import com.xxpatx.os.databinding.ActivityWeatherBinding;
import com.xxpatx.os.manager.AmapManager;
import com.xxpatx.os.network.NetInterfaceManager;
import com.xxpatx.os.utils.ActivationUtil;
+import com.xxpatx.os.utils.WiFiUtils;
import java.lang.reflect.Type;
import java.util.List;
@@ -172,7 +173,9 @@ public class WeatherViewModel extends BaseViewModel mRecordsInfoList;
- private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("MM/dd HH:mm:ss");
+ private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("HH:mm");
public void setRecordsInfoList(List recordsInfoList) {
this.mRecordsInfoList = recordsInfoList;
@@ -63,13 +63,22 @@ public class CallRecordAdapter extends RecyclerView.Adapter(Arrays.asList(new DesktopIcon[CommonConfig.DESKTOP_LIST_SIZE - mDesktopIcons.size()])));
- }
+ //填充空数据
+// if (mDesktopIcons.size() != CommonConfig.DESKTOP_LIST_SIZE) {
+// mDesktopIcons.addAll(new ArrayList<>(Arrays.asList(new DesktopIcon[CommonConfig.DESKTOP_LIST_SIZE - mDesktopIcons.size()])));
+// }
+
gridLayout = rootView.findViewById(R.id.list);
// if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// gridLayout.set(3, 3);
// } else {
- gridLayout.set(3, 3);
+ gridLayout.set(2, 3);
// }
gridLayout.setGridAdapter(new MyGridLayout.GridAdatper() {
@@ -146,6 +147,29 @@ public class AppListFragment extends BaseFragment {
TextView tv = view.findViewById(R.id.tv);
TextView bg = view.findViewById(R.id.bg);
ConstraintLayout constraintLayout = view.findViewById(R.id.btn_booktag);
+ switch (index % 6) {
+ case 0:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround1));
+ break;
+ case 1:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround2));
+ break;
+ case 2:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround3));
+ break;
+ case 3:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround4));
+ break;
+ case 4:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround5));
+ break;
+ case 5:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround6));
+ break;
+ default:
+ constraintLayout.setBackground(mContext.getDrawable(R.drawable.contact_card_backround1));
+ }
+
DesktopIcon desktopIcon = mDesktopIcons.get(index);
if (desktopIcon != null) {
String pkg = desktopIcon.getPackage();
@@ -233,7 +257,7 @@ public class AppListFragment extends BaseFragment {
case "aios.exit":
int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
if (is_activation == 0) {
- RemoteManager.getInstance().openLauncher3();
+// RemoteManager.getInstance().openLauncher3();
} else {
startScreenLockActivity();
}
diff --git a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
index 9bcff68..3eb52e6 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
@@ -1,7 +1,10 @@
package com.xxpatx.os.fragment.contact;
+import android.content.ContentResolver;
import android.content.Intent;
import android.content.res.Configuration;
+import android.database.Cursor;
+import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
@@ -37,6 +40,7 @@ import com.xxpatx.os.utils.TimeUtils;
import com.xxpatx.os.view.EquallyDividedItemDecoration;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -206,6 +210,10 @@ public class ContactFragment extends BaseMvvmFragment sim = getSIMContacts();
+ if (sim.size() != 0) {
+ contacts.addAll(sim);
+ }
}
mContactAdapter.setContactList(contacts);
}
@@ -269,6 +277,31 @@ public class ContactFragment extends BaseMvvmFragment getSIMContacts() {
+ List contactList = new ArrayList<>();
+ ContentResolver resolver = mContext.getContentResolver();
+ // 获取Sims卡联系人
+ Uri uri = Uri.parse("content://icc/adn");
+ Cursor phoneCursor = resolver.query(uri, null, null, null, null);
+ if (phoneCursor != null) {
+ final int colName = phoneCursor.getColumnIndex(NAME);
+ final int colNumber = phoneCursor.getColumnIndex(NUMBER);
+ while (phoneCursor.moveToNext()) {
+ String number = phoneCursor.getString(colNumber);
+ // 当手机号码为空的或者为空字段 跳过当前循环
+ String username = phoneCursor.getString(colName);
+ Log.e(TAG, "getSIMContacts: number = " + number + " username = " + username);
+ Contact contact = new Contact(username, number, true);
+ contactList.add(contact);
+ }
+ phoneCursor.close();
+ }
+ return contactList;
+ }
+
public class BtnClick {
public void toAdd(View view) {
diff --git a/app/src/main/java/com/xxpatx/os/fragment/control/ControlFragment.java b/app/src/main/java/com/xxpatx/os/fragment/control/ControlFragment.java
index 1ea87ee..6d166ef 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/control/ControlFragment.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/control/ControlFragment.java
@@ -43,7 +43,6 @@ import com.xxpatx.os.bean.FamilyAddress;
import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.databinding.PhoneFragmentControlBinding;
import com.xxpatx.os.manager.AmapManager;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.utils.BrightnessUtils;
import java.lang.reflect.InvocationTargetException;
@@ -351,20 +350,6 @@ public class ControlFragment extends BaseMvvmFragment mExcludeApp = new HashSet() {{
+ this.add("com.android.contacts");
+ this.add("com.android.dialer");
+ this.add("com.mediatek.camera");
+ }};
+
+
private AppStatusManager(Context context) {
if (context == null) {
throw new RuntimeException("Context is NULL");
@@ -70,13 +76,13 @@ public class AppStatusManager {
public void addHidedApp(String pkg) {
this.hidedAppSet.add(pkg);
mMMKV.encode(APP_STATUS_MANAGER_KEY, hidedAppSet);
-// mContext.sendBroadcast(new Intent(OldMainActivity.ACTION_PACKAGE_HIDE));
+ mContext.sendBroadcast(new Intent(MainActivity.ACTION_PACKAGE_HIDE));
}
public void removeHidedApp(String pkg) {
this.hidedAppSet.remove(pkg);
mMMKV.encode(APP_STATUS_MANAGER_KEY, hidedAppSet);
-// mContext.sendBroadcast(new Intent(OldMainActivity.ACTION_PACKAGE_HIDE));
+ mContext.sendBroadcast(new Intent(MainActivity.ACTION_PACKAGE_HIDE));
}
public List getPackageList() {
@@ -89,6 +95,9 @@ public class AppStatusManager {
List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0);
for (ResolveInfo packageInfo : resolveinfoList) {
String pkg = packageInfo.activityInfo.packageName;
+ if (mExcludeApp.contains(pkg)) {
+ continue;
+ }
if (hidedAppSet.contains(pkg)) {
Log.e(TAG, "getPackageList: " + pkg);
DailyAppBean appSelectBean = new DailyAppBean(packageInfo.activityInfo.loadLabel(pm).toString(),
diff --git a/app/src/main/java/com/xxpatx/os/manager/RemoteManager.java b/app/src/main/java/com/xxpatx/os/manager/RemoteManager.java
deleted file mode 100644
index 1e1124c..0000000
--- a/app/src/main/java/com/xxpatx/os/manager/RemoteManager.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package com.xxpatx.os.manager;
-
-import android.annotation.SuppressLint;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Log;
-
-import com.tencent.bugly.crashreport.CrashReport;
-import com.tencent.mmkv.MMKV;
-import com.xxpatx.os.config.CommonConfig;
-import com.xxpatx.sn.IGetInfoInterface;
-
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-public class RemoteManager {
- private static final String TAG = "RemoteManager";
-
- private static final String SN_KEY = "sn_serial_key";
- private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
-
- @SuppressLint("StaticFieldLeak")
- private static RemoteManager sInstance;
- private Context mContext;
- private static boolean mServiceConnected = false;
-
- private IGetInfoInterface mIGetInfoInterface;
- private ServiceConnection mIGetInfoConnection;
-
- private RemoteManager(Context context) {
- if (context == null) {
- throw new RuntimeException("Context is NULL");
- }
- this.mContext = context;
- mIGetInfoConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- Log.e(TAG, "onServiceConnected: mIGetInfoConnection");
- mIGetInfoInterface = IGetInfoInterface.Stub.asInterface(service);
- mServiceConnected = true;
- for (ConnectedListener listener : mListeners) {
- if (listener != null) {
- listener.onRemoteConnected();
- }
- }
- try {
- String sn = mIGetInfoInterface.getSerial();
- CrashReport.setDeviceModel(mContext, sn);
- mMMKV.encode(SN_KEY, sn);
- Log.e(TAG, "onServiceConnected: sn = " + sn);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- Log.e(TAG, "onServiceDisconnected: mIGetInfoConnection");
- mIGetInfoInterface = null;
- mServiceConnected = false;
- bindInfoService();
- }
- };
- bindInfoService();
- }
-
- public static void init(Context context) {
- if (sInstance == null) {
- Log.e(TAG, "init: ");
- sInstance = new RemoteManager(context);
- }
- }
-
- public static RemoteManager getInstance() {
- if (sInstance == null) {
- throw new IllegalStateException("You must be init RemoteManager first");
- }
- return sInstance;
- }
-
- public static boolean isServiceConnected() {
- return mServiceConnected;
- }
-
- public interface ConnectedListener {
- void onRemoteConnected();
- }
-
- private static Set mListeners = new CopyOnWriteArraySet<>();
-
- public static void setListener(ConnectedListener listener) {
- mListeners.add(listener);
- if (mServiceConnected) {
- listener.onRemoteConnected();
- }
- }
-
- public static void removeListener(ConnectedListener listener) {
- mListeners.remove(listener);
- }
-
- public void bindInfoService() {
- if (mIGetInfoInterface == null) {
- //这是连接aidl服务的代码
- Intent intent = new Intent();
- intent.setAction("com.xxpatx.sn.IGetInfoInterface");
- intent.setPackage("com.xxpatx.sn");
- intent.setComponent(new ComponentName("com.xxpatx.sn", "com.xxpatx.sn.service.RemoteService"));
- mContext.bindService(intent, mIGetInfoConnection, Context.BIND_AUTO_CREATE);
- }
- }
-
- /**
- * @return 获取sn
- */
- public String getSerial() {
-// if (BuildConfig.DEBUG) return "MTK13220282310";
- if (mIGetInfoInterface != null) {
- try {
- return mIGetInfoInterface.getSerial();
- } catch (Exception e) {
- Log.e(TAG, "getSerial: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- return mMMKV.decodeString(SN_KEY, "");
- }
-
- public boolean putSystemInt(String name, int value) {
- if (mIGetInfoInterface != null) {
- try {
- return mIGetInfoInterface.SystemPutInt(name, value);
- } catch (Exception e) {
- Log.e(TAG, "putSystemInt: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- return false;
- }
-
- public void killBackgroundProcesses(String pkg) {
- if (mIGetInfoInterface != null) {
- try {
- mIGetInfoInterface.killBackgroundProcesses(pkg);
- } catch (Exception e) {
- Log.e(TAG, "killBackgroundProcesses: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- }
-
- public String getConnectWifiSsid() {
- if (mIGetInfoInterface != null) {
- try {
- return mIGetInfoInterface.getWifiSsid();
- } catch (Exception e) {
- Log.e(TAG, "killBackgroundProcesses: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- return "获取失败";
- }
-
- public void openLauncher3() {
- if (mIGetInfoInterface != null) {
- try {
- mIGetInfoInterface.openLauncher3();
- } catch (Exception e) {
- Log.e(TAG, "openLauncher3: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- }
-
- public void setDefaultDesktop(String pkgName, String className) {
- if (mIGetInfoInterface != null) {
- try {
- mIGetInfoInterface.setDefaultDesktop(pkgName, className);
- } catch (Exception e) {
- Log.e(TAG, "setDefaultDesktop: " + e.getMessage());
- }
- } else {
- bindInfoService();
- }
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java
index 0a635c6..52c7917 100644
--- a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java
@@ -15,9 +15,11 @@ import com.uiui.video.bean.VideoInfo;
import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.alarm.AlarmClockData;
import com.xxpatx.os.alarm.AlarmUtils;
+import com.xxpatx.os.bean.ActivationBean;
import com.xxpatx.os.bean.ActivityBean;
import com.xxpatx.os.bean.AddressInfo;
import com.xxpatx.os.bean.AlarmClockId;
+import com.xxpatx.os.bean.AppInfo;
import com.xxpatx.os.bean.ArticleList;
import com.xxpatx.os.bean.BaiduMapGeoBean;
import com.xxpatx.os.bean.BaseResponse;
@@ -45,11 +47,11 @@ import com.xxpatx.os.disklrucache.CacheHelper;
import com.xxpatx.os.gson.GsonUtils;
import com.xxpatx.os.manager.ConnectManager;
import com.xxpatx.os.manager.ConnectMode;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.network.api.amap.GeocodingApi;
import com.xxpatx.os.network.api.qweather.LookupApi;
import com.xxpatx.os.network.api.uiui.ActivityListApi;
import com.xxpatx.os.network.api.uiui.AddressIndexApi;
+import com.xxpatx.os.network.api.uiui.AppUpdate;
import com.xxpatx.os.network.api.uiui.AppUsageRecordApi;
import com.xxpatx.os.network.api.uiui.ArticleCategorysListApi;
import com.xxpatx.os.network.api.uiui.ArticleListApi;
@@ -63,6 +65,7 @@ import com.xxpatx.os.network.api.uiui.GoodsTypeApi;
import com.xxpatx.os.network.api.uiui.GoodsTypeListApi;
import com.xxpatx.os.network.api.uiui.HealthCodeApi;
import com.xxpatx.os.network.api.uiui.KnowledgeVideoListApi;
+import com.xxpatx.os.network.api.uiui.SnIsActivationApi;
import com.xxpatx.os.network.api.uiui.contact.MailListAddApi;
import com.xxpatx.os.network.api.uiui.contact.MailListDeleteApi;
import com.xxpatx.os.network.api.uiui.RegionListApi;
@@ -94,6 +97,7 @@ import com.xxpatx.os.network.api.uiui.sn.SosRecordApi;
import com.xxpatx.os.network.api.uiui.sn.UpdateAddressApi;
import com.xxpatx.os.network.api.uiui.sn.UpdateAlarmClockApi;
import com.xxpatx.os.network.interceptor.RepeatRequestInterceptor;
+import com.xxpatx.os.utils.Utils;
import java.io.File;
import java.lang.reflect.Type;
@@ -323,119 +327,119 @@ public class NetInterfaceManager {
*/
public Observable> getSnInfoControl() {
return mRetrofit.create(SnInfoApi.class)
- .getSninfo(RemoteManager.getInstance().getSerial())
+ .getSninfo(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getFamilyAddressControl() {
return mRetrofit.create(FamilyAddressApi.class)
- .getFamilyAddress(RemoteManager.getInstance().getSerial())
+ .getFamilyAddress(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getUserAvatarInfoControl() {
return mRetrofit.create(UserInfoControl.class)
- .getUserAvatarInfo(RemoteManager.getInstance().getSerial())
+ .getUserAvatarInfo(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getRunningAppObservable(String json) {
return mRetrofit.create(RunNewApp.class)
- .sendRunningInfo(RemoteManager.getInstance().getSerial(), json)
+ .sendRunningInfo(Utils.getSerial(), json)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getsettingControl() {
return mRetrofit.create(SettingApi.class)
- .getSetting(RemoteManager.getInstance().getSerial())
+ .getSetting(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getSOSRecordObservable(String longitude, String latitude, String address) {
return mRetrofit.create(SosRecordApi.class)
- .sendSosRecord(RemoteManager.getInstance().getSerial(), longitude, latitude, address)
+ .sendSosRecord(Utils.getSerial(), longitude, latitude, address)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getUpdateAlarmObservable(int id) {
return mRetrofit.create(UpdateAlarmClockApi.class)
- .updateAlarm(RemoteManager.getInstance().getSerial(), id)
+ .updateAlarm(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getUpdateDesktopObservable(String jsonArray) {
return mRetrofit.create(UpdateDesktopApi.class)
- .updateLayout(RemoteManager.getInstance().getSerial(), jsonArray)
+ .updateLayout(Utils.getSerial(), jsonArray)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getDesktopLayoutObservable() {
return mRetrofit.create(GetDesktopApi.class)
- .getDesktopLayout(RemoteManager.getInstance().getSerial())
+ .getDesktopLayout(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getGoodsListObservable() {
return mRetrofit.create(GoodsListApi.class)
- .getGoodsList(RemoteManager.getInstance().getSerial())
+ .getGoodsList(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getGoodsListObservable(int type) {
return mRetrofit.create(GoodsTypeListApi.class)
- .getGoodsList(RemoteManager.getInstance().getSerial(), type)
+ .getGoodsList(Utils.getSerial(), type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getCategorysObservable() {
return mRetrofit.create(CategorysApi.class)
- .getArticleCategorys(RemoteManager.getInstance().getSerial())
+ .getArticleCategorys(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getArticleListObservable() {
return mRetrofit.create(ArticleListApi.class)
- .getArticleList(RemoteManager.getInstance().getSerial())
+ .getArticleList(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getArticleListObservable(int id) {
return mRetrofit.create(ArticleCategorysListApi.class)
- .getArticleList(RemoteManager.getInstance().getSerial(), id)
+ .getArticleList(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getContactListObservable() {
return mRetrofit.create(GetMailList.class)
- .getContact(RemoteManager.getInstance().getSerial())
+ .getContact(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getAdminSnSettingObservable() {
return mRetrofit.create(GetAdminSnSettingApi.class)
- .getAdminSnSetting(RemoteManager.getInstance().getSerial())
+ .getAdminSnSetting(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getUpdateAppIconObservable(String pkg, String label, int type) {
return mRetrofit.create(UpdateAppIconApi.class)
- .appIconUpdate(RemoteManager.getInstance().getSerial(), pkg, type, label)
+ .appIconUpdate(Utils.getSerial(), pkg, type, label)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -456,7 +460,7 @@ public class NetInterfaceManager {
public Observable getMailListDeleteObservable(String id) {
return mRetrofit.create(MailListDeleteApi.class)
- .deleteMailList(RemoteManager.getInstance().getSerial(), id)
+ .deleteMailList(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -476,7 +480,7 @@ public class NetInterfaceManager {
public Observable>> getAlarmClockObservable() {
return mRetrofit
.create(AlarmClockApi.class)
- .getAlarmClock(RemoteManager.getInstance().getSerial(), 0)
+ .getAlarmClock(Utils.getSerial(), 0)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -484,7 +488,7 @@ public class NetInterfaceManager {
public Observable>> getAlarmClockObservable(int type) {
return mRetrofit
.create(AlarmClockApi.class)
- .getAlarmClock(RemoteManager.getInstance().getSerial(), type)
+ .getAlarmClock(Utils.getSerial(), type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -496,6 +500,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable> getAlarmClockAddObservable(Map params) {
+ return mRetrofit.create(AlarmClockAddApi.class)
+ .addAlarmClock(params)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public Observable getAlarmClockEditObservable(Map params, MultipartBody.Part body) {
return mRetrofit.create(AlarmClockEditApi.class)
.editAlarmClock(params, body)
@@ -505,28 +516,28 @@ public class NetInterfaceManager {
public Observable> getAlarmClockByIdObservable(int id) {
return mRetrofit.create(AlarmClockQueryApi.class)
- .getAlarmClockById(RemoteManager.getInstance().getSerial(), id)
+ .getAlarmClockById(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable deleteAlarmClockObservable(int id) {
return mRetrofit.create(AlarmClockDeleteApi.class)
- .alarmClockDelete(RemoteManager.getInstance().getSerial(), id)
+ .alarmClockDelete(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getLivenVideoListObservable() {
return mRetrofit.create(LivenVideoListApi.class)
- .getLivenVideoList(RemoteManager.getInstance().getSerial())
+ .getLivenVideoList(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getKnowledgeVideoListObservable() {
return mRetrofit.create(KnowledgeVideoListApi.class)
- .getKnowledgeVideoList(RemoteManager.getInstance().getSerial())
+ .getKnowledgeVideoList(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -540,7 +551,7 @@ public class NetInterfaceManager {
public Observable> getServeObservable() {
return mRetrofit.create(ServeApi.class)
- .getServe(RemoteManager.getInstance().getSerial())
+ .getServe(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -554,54 +565,68 @@ public class NetInterfaceManager {
public Observable> getOrderPayObservable(String order_sn, String order_id) {
return mRetrofit.create(OrderPayApi.class)
- .orderPay(RemoteManager.getInstance().getSerial(), order_sn, order_id, BuildConfig.APPLICATION_ID)
+ .orderPay(Utils.getSerial(), order_sn, order_id, BuildConfig.APPLICATION_ID)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getOrderPayCheckObservable(String order_sn, String order_id) {
return mRetrofit.create(OrderPayCheckApi.class)
- .checkOrder(RemoteManager.getInstance().getSerial(), order_sn, order_id)
+ .checkOrder(Utils.getSerial(), order_sn, order_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getAllOrderObservable() {
return mRetrofit.create(AllOrderApi.class)
- .getOrderIndex(RemoteManager.getInstance().getSerial())
+ .getOrderIndex(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getOrderIndexObservable(int status) {
return mRetrofit.create(OrderIndexApi.class)
- .getOrderIndex(RemoteManager.getInstance().getSerial(), status)
+ .getOrderIndex(Utils.getSerial(), status)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable> getOrderExpressObservable(String order_sn, String order_id) {
return mRetrofit.create(OrderExpressApi.class)
- .getOrderExpress(RemoteManager.getInstance().getSerial(), order_sn, order_id)
+ .getOrderExpress(Utils.getSerial(), order_sn, order_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable>> getAddressIndexObservable() {
return mRetrofit.create(AddressIndexApi.class)
- .getAddressList(RemoteManager.getInstance().getSerial())
+ .getAddressList(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable getUpdateAddressObservable(String address, double longitude, double latitude) {
return mRetrofit.create(UpdateAddressApi.class)
- .updateAddress(RemoteManager.getInstance().getSerial(), address, longitude, latitude)
+ .updateAddress(Utils.getSerial(), address, longitude, latitude)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable> getSnIsActivationObservable() {
+ return mRetrofit.create(SnIsActivationApi.class)
+ .getSnIsActivation(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable> getUpdateObservable() {
+ return mRetrofit.create(AppUpdate.class)
+ .getAppUpdate(BuildConfig.APPLICATION_ID, "0", 1)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public RegionListApi getRegionListApi() {
return mRetrofit.create(RegionListApi.class);
}
@@ -616,7 +641,7 @@ public class NetInterfaceManager {
public Observable> getUserIDObservable() {
return mRetrofit.create(GetUserIDApi.class)
- .getUserID(RemoteManager.getInstance().getSerial())
+ .getUserID(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -683,7 +708,7 @@ public class NetInterfaceManager {
public Observable>> getActivityListObservable() {
return mRetrofit.create(ActivityListApi.class)
- .getActivityList(RemoteManager.getInstance().getSerial(), 1, 1, getUserId())
+ .getActivityList(Utils.getSerial(), 1, 1, getUserId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -793,7 +818,7 @@ public class NetInterfaceManager {
public Observable>> getDemandListObservable() {
return mRetrofit.create(DemandListApi.class)
- .getDemandList(RemoteManager.getInstance().getSerial(), 1, 1, getUserId())
+ .getDemandList(Utils.getSerial(), 1, 1, getUserId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -913,7 +938,7 @@ public class NetInterfaceManager {
public Observable>> getHealthCodeObservable() {
return mRetrofit.create(HealthCodeApi.class)
- .getArticleDetails(RemoteManager.getInstance().getSerial())
+ .getArticleDetails(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
diff --git a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
index 3c4f357..d729550 100644
--- a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
+++ b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
@@ -21,6 +21,8 @@ public class UrlAddress {
* 新接口
* SN
*/
+ /*获取设备是否激活*/
+ public static final String GET_SN_IS_ACTIVATION = "sn/getSnIsActivation";
/*爱心提醒通知成功接口*/
public static final String UPDATE_ALARM_CLOCK = "updateAlarmClock";
/*上传截屏图片*/
@@ -33,7 +35,8 @@ public class UrlAddress {
public static final String UPDATE_ADDRESS = "sn/update-address";
/*获取设备家庭地址*/
public static final String FAMILY_ADDRESS = "sn/family-address";
-
+ /*根据包名获取更新*/
+ public final static String GET_NEWESTAPPUPDATE = "app/newestAppUpdate";
/*获取抢购列表*/
public static final String GET_GOODS_LIST = "getGoodsList";
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/AppUpdate.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/AppUpdate.java
new file mode 100644
index 0000000..330e47a
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/AppUpdate.java
@@ -0,0 +1,18 @@
+package com.xxpatx.os.network.api.uiui;
+
+import com.xxpatx.os.bean.AppInfo;
+import com.xxpatx.os.bean.BaseResponse;
+import com.xxpatx.os.network.UrlAddress;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface AppUpdate {
+ @GET(UrlAddress.GET_NEWESTAPPUPDATE)
+ Observable> getAppUpdate(
+ @Query("packageName") String packageName,
+ @Query("versionCode") String versionCode,
+ @Query("type") int type
+ );
+}
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/SnIsActivationApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/SnIsActivationApi.java
new file mode 100644
index 0000000..747dd19
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/SnIsActivationApi.java
@@ -0,0 +1,16 @@
+package com.xxpatx.os.network.api.uiui;
+
+import com.xxpatx.os.bean.ActivationBean;
+import com.xxpatx.os.bean.BaseResponse;
+import com.xxpatx.os.network.UrlAddress;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface SnIsActivationApi {
+ @GET(UrlAddress.GET_SN_IS_ACTIVATION)
+ Observable> getSnIsActivation(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockAddApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockAddApi.java
index 5b1eff8..23de0ea 100644
--- a/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockAddApi.java
+++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockAddApi.java
@@ -20,4 +20,9 @@ public interface AlarmClockAddApi {
@QueryMap Map params,
@Part MultipartBody.Part body
);
+
+ @POST(UrlAddress.ALARM_CLOCK_ADD)
+ Observable> addAlarmClock(
+ @QueryMap Map params
+ );
}
diff --git a/app/src/main/java/com/xxpatx/os/service/NotificationService.java b/app/src/main/java/com/xxpatx/os/service/NotificationService.java
index 1b29bf6..f67ca7d 100644
--- a/app/src/main/java/com/xxpatx/os/service/NotificationService.java
+++ b/app/src/main/java/com/xxpatx/os/service/NotificationService.java
@@ -24,7 +24,12 @@ public class NotificationService extends NotificationListenerService {
StatusBarNotification[] statusBarNotifications = getActiveNotifications();
for (StatusBarNotification sbn : statusBarNotifications) {
String pkg = sbn.getPackageName();
- Log.e(TAG, "onListenerUpdate: " + pkg);
+ if ("android".equals(pkg)
+ || "cn.etouch.ecalendar".equals(pkg)
+ ) {
+ continue;
+ }
+ Log.e(TAG, "onListenerUpdate: pkg = " + pkg);
if (notificationMap.get(pkg) == null) {
notificationMap.put(pkg, new ArrayList<>());
notificationMap.get(pkg).add(sbn);
@@ -59,7 +64,7 @@ public class NotificationService extends NotificationListenerService {
@Override
public void onListenerConnected() {
super.onListenerConnected();
- Log.e(TAG, "onListenerUpdate: " + getActiveNotifications().length);
+ Log.e(TAG, "onListenerConnected: length = " + getActiveNotifications().length);
updateNotification();
for (NotificationListener listener : mListener) {
listener.onListenerUpdate();
diff --git a/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java b/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
index ca65bdf..3bbacf5 100644
--- a/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
+++ b/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
@@ -44,7 +44,7 @@ public class WeAccessibilityService extends AccessibilityService {
public static final int TYPE_VOICE = 0;
public static final int TYPE_VIDEO = 1;
- private static final int WAIT_TIME = 500;
+ private static final int WAIT_TIME = 1000;
private int mCallType = TYPE_VOICE;
@@ -106,7 +106,6 @@ public class WeAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
- Log.e(TAG, "onAccessibilityEvent: ");
Log.v(TAG, "onAccessibilityEvent: event = " + event.toString());
if (finished) {
finished = false;
@@ -156,7 +155,6 @@ public class WeAccessibilityService extends AccessibilityService {
break;
case CLICK_TAG:
step(Property.TEXT, mTagName, Step.CLICK_NAME);
-
break;
case CLICK_NAME://点击item
step(Property.TEXT, mName, Step.CLICK_INFO);
@@ -164,7 +162,6 @@ public class WeAccessibilityService extends AccessibilityService {
case CLICK_INFO://进入个人信息页面
step(Property.TEXT, DIALER_TEXT, Step.CLICK_CALL);
break;
-
case CLICK_CALL://打视频或者电话
if (mCallType == TYPE_VIDEO) {
step(Property.TEXT, VIDEO_TEXT, Step.WAITING);
diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java b/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java
index 53f85a3..486b890 100644
--- a/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java
+++ b/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java
@@ -1,6 +1,7 @@
package com.xxpatx.os.service.main;
import android.content.Context;
+import android.text.TextUtils;
import android.util.Log;
import com.tencent.mmkv.MMKV;
@@ -11,8 +12,8 @@ import com.xxpatx.os.alarm.AlarmUtils;
import com.xxpatx.os.bean.AlarmClockId;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.config.CommonConfig;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.network.NetInterfaceManager;
+import com.xxpatx.os.utils.Utils;
import java.io.File;
import java.util.ArrayList;
@@ -80,75 +81,86 @@ public class MainSPresenter implements MainSContact.Presenter {
addFinishStatu = 0;
for (AlarmClockData alarmClockData : localAddAlarm) {
Map params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("time", alarmClockData.getTime());
params.put("type", String.valueOf(alarmClockData.getType()));
params.put("title", alarmClockData.getTitle());
params.put("remind_type", "0");
params.put("is_onoff", "1");
- File picFile = new File(alarmClockData.getFile());
- MediaType mediaType = MediaType.Companion.parse("image/png");
- RequestBody requestBody = RequestBody.Companion.create(picFile, mediaType);
- MultipartBody.Part body = MultipartBody.Part.createFormData("file", picFile.getName(), requestBody);
-
- NetInterfaceManager.getInstance().getAlarmClockAddObservable(params, body)
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
- .subscribe(new Observer>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("addAlarmClock", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse alarmClockIdBaseResponse) {
- Log.e("addAlarmClock", "onNext: " + alarmClockIdBaseResponse);
- if (alarmClockIdBaseResponse.code == 200) {
- alarmClockData.setIs_local(false);
- AlarmUtils.getInstance().updateAlarmClock(alarmClockData, alarmClockIdBaseResponse.data.getId());
+ if (TextUtils.isEmpty(alarmClockData.getFile())) {
+ NetInterfaceManager.getInstance().getAlarmClockAddObservable(params)
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("addAlarmClock", "onSubscribe: ");
}
- }
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("addAlarmClock", "onError: " + e.getMessage());
- onComplete();
- }
-
- @Override
- public void onComplete() {
- addFinishStatu += 1;
- Log.e("addAlarmClock", "onComplete: " + addFinishStatu);
- if (addFinishStatu == localAddAlarm.size()) {
- mView.addAlarmClockFinish();
+ @Override
+ public void onNext(@NonNull BaseResponse alarmClockIdBaseResponse) {
+ Log.e("addAlarmClock", "onNext: " + alarmClockIdBaseResponse);
+ if (alarmClockIdBaseResponse.code == 200) {
+ alarmClockData.setIs_local(false);
+ AlarmUtils.getInstance().updateAlarmClock(alarmClockData, alarmClockIdBaseResponse.data.getId());
+ }
}
- }
- });
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("addAlarmClock", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ addFinishStatu += 1;
+ Log.e("addAlarmClock", "onComplete: " + addFinishStatu);
+ if (addFinishStatu == localAddAlarm.size()) {
+ mView.addAlarmClockFinish();
+ }
+ }
+ });
+ } else {
+ File picFile = new File(alarmClockData.getFile());
+ MediaType mediaType = MediaType.Companion.parse("image/png");
+ RequestBody requestBody = RequestBody.Companion.create(picFile, mediaType);
+ MultipartBody.Part body = MultipartBody.Part.createFormData("file", picFile.getName(), requestBody);
+
+ NetInterfaceManager.getInstance().getAlarmClockAddObservable(params, body)
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("addAlarmClock", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse alarmClockIdBaseResponse) {
+ Log.e("addAlarmClock", "onNext: " + alarmClockIdBaseResponse);
+ if (alarmClockIdBaseResponse.code == 200) {
+ alarmClockData.setIs_local(false);
+ AlarmUtils.getInstance().updateAlarmClock(alarmClockData, alarmClockIdBaseResponse.data.getId());
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("addAlarmClock", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ addFinishStatu += 1;
+ Log.e("addAlarmClock", "onComplete: " + addFinishStatu);
+ if (addFinishStatu == localAddAlarm.size()) {
+ mView.addAlarmClockFinish();
+ }
+ }
+ });
+ }
}
-// Observable.concat(getAddObservableList(localAddAlarm))
-// .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
-// .subscribe(new Observer>() {
-// @Override
-// public void onSubscribe(@NonNull Disposable d) {
-// Log.e("addAlarmClock", "onSubscribe: ");
-// }
-//
-// @Override
-// public void onNext(@NonNull BaseResponse baseResponse) {
-// Log.e("addAlarmClock", "onSubscribe: " + baseResponse);
-// }
-//
-// @Override
-// public void onError(@NonNull Throwable e) {
-// Log.e("addAlarmClock", "onError: " + e.getMessage());
-// onComplete();
-// }
-//
-// @Override
-// public void onComplete() {
-// Log.e("addAlarmClock", "onSubscribe: ");
-// }
-// });
}
}
@@ -168,7 +180,7 @@ public class MainSPresenter implements MainSContact.Presenter {
private Observable> getAddObservable(AlarmClockData alarmClockData) {
Map params = new HashMap<>();
- params.put("sn", RemoteManager.getInstance().getSerial());
+ params.put("sn", Utils.getSerial());
params.put("time", alarmClockData.getTime());
params.put("type", String.valueOf(alarmClockData.getType()));
params.put("title", alarmClockData.getTitle());
diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainService.java b/app/src/main/java/com/xxpatx/os/service/main/MainService.java
index 39fc39f..c90a310 100644
--- a/app/src/main/java/com/xxpatx/os/service/main/MainService.java
+++ b/app/src/main/java/com/xxpatx/os/service/main/MainService.java
@@ -21,6 +21,8 @@ import com.arialyy.annotations.Download;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.task.DownloadTask;
import com.blankj.utilcode.util.NetworkUtils;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
import com.hjq.toast.Toaster;
import com.shehuan.niv.NiceImageView;
import com.tencent.mmkv.MMKV;
@@ -31,19 +33,21 @@ import com.xxpatx.os.activity.noti.NoticeActivity;
import com.xxpatx.os.alarm.AlarmClockData;
import com.xxpatx.os.alarm.AlarmUtils;
import com.xxpatx.os.base.rx.BaseRxService;
+import com.xxpatx.os.bean.AppInfo;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.config.CommonConfig;
-import com.xxpatx.os.manager.RemoteManager;
import com.xxpatx.os.network.NetInterfaceManager;
import com.xxpatx.os.receiver.SmsReceiver;
import com.xxpatx.os.utils.ApkUtils;
import com.xxpatx.os.utils.AppUsedTimeUtils;
import com.xxpatx.os.utils.CmdUtil;
import com.xxpatx.os.utils.ForegroundAppUtil;
+import com.xxpatx.os.utils.Utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
@@ -350,7 +354,7 @@ public class MainService extends BaseRxService
private static Observable getSendFile(String path, MultipartBody.Part body) {
return NetInterfaceManager.getInstance()
.getScreenshotApi()
- .sendScreenshot(RemoteManager.getInstance().getSerial(), body)
+ .sendScreenshot(Utils.getSerial(), body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@@ -466,7 +470,7 @@ public class MainService extends BaseRxService
// AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
if (!TextUtils.isEmpty(packagename)) {
NetInterfaceManager.getInstance().getAppUsageRecordControl()
- .sendappUsageRecord(RemoteManager.getInstance().getSerial(),
+ .sendappUsageRecord(Utils.getSerial(),
ApkUtils.getAppNameByPackage(context, packagename),
packagename,
AppUsedTimeUtils.getInstance().getStartTime() / 1000,
@@ -595,8 +599,8 @@ public class MainService extends BaseRxService
mBallParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mBallParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
// mBallParams.gravity = Gravity.TOP;
- int x = mMMKV.decodeInt(Float_Window_X, 0);
- int y = mMMKV.decodeInt(Float_Window_Y, 0);
+ int x = mMMKV.decodeInt(Float_Window_X, 360);
+ int y = mMMKV.decodeInt(Float_Window_Y, -783);
mBallParams.x = x;
mBallParams.y = y;
mWindowManager.addView(mBallView, mBallParams);
@@ -608,6 +612,7 @@ public class MainService extends BaseRxService
for (String pkg : pkgList) {
if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID)
|| "com.xxpatx.sn".equals(pkg)
+ || "com.tencent.mm".equals(pkg)
) {
continue;
}
@@ -681,7 +686,8 @@ public class MainService extends BaseRxService
lastY = nowY;
break;
case MotionEvent.ACTION_UP:
-
+ Log.e(TAG, "onTouch: x = " + mBallParams.x);
+ Log.e(TAG, "onTouch: y = " + mBallParams.y);
break;
default:
}
@@ -703,10 +709,34 @@ public class MainService extends BaseRxService
void taskComplete(DownloadTask task) {
// 在这里处理任务完成的状态
Log.e(TAG, "taskComplete: " + task.getFilePath());
+ String jsonString = task.getExtendField();
+ Log.e(TAG, "taskComplete: " + "下载完成:" + jsonString);
+ AppInfo ariaDownloadInfo = getAriaDownloadInfo(jsonString);
+ if (ariaDownloadInfo != null) {
+ ApkUtils.installApp(MainService.this, task.getFilePath());
+ Toaster.show("下载完成: " + "\t" + ariaDownloadInfo.getApp_name());
+ }
}
@Download.onTaskFail
void taskFail(DownloadTask task, Exception e) {
}
+
+ private AppInfo getAriaDownloadInfo(String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ Gson gson = new Gson();
+ Type type = new TypeToken() {
+ }.getType();
+ AppInfo ariaDownloadInfo = null;
+ try {
+ ariaDownloadInfo = gson.fromJson(jsonString, type);
+ } catch (Exception e) {
+ Log.e(TAG, "getAriaDownloadInfo: " + e.getMessage());
+ }
+ return ariaDownloadInfo;
+ } else {
+ return null;
+ }
+ }
}
diff --git a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java
index 09265f8..67ea71b 100644
--- a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java
+++ b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java
@@ -19,19 +19,27 @@ import android.util.Log;
import androidx.annotation.RequiresApi;
+import com.arialyy.aria.core.Aria;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.activity.quickapp.QuickAppActivity;
+import com.xxpatx.os.bean.AppInfo;
import com.xxpatx.os.bean.DesktopIcon;
import com.xxpatx.os.config.CommonConfig;
+import com.xxpatx.os.gson.GsonUtils;
import com.xxpatx.os.manager.AppManager;
import com.xxpatx.os.manager.AppStatusManager;
import com.xxpatx.os.receiver.InstallResultReceiver;
import com.xxpatx.os.shortcut.ShortcutPkgInfo;
import com.xxpatx.os.shortcut.ShortcutUtils;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.Collator;
@@ -663,6 +671,141 @@ public class ApkUtils {
}
}
+ /**
+ * 通过路径安装APK,兼容Android 9以上
+ *
+ * @param context 上下文
+ * @param filePath apk文件路径
+ */
+ public static void installApp(Context context, String filePath) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ installAppatPie(context, filePath);
+ } else {
+ installApps(filePath);
+ }
+ }
+
+
+ public static boolean installApps(String apkPath) {
+ Toaster.show("正在安装应用");
+ Process process = null;
+ BufferedReader successResult = null;
+ BufferedReader errorResult = null;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder errorMsg = new StringBuilder();
+ try {
+ process = new ProcessBuilder("pm", "install", "-i", BuildConfig.APPLICATION_ID, "--user", "0", apkPath).start();
+ successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
+ String s;
+ while ((s = successResult.readLine()) != null) {
+ successMsg.append(s);
+ }
+ while ((s = errorResult.readLine()) != null) {
+ errorMsg.append(s);
+ }
+ } catch (Exception e) {
+ Log.e("installApps1", e.getMessage());
+ } finally {
+ try {
+ if (successResult != null) {
+ successResult.close();
+ }
+ if (errorResult != null) {
+ errorResult.close();
+ }
+ } catch (Exception e) {
+ Log.e("installApps2", e.getMessage());
+ }
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ Log.e("result", "" + errorMsg.toString());
+ //如果含有“success”认为安装成功
+ Log.e("installApp", successMsg.toString());
+// if (!successMsg.toString().equalsIgnoreCase("success")) {
+// install(context, new File(apkPath));
+// }
+ return successMsg.toString().equalsIgnoreCase("success");
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public static void installAppatPie(Context context, String apkFilePath) {
+ File file = new File(apkFilePath);
+ PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller
+ .SessionParams.MODE_FULL_INSTALL);
+ sessionParams.setSize(file.length());
+ int sessionId = createSession(packageInstaller, sessionParams);
+ if (sessionId != -1) {
+ boolean copySuccess = copyApkFile(packageInstaller, sessionId, apkFilePath);
+ if (copySuccess) {
+ install(packageInstaller, sessionId, context);
+ }
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static boolean copyApkFile(PackageInstaller pi, int sessionId, String apkFilePath) {
+ boolean success = false;
+ File apkFile = new File(apkFilePath);
+ PackageInstaller.Session session = null;
+ try {
+ session = pi.openSession(sessionId);
+ OutputStream out = session.openWrite("app.apk", 0, apkFile.length());
+ FileInputStream input = new FileInputStream(apkFile);
+ int read = 0;
+ byte[] buffer = new byte[65536];
+// while (read != -1) {
+// read = input.read(buffer);
+// out.write(buffer, 0, read);
+// }
+ while (true) {
+ read = input.read(buffer);
+ if (read == -1) {
+ session.fsync(out);
+ success = true;
+ out.close();
+ input.close();
+ break;
+ }
+ out.write(buffer, 0, read);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.e("fht", "copyApkFile" + e.getMessage());
+ }
+ return success;
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static void install(PackageInstaller packageInstaller, int sessionId, Context context) {
+ try {
+ PackageInstaller.Session session = packageInstaller.openSession(sessionId);
+ Intent intent = new Intent(context, InstallResultReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(
+ context,
+ 1, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+ session.commit(pendingIntent.getIntentSender());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static int createSession(PackageInstaller packageInstaller, PackageInstaller.SessionParams sessionParams) {
+ int sessionId = -1;
+ try {
+ sessionId = packageInstaller.createSession(sessionParams);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return sessionId;
+ }
+
/**
* 静默卸载应用
*
@@ -764,4 +907,65 @@ public class ApkUtils {
return uid / PER_USER_RANGE;
}
+ public static boolean checkAppUpdate(Context context, AppInfo appUpdateInfo) {
+ String packageName = appUpdateInfo.getApp_package();
+ long versionCode = appUpdateInfo.getApp_version_code();
+ return checkAppUpdate(context, packageName, versionCode);
+ }
+
+ public static boolean checkAppUpdate(Context context, String packageName, long versionCode) {
+ PackageInfo packageInfo = null;
+ try {
+ packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (packageInfo == null) {
+ return true;
+ } else {
+ long appVersionCode;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ appVersionCode = packageInfo.getLongVersionCode();
+ } else {
+ appVersionCode = packageInfo.versionCode;
+ }
+ if (appVersionCode < versionCode) {
+ return true;
+ } else {
+ Log.e(TAG, "checkUpdate: " + packageName + "\t已经是最新版");
+ return false;
+ }
+ }
+ }
+
+
+ public static void ariaDownload(Context context, String url, AppInfo ariaDownloadInfo) {
+ Log.e(TAG, "ariaDownload: " + ariaDownloadInfo);
+ String fileName = Utils.getFileNamefromURL(url);
+ String app_md5 = ariaDownloadInfo.getApp_md5();
+ Log.e("ariaDownload", "app_md5 = " + app_md5);
+ File file = new File(Utils.getDownLoadPath(context) + fileName);
+ if (file.exists() && !file.isDirectory()) {
+ String fileMd5 = com.blankj.utilcode.util.FileUtils.getFileMD5ToString(file);
+ Log.e("ariaDownload", "fileMD5 = " + fileMd5);
+ if (fileMd5.equalsIgnoreCase(app_md5)) {
+ installApp(context, file.getAbsolutePath());
+ } else {
+ file.delete();
+ Aria.download(context)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(context) + fileName)
+ .ignoreFilePathOccupy()
+ .setExtendField(GsonUtils.toJSONString(ariaDownloadInfo))
+ .create(); //启动下载}
+ }
+ } else {
+ Aria.download(context)
+ .load(url) //读取下载地址
+ .setFilePath(Utils.getDownLoadPath(context) + fileName)
+ .ignoreFilePathOccupy()
+ .setExtendField(GsonUtils.toJSONString(ariaDownloadInfo))
+ .create(); //启动下载}
+ }
+ }
}
diff --git a/app/src/main/java/com/xxpatx/os/utils/JGYUtils.java b/app/src/main/java/com/xxpatx/os/utils/JGYUtils.java
deleted file mode 100644
index 5e3a959..0000000
--- a/app/src/main/java/com/xxpatx/os/utils/JGYUtils.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.xxpatx.os.utils;
-
-import android.annotation.SuppressLint;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.os.PowerManager;
-
-
-public class JGYUtils {
- private static final String TAG = "JGYUtils";
-
- @SuppressLint("StaticFieldLeak")
- private static JGYUtils sInstance;
- private Context mContext;
- private ContentResolver resolver;
-
- private JGYUtils(Context context) {
- if (context == null) {
- throw new RuntimeException("Context is NULL");
- }
- this.mContext = context;
- this.resolver = mContext.getContentResolver();
- }
-
- public static void init(Context context) {
- if (sInstance == null) {
- sInstance = new JGYUtils(context);
- }
- }
-
- public static JGYUtils getInstance() {
- if (sInstance == null) {
- throw new IllegalStateException("You must be init JGYUtils first");
- }
- return sInstance;
- }
-
- public boolean isScreenOn() {
- PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- //true为打开,false为关闭
- return powerManager.isInteractive();
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/utils/WiFiUtils.java b/app/src/main/java/com/xxpatx/os/utils/WiFiUtils.java
index bfab2ab..aee2118 100644
--- a/app/src/main/java/com/xxpatx/os/utils/WiFiUtils.java
+++ b/app/src/main/java/com/xxpatx/os/utils/WiFiUtils.java
@@ -221,5 +221,21 @@ public class WiFiUtils {
return mWifi.getState() == NetworkInfo.State.CONNECTED;
}
-
+ /**
+ * 判断网络连接状态
+ *
+ * @return true:网络已链接, false:网络已断开连接
+ */
+ public boolean isNetworkConnected() {
+ if (mContext != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) mContext
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mNetworkInfo = mConnectivityManager
+ .getActiveNetworkInfo();
+ if (mNetworkInfo != null) {
+ return mNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
}
diff --git a/app/src/main/java/com/xxpatx/os/view/ToggleButton.java b/app/src/main/java/com/xxpatx/os/view/ToggleButton.java
index 9387841..80765f4 100644
--- a/app/src/main/java/com/xxpatx/os/view/ToggleButton.java
+++ b/app/src/main/java/com/xxpatx/os/view/ToggleButton.java
@@ -8,6 +8,7 @@ import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
+import android.util.Log;
import android.util.TypedValue;
import android.view.View;
@@ -19,6 +20,7 @@ import com.facebook.rebound.SpringUtil;
import com.xxpatx.os.R;
public class ToggleButton extends View {
+ private static final String TAG = "ToggleButton";
private SpringSystem springSystem;
private Spring spring;
/**
@@ -28,11 +30,11 @@ public class ToggleButton extends View {
/**
* 开启颜色
*/
- private int onColor = Color.parseColor("#f62626");
+ private int onColor = Color.parseColor("#32CD32");
/**
* 关闭颜色
*/
- private int offBorderColor = Color.parseColor("#e7e4e4");
+ private int offBorderColor = Color.parseColor("#f62626");
/**
* 灰色带颜色
*/
@@ -168,6 +170,7 @@ public class ToggleButton extends View {
public void toggle(boolean animate) {
toggleOn = !toggleOn;
+ Log.e(TAG, "toggle: toggleOn = " + toggleOn);
takeEffect(animate);
if (listener != null) {
listener.onToggle(toggleOn);
@@ -216,6 +219,7 @@ public class ToggleButton extends View {
}
public int isToggleOn() {
+ Log.e(TAG, "isToggleOn: " + toggleOn);
return toggleOn ? 1 : 0;
}
diff --git a/app/src/main/res/drawable-hdpi/add_contact_back.png b/app/src/main/res/drawable-hdpi/add_contact_back.png
index 764ca06..037718a 100644
Binary files a/app/src/main/res/drawable-hdpi/add_contact_back.png and b/app/src/main/res/drawable-hdpi/add_contact_back.png differ
diff --git a/app/src/main/res/drawable-hdpi/default_avatar.png b/app/src/main/res/drawable-hdpi/default_avatar.png
index ccc71a6..cf4cb6a 100644
Binary files a/app/src/main/res/drawable-hdpi/default_avatar.png and b/app/src/main/res/drawable-hdpi/default_avatar.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_sos.png b/app/src/main/res/drawable-hdpi/home_icon_sos.png
index fd5fb3e..993127f 100644
Binary files a/app/src/main/res/drawable-hdpi/home_icon_sos.png and b/app/src/main/res/drawable-hdpi/home_icon_sos.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
new file mode 100644
index 0000000..b0ec3c1
Binary files /dev/null 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
new file mode 100644
index 0000000..03305eb
Binary files /dev/null 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
new file mode 100644
index 0000000..c1392c1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_call_outgoing.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_delete_contact.png b/app/src/main/res/drawable-hdpi/icon_delete_contact.png
index 22f1528..dd3cd61 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_delete_contact.png and b/app/src/main/res/drawable-hdpi/icon_delete_contact.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_edit_contact.png b/app/src/main/res/drawable-hdpi/icon_edit_contact.png
index 13c3c76..556ac1e 100644
Binary files a/app/src/main/res/drawable-hdpi/icon_edit_contact.png and b/app/src/main/res/drawable-hdpi/icon_edit_contact.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_incoming.png b/app/src/main/res/drawable-hdpi/icon_incoming.png
deleted file mode 100644
index 836c8a8..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_incoming.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_location_refresh.png b/app/src/main/res/drawable-hdpi/icon_location_refresh.png
new file mode 100644
index 0000000..5d92dab
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_location_refresh.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_menu.png b/app/src/main/res/drawable-hdpi/icon_menu.png
new file mode 100644
index 0000000..5ab0435
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_menu.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_missed.png b/app/src/main/res/drawable-hdpi/icon_missed.png
deleted file mode 100644
index 1016ce4..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_missed.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_outgoing.png b/app/src/main/res/drawable-hdpi/icon_outgoing.png
deleted file mode 100644
index a1ed640..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_outgoing.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/icon_record_remove.png b/app/src/main/res/drawable-hdpi/icon_record_remove.png
new file mode 100644
index 0000000..030f7c9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_record_remove.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_remove.png b/app/src/main/res/drawable-hdpi/icon_remove.png
deleted file mode 100644
index ff8c6c8..0000000
Binary files a/app/src/main/res/drawable-hdpi/icon_remove.png and /dev/null 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
new file mode 100644
index 0000000..a999b60
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_sos_dialer.png differ
diff --git a/app/src/main/res/drawable/add_wechat_contact_background.xml b/app/src/main/res/drawable/add_wechat_contact_background.xml
index d409088..cf1247a 100644
--- a/app/src/main/res/drawable/add_wechat_contact_background.xml
+++ b/app/src/main/res/drawable/add_wechat_contact_background.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/app/src/main/res/drawable/badge_bg.xml b/app/src/main/res/drawable/badge_bg.xml
index e952cbe..9fd6511 100644
--- a/app/src/main/res/drawable/badge_bg.xml
+++ b/app/src/main/res/drawable/badge_bg.xml
@@ -6,8 +6,8 @@
android:color="@color/red" />
+ android:topLeftRadius="24dp"
+ android:topRightRadius="24dp"
+ android:bottomLeftRadius="24dp"
+ android:bottomRightRadius="24dp" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dialog_background.xml b/app/src/main/res/drawable/dialog_background.xml
new file mode 100644
index 0000000..eaf60cf
--- /dev/null
+++ b/app/src/main/res/drawable/dialog_background.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/sos_dialer_background.xml b/app/src/main/res/drawable/sos_dialer_background.xml
new file mode 100644
index 0000000..4eb97ec
--- /dev/null
+++ b/app/src/main/res/drawable/sos_dialer_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tv_activation_normnl.xml b/app/src/main/res/drawable/tv_activation_normnl.xml
new file mode 100644
index 0000000..13f8dac
--- /dev/null
+++ b/app/src/main/res/drawable/tv_activation_normnl.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/update_background.xml b/app/src/main/res/drawable/update_background.xml
new file mode 100644
index 0000000..b904dbe
--- /dev/null
+++ b/app/src/main/res/drawable/update_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/update_cancel_background.xml b/app/src/main/res/drawable/update_cancel_background.xml
new file mode 100644
index 0000000..58247be
--- /dev/null
+++ b/app/src/main/res/drawable/update_cancel_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_activation.xml b/app/src/main/res/layout/activity_activation.xml
new file mode 100644
index 0000000..5fe3d9b
--- /dev/null
+++ b/app/src/main/res/layout/activity_activation.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_alarm_port.xml b/app/src/main/res/layout/activity_add_alarm_port.xml
index 23a3923..f57a284 100644
--- a/app/src/main/res/layout/activity_add_alarm_port.xml
+++ b/app/src/main/res/layout/activity_add_alarm_port.xml
@@ -264,6 +264,7 @@
@@ -88,7 +90,8 @@
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
- android:layout_marginTop="16dp"
+ android:layout_marginTop="32dp"
+ android:layout_marginBottom="32dp"
android:onClick="@{click::selectPic}"
android:src="@drawable/default_avatar"
app:is_circle="true"
@@ -105,8 +108,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存至本机"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -145,8 +148,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="姓名"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -163,8 +166,8 @@
android:inputType="text"
android:maxLines="1"
android:singleLine="true"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -203,8 +206,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="号码"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -221,8 +224,8 @@
android:inputType="phone"
android:maxLines="1"
android:singleLine="true"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -242,8 +245,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="设为紧急联系人"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/layout/activity_add_wechat_contact.xml b/app/src/main/res/layout/activity_add_wechat_contact.xml
index 54f1146..1980404 100644
--- a/app/src/main/res/layout/activity_add_wechat_contact.xml
+++ b/app/src/main/res/layout/activity_add_wechat_contact.xml
@@ -14,12 +14,13 @@
+ android:background="#FAF8F8">
@@ -116,8 +117,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="姓名"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -134,8 +135,8 @@
android:inputType="text"
android:maxLines="1"
android:singleLine="true"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -174,8 +175,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="号码"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -192,8 +193,8 @@
android:inputType="phone"
android:maxLines="1"
android:singleLine="true"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -232,8 +233,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="微信"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -251,8 +252,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="@string/app_name"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -272,8 +273,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="设为紧急联系人"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -289,6 +290,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_dailyapp.xml b/app/src/main/res/layout/activity_dailyapp.xml
index 809de2c..2982829 100644
--- a/app/src/main/res/layout/activity_dailyapp.xml
+++ b/app/src/main/res/layout/activity_dailyapp.xml
@@ -6,6 +6,9 @@
+
+ android:background="#FAF8F8">
@@ -137,8 +138,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="姓名"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -156,8 +157,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="@{contact.name}"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -196,8 +197,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="号码"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -215,8 +216,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="@{contact.mobile}"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -255,8 +256,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="微信"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -274,8 +275,8 @@
android:maxLines="1"
android:singleLine="true"
android:text="@{contact.tag}"
- android:textColor="@color/white"
- android:textColorHint="@color/gray"
+ android:textColor="@color/black"
+ android:textColorHint="@color/ok_button"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -295,8 +296,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="设为紧急联系人"
- android:textColor="@color/white"
- android:textSize="16sp"
+ android:textColor="@color/black"
+ android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/layout/activity_emergency.xml b/app/src/main/res/layout/activity_emergency.xml
index 5120623..238912d 100644
--- a/app/src/main/res/layout/activity_emergency.xml
+++ b/app/src/main/res/layout/activity_emergency.xml
@@ -6,25 +6,43 @@
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/imageView18" />
+ android:layout_height="160dp"
+ app:layout_constraintBottom_toTopOf="@+id/constraintLayout7"
+ app:layout_constraintTop_toBottomOf="@+id/textView4"
+ tools:layout_editor_absoluteX="32dp"
+ tools:listitem="@layout/item_sosnumber" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d2d9dbc..877d120 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -44,7 +44,7 @@
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.3" />
+
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.3" />
+
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.3" />
+
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.3" />
+
+
@@ -106,7 +110,7 @@
android:maxLines="1"
android:text='@{float_window_enable?"已开启":"未开启"}'
android:textColor="@{float_window_enable?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -131,9 +135,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:maxLines="1"
- android:text="语音播报"
+ android:text="短信语音播报"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -143,11 +147,10 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
- android:onClick="@{click::testTts}"
android:maxLines="1"
android:text='@{voice_broadcast?"已开启":"未开启"}'
android:textColor="@{voice_broadcast?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -171,9 +174,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:maxLines="1"
- android:text="自动接听"
+ android:text="微信自动接听"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -187,7 +190,7 @@
android:maxLines="1"
android:text='@{auto_accept?"已开启":"未开启"}'
android:textColor="@{auto_accept?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -213,7 +216,7 @@
android:maxLines="1"
android:text="拨号提示音"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -227,7 +230,7 @@
android:maxLines="1"
android:text='@{dial_tone?"已开启":"未开启"}'
android:textColor="@{dial_tone?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -254,7 +257,7 @@
android:maxLines="1"
android:text="网络设置"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -267,7 +270,7 @@
android:maxLines="1"
android:text="未开启"
android:textColor="@color/setting_disable_color"
- android:textSize="28sp"
+ android:textSize="25sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -304,7 +307,7 @@
android:maxLines="1"
android:text="亮度字体设置"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -317,7 +320,7 @@
android:maxLines="1"
android:text="未开启"
android:textColor="@color/setting_disable_color"
- android:textSize="28sp"
+ android:textSize="25sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -354,7 +357,7 @@
android:maxLines="1"
android:text="防误触设置"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -367,7 +370,7 @@
android:maxLines="1"
android:text="未开启"
android:textColor="@color/setting_disable_color"
- android:textSize="28sp"
+ android:textSize="25sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -404,7 +407,7 @@
android:maxLines="1"
android:text="系统其他设置"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -417,7 +420,7 @@
android:maxLines="1"
android:text="未开启"
android:textColor="@color/setting_disable_color"
- android:textSize="28sp"
+ android:textSize="25sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -442,6 +445,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_touch.xml b/app/src/main/res/layout/activity_touch.xml
index bc9f497..d2255f6 100644
--- a/app/src/main/res/layout/activity_touch.xml
+++ b/app/src/main/res/layout/activity_touch.xml
@@ -42,7 +42,7 @@
android:layout_marginStart="16dp"
android:text="防止误触设置"
android:textColor="@color/white"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -88,7 +88,7 @@
android:maxLines="1"
android:text="音量键禁用"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -102,7 +102,7 @@
android:maxLines="1"
android:text='@{disable_key?"已开启":"未开启"}'
android:textColor="@{disable_key?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -128,7 +128,7 @@
android:maxLines="1"
android:text="修改联系人禁用"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -142,7 +142,7 @@
android:maxLines="1"
android:text='@{disable_contact?"已开启":"未开启"}'
android:textColor="@{disable_contact?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -168,7 +168,7 @@
android:maxLines="1"
android:text="设置访问禁用"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -182,7 +182,7 @@
android:maxLines="1"
android:text="未开启"
android:textColor="@color/setting_disable_color"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -207,7 +207,7 @@
android:maxLines="1"
android:text="闹钟设置禁用"
android:textColor="@color/black"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -221,7 +221,7 @@
android:maxLines="1"
android:text='@{disable_clock?"已开启":"未开启"}'
android:textColor="@{disable_clock?@color/setting_enable_color:@color/setting_disable_color}"
- android:textSize="28sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
diff --git a/app/src/main/res/layout/activity_update.xml b/app/src/main/res/layout/activity_update.xml
new file mode 100644
index 0000000..5c97bf5
--- /dev/null
+++ b/app/src/main/res/layout/activity_update.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 c211898..2569715 100644
--- a/app/src/main/res/layout/activity_wechat_call.xml
+++ b/app/src/main/res/layout/activity_wechat_call.xml
@@ -13,6 +13,13 @@
+
+
+
+
+
+ android:onClick="@{click::callWechatVoice}"
+ android:visibility="@{tag==true?View.VISIBLE:View.GONE}">
+ android:onClick="@{click::callWechatVideo}"
+ android:visibility="@{tag==true?View.VISIBLE:View.GONE}">
-
+ app:layout_constraintTop_toTopOf="parent">
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_contact.xml b/app/src/main/res/layout/fragment_contact.xml
index a88b9a0..ba43821 100644
--- a/app/src/main/res/layout/fragment_contact.xml
+++ b/app/src/main/res/layout/fragment_contact.xml
@@ -22,6 +22,7 @@
@@ -92,6 +92,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
+ android:onClick="@{click::toWeather}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
diff --git a/app/src/main/res/layout/fragment_record.xml b/app/src/main/res/layout/fragment_record.xml
index b2dff0c..4a2b7cb 100644
--- a/app/src/main/res/layout/fragment_record.xml
+++ b/app/src/main/res/layout/fragment_record.xml
@@ -20,6 +20,7 @@
android:id="@+id/constraintLayout3"
android:layout_width="match_parent"
android:layout_height="48dp"
+ android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -43,7 +44,7 @@
android:layout_marginEnd="8dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/icon_delete"
+ android:src="@drawable/icon_menu"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -54,6 +55,8 @@
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
+ android:background="#FAF8F8"
+ tools:listitem="@layout/item_call_record"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 018dd7f..cdf29db 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -284,26 +284,39 @@
android:layout_width="330dp"
android:layout_height="144dp"
android:layout_marginTop="12dp"
- android:background="@drawable/setting_card_location_background"
+ android:background="@drawable/card_location_background"
android:onClick="@{click::getAddress}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/cl_contact">
+
+
diff --git a/app/src/main/res/layout/item_call_record.xml b/app/src/main/res/layout/item_call_record.xml
index 142f610..afd17bc 100644
--- a/app/src/main/res/layout/item_call_record.xml
+++ b/app/src/main/res/layout/item_call_record.xml
@@ -8,22 +8,34 @@
+
+
-
-
-
diff --git a/app/src/main/res/layout/item_contact.xml b/app/src/main/res/layout/item_contact.xml
index efa3245..7362384 100644
--- a/app/src/main/res/layout/item_contact.xml
+++ b/app/src/main/res/layout/item_contact.xml
@@ -8,9 +8,7 @@
-
-
+ app:layout_constraintTop_toTopOf="parent" />
@@ -61,7 +48,7 @@
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/black"
- android:textSize="22sp"
+ android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -76,11 +63,37 @@
android:singleLine="true"
android:textColor="@color/black"
android:textSize="14sp"
+ android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_name"
tools:text="phone" />
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_contact_wechat.xml b/app/src/main/res/layout/item_contact_wechat.xml
index d5c92d6..5421c6c 100644
--- a/app/src/main/res/layout/item_contact_wechat.xml
+++ b/app/src/main/res/layout/item_contact_wechat.xml
@@ -43,9 +43,11 @@
app:layout_constraintVertical_bias="0.126" />
@@ -57,7 +59,7 @@
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/white"
- android:textSize="36sp"
+ android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
diff --git a/app/src/main/res/layout/item_daily_app.xml b/app/src/main/res/layout/item_daily_app.xml
index 1c0e92c..f2868fe 100644
--- a/app/src/main/res/layout/item_daily_app.xml
+++ b/app/src/main/res/layout/item_daily_app.xml
@@ -13,15 +13,33 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.4" />
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index a8caf91..fef054c 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -27,7 +27,10 @@
#F1B3B3
#2a2b35
#8e6afb
-
+ #808080
+ #99FFFFFF
+ #ffffff
+ #ff5257
#00D56B
#ffffff
@@ -41,7 +44,7 @@
#FDF6DC
#eae8e8
- #bbbaba
+ #B5B5B5
#182237
#858585
#F44250
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 08997d2..5aebe6d 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -9,13 +9,21 @@
- @color/colorPrimary
+
+
+
+