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