version:1.2.7

fix:
update:优化sim卡联系人
This commit is contained in:
2024-09-30 10:27:31 +08:00
parent f03f8df38d
commit 196b93424a
20 changed files with 345 additions and 198 deletions

View File

@@ -15,8 +15,8 @@ android {
applicationId "com.xxpatx.os" applicationId "com.xxpatx.os"
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 29 targetSdkVersion 29
versionCode 1025 versionCode 1028
versionName "1.2.4" versionName "1.2.7"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -75,9 +75,9 @@ android {
versionNameSuffix "-debug" versionNameSuffix "-debug"
//Zipalign优化 //Zipalign优化
zipAlignEnabled true zipAlignEnabled true
shrinkResources true // shrinkResources true
//混淆 //混淆
minifyEnabled true minifyEnabled false
//前一部分代表系统默认的android程序的混淆文件该文件已经包含了基本的混淆声明后一个文件是自己的定义混淆文件 //前一部分代表系统默认的android程序的混淆文件该文件已经包含了基本的混淆声明后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名 //签名

View File

@@ -192,10 +192,14 @@ public class AddWechatContactActivity extends BaseMvvmActivity<AddWechatContactV
Toaster.show("请输入手机号码"); Toaster.show("请输入手机号码");
return; return;
} }
Log.e("checkContact", "avatarFilePath: " + mViewModel.avatarFilePath); if (mViewDataBinding.tbSim.isToggleOn() == 1) {
mLoadingDialog.setLoadingText("正在上传"); createContact(name, phone);
mLoadingDialog.show(); } else {
mViewModel.checkContact(); Log.e("checkContact", "avatarFilePath: " + mViewModel.avatarFilePath);
mLoadingDialog.setLoadingText("正在上传");
mLoadingDialog.show();
mViewModel.checkContact();
}
} }
} }
} }

View File

@@ -11,7 +11,6 @@ import com.xxpatx.os.adapter.DailyAppAdapter;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity; import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.DailyAppBean; import com.xxpatx.os.bean.DailyAppBean;
import com.xxpatx.os.databinding.ActivityDailyappBinding; import com.xxpatx.os.databinding.ActivityDailyappBinding;
import com.xxpatx.os.manager.AppStatusManager;
import com.xxpatx.os.service.NotificationService; import com.xxpatx.os.service.NotificationService;
import com.xxpatx.os.view.GridSpaceItemDecoration; import com.xxpatx.os.view.GridSpaceItemDecoration;
@@ -61,7 +60,7 @@ public class DailyAppActivity extends BaseMvvmActivity<DailyAppViewModel, Activi
@Override @Override
public void initData() { public void initData() {
mViewModel.getDailyAppData().observe(this, new Observer<List<DailyAppBean>>() { mViewModel.mDailyAppData.observe(this, new Observer<List<DailyAppBean>>() {
@Override @Override
public void onChanged(List<DailyAppBean> dailyAppBeans) { public void onChanged(List<DailyAppBean> dailyAppBeans) {
mDailyAppAdapter.setDailyAppBeans(dailyAppBeans); mDailyAppAdapter.setDailyAppBeans(dailyAppBeans);

View File

@@ -22,11 +22,7 @@ public class DailyAppViewModel extends BaseViewModel<ActivityDailyappBinding, Ac
} }
private MutableLiveData<List<DailyAppBean>> mDailyAppData = new MutableLiveData<>(); public MutableLiveData<List<DailyAppBean>> mDailyAppData = new MutableLiveData<>();
public MutableLiveData<List<DailyAppBean>> getDailyAppData() {
return mDailyAppData;
}
public void getPackageList() { public void getPackageList() {
List<DailyAppBean> appBeanList = AppStatusManager.getInstance().getPackageList(); List<DailyAppBean> appBeanList = AppStatusManager.getInstance().getPackageList();

View File

@@ -406,7 +406,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
@Override @Override
public void initData() { public void initData() {
mViewModel.getDesktopIconData().observe(this, new Observer<ArrayList<DesktopIcon>>() { mViewModel.mDesktopIconData.observe(this, new Observer<ArrayList<DesktopIcon>>() {
@Override @Override
public void onChanged(ArrayList<DesktopIcon> desktopIcons) { public void onChanged(ArrayList<DesktopIcon> desktopIcons) {
int x = 0; int x = 0;
@@ -441,7 +441,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
// //
// mViewModel.getSnIsActivation(); // mViewModel.getSnIsActivation();
mViewModel.getAppInfoData().observe(this, new Observer<AppInfo>() { mViewModel.mAppInfoMutableLiveData.observe(this, new Observer<AppInfo>() {
@Override @Override
public void onChanged(AppInfo appInfo) { public void onChanged(AppInfo appInfo) {
if (appInfo == null) { if (appInfo == null) {
@@ -563,7 +563,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
default: default:
case Intent.ACTION_MAIN: case Intent.ACTION_MAIN:
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
mViewModel.checkUpdate(); // mViewModel.checkUpdate();
break; break;
} }
} }
@@ -585,7 +585,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
super.onResume(); super.onResume();
Log.e(TAG, "onResume: "); Log.e(TAG, "onResume: ");
int activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0); int activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
mViewModel.getActivationData().setValue(activation); mViewModel.mActivationData.setValue(activation);
addData(); addData();
// 判断是否开启监听通知权限 // 判断是否开启监听通知权限
if (NotificationManagerCompat.getEnabledListenerPackages(this).contains(getPackageName())) { if (NotificationManagerCompat.getEnabledListenerPackages(this).contains(getPackageName())) {

View File

@@ -1,5 +1,6 @@
package com.xxpatx.os.activity.main; package com.xxpatx.os.activity.main;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
@@ -7,8 +8,9 @@ import android.util.Log;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster; import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus; import com.jeremyliao.liveeventbus.LiveEventBus;
import com.qweather.sdk.bean.base.Code; import com.qweather.sdk.bean.base.Code;
@@ -21,7 +23,6 @@ import com.qweather.sdk.view.QWeather;
import com.tencent.mmkv.MMKV; import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent; import com.trello.rxlifecycle4.android.ActivityEvent;
import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.R; import com.xxpatx.os.R;
import com.xxpatx.os.base.mvvm.BaseViewModel; import com.xxpatx.os.base.mvvm.BaseViewModel;
import com.xxpatx.os.bean.ActivationBean; import com.xxpatx.os.bean.ActivationBean;
@@ -29,7 +30,6 @@ import com.xxpatx.os.bean.AppInfo;
import com.xxpatx.os.bean.BaseResponse; import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.bean.Contact; import com.xxpatx.os.bean.Contact;
import com.xxpatx.os.bean.DesktopIcon; import com.xxpatx.os.bean.DesktopIcon;
import com.xxpatx.os.bean.NetDesktopIcon;
import com.xxpatx.os.bean.SnInfo; import com.xxpatx.os.bean.SnInfo;
import com.xxpatx.os.config.CommonConfig; import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.databinding.ActivityMainBinding; import com.xxpatx.os.databinding.ActivityMainBinding;
@@ -37,9 +37,9 @@ import com.xxpatx.os.db.ContactCacheUtils;
import com.xxpatx.os.gson.GsonUtils; import com.xxpatx.os.gson.GsonUtils;
import com.xxpatx.os.manager.AppManager; import com.xxpatx.os.manager.AppManager;
import com.xxpatx.os.network.NetInterfaceManager; import com.xxpatx.os.network.NetInterfaceManager;
import com.xxpatx.os.service.main.MainService;
import com.xxpatx.os.utils.ActivationUtil; import com.xxpatx.os.utils.ActivationUtil;
import com.xxpatx.os.utils.ApkUtils; import com.xxpatx.os.utils.ApkUtils;
import com.xxpatx.os.utils.AppUsedTimeUtils;
import com.xxpatx.os.utils.FileUtil; import com.xxpatx.os.utils.FileUtil;
import com.xxpatx.os.utils.Utils; import com.xxpatx.os.utils.Utils;
import com.xxpatx.os.utils.WiFiUtils; import com.xxpatx.os.utils.WiFiUtils;
@@ -62,6 +62,8 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody; import okhttp3.MultipartBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEvent> { public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEvent> {
private static final String TAG = "MainViewModel"; private static final String TAG = "MainViewModel";
@@ -94,9 +96,6 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
private MutableLiveData<WeatherNowBean.NowBaseBean> mNowBaseBeanData = new MutableLiveData<>(); private MutableLiveData<WeatherNowBean.NowBaseBean> mNowBaseBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherNowBean.NowBaseBean> getNowBaseBeanData() {
return mNowBaseBeanData;
}
public void getWeatherNow(String location) { public void getWeatherNow(String location) {
Log.e(TAG, "getWeatherNow: " + location); Log.e(TAG, "getWeatherNow: " + location);
@@ -136,9 +135,6 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
private MutableLiveData<WeatherHourlyBean.HourlyBean> mHourlyBeanData = new MutableLiveData<>(); private MutableLiveData<WeatherHourlyBean.HourlyBean> mHourlyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherHourlyBean.HourlyBean> getHourlyBeanData() {
return mHourlyBeanData;
}
public void getWeather24Hourly(String location) { public void getWeather24Hourly(String location) {
QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() { QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() {
@@ -170,9 +166,6 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
private MutableLiveData<WeatherDailyBean.DailyBean> DailyBeanData = new MutableLiveData<>(); private MutableLiveData<WeatherDailyBean.DailyBean> DailyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherDailyBean.DailyBean> getDailyBeanData() {
return DailyBeanData;
}
public void getWeather7D(String location) { public void getWeather7D(String location) {
QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() { QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() {
@@ -202,9 +195,6 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
private MutableLiveData<SnInfo> mSnInfoData = new MutableLiveData<>(); private MutableLiveData<SnInfo> mSnInfoData = new MutableLiveData<>();
public MutableLiveData<SnInfo> getSnInfoData() {
return mSnInfoData;
}
public void getSnInfo() { public void getSnInfo() {
NetInterfaceManager.getInstance().getSnInfoControl() NetInterfaceManager.getInstance().getSnInfoControl()
@@ -239,11 +229,8 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
} }
private MutableLiveData<ArrayList<DesktopIcon>> mDesktopIconData = new MutableLiveData<>(); public MutableLiveData<ArrayList<DesktopIcon>> mDesktopIconData = new MutableLiveData<>();
public MutableLiveData<ArrayList<DesktopIcon>> getDesktopIconData() {
return mDesktopIconData;
}
public void getAppList() { public void getAppList() {
Observable.create(new ObservableOnSubscribe<ArrayList<DesktopIcon>>() { Observable.create(new ObservableOnSubscribe<ArrayList<DesktopIcon>>() {
@@ -279,11 +266,7 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
}); });
} }
private MutableLiveData<Integer> mActivationData = new MutableLiveData<>(); public MutableLiveData<Integer> mActivationData = new MutableLiveData<>();
public MutableLiveData<Integer> getActivationData() {
return mActivationData;
}
public void getSnIsActivation() { public void getSnIsActivation() {
NetInterfaceManager.getInstance().getSnIsActivationObservable() NetInterfaceManager.getInstance().getSnIsActivationObservable()
@@ -329,11 +312,7 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
}); });
} }
private MutableLiveData<AppInfo> mAppInfoData = new MutableLiveData<>(); public MutableLiveData<AppInfo> mAppInfoMutableLiveData = new MutableLiveData<>();
public MutableLiveData<AppInfo> getAppInfoData() {
return mAppInfoData;
}
public void checkUpdate() { public void checkUpdate() {
NetInterfaceManager.getInstance().getUpdateObservable() NetInterfaceManager.getInstance().getUpdateObservable()
@@ -349,7 +328,25 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
Log.e("checkUpdate", "onNext: " + appInfoBaseResponse); Log.e("checkUpdate", "onNext: " + appInfoBaseResponse);
if (appInfoBaseResponse.code == 200) { if (appInfoBaseResponse.code == 200) {
AppInfo appInfo = appInfoBaseResponse.data; AppInfo appInfo = appInfoBaseResponse.data;
mAppInfoData.setValue(appInfo); // mAppInfoData.setValue(appInfo);
getCtx().startService(new Intent(getCtx(), MainService.class));
if (ApkUtils.checkAppUpdate(getCtx(), appInfo)) {
DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(appInfo.getApp_url());
if (null != entity) {
if (entity.isComplete()) {
ApkUtils.installApp(getCtx(), entity.getFilePath());
} else {
if (entity.getState() != STATE_RUNNING) {
Aria.download(this).resumeAllTask();
}
}
} else {
ApkUtils.ariaDownload(getCtx(), appInfo.getApp_url(), appInfo);
}
} else {
Log.e("checkUpdate", "onNext: 已是最新");
}
} }
} }
@@ -365,33 +362,6 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
}); });
} }
@Deprecated
public void getDesktopLayout() {
NetInterfaceManager.getInstance().getDesktopLayoutObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<NetDesktopIcon>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getDesktopLayout", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<NetDesktopIcon>> listBaseResponse) {
Log.e("getDesktopLayout", "onNext: " + listBaseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getDesktopLayout", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getDesktopLayout", "onComplete: ");
}
});
}
public void uploadContacts() { public void uploadContacts() {
List<Contact> contactList = ContactCacheUtils.getInstance().getDatabaseContact(); List<Contact> contactList = ContactCacheUtils.getInstance().getDatabaseContact();
@@ -450,95 +420,4 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
}); });
} }
@Deprecated
public void sendAPPUsage() {
AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
String packagename = AppUsedTimeUtils.getInstance().getAppPackageName();
Log.e(TAG, "onRestart packagename == " + packagename);
if (!TextUtils.isEmpty(packagename)) {
Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(getCtx(), packagename));
Log.e(TAG, "onRestart: " + packagename);
NetInterfaceManager.getInstance().getAppUsageRecordControl()
.sendappUsageRecord(Utils.getSerial(),
ApkUtils.getAppNameByPackage(getCtx(), packagename),
packagename,
AppUsedTimeUtils.getInstance().getStartTime() / 1000,
AppUsedTimeUtils.getInstance().getEndTime() / 1000)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("sendAPPUsage", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("sendAPPUsage", "onNext: " + baseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("sendAPPUsage", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("sendAPPUsage", "onComplete: ");
}
});
} else {
Log.e("onRestart", "app = null" + packagename);
}
}
@Deprecated
public void sendRunningInfo() {
AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
long time = AppUsedTimeUtils.getInstance().getStartTime();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID);
jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(getCtx(), BuildConfig.APPLICATION_ID));
jsonObject.addProperty("start_time", time / 1000);
String jsonString = jsonObject.toString();
Log.e(TAG, "sendRunningInfo: " + jsonString);
NetInterfaceManager.getInstance()
.getRunningAppObservable(jsonString)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("sendRunningInfo", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("sendRunningInfo", "onNext: " + baseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("sendRunningInfo", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("sendRunningInfo", "onComplete: ");
}
});
}
@Deprecated
public void getAdminSnSetting() {
NetInterfaceManager.getInstance().getAdminSnSetting(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
}
});
}
} }

View File

@@ -10,7 +10,7 @@ import java.io.Serializable;
public class Contact implements Serializable { public class Contact implements Serializable {
private static final long serialVersionUID = 8814155739557674021L; private static final long serialVersionUID = 8814155739557674021L;
int id; long id;
String name;//名称 String name;//名称
int is_urgent;//是否紧急联系人 0否1是 int is_urgent;//是否紧急联系人 0否1是
String mobile;//手机号 String mobile;//手机号
@@ -32,11 +32,11 @@ public class Contact implements Serializable {
this.simContact = sim; this.simContact = sim;
} }
public int getId() { public long getId() {
return id; return id;
} }
public void setId(int id) { public void setId(long id) {
this.id = id; this.id = id;
} }

View File

@@ -5,6 +5,7 @@ public class CommonConfig {
/*桌面图标个数*/ /*桌面图标个数*/
public final static int DESKTOP_LIST_SIZE = 3 * 3; public final static int DESKTOP_LIST_SIZE = 3 * 3;
public static final String HIDE_CALENDAR_KEY = "hide_desktop_calendar";
public static final String MAP_LOCATION_JSON_KEY = "MAPLOCATION_JSON_STRING"; public static final String MAP_LOCATION_JSON_KEY = "MAPLOCATION_JSON_STRING";
public static final String MAP_LONGITUDE_KEY = "map_longitude_key"; public static final String MAP_LONGITUDE_KEY = "map_longitude_key";

View File

@@ -123,7 +123,7 @@ public class ContactCacheUtils {
return deleteContact(contact.getId()); return deleteContact(contact.getId());
} }
public boolean deleteContact(int rowId) { public boolean deleteContact(long rowId) {
long id = 0; long id = 0;
mDatabase.beginTransaction(); mDatabase.beginTransaction();
try { try {

View File

@@ -94,8 +94,10 @@ public class EditContactDialog extends AlertDialog {
} }
if (hideDelete) { if (hideDelete) {
clEdit.setVisibility(View.GONE);
clDelete.setVisibility(View.GONE); clDelete.setVisibility(View.GONE);
} else { } else {
clEdit.setVisibility(View.VISIBLE);
clDelete.setVisibility(View.VISIBLE); clDelete.setVisibility(View.VISIBLE);
} }
} }

View File

@@ -228,12 +228,12 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
@Override @Override
public void fetchData() { public void fetchData() {
Log.e(TAG, "fetchData: "); Log.e(TAG, "fetchData: ");
mViewModel.getCacheContact();
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mViewModel.getCacheContact();
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT); String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
mViewDataBinding.tvLocation.setText(district); mViewDataBinding.tvLocation.setText(district);
} }

View File

@@ -115,7 +115,7 @@ public class ContactViewModel extends BaseViewModel<FragmentContactHomeBinding,
return mDeleteData; return mDeleteData;
} }
public void deleteContact(int id) { public void deleteContact(long id) {
NetInterfaceManager.getInstance().getMailListDeleteObservable(id) NetInterfaceManager.getInstance().getMailListDeleteObservable(id)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {

View File

@@ -36,7 +36,7 @@ public class HomeViewModel extends BaseViewModel<FragmentHomeBinding, FragmentEv
public void init() { public void init() {
getInstalledApp(); getInstalledApp();
getAlarmClock(); // getAlarmClock();
} }
private MutableLiveData<ArrayList<DesktopIcon>> DesktopIconData = new MutableLiveData<>(); private MutableLiveData<ArrayList<DesktopIcon>> DesktopIconData = new MutableLiveData<>();

View File

@@ -1,11 +1,13 @@
package com.xxpatx.os.fragment.phone.contact; package com.xxpatx.os.fragment.phone.contact;
import android.app.Activity;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.ContentUris;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
@@ -41,7 +43,7 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Context mContext; private Activity mContext;
private ContactAdapter mContactAdapter; private ContactAdapter mContactAdapter;
public ContactFragment() { public ContactFragment() {
@@ -74,10 +76,14 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
@Override @Override
public void setOnLongClickListener(Contact contact) { public void setOnLongClickListener(Contact contact) {
boolean disableModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false); boolean disableModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false);
if (disableModify){ if (disableModify) {
Toaster.showLong("已禁用联系人修改"); Toaster.showLong("已禁用联系人修改");
}else { } else {
showDialog(contact); if (contact.isSimContact()) {
Toaster.showLong("本地联系人不支持修改");
} else {
showDialog(contact);
}
} }
} }
}); });
@@ -114,7 +120,7 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
} else { } else {
Toaster.show("删除失败:" + baseResponse.msg); Toaster.show("删除失败:" + baseResponse.msg);
} }
mViewModel. getContact(); mViewModel.getContact();
} }
}); });
mViewModel.getCacheContact(); mViewModel.getCacheContact();
@@ -136,20 +142,23 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
public static final String NUMBER = "number"; public static final String NUMBER = "number";
private List<Contact> getSIMContacts() { private List<Contact> getSIMContacts() {
getAll();
List<Contact> contactList = new ArrayList<>(); List<Contact> contactList = new ArrayList<>();
ContentResolver resolver = mContext.getContentResolver(); ContentResolver resolver = mContext.getContentResolver();
// 获取Sims卡联系人 // 获取Sims卡联系人
Uri uri = Uri.parse("content://icc/adn"); Uri uri = Uri.parse("content://icc/adn");
Cursor phoneCursor = resolver.query(uri, null, null, null, null); Cursor phoneCursor = resolver.query(uri, null, null, null, null);
if (phoneCursor != null) { if (phoneCursor != null) {
final int colName = phoneCursor.getColumnIndex(NAME); int colName = phoneCursor.getColumnIndex(NAME);
final int colNumber = phoneCursor.getColumnIndex(NUMBER); int colNumber = phoneCursor.getColumnIndex(NUMBER);
while (phoneCursor.moveToNext()) { while (phoneCursor.moveToNext()) {
String number = phoneCursor.getString(colNumber); String number = phoneCursor.getString(colNumber);
// 当手机号码为空的或者为空字段 跳过当前循环 // 当手机号码为空的或者为空字段 跳过当前循环
String username = phoneCursor.getString(colName); String username = phoneCursor.getString(colName);
Log.e(TAG, "getSIMContacts: number = " + number + " username = " + username); long id = phoneCursor.getLong(phoneCursor.getColumnIndex("_id"));
Log.e(TAG, "getSIMContacts: number = " + number + " username = " + username + " _id = " + id);
Contact contact = new Contact(username, number, true); Contact contact = new Contact(username, number, true);
contact.setId(id);
contactList.add(contact); contactList.add(contact);
} }
phoneCursor.close(); phoneCursor.close();
@@ -157,15 +166,31 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
return contactList; return contactList;
} }
private void getAll() {
ContentResolver resolver = mContext.getContentResolver();
Cursor adnCursor = resolver.query(Uri.parse("content://icc/adn/subId/0"), null, null, null, null);
for (String columnName : adnCursor.getColumnNames()) {
Log.d("CursorFields: adnCursor ", columnName);
}
Cursor rawContactsCursor = resolver.query(Uri.parse("content://com.android.contacts/raw_contacts"), null, null, null, null);
for (String columnName : rawContactsCursor.getColumnNames()) {
Log.d("CursorFields: rawContactsCursor ", columnName);
}
Cursor dataCursor = resolver.query(Uri.parse("content://com.android.contacts/data"), null, null, null, null);
for (String columnName : dataCursor.getColumnNames()) {
Log.d("CursorFields: dataCursor ", columnName);
}
}
private EditContactDialog mEditContactDialog; private EditContactDialog mEditContactDialog;
private void showDialog(Contact contact) { private void showDialog(Contact contact) {
if (mEditContactDialog == null) { if (mEditContactDialog == null) {
mEditContactDialog = new EditContactDialog(getContext()); mEditContactDialog = new EditContactDialog(getContext());
} }
if (contact.isSimContact()){ if (contact.isSimContact()) {
mEditContactDialog.setHideDelete(true); mEditContactDialog.setHideDelete(true);
}else { } else {
mEditContactDialog.setHideDelete(false); mEditContactDialog.setHideDelete(false);
} }
mEditContactDialog mEditContactDialog
@@ -173,15 +198,19 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
.setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() { .setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() {
@Override @Override
public void onEditClick() { public void onEditClick() {
Intent intent =new Intent(getContext(), EditContactActivity.class); Intent intent = new Intent(mContext, EditContactActivity.class);
intent.putExtra("Contact",contact); intent.putExtra("Contact", contact);
startActivity(intent); startActivity(intent);
mEditContactDialog.dismiss(); mEditContactDialog.dismiss();
} }
@Override @Override
public void onDeleteClick() { public void onDeleteClick() {
mViewModel.deleteContact(contact.getId()); if (contact.isSimContact()) {
// deleteSimContact(contact.getId());
} else {
mViewModel.deleteContact(contact);
}
mEditContactDialog.dismiss(); mEditContactDialog.dismiss();
} }
@@ -195,13 +224,57 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
mEditContactDialog.show(); mEditContactDialog.show();
} }
private static final String[] ENTITY_PROJECTION = new String[]{
ContactsContract.Contacts.Entity.RAW_CONTACT_ID, //0
ContactsContract.Contacts.Entity.ACCOUNT_TYPE, //1
ContactsContract.Contacts.Entity.DATA_SET, // 2
ContactsContract.Contacts.Entity.CONTACT_ID, // 3
ContactsContract.Contacts.Entity.LOOKUP_KEY, // 4
ContactsContract.Contacts.Entity.DISPLAY_NAME, // 5
ContactsContract.Contacts.Entity.DISPLAY_NAME_ALTERNATIVE, // 6
};
private static final int COLUMN_INDEX_RAW_CONTACT_ID = 0;
private static final int COLUMN_INDEX_ACCOUNT_TYPE = 1;
private static final int COLUMN_INDEX_DATA_SET = 2;
private static final int COLUMN_INDEX_CONTACT_ID = 3;
private static final int COLUMN_INDEX_LOOKUP_KEY = 4;
private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 6;
public void deleteSimContact(long id) {
Intent intent = mContext.getIntent();
ContentResolver resolver = mContext.getContentResolver();
// Uri lookupUri = intent.getData();
// final long rawContactId = ContentUris.parseId(lookupUri);
Uri lookupUri = ContactsContract.RawContacts.getContactLookupUri(resolver,
ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, id));
Cursor cursor = resolver.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);
for (String columnName : cursor.getColumnNames()) {
Log.e("deleteSimContact: ", columnName);
}
while (cursor.moveToNext()) {
for (String columnName : cursor.getColumnNames()) {
Log.e("deleteSimContact: ", columnName);
Log.e("deleteSimContact: ", cursor.getColumnIndex(columnName) + "");
if (cursor.getColumnIndex(columnName) != -1) {
Log.e("deleteSimContact: getString = ", " - " + cursor.getString(cursor.getColumnIndex(columnName)));
}
}
}
// long contactId = 0;
// String lookupKey = "";
// Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
// resolver.delete(contactUri, null, null);
}
public class BtnClick { public class BtnClick {
public void add(View view) { public void add(View view) {
boolean disableModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false); boolean disableModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false);
if (disableModify){ if (disableModify) {
Toaster.showLong("已禁用联系人修改"); Toaster.showLong("已禁用联系人修改");
}else { } else {
Intent intent = new Intent(mContext, AddWechatContactActivity.class); Intent intent = new Intent(mContext, AddWechatContactActivity.class);
startActivity(intent); startActivity(intent);
} }

View File

@@ -1,5 +1,14 @@
package com.xxpatx.os.fragment.phone.contact; package com.xxpatx.os.fragment.phone.contact;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -21,13 +30,17 @@ import com.xxpatx.os.network.UrlAddress;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
public class ContactViewModel extends BaseViewModel<FragmentContactBinding, FragmentEvent> { public class ContactViewModel extends BaseViewModel<FragmentContactBinding, FragmentEvent> {
private static final String TAG = "ContactViewModel";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override @Override
@@ -111,8 +124,9 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
return mDeleteData; return mDeleteData;
} }
public void deleteContact(int id) { public void deleteContact(Contact contact) {
NetInterfaceManager.getInstance().getMailListDeleteObservable(id) Log.e(TAG, "deleteContact: " + contact.getId());
NetInterfaceManager.getInstance().getMailListDeleteObservable(contact.getId())
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {
@Override @Override
@@ -136,5 +150,131 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
Log.e("deleteContact", "onComplete: "); Log.e("deleteContact", "onComplete: ");
} }
}); });
}
public void deleteSimContact(long id) {
ContentResolver contentResolver = getCtx().getContentResolver();
// deleteSimContact(id + "");
// Uri deleteUri = ContactsContract.Contacts.CONTENT_URI;
// Uri deleteContactUri = ContentUris.withAppendedId(deleteUri, id);
// Log.e(TAG, "deleteSimContact: " + contentResolver.delete(deleteContactUri, null, null));
// Log.e(TAG, "deleteSimContact: " + contentResolver.delete(Uri.parse("content://icc/adn/"), "_id = ?", new String[]{String.valueOf(id)}));
// Log.e(TAG, "deleteSimContact: " + contentResolver.delete(Uri.parse("content://com.android.contacts/raw_contacts"), "_id =?", new String[]{String.valueOf(id)}));
// Log.e(TAG, "deleteSimContact: " + contentResolver.delete(Uri.parse("content://com.android.contacts/data"), ContactsContract.RawContacts.CONTACT_ID + " =?", new String[]{String.valueOf(id)}));
}
public void deleteSimContact(String simContactId) {
// SubscriptionManager subscriptionManager = SubscriptionManager.from(getCtx());
// List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
// if (subscriptionInfos != null) {
// for (SubscriptionInfo subscriptionInfo : subscriptionInfos) {
// Uri rawContactUri = Uri.parse("content://icc/adn/" + simContactId);
// Uri uri = Uri.withAppendedPath(ContactsContract.RawContacts.CONTENT_URI, subscriptionInfo.getSimSlotIndex() + "");
// ContentResolver contentResolver = getCtx().getContentResolver();
// Cursor cursor = contentResolver.query(uri, new String[]{ContactsContract.RawContacts._ID}, null, null, null);
// if (cursor != null && cursor.moveToFirst()) {
// do {
// long rawContactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts._ID));
// Log.e(TAG, "deleteSimContact: " + contentResolver.delete(ContentUris.withAppendedId(rawContactUri, rawContactId), null, null));
// } while (cursor.moveToNext());
// cursor.close();
// }
// }
// }
SubscriptionManager subscriptionManager = SubscriptionManager.from(getCtx());
List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfos != null) {
for (SubscriptionInfo subscriptionInfo : subscriptionInfos) {
int subscriptionId = subscriptionInfo.getSubscriptionId();
Uri rawContactUri = Uri.parse("content://icc/adn/subId/" + subscriptionId);
Uri dataUri = Uri.parse("content://icc/adn/subId/" + subscriptionId + "/data");
ContentResolver resolver = getCtx().getContentResolver();
Uri uri = ContentUris.withAppendedId(rawContactUri, Integer.parseInt(simContactId));
Log.e(TAG, "deleteSimContact: " + resolver.delete(uri, null, null));
Log.e(TAG, "deleteSimContact: " + resolver.delete(dataUri, ContactsContract.RawContacts.CONTACT_ID + " = " + simContactId, null));
}
}
}
private void initializeLocalPhoneAccount() {
try {
final ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI);
builder.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null);
builder.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null);
final ArrayList<ContentProviderOperation> operations = new ArrayList<>();
operations.add(builder.build());
final ContentProviderResult[] results = getCtx().getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
final Optional<ContentProviderResult> rawContactUri = Arrays.stream(results).findFirst();
rawContactUri.ifPresent(new Consumer<ContentProviderResult>() {
@Override
public void accept(ContentProviderResult value) {
ContactViewModel.this.getCtx().getContentResolver().delete(value.uri, null, null);
}
});
} catch (Exception ignored) {
}
}
// public boolean deleteContactsinfo(String deleteid) {
// try {
// ContentResolver mContentResolver = getCtx().getContentResolver();
// Cursor cursor = mContentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, "_id =?", new String[]{deleteid}, null);
// if (cursor.moveToFirst()) {
// int index_in_sim = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.INDEX_IN_SIM));
// Log.d(TAG, "deleteContactsinfo: " + " index_in_sim " + index_in_sim);
// //通过index_in_sim 来判断是sim卡中的联系人还是设备中的联系人
// if (index_in_sim != -1) {
// String lookup_key = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
// int indicate_phone_or_sim_contact = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.INDICATE_PHONE_SIM));
// Uri simUri = Uri.parse("content://icc/pbr/subId/" + indicate_phone_or_sim_contact);
// int delete1 = mContentResolver.delete(simUri, "index = " + index_in_sim, null);
// int delete5 = mContentResolver.delete(Uri.parse("content://com.android.contacts/contacts/lookup/" + lookup_key + "/" + deleteid), null, null);
// Log.d(TAG, " delete1 " + delete1 + " delete5 " + delete5);
// } else {
// mContentResolver.delete(Uri.parse("content://com.android.contacts/raw_contacts"), "_id =?", new String[]{deleteid});
// mContentResolver.delete(Uri.parse("content://com.android.contacts/data"), ContactsContract.RawContacts.CONTACT_ID + " =?", new String[]{deleteid});
// }
// cursor.close();
// }
// } catch (Exception e) {
// e.printStackTrace();
// return false;
// }
// return true;
// }
/**
* 删除单个联系人数据
*
* @param name
* @return 是否删除成功
*/
public boolean delete(String name) {
try {
// 根据姓名求id
Uri uri = Uri.parse("content://icc/adn/");
ContentResolver resolver = getCtx().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, "display_name = ?", new String[]{name}, null);
if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
// 根据id删除data中的相应数据
resolver.delete(uri, "display_name = ?", new String[]{name});
Uri dataUri = Uri.parse("content://com.android.contacts/data");
resolver.delete(dataUri, "raw_contact_id = ?", new String[]{id + ""});
return true;
}
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "delete: " + e.getMessage());
}
return false;
} }
} }

View File

@@ -11,6 +11,7 @@ import com.tencent.mmkv.MMKV;
import com.xxpatx.os.activity.main.MainActivity; import com.xxpatx.os.activity.main.MainActivity;
import com.xxpatx.os.bean.DailyAppBean; import com.xxpatx.os.bean.DailyAppBean;
import com.xxpatx.os.config.CommonConfig; import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.utils.ApkUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
@@ -43,6 +44,7 @@ public class AppStatusManager {
this.add("com.android.contacts"); this.add("com.android.contacts");
this.add("com.android.dialer"); this.add("com.android.dialer");
this.add("com.mediatek.camera"); this.add("com.mediatek.camera");
this.add("cn.etouch.ecalendar");
}}; }};
@@ -52,7 +54,17 @@ public class AppStatusManager {
} }
this.mContext = context; this.mContext = context;
Set<String> stringSet = mMMKV.decodeStringSet(APP_STATUS_MANAGER_KEY, defaultHiedApp); Set<String> stringSet = mMMKV.decodeStringSet(APP_STATUS_MANAGER_KEY, defaultHiedApp);
Log.e(TAG, "AppStatusManager: " + stringSet);
this.hidedAppSet = stringSet; this.hidedAppSet = stringSet;
if (!mMMKV.decodeBool(CommonConfig.HIDE_CALENDAR_KEY, false)) {
removeHidedApp("cn.etouch.ecalendar");
addHidedApp("com.youloft.calendar");
addHidedApp("com.honghui.huangli");
ApkUtils.uninstall(mContext, "cn.etouch.ecalendar");
mMMKV.encode(CommonConfig.HIDE_CALENDAR_KEY, true);
Log.e(TAG, "AppStatusManager: hide calendar");
}
} }
public static void init(Context context) { public static void init(Context context) {
@@ -109,7 +121,7 @@ public class AppStatusManager {
} }
} }
if (hidedAppSet.contains("xxpatx.os.service")) { if (hidedAppSet.contains("xxpatx.os.service")) {
DailyAppBean serviceIcon = new DailyAppBean("客服中心","xxpatx.os.service"); DailyAppBean serviceIcon = new DailyAppBean("客服中心", "xxpatx.os.service");
dailyAppBeanList.add(0, serviceIcon); dailyAppBeanList.add(0, serviceIcon);
} }

View File

@@ -445,7 +445,7 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
public Observable<BaseResponse> getMailListDeleteObservable(int id) { public Observable<BaseResponse> getMailListDeleteObservable(long id) {
return mRetrofit.create(MailListDeleteApi.class) return mRetrofit.create(MailListDeleteApi.class)
.deleteMailList(Utils.getSerial(), id) .deleteMailList(Utils.getSerial(), id)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

View File

@@ -13,6 +13,6 @@ public interface MailListDeleteApi {
@POST(UrlAddress.MAIL_LIST_DELETE) @POST(UrlAddress.MAIL_LIST_DELETE)
Observable<BaseResponse> deleteMailList( Observable<BaseResponse> deleteMailList(
@Field("sn") String sn, @Field("sn") String sn,
@Field("id") int id @Field("id") long id
); );
} }

View File

@@ -163,7 +163,7 @@ public class WeAccessibilityService extends AccessibilityService {
step(Property.TEXT, mName, Step.CLICK_INFO); step(Property.TEXT, mName, Step.CLICK_INFO);
break; break;
case CLICK_INFO://进入个人信息页面 case CLICK_INFO://进入个人信息页面
step(Property.TEXT, DIALER_TEXT, Step.CLICK_CALL); stepCallDialog(Property.TEXT, DIALER_TEXT, Step.CLICK_CALL);
break; break;
case CLICK_CALL://打视频或者电话 case CLICK_CALL://打视频或者电话
if (mCallType == TYPE_VIDEO) { if (mCallType == TYPE_VIDEO) {
@@ -219,6 +219,26 @@ public class WeAccessibilityService extends AccessibilityService {
} }
} }
private boolean stepCallDialog(Property type, String text, Step nextStep) {
AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text);
if (node != null) {
Log.e(TAG, "stepCallDialog: isVisibleToUser: " + node.isVisibleToUser());
if (node.isVisibleToUser()) {
clickNode(node);
Log.e(TAG, "stepCallDialog: mCurrentStep: " + mCurrentStep + " done");
mCurrentStep = nextStep;
Log.e(TAG, "stepCallDialog: next: " + mCurrentStep);
return true;
} else {
scrolDown();
return false;
}
} else {
scrolDown();
return false;
}
}
private boolean stepHome(Property type, String text) { private boolean stepHome(Property type, String text) {
AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text); AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text);
if (node != null) { if (node != null) {
@@ -298,8 +318,28 @@ public class WeAccessibilityService extends AccessibilityService {
} }
private void clickNode(AccessibilityNodeInfo node) { private void clickNode(AccessibilityNodeInfo node) {
try {
Log.e(TAG, "clickNode: getText = " + node.getText());
} catch (Exception e) {
Log.e(TAG, "clickNode: e = " + e.getMessage());
}
Log.e(TAG, "clickNode: isClickable = " + node.isClickable());
if (node.isClickable()) { if (node.isClickable()) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK); boolean performAction = node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
Log.e(TAG, "clickNode: performAction = " + performAction);
if (!performAction) {
Rect rect = new Rect();
node.getBoundsInScreen(rect);
int x = rect.left;
int y = rect.top;
Log.e(TAG, "clickNode: x = " + x);
Log.e(TAG, "clickNode: y = " + y);
int width = rect.width();
int height = rect.height();
Log.e(TAG, "clickNode: width = " + width);
Log.e(TAG, "clickNode: height = " + height);
Log.e(TAG, "clickNode: clickByNode = " + clickByNode(x + width / 2, y + height / 2));
}
node.recycle(); node.recycle();
} else { } else {
AccessibilityNodeInfo parent = node.getParent(); AccessibilityNodeInfo parent = node.getParent();

View File

@@ -185,6 +185,7 @@ public class ApkUtils {
this.add("com.tencent.mm"); this.add("com.tencent.mm");
this.add("com.ss.android.ugc.aweme"); this.add("com.ss.android.ugc.aweme");
this.add("com.mediatek.camera"); this.add("com.mediatek.camera");
this.add("cn.etouch.ecalendar");
}}; }};
/** /**