增加签名,优化数据倒灌
This commit is contained in:
@@ -57,14 +57,31 @@ android {
|
||||
|
||||
signingConfigs {
|
||||
keypub {
|
||||
storeFile file(rootProject.ext.signingConfigs.keypub.storeFile)
|
||||
storeFile file(rootProject.ext.signingConfigs.keypub.storeFile)
|
||||
storePassword rootProject.ext.signingConfigs.keypub.storePassword
|
||||
keyAlias rootProject.ext.signingConfigs.keypub.keyAlias
|
||||
keyPassword rootProject.ext.signingConfigs.keypub.keyPassword
|
||||
keyAlias rootProject.ext.signingConfigs.keypub.keyAlias
|
||||
keyPassword rootProject.ext.signingConfigs.keypub.keyPassword
|
||||
}
|
||||
|
||||
crosshatch {
|
||||
storeFile file(rootProject.ext.signingConfigs.crosshatch.storeFile)
|
||||
storePassword rootProject.ext.signingConfigs.crosshatch.storePassword
|
||||
keyAlias rootProject.ext.signingConfigs.crosshatch.keyAlias
|
||||
keyPassword rootProject.ext.signingConfigs.crosshatch.keyPassword
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
CrosshatchDebug.initWith(debug)
|
||||
CrosshatchDebug {
|
||||
debuggable true
|
||||
signingConfig signingConfigs.crosshatch
|
||||
}
|
||||
|
||||
CrosshatchRelease.initWith(release)
|
||||
CrosshatchRelease {
|
||||
signingConfig signingConfigs.crosshatch
|
||||
}
|
||||
debug {
|
||||
versionNameSuffix "_debug"
|
||||
debuggable true
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.ttstd.dialer">
|
||||
package="com.ttstd.dialer"
|
||||
android:sharedUserId="android.uid.system">
|
||||
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
|
||||
@@ -93,6 +94,19 @@
|
||||
android:name="com.baidu.location.f"
|
||||
android:enabled="true"
|
||||
android:process=":remote" />
|
||||
<service
|
||||
android:name=".service.DialerAccessibilityService"
|
||||
android:exported="true"
|
||||
android:label="@string/accessibility_service_label"
|
||||
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
|
||||
<!-- android:priority="10000" 可提高服务在设置中的权重,排在前面 -->
|
||||
<intent-filter android:priority="10000">
|
||||
<action android:name="android.accessibilityservice.AccessibilityService" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.accessibilityservice"
|
||||
android:resource="@xml/accessibility_service_config" />
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.baidu.lbsapi.API_KEY"
|
||||
|
||||
@@ -131,7 +131,6 @@ public class AppFragment extends BaseMvvmFragment<AppViewModel, FragmentAppBindi
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
Log.e(TAG, "onDestroyView: ");
|
||||
mViewModel.resetLiveData();
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.ttstd.dialer.base.mvvm.BaseViewModel;
|
||||
import com.ttstd.dialer.databinding.FragmentAppBinding;
|
||||
import com.ttstd.dialer.db.app.AppInfo;
|
||||
import com.ttstd.dialer.db.app.AppRepository;
|
||||
import com.ttstd.dialer.livedata.SingleLiveEvent;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@@ -33,11 +34,11 @@ public class AppViewModel extends BaseViewModel<FragmentAppBinding, FragmentEven
|
||||
mAppRepository = new AppRepository(context);
|
||||
}
|
||||
|
||||
public MutableLiveData<Integer> mAppUpdateData = new MutableLiveData<>();
|
||||
public SingleLiveEvent<Integer> mAppUpdateData = new SingleLiveEvent<>();
|
||||
|
||||
public void resetLiveData() {
|
||||
mAppUpdateData = new MutableLiveData<>();
|
||||
}
|
||||
// public void resetLiveData() {
|
||||
// mAppUpdateData = new MutableLiveData<>();
|
||||
// }
|
||||
|
||||
public void updateAppInfo(AppInfo appInfo) {
|
||||
Observable.fromCallable(new Callable<Integer>() {
|
||||
|
||||
@@ -13,6 +13,7 @@ import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
@@ -20,10 +21,14 @@ import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.ttstd.dialer.R;
|
||||
import com.ttstd.dialer.base.mvvm.fragment.BaseMvvmDialogFragment;
|
||||
import com.ttstd.dialer.databinding.FragmentCallBinding;
|
||||
import com.ttstd.dialer.db.contact.ContactInfo;
|
||||
import com.ttstd.dialer.service.DialerAccessibilityService;
|
||||
import com.ttstd.dialer.utils.AccessibilityServiceHelper;
|
||||
import com.ttstd.dialer.utils.ApkUtils;
|
||||
|
||||
public class CallFragment extends BaseMvvmDialogFragment<CallViewModel, FragmentCallBinding> {
|
||||
private static final String TAG = "CallFragment";
|
||||
@@ -120,17 +125,36 @@ public class CallFragment extends BaseMvvmDialogFragment<CallViewModel, Fragment
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "callNumber: " + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void callWeixin(int type) {
|
||||
if (AccessibilityServiceHelper.isAccessibilityServiceEnabled(mContext, DialerAccessibilityService.class)) {
|
||||
if (ApkUtils.isInstalled(mContext, "com.tencent.mm")) {
|
||||
Intent intent = new Intent(mContext, DialerAccessibilityService.class);
|
||||
intent.putExtra("ContactInfo", mContactInfo);
|
||||
intent.putExtra("callType", type);
|
||||
mContext.startService(intent);
|
||||
} else {
|
||||
Toaster.show("微信未安装,请安装后使用");
|
||||
ApkUtils.openAppStore(mContext, "com.tencent.mm");
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(mContext, "请现在打开无障碍服务中 - 拨号助手无障碍服务", Toast.LENGTH_LONG).show();
|
||||
AccessibilityServiceHelper.jumpToAccessibilitySettings(mContext);
|
||||
}
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
|
||||
public void callWechatVideo(View view) {
|
||||
|
||||
callWeixin(1);
|
||||
dismiss();
|
||||
}
|
||||
|
||||
public void callWechatAudio(View view) {
|
||||
|
||||
callWeixin(2);
|
||||
dismiss();
|
||||
}
|
||||
|
||||
|
||||
@@ -173,16 +173,6 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
}
|
||||
}
|
||||
|
||||
public void openAppStore(String pkg) {
|
||||
Uri uri = Uri.parse("market://details?id=" + pkg);
|
||||
Intent storeIntent = new Intent(Intent.ACTION_VIEW, uri);
|
||||
storeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
try {
|
||||
startActivity(storeIntent);
|
||||
} catch (Exception e1) {
|
||||
Log.e(TAG, "openWeixin storeIntent: " + e1.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
public void openContact(View view) {
|
||||
@@ -203,7 +193,7 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
ApkUtils.openPackage(mContext, "com.ss.android.ugc.aweme");
|
||||
} else {
|
||||
Toaster.show("抖音未安装,请安装后使用");
|
||||
openAppStore("com.ss.android.ugc.aweme");
|
||||
ApkUtils.openAppStore(mContext, "com.ss.android.ugc.aweme");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,11 +212,11 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "launchWeChat: " + e.getMessage());
|
||||
Toaster.show("打开微信失败");
|
||||
openAppStore("com.tencent.mm");
|
||||
ApkUtils.openAppStore(mContext, "com.tencent.mm");
|
||||
}
|
||||
} else {
|
||||
Toaster.show("微信未安装,请安装后使用");
|
||||
openAppStore("com.tencent.mm");
|
||||
ApkUtils.openAppStore(mContext, "com.tencent.mm");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.ttstd.dialer.service;
|
||||
|
||||
import android.accessibilityservice.AccessibilityService;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
|
||||
import com.ttstd.dialer.db.contact.ContactInfo;
|
||||
import com.ttstd.dialer.utils.ApkUtils;
|
||||
|
||||
public class DialerAccessibilityService extends AccessibilityService {
|
||||
private static final String TAG = "AccessibilityService";
|
||||
|
||||
|
||||
public static final int ACTION_VIDEO = 1;
|
||||
public static final int ACTION_AUDIO = 2;
|
||||
|
||||
private ContactInfo mContactInfo;
|
||||
|
||||
private int mCallType = ACTION_VIDEO;
|
||||
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInterrupt() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
if (intent != null) {
|
||||
mContactInfo = (ContactInfo) intent.getSerializableExtra("ContactInfo");
|
||||
mCallType = intent.getIntExtra("callType", 1);
|
||||
if (mContactInfo != null) {
|
||||
startWeixin();
|
||||
}
|
||||
}
|
||||
return super.onStartCommand(intent, flags, startId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void startWeixin() {
|
||||
Intent intent = new Intent();
|
||||
ComponentName cmp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI");
|
||||
intent.setAction(Intent.ACTION_MAIN);
|
||||
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
intent.setComponent(cmp);
|
||||
try {
|
||||
startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "launchWeChat: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.ttstd.dialer.utils;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import com.ttstd.dialer.service.DialerAccessibilityService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AccessibilityServiceHelper {
|
||||
private static final String TAG = "AccessibilityHelper";
|
||||
|
||||
/**
|
||||
* 检查特定的无障碍服务是否已启用
|
||||
*
|
||||
* @param context 上下文对象
|
||||
* @param serviceClass 你的无障碍服务类(例如 MyAccessibilityService.class)
|
||||
* @return true 已开启,false 未开启
|
||||
*/
|
||||
public static boolean isAccessibilityServiceEnabled(Context context, Class<?> serviceClass) {
|
||||
// 获取 AccessibilityManager 系统服务
|
||||
AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
|
||||
if (am == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 获取所有已启用的无障碍服务列表
|
||||
List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
|
||||
|
||||
// 构建你服务的完整组件标识符
|
||||
String expectedServiceId = new ComponentName(context, serviceClass).flattenToShortString();
|
||||
Log.e(TAG, "isAccessibilityServiceEnabled: expectedServiceId = " + expectedServiceId);
|
||||
for (AccessibilityServiceInfo serviceInfo : enabledServices) {
|
||||
Log.e(TAG, "isAccessibilityServiceEnabled: serviceInfo.getId() = " + serviceInfo.getId());
|
||||
if (expectedServiceId.equals(serviceInfo.getId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳转到系统的无障碍服务设置页面
|
||||
*
|
||||
* @param context 上下文对象
|
||||
*/
|
||||
public static void jumpToAccessibilitySettings(Context context) {
|
||||
try {
|
||||
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 通常从应用上下文启动时需要此标志
|
||||
String str = context.getPackageName() + "/com.ttstd.dialer.service." + DialerAccessibilityService.class.getCanonicalName();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(":settings:fragment_args_key", str);
|
||||
intent.putExtra(":settings:fragment_args_key", str);
|
||||
intent.putExtra(":settings:show_fragment_args", bundle);
|
||||
context.startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
// 处理跳转失败的情况,例如某些设备可能没有标准的设置界面
|
||||
e.printStackTrace();
|
||||
// 可以尝试跳转到系统通用设置作为备选方案
|
||||
Intent fallbackIntent = new Intent(Settings.ACTION_SETTINGS);
|
||||
fallbackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(fallbackIntent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -176,4 +177,15 @@ public class ApkUtils {
|
||||
return isSystemApp;
|
||||
}
|
||||
|
||||
|
||||
public static void openAppStore(Context context, String pkg) {
|
||||
Uri uri = Uri.parse("market://details?id=" + pkg);
|
||||
Intent storeIntent = new Intent(Intent.ACTION_VIEW, uri);
|
||||
storeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
try {
|
||||
context.startActivity(storeIntent);
|
||||
} catch (Exception e1) {
|
||||
Log.e(TAG, "openWeixin storeIntent: " + e1.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
12
app/src/main/res/drawable/ic_no_data.xml
Normal file
12
app/src/main/res/drawable/ic_no_data.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="307.8125dp"
|
||||
android:height="200dp"
|
||||
android:viewportWidth="1576"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M1260.53,834.87h-134.81l9.39,-15.7c6.31,-11.08 9.39,-23.7 9.39,-37.09L1144.5,168.82c0,-19.7 -7.85,-37.86 -21.24,-52.02 -13.39,-13.39 -32.32,-21.24 -52.02,-21.24L567.09,95.57c-19.7,0 -37.86,7.85 -52.01,21.24 -14.16,14.16 -21.24,32.32 -21.24,52.02v32.32h-73.25c-19.7,0 -37.86,7.85 -52.02,21.24 -14.16,14.16 -22.01,32.32 -22.01,52.01v612.34c0,12.62 3.08,25.24 9.39,37.09l9.39,15.7L251.92,939.51c-5.54,0 -10.31,4.77 -10.31,10.31 0,2.31 0.77,5.54 3.23,7.08 1.54,1.54 4.77,3.08 7.08,3.08h533.54l54.32,54.32c5.54,5.54 14.16,9.39 22.01,9.39 7.85,0 16.62,-3.08 22.01,-9.39 10.31,-10.31 11.85,-26.01 4.77,-38.63l-9.39,-16.62h129.27c5.54,0 10.31,-4.77 10.31,-10.31s-4.77,-10.31 -10.31,-10.31h-30.01l9.39,-15.7c6.31,-11.08 9.39,-23.7 9.39,-37.09v-32.32h263.16c5.54,0 10.31,-4.77 10.31,-10.31 0.15,-4.16 -4.62,-8.16 -10.16,-8.16zM976.91,886.88c0,29.09 -23.7,52.78 -52.78,52.78h-70.94l-73.25,-74.02c-7.85,-7.85 -19.7,-11.08 -30.01,-7.85l-6.31,1.54 -30.78,-30.78 5.54,-7.08c42.63,-57.56 33.86,-138.66 -19.7,-186.06 -53.55,-47.24 -135.58,-44.17 -186.05,7.08 -50.48,50.48 -52.79,132.35 -6.31,186.82 46.47,53.56 127.73,63.1 184.36,20.47l7.08,-5.54 30.78,30.78 -1.54,6.31c-3.08,11.08 0,22.93 7.85,30.78l29.08,29.09L419.67,941.21c-29.09,0 -52.79,-23.7 -52.79,-52.78L366.88,273.77c0,-28.32 22.93,-52.02 51.25,-52.02h507.54c28.32,0 51.25,23.7 51.25,52.02v613.11zM690.82,821.48c-22.93,22.93 -52.02,33.86 -82.03,33.86s-59.09,-11.08 -82.02,-33.86c-21.85,-21.7 -34.01,-51.25 -33.86,-82.03 0,-30.78 11.85,-60.63 33.86,-82.03 22.01,-22.01 51.25,-33.86 82.02,-33.86s59.86,11.85 82.03,33.86c22.01,22.01 33.86,51.25 33.86,82.03s-11.85,60.02 -33.86,82.03zM1124.18,781.31c0,29.08 -23.7,52.78 -52.78,52.78h-74.02L997.38,274.54c0,-19.7 -7.85,-37.86 -21.24,-52.02 -13.39,-13.39 -32.32,-21.24 -52.01,-21.24L514.31,201.29v-31.55c0,-29.08 23.7,-52.78 52.78,-52.78h504.46c29.08,0 52.78,23.7 52.78,52.78v611.57zM167.44,940.44L41.4,940.44c-5.54,0 -10.31,4.77 -10.31,10.31 0,3.08 0.77,5.54 3.08,7.08 1.54,1.54 4.77,3.08 7.08,3.08L167.28,960.9c5.54,0 10.31,-4.77 10.31,-10.31s-3.85,-10.16 -10.16,-10.16zM167.44,940.44"
|
||||
android:fillColor="#AEAEAE"/>
|
||||
<path
|
||||
android:pathData="M482.76,327.33h230.99c5.54,0 10.31,-4.77 10.31,-10.31s-4.77,-10.31 -10.31,-10.31L482.76,306.71c-5.54,0 -10.31,4.77 -10.31,10.31 0,2.31 0.77,5.54 3.08,7.08 1.69,2.46 4.77,3.23 7.23,3.23zM819.32,412.43L482.76,412.43c-5.54,0 -10.31,4.77 -10.31,10.31 0,3.08 0.77,5.54 3.08,7.08 1.54,1.54 4.77,3.08 7.08,3.08h336.56c5.54,0 10.31,-4.77 10.31,-10.31 0,-5.39 -4.77,-10.16 -10.16,-10.16zM630.04,518L482.61,518c-5.54,0 -10.31,4.77 -10.31,10.31 0,3.08 0.77,5.54 3.08,7.08 1.54,1.54 4.77,3.08 7.08,3.08h147.43c5.54,0 10.31,-4.77 10.31,-10.31s-4.62,-10.16 -10.16,-10.16zM157.28,707.91h21.24c5.54,0 10.31,4.77 10.31,10.31s-4.77,10.31 -10.31,10.31h-21.24v21.24c0,5.54 -4.77,10.31 -10.31,10.31 -3.08,0 -5.54,-0.77 -7.08,-3.08 -2.31,-1.54 -3.08,-4.77 -3.08,-7.08L136.81,728.68h-21.39c-5.54,0 -10.31,-4.77 -10.31,-10.31s4.77,-10.31 10.31,-10.31h21.24v-21.24c0,-5.54 4.77,-10.31 10.31,-10.31s10.31,4.77 10.31,10.31v21.08zM1544.31,622.8v-21.24c0,-3.23 -0.77,-5.54 -3.08,-7.08 -2.31,-1.54 -4.77,-3.08 -7.08,-3.08 -5.54,0 -10.31,4.77 -10.31,10.31v21.24h-21.24c-3.08,0 -5.54,0.77 -7.08,3.23 -1.54,2.31 -3.23,4.77 -3.23,7.08 0,5.54 4.77,10.31 10.31,10.31h21.24v21.24c0,5.54 4.77,10.31 10.31,10.31s10.31,-4.77 10.31,-10.31L1544.46,643.27h21.24c5.54,0 10.31,-4.77 10.31,-10.31s-4.77,-10.31 -10.31,-10.31h-21.39zM267.62,47.55h31.55c8.62,0 15.7,7.08 15.7,15.7s-7.08,15.7 -15.7,15.7h-31.55v31.55c0,8.62 -7.08,15.7 -15.7,15.7 -4,0 -7.85,-1.54 -11.08,-4.77 -3.08,-2.31 -4.77,-6.31 -4.77,-11.08L236.07,79.1h-31.55c-4,0 -7.85,-1.54 -11.08,-4.77 -3.08,-2.31 -4.77,-6.31 -4.77,-11.08 0,-8.62 7.08,-15.7 15.7,-15.7h31.55L235.92,16c0,-8.62 7.08,-15.7 15.7,-15.7s15.7,7.08 15.7,15.7v31.55zM62.63,274.54c-22.93,0 -43.4,11.85 -54.32,31.55 -11.08,19.7 -11.08,44.17 0,63.1 11.08,19.7 32.32,31.55 54.32,31.55 34.63,0 63.1,-28.32 63.1,-63.1s-28.47,-63.1 -63.1,-63.1zM90.18,354.11c-5.54,9.39 -15.7,15.7 -27.55,15.7 -17.39,0 -31.55,-14.16 -31.55,-31.55s14.16,-31.55 31.55,-31.55c11.08,0 21.24,6.31 27.55,15.7 5.54,9.69 5.54,21.39 0,31.7zM1365.49,148.35c-22.93,0 -43.4,11.85 -54.32,31.55 -11.08,19.7 -11.08,44.17 0,63.1 11.08,19.7 32.32,31.55 54.32,31.55 34.63,0 63.1,-28.32 63.1,-63.1 -0.15,-34.63 -27.7,-63.1 -63.1,-63.1zM1393.03,227.15c-5.54,9.39 -15.7,15.7 -27.55,15.7 -17.39,0 -31.55,-14.16 -31.55,-31.55s14.16,-31.55 31.55,-31.55c11.08,0 22.01,6.31 27.55,15.7 5.54,9.7 5.54,22.32 0,31.7zM1393.03,227.15"
|
||||
android:fillColor="#AEAEAE"/>
|
||||
</vector>
|
||||
7
app/src/main/res/layout/layout_empty_contacts.xml
Normal file
7
app/src/main/res/layout/layout_empty_contacts.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -4,4 +4,7 @@
|
||||
<!-- TODO: Remove or change this placeholder text -->
|
||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||
<string name="floating_action_button_behavior">com.ttstd.dialer.view.ScrollAwareFABBehavior</string>
|
||||
|
||||
<string name="accessibility_service_label">❤拨号助手无障碍服务👈🏻</string>
|
||||
<string name="accessibility_service_description">使用拨号助手一键拨号</string>
|
||||
</resources>
|
||||
|
||||
10
app/src/main/res/xml/accessibility_service_config.xml
Normal file
10
app/src/main/res/xml/accessibility_service_config.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:accessibilityEventTypes="typeAllMask"
|
||||
android:accessibilityFeedbackType="feedbackAllMask"
|
||||
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds"
|
||||
android:canPerformGestures="true"
|
||||
android:canRequestEnhancedWebAccessibility="true"
|
||||
android:canRetrieveWindowContent="true"
|
||||
android:description="@string/accessibility_service_description"
|
||||
android:notificationTimeout="100"
|
||||
android:packageNames="com.tencent.mm,com.android.incallui" />
|
||||
Reference in New Issue
Block a user