version:1.5.2
fix: update:增加通话白名单,整点报时选项
This commit is contained in:
@@ -15,8 +15,8 @@ android {
|
|||||||
applicationId "com.xxpatx.os"
|
applicationId "com.xxpatx.os"
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 1049
|
versionCode 1052
|
||||||
versionName "1.4.9"
|
versionName "1.5.2"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
|||||||
@@ -154,15 +154,23 @@
|
|||||||
android:name=".activity.setting.SettingActivity"
|
android:name=".activity.setting.SettingActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:screenOrientation="portrait" />
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name=".activity.setting.TimeActivity"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.sim.SimCardActivity"
|
android:name=".activity.sim.SimCardActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:screenOrientation="portrait" />
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name=".activity.phone.WhiteListActivity"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.contact.ContactListActivity"
|
android:name=".activity.contact.ContactListActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:theme="@style/AppTheme"
|
android:screenOrientation="portrait"
|
||||||
android:screenOrientation="portrait" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.dock.DockActivity"
|
android:name=".activity.dock.DockActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
@@ -225,13 +233,13 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".activity.FlashlightActivity"
|
android:name=".activity.FlashlightActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:theme="@style/AppTheme"
|
android:screenOrientation="portrait"
|
||||||
android:screenOrientation="portrait" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.NetworkActivity"
|
android:name=".activity.NetworkActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:theme="@style/AppTheme"
|
android:screenOrientation="portrait"
|
||||||
android:screenOrientation="portrait" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.selectnumber.SelectNumberActivity"
|
android:name=".activity.selectnumber.SelectNumberActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
@@ -254,8 +262,8 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".activity.contact.AddContactActivity"
|
android:name=".activity.contact.AddContactActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:theme="@style/AppTheme"
|
android:screenOrientation="portrait"
|
||||||
android:screenOrientation="portrait" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.callwechat.CallWechatActivity"
|
android:name=".activity.callwechat.CallWechatActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.zkwl.system.apiservice.contact;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
interface IZkwlContactManager {
|
||||||
|
|
||||||
|
void addBlockedContactNumber(String phoneNumber);
|
||||||
|
|
||||||
|
void deleteBlockedContactNumber(String phoneNumber);
|
||||||
|
|
||||||
|
void deleteAllBlockedContactNumbers();
|
||||||
|
|
||||||
|
List<String> getAllBlockedContactNumbers();
|
||||||
|
|
||||||
|
void addWhitelistContactNumber(String phoneNumber);
|
||||||
|
|
||||||
|
void deleteWhitelistContactNumber(String phoneNumber);
|
||||||
|
|
||||||
|
void deleteAllWhitelistContactNumbers();
|
||||||
|
|
||||||
|
List<String> getAllWhitelistContactNumbers();
|
||||||
|
|
||||||
|
void hangUpPhone();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -22,7 +22,6 @@ import android.os.Bundle;
|
|||||||
import android.provider.CallLog;
|
import android.provider.CallLog;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.speech.tts.TextToSpeech;
|
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -65,6 +64,7 @@ import com.xxpatx.os.bean.AppInfo;
|
|||||||
import com.xxpatx.os.bean.DesktopIcon;
|
import com.xxpatx.os.bean.DesktopIcon;
|
||||||
import com.xxpatx.os.bean.DockApp;
|
import com.xxpatx.os.bean.DockApp;
|
||||||
import com.xxpatx.os.bean.MapBean;
|
import com.xxpatx.os.bean.MapBean;
|
||||||
|
import com.xxpatx.os.bean.SystemSettings;
|
||||||
import com.xxpatx.os.bean.TestAppInfo;
|
import com.xxpatx.os.bean.TestAppInfo;
|
||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
import com.xxpatx.os.databinding.ActivityMainBinding;
|
import com.xxpatx.os.databinding.ActivityMainBinding;
|
||||||
@@ -74,6 +74,7 @@ import com.xxpatx.os.fragment.home.HomeFragment;
|
|||||||
import com.xxpatx.os.fragment.settings.SettingsFragment;
|
import com.xxpatx.os.fragment.settings.SettingsFragment;
|
||||||
import com.xxpatx.os.manager.AmapManager;
|
import com.xxpatx.os.manager.AmapManager;
|
||||||
import com.xxpatx.os.manager.DesktopIconManager;
|
import com.xxpatx.os.manager.DesktopIconManager;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.service.NotificationService;
|
import com.xxpatx.os.service.NotificationService;
|
||||||
import com.xxpatx.os.utils.ApkUtils;
|
import com.xxpatx.os.utils.ApkUtils;
|
||||||
import com.xxpatx.os.utils.AppUsedTimeUtils;
|
import com.xxpatx.os.utils.AppUsedTimeUtils;
|
||||||
@@ -92,7 +93,6 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import me.jessyan.autosize.AutoSizeCompat;
|
import me.jessyan.autosize.AutoSizeCompat;
|
||||||
import me.jessyan.autosize.AutoSizeConfig;
|
import me.jessyan.autosize.AutoSizeConfig;
|
||||||
@@ -100,7 +100,7 @@ import me.jessyan.autosize.AutoSizeConfig;
|
|||||||
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
|
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
|
||||||
|
|
||||||
public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBinding> implements NetworkUtils.OnNetworkStatusChangedListener,
|
public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBinding> implements NetworkUtils.OnNetworkStatusChangedListener,
|
||||||
NotificationService.NotificationListener, TextToSpeech.OnInitListener {
|
NotificationService.NotificationListener {
|
||||||
private static final String TAG = "MainActivity";
|
private static final String TAG = "MainActivity";
|
||||||
|
|
||||||
|
|
||||||
@@ -690,6 +690,16 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
});
|
});
|
||||||
mViewModel.getTestApp();
|
mViewModel.getTestApp();
|
||||||
|
|
||||||
|
mViewModel.mSystemSettingsData.observe(this, new Observer<SystemSettings>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(SystemSettings systemSettings) {
|
||||||
|
if (systemSettings.getPhone_white_list() == 1) {
|
||||||
|
mViewModel.getContact();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mViewModel.getSetting();
|
||||||
|
|
||||||
registReceiver();
|
registReceiver();
|
||||||
initAmap();
|
initAmap();
|
||||||
}
|
}
|
||||||
@@ -1266,11 +1276,10 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false);
|
boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false);
|
||||||
Log.e(TAG, "onReceive: voiceBroadcast = " + voiceBroadcast);
|
Log.e(TAG, "onReceive: voiceBroadcast = " + voiceBroadcast);
|
||||||
if (voiceBroadcast) {
|
if (voiceBroadcast) {
|
||||||
mTextToSpeech = new TextToSpeech(MainActivity.this, MainActivity.this);
|
|
||||||
if (TextUtils.isEmpty(number)) {
|
if (TextUtils.isEmpty(number)) {
|
||||||
mPhoneInfo = "未知号码来电";
|
SpeechManager.getInstance().speak("未知号码来电");
|
||||||
} else {
|
} else {
|
||||||
mPhoneInfo = "来自" + getContactName(number) + number + "的电话";
|
SpeechManager.getInstance().speak("来自" + getContactName(number) + number + "的电话");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1278,35 +1287,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private TextToSpeech mTextToSpeech;
|
|
||||||
private String mPhoneInfo;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onInit(int status) {
|
|
||||||
//初始化成功
|
|
||||||
if (status == TextToSpeech.SUCCESS) {
|
|
||||||
Log.e(TAG, "init success");
|
|
||||||
//设置语言
|
|
||||||
int result = mTextToSpeech.setLanguage(Locale.CHINA);
|
|
||||||
if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
|
|
||||||
&& result != TextToSpeech.LANG_AVAILABLE) {
|
|
||||||
} else {
|
|
||||||
//设置音调
|
|
||||||
mTextToSpeech.setPitch(1.0f);
|
|
||||||
//设置语速,1.0为正常语速
|
|
||||||
mTextToSpeech.setSpeechRate(1.0f);
|
|
||||||
//播放
|
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
|
||||||
stringBuilder.append(mPhoneInfo);
|
|
||||||
mTextToSpeech.speak(stringBuilder.toString(), TextToSpeech.QUEUE_ADD, null);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e(TAG, "init fail");
|
|
||||||
Toaster.showLong("TTS初始化失败");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTime() {
|
private void setTime() {
|
||||||
LiveEventBus
|
LiveEventBus
|
||||||
.get("time")
|
.get("time")
|
||||||
@@ -1345,25 +1325,32 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
|
|||||||
return Settings.Secure.getInt(getContentResolver(), "flashlight_enabled", 0) == 1;
|
return Settings.Secure.getInt(getContentResolver(), "flashlight_enabled", 0) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void speak(String text) {
|
||||||
|
SpeechManager.getInstance().speakApp("正在打开 " + text);
|
||||||
|
}
|
||||||
|
|
||||||
public class BtnClick {
|
public class BtnClick {
|
||||||
public void dialer(View view) {
|
public void dialer(View view) {
|
||||||
// startActivity(new Intent(Intent.ACTION_DIAL));
|
// startActivity(new Intent(Intent.ACTION_DIAL));
|
||||||
startActivity(new Intent(MainActivity.this, PhoneActivity.class));
|
startActivity(new Intent(MainActivity.this, PhoneActivity.class));
|
||||||
|
speak("拨号");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void wechat(View v) {
|
public void wechat(View v) {
|
||||||
// ApkUtils.openPackage(MainActivity.this, "com.android.mms");
|
// ApkUtils.openPackage(MainActivity.this, "com.android.mms");
|
||||||
ApkUtils.openPackage(MainActivity.this, "com.tencent.mm");
|
ApkUtils.openPackage(MainActivity.this, "com.tencent.mm");
|
||||||
|
speak("微信");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toTiktok(View v) {
|
public void toTiktok(View v) {
|
||||||
// ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
|
// ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
|
||||||
ApkUtils.openPackage(MainActivity.this, "com.ss.android.ugc.aweme");
|
ApkUtils.openPackage(MainActivity.this, "com.ss.android.ugc.aweme");
|
||||||
|
speak("抖音");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toCamera(View v) {
|
public void toCamera(View v) {
|
||||||
ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
|
ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
|
||||||
|
speak("相机");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toCalendar(View v) {
|
public void toCalendar(View v) {
|
||||||
|
|||||||
@@ -31,12 +31,14 @@ 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.SnInfo;
|
import com.xxpatx.os.bean.SnInfo;
|
||||||
|
import com.xxpatx.os.bean.SystemSettings;
|
||||||
import com.xxpatx.os.bean.TestAppInfo;
|
import com.xxpatx.os.bean.TestAppInfo;
|
||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
import com.xxpatx.os.databinding.ActivityMainBinding;
|
import com.xxpatx.os.databinding.ActivityMainBinding;
|
||||||
import com.xxpatx.os.db.ContactCacheUtils;
|
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.manager.ContactManager;
|
||||||
import com.xxpatx.os.network.NetInterfaceManager;
|
import com.xxpatx.os.network.NetInterfaceManager;
|
||||||
import com.xxpatx.os.service.main.MainService;
|
import com.xxpatx.os.service.main.MainService;
|
||||||
import com.xxpatx.os.utils.ActivationUtil;
|
import com.xxpatx.os.utils.ActivationUtil;
|
||||||
@@ -452,4 +454,77 @@ public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEv
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<SystemSettings> mSystemSettingsData = new MutableLiveData<>();
|
||||||
|
|
||||||
|
public void getSetting() {
|
||||||
|
NetInterfaceManager.getInstance().getSettingControl()
|
||||||
|
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
|
||||||
|
.subscribe(new Observer<BaseResponse<SystemSettings>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NonNull Disposable d) {
|
||||||
|
Log.e("getSetting", "onSubscribe: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NonNull BaseResponse<SystemSettings> baseResponse) {
|
||||||
|
Log.e("getSetting", "onNext: " + baseResponse);
|
||||||
|
if (baseResponse.code == 200) {
|
||||||
|
SystemSettings systemSettings = baseResponse.data;
|
||||||
|
mSystemSettingsData.setValue(systemSettings);
|
||||||
|
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, systemSettings.getHour_notify());
|
||||||
|
mMMKV.encode(CommonConfig.VOICE_SPEAKER_KEY, systemSettings.getVoice_speaker());
|
||||||
|
mMMKV.encode(CommonConfig.PHONE_WHITE_LIST, systemSettings.getPhone_white_list());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(@NonNull Throwable e) {
|
||||||
|
Log.e("getSetting", "onError: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
Log.e("getSetting", "onComplete: ");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getContact() {
|
||||||
|
NetInterfaceManager.getInstance().getContactListObservable()
|
||||||
|
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
|
||||||
|
.subscribe(new Observer<BaseResponse<List<Contact>>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NonNull Disposable d) {
|
||||||
|
Log.e("getContact", "onSubscribe: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NonNull BaseResponse<List<Contact>> listBaseResponse) {
|
||||||
|
Log.e("getContact", "onNext: " + listBaseResponse);
|
||||||
|
if (listBaseResponse.code == 200) {
|
||||||
|
int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
if (phone_white_list == 1) {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
List<Contact> contactList = listBaseResponse.data;
|
||||||
|
for (Contact contact : contactList) {
|
||||||
|
if (TextUtils.isEmpty(contact.getMobile())) continue;
|
||||||
|
ContactManager.getInstance().addWhiteList(contact.getMobile());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(@NonNull Throwable e) {
|
||||||
|
Log.e("getContact", "onError: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
Log.e("getContact", "onComplete: ");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package com.xxpatx.os.activity.phone;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.telecom.TelecomManager;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.xxpatx.os.R;
|
||||||
|
import com.xxpatx.os.adapter.WhiteListAdapter;
|
||||||
|
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
|
||||||
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.xxpatx.os.databinding.ActivityWhiteListBinding;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
|
|
||||||
|
public class WhiteListActivity extends BaseMvvmActivity<WhiteListViewModel, ActivityWhiteListBinding> {
|
||||||
|
private static final String TAG = "WhiteListActivity";
|
||||||
|
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
|
private WhiteListAdapter mWhiteListAdapter;
|
||||||
|
private TelecomManager mTelecomManager;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLayoutId() {
|
||||||
|
return R.layout.activity_white_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initDataBinding() {
|
||||||
|
mViewModel.setCtx(this);
|
||||||
|
mViewModel.setVDBinding(mViewDataBinding);
|
||||||
|
mViewModel.setLifecycle(getLifecycleSubject());
|
||||||
|
mViewDataBinding.setClick(new BtnClick());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initView() {
|
||||||
|
mWhiteListAdapter = new WhiteListAdapter();
|
||||||
|
mWhiteListAdapter.setListChangeListener(new WhiteListAdapter.ListChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onChanged() {
|
||||||
|
mWhiteListAdapter.setPhoneList(ContactManager.getInstance().getWhiteListData());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
|
||||||
|
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
||||||
|
mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager);
|
||||||
|
mViewDataBinding.recyclerView.setAdapter(mWhiteListAdapter);
|
||||||
|
int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
mViewDataBinding.setWhiteList(phone_white_list == 1);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initData() {
|
||||||
|
mTelecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
|
||||||
|
mWhiteListAdapter.setPhoneList(ContactManager.getInstance().getWhiteListData());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class BtnClick {
|
||||||
|
public void exit(View view) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openWhiteList(View view) {
|
||||||
|
// int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.xxpatx.os.activity.phone;
|
||||||
|
|
||||||
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||||
|
import com.xxpatx.os.base.mvvm.BaseViewModel;
|
||||||
|
import com.xxpatx.os.databinding.ActivityWhiteListBinding;
|
||||||
|
|
||||||
|
public class WhiteListViewModel extends BaseViewModel<ActivityWhiteListBinding, ActivityEvent> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActivityWhiteListBinding getVDBinding() {
|
||||||
|
return binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ import com.tencent.mmkv.MMKV;
|
|||||||
import com.xxpatx.os.BuildConfig;
|
import com.xxpatx.os.BuildConfig;
|
||||||
import com.xxpatx.os.R;
|
import com.xxpatx.os.R;
|
||||||
import com.xxpatx.os.activity.dock.DockActivity;
|
import com.xxpatx.os.activity.dock.DockActivity;
|
||||||
|
import com.xxpatx.os.activity.phone.WhiteListActivity;
|
||||||
import com.xxpatx.os.activity.sim.SimCardActivity;
|
import com.xxpatx.os.activity.sim.SimCardActivity;
|
||||||
import com.xxpatx.os.activity.tts.TtsActivity;
|
import com.xxpatx.os.activity.tts.TtsActivity;
|
||||||
import com.xxpatx.os.activity.update.UpdateActivity;
|
import com.xxpatx.os.activity.update.UpdateActivity;
|
||||||
@@ -30,7 +31,6 @@ import com.xxpatx.os.bean.AppInfo;
|
|||||||
import com.xxpatx.os.bean.SystemSettings;
|
import com.xxpatx.os.bean.SystemSettings;
|
||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
import com.xxpatx.os.databinding.ActivitySettingBinding;
|
import com.xxpatx.os.databinding.ActivitySettingBinding;
|
||||||
import com.xxpatx.os.dialog.CustomDialog;
|
|
||||||
import com.xxpatx.os.service.WeAccessibilityService;
|
import com.xxpatx.os.service.WeAccessibilityService;
|
||||||
import com.xxpatx.os.service.main.MainService;
|
import com.xxpatx.os.service.main.MainService;
|
||||||
import com.xxpatx.os.utils.AccessibilityUtils;
|
import com.xxpatx.os.utils.AccessibilityUtils;
|
||||||
@@ -127,14 +127,18 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
|||||||
Log.e(TAG, "initView: dialTone = " + dialTone);
|
Log.e(TAG, "initView: dialTone = " + dialTone);
|
||||||
mViewDataBinding.setDialTone(dialTone);
|
mViewDataBinding.setDialTone(dialTone);
|
||||||
|
|
||||||
int code = Settings.System.getInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, 0);
|
int code = Settings.System.getInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, 1);
|
||||||
boolean statusBar = code == 1;
|
boolean statusBar = code == 1;
|
||||||
Log.e(TAG, "setStatusBar: statusBar = " + statusBar);
|
Log.e(TAG, "setStatusBar: statusBar = " + statusBar);
|
||||||
mViewDataBinding.setStatusBar(statusBar);
|
mViewDataBinding.setStatusBar(statusBar);
|
||||||
|
|
||||||
boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
boolean hourly_time = mMMKV.decodeInt(CommonConfig.HOURLY_TIME_SIGNAL_KEY, 0) == 1;
|
||||||
Log.e(TAG, "setHourlyTimeSignal: hourly_time = " + hourly_time);
|
Log.e(TAG, "setHourlyTimeSignal: hourly_time = " + hourly_time);
|
||||||
mViewDataBinding.setHourlyTime(hourly_time);
|
mViewDataBinding.setHourlyTime(hourly_time);
|
||||||
|
|
||||||
|
boolean voiceSpeaker = mMMKV.decodeInt(CommonConfig.VOICE_SPEAKER_KEY, 0) == 1;
|
||||||
|
Log.e(TAG, "appSpeak: voiceSpeaker = " + voiceSpeaker);
|
||||||
|
mViewDataBinding.setVoiceSpeaker(voiceSpeaker);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200;
|
private static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200;
|
||||||
@@ -292,6 +296,13 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void appSpeak(View view) {
|
||||||
|
boolean voiceSpeaker = mMMKV.decodeInt(CommonConfig.VOICE_SPEAKER_KEY, 0) == 1;
|
||||||
|
Log.e(TAG, "appSpeak: voiceSpeaker = " + voiceSpeaker);
|
||||||
|
mViewDataBinding.setVoiceSpeaker(!voiceSpeaker);
|
||||||
|
mMMKV.encode(CommonConfig.VOICE_SPEAKER_KEY, voiceSpeaker ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
public void setDialTone(View view) {
|
public void setDialTone(View view) {
|
||||||
boolean dialTone = mMMKV.decodeBool(CommonConfig.DISABLE_DIAL_TONE_MODIFY, true);
|
boolean dialTone = mMMKV.decodeBool(CommonConfig.DISABLE_DIAL_TONE_MODIFY, true);
|
||||||
Log.e(TAG, "setDialTone: dialTone = " + dialTone);
|
Log.e(TAG, "setDialTone: dialTone = " + dialTone);
|
||||||
@@ -300,36 +311,37 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setHourlyTimeSignal(View view) {
|
public void setHourlyTimeSignal(View view) {
|
||||||
boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
startActivity(new Intent(SettingActivity.this, TimeActivity.class));
|
||||||
Log.e(TAG, "setHourlyTimeSignal: hourly_time = " + hourly_time);
|
// boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
||||||
if (!hourly_time) {
|
// Log.e(TAG, "setHourlyTimeSignal: hourly_time = " + hourly_time);
|
||||||
CustomDialog customDialog = new CustomDialog(SettingActivity.this);
|
// if (!hourly_time) {
|
||||||
customDialog.setTitle("温馨提示")
|
// CustomDialog customDialog = new CustomDialog(SettingActivity.this);
|
||||||
.setMessage("整点报时时间为7点至21点")
|
// customDialog.setTitle("温馨提示")
|
||||||
.setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
|
// .setMessage("整点报时时间为7点至21点")
|
||||||
@Override
|
// .setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
|
||||||
public void onPositiveClick() {
|
// @Override
|
||||||
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, true);
|
// public void onPositiveClick() {
|
||||||
mViewDataBinding.setHourlyTime(true);
|
// mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, true);
|
||||||
Intent intent = new Intent(MainService.XXOS_ACTION_TIME_CHANGED);
|
// mViewDataBinding.setHourlyTime(true);
|
||||||
sendBroadcast(intent);
|
// Intent intent = new Intent(MainService.XXOS_ACTION_TIME_CHANGED);
|
||||||
customDialog.dismiss();
|
// sendBroadcast(intent);
|
||||||
}
|
// customDialog.dismiss();
|
||||||
|
// }
|
||||||
@Override
|
//
|
||||||
public void onNegtiveClick() {
|
// @Override
|
||||||
customDialog.dismiss();
|
// public void onNegtiveClick() {
|
||||||
}
|
// customDialog.dismiss();
|
||||||
});
|
// }
|
||||||
customDialog.show();
|
// });
|
||||||
} else {
|
// customDialog.show();
|
||||||
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
// } else {
|
||||||
mViewDataBinding.setHourlyTime(false);
|
// mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
||||||
}
|
// mViewDataBinding.setHourlyTime(false);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStatusBar(View view) {
|
public void setStatusBar(View view) {
|
||||||
boolean statusBar = Settings.System.getInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, 0) == 1;
|
boolean statusBar = Settings.System.getInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, 1) == 1;
|
||||||
String statusbarStatus;
|
String statusbarStatus;
|
||||||
if (statusBar) {
|
if (statusBar) {
|
||||||
statusbarStatus = CommonConfig.ACTION_HIDE_STATUS_BAR;
|
statusbarStatus = CommonConfig.ACTION_HIDE_STATUS_BAR;
|
||||||
@@ -345,6 +357,10 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
|||||||
Settings.System.putInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, statusBar ? 0 : 1);
|
Settings.System.putInt(getContentResolver(), CommonConfig.ACTION_STATUS_BAR_STATE, statusBar ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBlacklist(View view) {
|
||||||
|
startActivity(new Intent(SettingActivity.this, WhiteListActivity.class));
|
||||||
|
}
|
||||||
|
|
||||||
public void setSimCard(View view) {
|
public void setSimCard(View view) {
|
||||||
startActivity(new Intent(SettingActivity.this, SimCardActivity.class));
|
startActivity(new Intent(SettingActivity.this, SimCardActivity.class));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public class SettingViewModel extends BaseViewModel<ActivitySettingBinding, Acti
|
|||||||
Log.e("getSystemSettings", "onNext: " + systemSettingsBaseResponse);
|
Log.e("getSystemSettings", "onNext: " + systemSettingsBaseResponse);
|
||||||
if (systemSettingsBaseResponse.code == 200) {
|
if (systemSettingsBaseResponse.code == 200) {
|
||||||
SystemSettings systemSettings = systemSettingsBaseResponse.data;
|
SystemSettings systemSettings = systemSettingsBaseResponse.data;
|
||||||
|
|
||||||
mSystemSettingsData.setValue(systemSettings);
|
mSystemSettingsData.setValue(systemSettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,132 @@
|
|||||||
|
package com.xxpatx.os.activity.setting;
|
||||||
|
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.xxpatx.os.R;
|
||||||
|
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
|
||||||
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.xxpatx.os.databinding.ActivityTimeBinding;
|
||||||
|
import com.xxpatx.os.gson.GsonUtils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class TimeActivity extends BaseMvvmActivity<TimeViewModel, ActivityTimeBinding> {
|
||||||
|
private static final String TAG = "TimeActivity";
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
|
private List<Integer> mTimeList;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLayoutId() {
|
||||||
|
return R.layout.activity_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initDataBinding() {
|
||||||
|
mViewModel.setCtx(this);
|
||||||
|
mViewModel.setVDBinding(mViewDataBinding);
|
||||||
|
mViewModel.setLifecycle(getLifecycleSubject());
|
||||||
|
mViewDataBinding.setClick(new BtnClick());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initView() {
|
||||||
|
String timeString = mMMKV.decodeString(CommonConfig.TIME_HOUR_LIST_KEY);
|
||||||
|
if (TextUtils.isEmpty(timeString)) {
|
||||||
|
mTimeList = new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<Integer>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
mTimeList = gson.fromJson(timeString, type);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "getLocalContact: " + e.getMessage());
|
||||||
|
mMMKV.remove(CommonConfig.TIME_HOUR_LIST_KEY);
|
||||||
|
mTimeList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mTimeList.forEach(new Consumer<Integer>() {
|
||||||
|
@Override
|
||||||
|
public void accept(Integer integer) {
|
||||||
|
Log.e(TAG, "accept: " + integer);
|
||||||
|
int layoutID = getResources().getIdentifier("sw_time_" + integer, "id", getPackageName());
|
||||||
|
Switch aSwitch = getWindow().findViewById(layoutID);
|
||||||
|
if (aSwitch != null) {
|
||||||
|
aSwitch.setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
boolean hourly_time = mMMKV.decodeInt(CommonConfig.HOURLY_TIME_SIGNAL_KEY, 0) == 1;
|
||||||
|
mViewDataBinding.swTimeHour.setChecked(hourly_time);
|
||||||
|
mViewDataBinding.swTimeHour.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
||||||
|
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, b ? 1 : 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mViewDataBinding.swTime0.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 0));
|
||||||
|
mViewDataBinding.swTime1.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 1));
|
||||||
|
mViewDataBinding.swTime2.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 2));
|
||||||
|
mViewDataBinding.swTime3.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 3));
|
||||||
|
mViewDataBinding.swTime4.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 4));
|
||||||
|
mViewDataBinding.swTime5.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 5));
|
||||||
|
mViewDataBinding.swTime6.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 6));
|
||||||
|
mViewDataBinding.swTime7.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 7));
|
||||||
|
mViewDataBinding.swTime8.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 8));
|
||||||
|
mViewDataBinding.swTime9.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 9));
|
||||||
|
mViewDataBinding.swTime10.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 10));
|
||||||
|
mViewDataBinding.swTime11.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 11));
|
||||||
|
mViewDataBinding.swTime12.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 12));
|
||||||
|
mViewDataBinding.swTime13.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 13));
|
||||||
|
mViewDataBinding.swTime14.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 14));
|
||||||
|
mViewDataBinding.swTime15.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 15));
|
||||||
|
mViewDataBinding.swTime16.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 16));
|
||||||
|
mViewDataBinding.swTime17.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 17));
|
||||||
|
mViewDataBinding.swTime18.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 18));
|
||||||
|
mViewDataBinding.swTime19.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 19));
|
||||||
|
mViewDataBinding.swTime20.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 20));
|
||||||
|
mViewDataBinding.swTime21.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 21));
|
||||||
|
mViewDataBinding.swTime22.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 22));
|
||||||
|
mViewDataBinding.swTime23.setOnCheckedChangeListener((compoundButton, b) -> setTime(b, 23));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initData() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTime(boolean open, Integer integer) {
|
||||||
|
if (mTimeList == null) {
|
||||||
|
mTimeList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (open) {
|
||||||
|
mTimeList.add(integer);
|
||||||
|
} else {
|
||||||
|
mTimeList.remove(integer);
|
||||||
|
}
|
||||||
|
Log.e(TAG, "setTime: " + GsonUtils.toJSONString(mTimeList));
|
||||||
|
mMMKV.encode(CommonConfig.TIME_HOUR_LIST_KEY, GsonUtils.toJSONString(mTimeList));
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BtnClick {
|
||||||
|
public void exit(View view) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.xxpatx.os.activity.setting;
|
||||||
|
|
||||||
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||||
|
import com.xxpatx.os.base.mvvm.BaseViewModel;
|
||||||
|
import com.xxpatx.os.databinding.ActivityTimeBinding;
|
||||||
|
|
||||||
|
public class TimeViewModel extends BaseViewModel<ActivityTimeBinding, ActivityEvent> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActivityTimeBinding getVDBinding() {
|
||||||
|
return binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,17 +3,14 @@ package com.xxpatx.os.activity.tts;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.speech.tts.TextToSpeech;
|
import android.speech.tts.TextToSpeech;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.hjq.toast.Toaster;
|
|
||||||
import com.xxpatx.os.R;
|
import com.xxpatx.os.R;
|
||||||
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
|
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
|
||||||
import com.xxpatx.os.databinding.ActivityTtsBinding;
|
import com.xxpatx.os.databinding.ActivityTtsBinding;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
|
|
||||||
import java.util.Locale;
|
public class TtsActivity extends BaseMvvmActivity<TtsViewModel, ActivityTtsBinding> {
|
||||||
|
|
||||||
public class TtsActivity extends BaseMvvmActivity<TtsViewModel, ActivityTtsBinding> implements TextToSpeech.OnInitListener {
|
|
||||||
private static final String TAG = "TtsActivity";
|
private static final String TAG = "TtsActivity";
|
||||||
|
|
||||||
|
|
||||||
@@ -47,40 +44,13 @@ public class TtsActivity extends BaseMvvmActivity<TtsViewModel, ActivityTtsBindi
|
|||||||
if (TextUtils.isEmpty(mBody)) {
|
if (TextUtils.isEmpty(mBody)) {
|
||||||
finish();
|
finish();
|
||||||
} else {
|
} else {
|
||||||
mTextToSpeech = new TextToSpeech(this, this);
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append("收到来自").append(mSender).append("的短信").append(mBody);
|
||||||
|
SpeechManager.getInstance().speak(stringBuilder.toString());
|
||||||
mViewDataBinding.setBody(mBody);
|
mViewDataBinding.setBody(mBody);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onInit(int status) {
|
|
||||||
//初始化成功
|
|
||||||
if (status == TextToSpeech.SUCCESS) {
|
|
||||||
Log.e(TAG, "init success");
|
|
||||||
//设置语言
|
|
||||||
int result = mTextToSpeech.setLanguage(Locale.CHINA);
|
|
||||||
if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
|
|
||||||
&& result != TextToSpeech.LANG_AVAILABLE) {
|
|
||||||
Toaster.showLong("TTS暂不支持这种语音的朗读");
|
|
||||||
finish();
|
|
||||||
} else {
|
|
||||||
//设置音调
|
|
||||||
mTextToSpeech.setPitch(1.0f);
|
|
||||||
//设置语速,1.0为正常语速
|
|
||||||
mTextToSpeech.setSpeechRate(1.0f);
|
|
||||||
//播放
|
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
|
||||||
stringBuilder.append("收到来自").append(mSender).append("的短信").append(mBody);
|
|
||||||
mTextToSpeech.speak(stringBuilder.toString(), TextToSpeech.QUEUE_ADD, null);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e(TAG, "init fail");
|
|
||||||
Toaster.showLong("TTS初始化失败");
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
|||||||
import com.xxpatx.os.R;
|
import com.xxpatx.os.R;
|
||||||
import com.xxpatx.os.activity.phone.PhoneActivity;
|
import com.xxpatx.os.activity.phone.PhoneActivity;
|
||||||
import com.xxpatx.os.bean.DockApp;
|
import com.xxpatx.os.bean.DockApp;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.service.NotificationService;
|
import com.xxpatx.os.service.NotificationService;
|
||||||
import com.xxpatx.os.utils.ApkUtils;
|
import com.xxpatx.os.utils.ApkUtils;
|
||||||
|
|
||||||
@@ -91,10 +92,12 @@ public class DockAppGridAdapter extends BaseAdapter {
|
|||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
switch (pkg) {
|
switch (pkg) {
|
||||||
case "xxpatx.os.dialer":
|
case "xxpatx.os.dialer":
|
||||||
|
speak("电话");
|
||||||
mContext.startActivity(new Intent(mContext, PhoneActivity.class));
|
mContext.startActivity(new Intent(mContext, PhoneActivity.class));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ApkUtils.openPackage(mContext, pkg, dockApp.getClassName());
|
ApkUtils.openPackage(mContext, pkg, dockApp.getClassName());
|
||||||
|
speak(dockApp.getAppName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -135,6 +138,10 @@ public class DockAppGridAdapter extends BaseAdapter {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void speak(String text) {
|
||||||
|
SpeechManager.getInstance().speakApp("正在打开 " + text);
|
||||||
|
}
|
||||||
|
|
||||||
static class ViewHolder {
|
static class ViewHolder {
|
||||||
ConstraintLayout root;
|
ConstraintLayout root;
|
||||||
ImageView iv_icon;
|
ImageView iv_icon;
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package com.xxpatx.os.adapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.xxpatx.os.R;
|
||||||
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WhiteListAdapter extends RecyclerView.Adapter<WhiteListAdapter.Holder> {
|
||||||
|
private static final String TAG = "WhiteListAdapter";
|
||||||
|
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
private List<String> mPhoneList;
|
||||||
|
|
||||||
|
public void setPhoneList(List<String> phoneList) {
|
||||||
|
mPhoneList = phoneList;
|
||||||
|
Log.e(TAG, "setPhoneList: " + mPhoneList);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setListChangeListener(ListChangeListener listChangeListener) {
|
||||||
|
mListChangeListener = listChangeListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListChangeListener mListChangeListener;
|
||||||
|
|
||||||
|
public interface ListChangeListener {
|
||||||
|
public void onChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
mContext = parent.getContext();
|
||||||
|
return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_black_list, parent, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull Holder holder, int position) {
|
||||||
|
String phone = mPhoneList.get(position);
|
||||||
|
holder.tv_number.setText(phone);
|
||||||
|
holder.tv_delete.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
//移除黑名单
|
||||||
|
ContactManager.getInstance().deleteWhitelist(phone);
|
||||||
|
mListChangeListener.onChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return mPhoneList == null ? 0 : mPhoneList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Holder extends RecyclerView.ViewHolder {
|
||||||
|
TextView tv_number, tv_delete;
|
||||||
|
|
||||||
|
public Holder(@NonNull View itemView) {
|
||||||
|
super(itemView);
|
||||||
|
tv_number = itemView.findViewById(R.id.tv_number);
|
||||||
|
tv_delete = itemView.findViewById(R.id.tv_delete);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,7 +24,9 @@ import com.xxpatx.os.manager.AmapManager;
|
|||||||
import com.xxpatx.os.manager.AppManager;
|
import com.xxpatx.os.manager.AppManager;
|
||||||
import com.xxpatx.os.manager.AppStatusManager;
|
import com.xxpatx.os.manager.AppStatusManager;
|
||||||
import com.xxpatx.os.manager.ConnectManager;
|
import com.xxpatx.os.manager.ConnectManager;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
import com.xxpatx.os.manager.DesktopIconManager;
|
import com.xxpatx.os.manager.DesktopIconManager;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.network.NetInterfaceManager;
|
import com.xxpatx.os.network.NetInterfaceManager;
|
||||||
import com.xxpatx.os.push.PushManager;
|
import com.xxpatx.os.push.PushManager;
|
||||||
import com.xxpatx.os.service.main.MainService;
|
import com.xxpatx.os.service.main.MainService;
|
||||||
@@ -47,6 +49,7 @@ public class BaseApplication extends Application {
|
|||||||
|
|
||||||
// 初始化 Toast 框架
|
// 初始化 Toast 框架
|
||||||
Toaster.init(this);
|
Toaster.init(this);
|
||||||
|
SpeechManager.init(this);
|
||||||
|
|
||||||
CrashReport.initCrashReport(getApplicationContext(), "09fec11058", false);
|
CrashReport.initCrashReport(getApplicationContext(), "09fec11058", false);
|
||||||
CrashReport.setDeviceModel(getApplicationContext(), Build.MODEL);
|
CrashReport.setDeviceModel(getApplicationContext(), Build.MODEL);
|
||||||
@@ -82,6 +85,7 @@ public class BaseApplication extends Application {
|
|||||||
WechatContactManager.init(this);
|
WechatContactManager.init(this);
|
||||||
ContactCacheUtils.init(this);
|
ContactCacheUtils.init(this);
|
||||||
DesktopIconManager.init(this);
|
DesktopIconManager.init(this);
|
||||||
|
ContactManager.init(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void aliyunPushInit() {
|
private void aliyunPushInit() {
|
||||||
|
|||||||
17
app/src/main/java/com/xxpatx/os/bean/ClockSetting.java
Normal file
17
app/src/main/java/com/xxpatx/os/bean/ClockSetting.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package com.xxpatx.os.bean;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class ClockSetting implements Serializable {
|
||||||
|
private static final long serialVersionUID = 6468022565585720520L;
|
||||||
|
|
||||||
|
String clock;
|
||||||
|
|
||||||
|
public String getClock() {
|
||||||
|
return clock;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClock(String clock) {
|
||||||
|
this.clock = clock;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,9 +22,9 @@ public class DockApp implements Serializable {
|
|||||||
this.className = className;
|
this.className = className;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DockApp(String packageName, String className) {
|
public DockApp(String packageName, String appName) {
|
||||||
this.packageName = packageName;
|
this.packageName = packageName;
|
||||||
this.className = className;
|
this.appName = appName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DockApp(String packageName) {
|
public DockApp(String packageName) {
|
||||||
@@ -67,7 +67,7 @@ public class DockApp implements Serializable {
|
|||||||
DockApp d = (DockApp) obj;
|
DockApp d = (DockApp) obj;
|
||||||
return
|
return
|
||||||
// Objects.equals(appName, d.appName);&&
|
// Objects.equals(appName, d.appName);&&
|
||||||
Objects.equals(packageName, d.packageName);
|
Objects.equals(packageName, d.packageName);
|
||||||
// && Objects.equals(className, d.className);
|
// && Objects.equals(className, d.className);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -70,7 +70,12 @@ public class SystemSettings implements Serializable {
|
|||||||
int exit_ctrl;
|
int exit_ctrl;
|
||||||
int connect_page_ctrl;
|
int connect_page_ctrl;
|
||||||
int connect_edit_ctrl;
|
int connect_edit_ctrl;
|
||||||
|
int contact_desktop;
|
||||||
int desktop_location;
|
int desktop_location;
|
||||||
|
int hour_notify;
|
||||||
|
int wechat_auto_accept;
|
||||||
|
int voice_speaker;
|
||||||
|
int phone_white_list;
|
||||||
|
|
||||||
public int getQch_restore() {
|
public int getQch_restore() {
|
||||||
return qch_restore;
|
return qch_restore;
|
||||||
@@ -545,6 +550,46 @@ public class SystemSettings implements Serializable {
|
|||||||
this.desktop_location = desktop_location;
|
this.desktop_location = desktop_location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getContact_desktop() {
|
||||||
|
return contact_desktop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContact_desktop(int contact_desktop) {
|
||||||
|
this.contact_desktop = contact_desktop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHour_notify() {
|
||||||
|
return hour_notify;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHour_notify(int hour_notify) {
|
||||||
|
this.hour_notify = hour_notify;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWechat_auto_accept() {
|
||||||
|
return wechat_auto_accept;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWechat_auto_accept(int wechat_auto_accept) {
|
||||||
|
this.wechat_auto_accept = wechat_auto_accept;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVoice_speaker() {
|
||||||
|
return voice_speaker;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVoice_speaker(int voice_speaker) {
|
||||||
|
this.voice_speaker = voice_speaker;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPhone_white_list() {
|
||||||
|
return phone_white_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhone_white_list(int phone_white_list) {
|
||||||
|
this.phone_white_list = phone_white_list;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
|
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ package com.xxpatx.os.config;
|
|||||||
public class CommonConfig {
|
public class CommonConfig {
|
||||||
public static final String MMKV_ID = "InterProcessKV";
|
public static final String MMKV_ID = "InterProcessKV";
|
||||||
|
|
||||||
|
public static final String ACTION_ADD_BLOCKED_CONTACT_NUMBER = "action.com.zkwl.addBlockedContactNumber";
|
||||||
|
public static final String ACTION_DELETE_BLOCKED_CONTACT_NUMBER = "action.com.zkwl.deleteBlockedContactNumber";
|
||||||
|
public static final String TEMP_PHONE_BLACK_LIST_KEY = "temp_phone_black_list";
|
||||||
|
|
||||||
/*保存的应用版本号*/
|
/*保存的应用版本号*/
|
||||||
public final static String APP_VERSION_CODE = "APP_VERSION_CODE";
|
public final static String APP_VERSION_CODE = "APP_VERSION_CODE";
|
||||||
|
|
||||||
@@ -101,6 +105,10 @@ public class CommonConfig {
|
|||||||
public static final String VOICE_BROADCAST = "voice_broadcast_key";
|
public static final String VOICE_BROADCAST = "voice_broadcast_key";
|
||||||
/*微信语音自动接听*/
|
/*微信语音自动接听*/
|
||||||
public static final String WECHAT_CALL_AUTO_ACCEPT = "wechat_call_auto_accept";
|
public static final String WECHAT_CALL_AUTO_ACCEPT = "wechat_call_auto_accept";
|
||||||
|
/*app启动播报*/
|
||||||
|
public static final String VOICE_SPEAKER_KEY = "voice_speaker";
|
||||||
|
/*电话白名单*/
|
||||||
|
public static final String PHONE_WHITE_LIST = "phone_white_list";
|
||||||
|
|
||||||
/*本地设置的*/
|
/*本地设置的*/
|
||||||
/*悬浮窗*/
|
/*悬浮窗*/
|
||||||
@@ -142,5 +150,5 @@ public class CommonConfig {
|
|||||||
public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key";
|
public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key";
|
||||||
public static final String AMAP_LOCATION_DISTRICT = "AMapLocationMapBean_key";
|
public static final String AMAP_LOCATION_DISTRICT = "AMapLocationMapBean_key";
|
||||||
|
|
||||||
|
public static final String TIME_HOUR_LIST_KEY = "time_hour_list";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class ContactCacheHelper extends SQLiteOpenHelper {
|
|||||||
public static final int DATABASE_VERSION = 1;
|
public static final int DATABASE_VERSION = 1;
|
||||||
public static final String DATABASE_NAME = "ContactDatabase.db";
|
public static final String DATABASE_NAME = "ContactDatabase.db";
|
||||||
|
|
||||||
public static final String TABLE_ALARM = "ContactTable";
|
public static final String TABLE_Contact = "ContactTable";
|
||||||
|
|
||||||
public static final String KEY_ID = "id";
|
public static final String KEY_ID = "id";
|
||||||
public static final String KEY_NAME = "name";
|
public static final String KEY_NAME = "name";
|
||||||
@@ -19,7 +19,7 @@ public class ContactCacheHelper extends SQLiteOpenHelper {
|
|||||||
public static final String KEY_TAG = "tag";
|
public static final String KEY_TAG = "tag";
|
||||||
|
|
||||||
|
|
||||||
private static final String CREATE_CONTACT_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_ALARM +
|
private static final String CREATE_CONTACT_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_Contact +
|
||||||
"("
|
"("
|
||||||
+ KEY_ID + " INTEGER,"
|
+ KEY_ID + " INTEGER,"
|
||||||
+ KEY_NAME + " TEXT,"
|
+ KEY_NAME + " TEXT,"
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public class ContactCacheUtils {
|
|||||||
long id = 0;
|
long id = 0;
|
||||||
mDatabase.beginTransaction();
|
mDatabase.beginTransaction();
|
||||||
try {
|
try {
|
||||||
id = mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_ALARM, null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
id = mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_Contact, null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||||
mDatabase.setTransactionSuccessful();
|
mDatabase.setTransactionSuccessful();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "addContact: " + e.getMessage());
|
Log.e(TAG, "addContact: " + e.getMessage());
|
||||||
@@ -100,7 +100,7 @@ public class ContactCacheUtils {
|
|||||||
mDatabase.beginTransaction();
|
mDatabase.beginTransaction();
|
||||||
try {
|
try {
|
||||||
for (ContentValues v : contentValuesList) {
|
for (ContentValues v : contentValuesList) {
|
||||||
mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_ALARM, null, v, SQLiteDatabase.CONFLICT_REPLACE);
|
mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_Contact, null, v, SQLiteDatabase.CONFLICT_REPLACE);
|
||||||
}
|
}
|
||||||
mDatabase.setTransactionSuccessful();
|
mDatabase.setTransactionSuccessful();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -127,7 +127,7 @@ public class ContactCacheUtils {
|
|||||||
long id = 0;
|
long id = 0;
|
||||||
mDatabase.beginTransaction();
|
mDatabase.beginTransaction();
|
||||||
try {
|
try {
|
||||||
id = mDatabase.delete(ContactCacheHelper.TABLE_ALARM, " id =" + rowId, null);
|
id = mDatabase.delete(ContactCacheHelper.TABLE_Contact, " id =" + rowId, null);
|
||||||
mDatabase.setTransactionSuccessful();
|
mDatabase.setTransactionSuccessful();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "deleteContact: " + e.getMessage());
|
Log.e(TAG, "deleteContact: " + e.getMessage());
|
||||||
@@ -145,7 +145,7 @@ public class ContactCacheUtils {
|
|||||||
*/
|
*/
|
||||||
public List<Contact> getDatabaseContact() {
|
public List<Contact> getDatabaseContact() {
|
||||||
List<Contact> list = new ArrayList<>();
|
List<Contact> list = new ArrayList<>();
|
||||||
String selectQuery = "SELECT * FROM " + ContactCacheHelper.TABLE_ALARM;
|
String selectQuery = "SELECT * FROM " + ContactCacheHelper.TABLE_Contact;
|
||||||
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
|
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import com.xxpatx.os.dialog.DailyAppDialog;
|
|||||||
import com.xxpatx.os.dialog.ShortcutDialog;
|
import com.xxpatx.os.dialog.ShortcutDialog;
|
||||||
import com.xxpatx.os.manager.AppManager;
|
import com.xxpatx.os.manager.AppManager;
|
||||||
import com.xxpatx.os.manager.AppStatusManager;
|
import com.xxpatx.os.manager.AppStatusManager;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.network.NetInterfaceManager;
|
import com.xxpatx.os.network.NetInterfaceManager;
|
||||||
import com.xxpatx.os.service.NotificationService;
|
import com.xxpatx.os.service.NotificationService;
|
||||||
import com.xxpatx.os.shortcut.ShortcutPkgInfo;
|
import com.xxpatx.os.shortcut.ShortcutPkgInfo;
|
||||||
@@ -239,6 +240,7 @@ public class AppListFragment extends BaseFragment {
|
|||||||
DesktopIcon desktopIcon = mDesktopIcons.get(index);
|
DesktopIcon desktopIcon = mDesktopIcons.get(index);
|
||||||
if (desktopIcon != null) {
|
if (desktopIcon != null) {
|
||||||
Log.e(TAG, "onItemClick: " + desktopIcon.getPackage());
|
Log.e(TAG, "onItemClick: " + desktopIcon.getPackage());
|
||||||
|
speak(desktopIcon.getTitle());
|
||||||
if (desktopIcon instanceof ShortcutPkgInfo) {
|
if (desktopIcon instanceof ShortcutPkgInfo) {
|
||||||
try {
|
try {
|
||||||
ActivityOptions activityOptions = ActivityOptions.makeClipRevealAnimation(v, v.getScrollX(), v.getScrollY(), v.getMeasuredWidth(), v.getMeasuredHeight());
|
ActivityOptions activityOptions = ActivityOptions.makeClipRevealAnimation(v, v.getScrollX(), v.getScrollY(), v.getMeasuredWidth(), v.getMeasuredHeight());
|
||||||
@@ -482,4 +484,8 @@ public class AppListFragment extends BaseFragment {
|
|||||||
// outState.putParcelableArrayList("applicationInfos", mDesktopIcons);
|
// outState.putParcelableArrayList("applicationInfos", mDesktopIcons);
|
||||||
// super.onSaveInstanceState(outState);
|
// super.onSaveInstanceState(outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void speak(String text) {
|
||||||
|
SpeechManager.getInstance().speakApp("正在打开 " + text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import com.xxpatx.os.bean.MapBean;
|
|||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
import com.xxpatx.os.databinding.FragmentHomeBinding;
|
import com.xxpatx.os.databinding.FragmentHomeBinding;
|
||||||
import com.xxpatx.os.dialog.SingleDialog;
|
import com.xxpatx.os.dialog.SingleDialog;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.push.PushManager;
|
import com.xxpatx.os.push.PushManager;
|
||||||
import com.xxpatx.os.utils.ApkUtils;
|
import com.xxpatx.os.utils.ApkUtils;
|
||||||
import com.xxpatx.os.utils.DayUtils;
|
import com.xxpatx.os.utils.DayUtils;
|
||||||
@@ -63,8 +64,8 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
|||||||
// private HomeAppAdapter mHomeAppAdapter;
|
// private HomeAppAdapter mHomeAppAdapter;
|
||||||
// private NotificationAdapter notificationAdapter;
|
// private NotificationAdapter notificationAdapter;
|
||||||
|
|
||||||
private CameraManager cameraManager;
|
private CameraManager mCameraManager;
|
||||||
private boolean flashing = false;
|
private boolean mFlashing = false;
|
||||||
|
|
||||||
|
|
||||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
@@ -141,7 +142,7 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
|||||||
mViewModel.setVDBinding(mViewDataBinding);
|
mViewModel.setVDBinding(mViewDataBinding);
|
||||||
mViewModel.setLifecycle(getLifecycleSubject());
|
mViewModel.setLifecycle(getLifecycleSubject());
|
||||||
mViewDataBinding.setClick(new BtnClick());
|
mViewDataBinding.setClick(new BtnClick());
|
||||||
cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
|
mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -452,24 +453,32 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void speak(String text) {
|
||||||
|
SpeechManager.getInstance().speakApp("正在打开 " + text);
|
||||||
|
}
|
||||||
|
|
||||||
public class BtnClick {
|
public class BtnClick {
|
||||||
public void toSn(View view) {
|
public void toSn(View view) {
|
||||||
if (!ApkUtils.openPackage(mContext, "com.xxpatx.sn")) {
|
if (!ApkUtils.openPackage(mContext, "com.xxpatx.sn")) {
|
||||||
Toaster.show("打开失败,请检查应用是否安装");
|
Toaster.show("打开失败,请检查应用是否安装");
|
||||||
}
|
}
|
||||||
|
speak("设备绑定");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addContact(View view) {
|
public void addContact(View view) {
|
||||||
startActivity(new Intent(mContext, AddContactActivity.class));
|
startActivity(new Intent(mContext, AddContactActivity.class));
|
||||||
|
speak("新建亲友");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openWifi(View view) {
|
public void openWifi(View view) {
|
||||||
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
||||||
|
speak("WiFi设置");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openNetwork(View view) {
|
public void openNetwork(View view) {
|
||||||
// startActivity(new Intent(Settings.ACTION_DATA_USAGE_SETTINGS));
|
// startActivity(new Intent(Settings.ACTION_DATA_USAGE_SETTINGS));
|
||||||
startActivity(new Intent(mContext, NetworkActivity.class));
|
startActivity(new Intent(mContext, NetworkActivity.class));
|
||||||
|
speak("流量设置");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openFlash(View view) {
|
public void openFlash(View view) {
|
||||||
@@ -484,14 +493,17 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
|||||||
// Log.e(TAG, "openFlash: " + e.getMessage());
|
// Log.e(TAG, "openFlash: " + e.getMessage());
|
||||||
// Toaster.show("打开手电筒失败");
|
// Toaster.show("打开手电筒失败");
|
||||||
// }
|
// }
|
||||||
|
speak("手电筒");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openCalendar(View view) {
|
public void openCalendar(View view) {
|
||||||
ApkUtils.openApp(mContext, "com.honghui.huangli");
|
ApkUtils.openApp(mContext, "com.honghui.huangli");
|
||||||
|
speak("万年历");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toWeather(View view) {
|
public void toWeather(View view) {
|
||||||
startActivity(new Intent(mContext, WeatherActivity.class));
|
startActivity(new Intent(mContext, WeatherActivity.class));
|
||||||
|
speak("天气");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openSettings(View view) {
|
public void openSettings(View view) {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import com.xxpatx.os.bean.SystemSettings;
|
|||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
import com.xxpatx.os.databinding.FragmentSettingsBinding;
|
import com.xxpatx.os.databinding.FragmentSettingsBinding;
|
||||||
import com.xxpatx.os.manager.AmapManager;
|
import com.xxpatx.os.manager.AmapManager;
|
||||||
|
import com.xxpatx.os.manager.SpeechManager;
|
||||||
import com.xxpatx.os.utils.ApkUtils;
|
import com.xxpatx.os.utils.ApkUtils;
|
||||||
import com.xxpatx.os.utils.DayUtils;
|
import com.xxpatx.os.utils.DayUtils;
|
||||||
import com.xxpatx.os.utils.TimeUtils;
|
import com.xxpatx.os.utils.TimeUtils;
|
||||||
@@ -260,6 +261,7 @@ public class SettingsFragment extends BaseMvvmFragment<SettingsViewModel, Fragme
|
|||||||
filter.addAction(CommonConfig.UIUIAIOS_UPDATE_DESKTOP_LOCATION);
|
filter.addAction(CommonConfig.UIUIAIOS_UPDATE_DESKTOP_LOCATION);
|
||||||
mContext.registerReceiver(mDesktopLocationReceiver, filter);
|
mContext.registerReceiver(mDesktopLocationReceiver, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DesktopLocationReceiver mDesktopLocationReceiver;
|
private DesktopLocationReceiver mDesktopLocationReceiver;
|
||||||
|
|
||||||
class DesktopLocationReceiver extends BroadcastReceiver {
|
class DesktopLocationReceiver extends BroadcastReceiver {
|
||||||
@@ -282,6 +284,9 @@ public class SettingsFragment extends BaseMvvmFragment<SettingsViewModel, Fragme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void speak(String text) {
|
||||||
|
SpeechManager.getInstance().speakApp("正在打开 " + text);
|
||||||
|
}
|
||||||
|
|
||||||
public class BtnClick {
|
public class BtnClick {
|
||||||
public void openCalendar(View view) {
|
public void openCalendar(View view) {
|
||||||
@@ -294,14 +299,17 @@ public class SettingsFragment extends BaseMvvmFragment<SettingsViewModel, Fragme
|
|||||||
|
|
||||||
public void openSettings(View view) {
|
public void openSettings(View view) {
|
||||||
startActivity(new Intent(mContext, SettingActivity.class));
|
startActivity(new Intent(mContext, SettingActivity.class));
|
||||||
|
speak("辅助功能");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toVideoplayer(View view) {
|
public void toVideoplayer(View view) {
|
||||||
ApkUtils.openPackage(mContext, "com.xxpatx.jtxc", "com.xxpatx.jtxc.activity.main.MainActivity");
|
ApkUtils.openPackage(mContext, "com.xxpatx.jtxc", "com.xxpatx.jtxc.activity.main.MainActivity");
|
||||||
|
speak("家庭控件");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openAlarmClock(View view) {
|
public void openAlarmClock(View view) {
|
||||||
startActivity(new Intent(mContext, AlarmListActivity.class));
|
startActivity(new Intent(mContext, AlarmListActivity.class));
|
||||||
|
speak("爱心闹钟");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openEmergency(View view) {
|
public void openEmergency(View view) {
|
||||||
@@ -311,20 +319,24 @@ public class SettingsFragment extends BaseMvvmFragment<SettingsViewModel, Fragme
|
|||||||
} else {
|
} else {
|
||||||
startActivity(new Intent(mContext, EmergencyActivity.class));
|
startActivity(new Intent(mContext, EmergencyActivity.class));
|
||||||
}
|
}
|
||||||
|
speak("紧急呼叫");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toAppstore(View view) {
|
public void toAppstore(View view) {
|
||||||
if (!ApkUtils.openPackage(mContext, "com.xxpatx.store")) {
|
if (!ApkUtils.openPackage(mContext, "com.xxpatx.store")) {
|
||||||
Toaster.show("打开失败,请检查应用是否安装");
|
Toaster.show("打开失败,请检查应用是否安装");
|
||||||
}
|
}
|
||||||
|
speak("应用市场");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dailyApp(View view) {
|
public void dailyApp(View view) {
|
||||||
startActivity(new Intent(getCtx(), DailyAppActivity.class));
|
startActivity(new Intent(getCtx(), DailyAppActivity.class));
|
||||||
|
speak("更多应用");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getAddress(View view) {
|
public void getAddress(View view) {
|
||||||
Toaster.show("正在更新定位信息");
|
Toaster.show("正在更新定位信息");
|
||||||
|
speak("正在更新定位信息");
|
||||||
AmapManager.getInstance().startLocation();
|
AmapManager.getInstance().startLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
126
app/src/main/java/com/xxpatx/os/manager/ContactManager.java
Normal file
126
app/src/main/java/com/xxpatx/os/manager/ContactManager.java
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
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.hjq.toast.Toaster;
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.zkwl.system.apiservice.contact.IZkwlContactManager;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ContactManager {
|
||||||
|
private static final String TAG = "ContactManager";
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
private static ContactManager sInstance;
|
||||||
|
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
|
private IZkwlContactManager mZkwlContactManager;
|
||||||
|
|
||||||
|
private ServiceConnection mServiceConnection = new ServiceConnection() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
Log.d(TAG, "onServiceConnected");
|
||||||
|
mZkwlContactManager = IZkwlContactManager.Stub.asInterface(service);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
Log.d(TAG, "onServiceDisconnected");
|
||||||
|
mZkwlContactManager = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private ContactManager(Context context) {
|
||||||
|
if (context == null) {
|
||||||
|
throw new RuntimeException("Context is NULL");
|
||||||
|
}
|
||||||
|
this.mContext = context.getApplicationContext();
|
||||||
|
bindService();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init(Context context) {
|
||||||
|
if (sInstance == null) {
|
||||||
|
Log.e(TAG, "init: ");
|
||||||
|
sInstance = new ContactManager(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ContactManager getInstance() {
|
||||||
|
if (sInstance == null) {
|
||||||
|
throw new IllegalStateException("You must be init ContactManager first");
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindService() {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setComponent(new ComponentName("com.zkwl.system.apiservice", "com.zkwl.system.apiservice.ZkwlContactManagerService"));
|
||||||
|
mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getWhiteListData() {
|
||||||
|
if (mZkwlContactManager == null) {
|
||||||
|
Toaster.show("服务未连接");
|
||||||
|
bindService();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
return mZkwlContactManager.getAllWhitelistContactNumbers();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addWhiteList(String phone) {
|
||||||
|
if (mZkwlContactManager == null) {
|
||||||
|
Toaster.show("服务未连接");
|
||||||
|
bindService();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
mZkwlContactManager.addWhitelistContactNumber(phone);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteWhitelist(String phone) {
|
||||||
|
if (mZkwlContactManager == null) {
|
||||||
|
Toaster.show("服务未连接");
|
||||||
|
bindService();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
mZkwlContactManager.deleteWhitelistContactNumber(phone);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAllWhitelist() {
|
||||||
|
if (mZkwlContactManager == null) {
|
||||||
|
Toaster.show("服务未连接");
|
||||||
|
bindService();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
mZkwlContactManager.deleteAllWhitelistContactNumbers();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,10 +48,10 @@ public class DesktopIconManager {
|
|||||||
|
|
||||||
public List<DockApp> getDefaultDockApp() {
|
public List<DockApp> getDefaultDockApp() {
|
||||||
List<DockApp> dockApps = new ArrayList<>();
|
List<DockApp> dockApps = new ArrayList<>();
|
||||||
dockApps.add(new DockApp("xxpatx.os.dialer"));
|
dockApps.add(new DockApp("xxpatx.os.dialer", "电话"));
|
||||||
dockApps.add(new DockApp("com.tencent.mm"));
|
dockApps.add(new DockApp("com.tencent.mm", "微信"));
|
||||||
dockApps.add(new DockApp("com.ss.android.ugc.aweme"));
|
dockApps.add(new DockApp("com.ss.android.ugc.aweme", "抖音"));
|
||||||
dockApps.add(new DockApp(getDefaultCameraPackageName()));
|
dockApps.add(new DockApp(getDefaultCameraPackageName(), "相机"));
|
||||||
return dockApps;
|
return dockApps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
102
app/src/main/java/com/xxpatx/os/manager/SpeechManager.java
Normal file
102
app/src/main/java/com/xxpatx/os/manager/SpeechManager.java
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
package com.xxpatx.os.manager;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.speech.tts.TextToSpeech;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.hjq.toast.Toaster;
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class SpeechManager implements TextToSpeech.OnInitListener {
|
||||||
|
private static final String TAG = "SpeechManager";
|
||||||
|
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
private static SpeechManager sInstance;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
private TextToSpeech mTextToSpeech;
|
||||||
|
private boolean mInitSuccess = false;
|
||||||
|
|
||||||
|
private SpeechManager(Context context) {
|
||||||
|
if (context == null) {
|
||||||
|
throw new RuntimeException("Context is NULL");
|
||||||
|
}
|
||||||
|
this.mContext = context.getApplicationContext();
|
||||||
|
this.mTextToSpeech = new TextToSpeech(mContext, this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init(Context context) {
|
||||||
|
if (sInstance == null) {
|
||||||
|
Log.e(TAG, "init: ");
|
||||||
|
sInstance = new SpeechManager(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SpeechManager getInstance() {
|
||||||
|
if (sInstance == null) {
|
||||||
|
throw new IllegalStateException("You must be init SpeechManager first");
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInit(int status) {
|
||||||
|
//初始化成功
|
||||||
|
if (status == TextToSpeech.SUCCESS) {
|
||||||
|
mInitSuccess = true;
|
||||||
|
Log.e(TAG, "init success");
|
||||||
|
//设置语言
|
||||||
|
int result = mTextToSpeech.setLanguage(Locale.CHINA);
|
||||||
|
if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
|
||||||
|
&& result != TextToSpeech.LANG_AVAILABLE) {
|
||||||
|
} else {
|
||||||
|
//设置音调
|
||||||
|
mTextToSpeech.setPitch(1.0f);
|
||||||
|
//设置语速,1.0为正常语速
|
||||||
|
mTextToSpeech.setSpeechRate(1.0f);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mInitSuccess = false;
|
||||||
|
Log.e(TAG, "init fail");
|
||||||
|
Toaster.showLong("TTS初始化失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void speak(String text) {
|
||||||
|
if (mTextToSpeech == null) {
|
||||||
|
this.mTextToSpeech = new TextToSpeech(mContext, this);
|
||||||
|
Log.e(TAG, "speak: TextToSpeech is null");
|
||||||
|
Toaster.show("文字转语音引擎初始化失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!mInitSuccess) {
|
||||||
|
this.mTextToSpeech = new TextToSpeech(mContext, this);
|
||||||
|
Log.e(TAG, "speak: TextToSpeech init failed");
|
||||||
|
Toaster.show("文字转语音引擎初始化失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (TextUtils.isEmpty(text)) {
|
||||||
|
Log.e(TAG, "speak: text is empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mTextToSpeech.speak(text, TextToSpeech.QUEUE_ADD, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void speakApp(String text) {
|
||||||
|
boolean voice_speaker = mMMKV.decodeBool(CommonConfig.VOICE_SPEAKER_KEY, false);
|
||||||
|
Log.e(TAG, "speakApp: " + voice_speaker);
|
||||||
|
if (voice_speaker) {
|
||||||
|
speak(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.xxpatx.os.network;
|
|||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@@ -21,6 +22,7 @@ import com.xxpatx.os.bean.AlarmClockId;
|
|||||||
import com.xxpatx.os.bean.AppInfo;
|
import com.xxpatx.os.bean.AppInfo;
|
||||||
import com.xxpatx.os.bean.ArticleList;
|
import com.xxpatx.os.bean.ArticleList;
|
||||||
import com.xxpatx.os.bean.BaseResponse;
|
import com.xxpatx.os.bean.BaseResponse;
|
||||||
|
import com.xxpatx.os.bean.ClockSetting;
|
||||||
import com.xxpatx.os.bean.Contact;
|
import com.xxpatx.os.bean.Contact;
|
||||||
import com.xxpatx.os.bean.DemandBean;
|
import com.xxpatx.os.bean.DemandBean;
|
||||||
import com.xxpatx.os.bean.ExpressData;
|
import com.xxpatx.os.bean.ExpressData;
|
||||||
@@ -45,6 +47,7 @@ import com.xxpatx.os.disklrucache.CacheHelper;
|
|||||||
import com.xxpatx.os.gson.GsonUtils;
|
import com.xxpatx.os.gson.GsonUtils;
|
||||||
import com.xxpatx.os.manager.ConnectManager;
|
import com.xxpatx.os.manager.ConnectManager;
|
||||||
import com.xxpatx.os.manager.ConnectMode;
|
import com.xxpatx.os.manager.ConnectMode;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
import com.xxpatx.os.network.api.qweather.LookupApi;
|
import com.xxpatx.os.network.api.qweather.LookupApi;
|
||||||
import com.xxpatx.os.network.api.uiui.ActivityListApi;
|
import com.xxpatx.os.network.api.uiui.ActivityListApi;
|
||||||
import com.xxpatx.os.network.api.uiui.AddressIndexApi;
|
import com.xxpatx.os.network.api.uiui.AddressIndexApi;
|
||||||
@@ -85,6 +88,7 @@ import com.xxpatx.os.network.api.uiui.order.OrderIndexApi;
|
|||||||
import com.xxpatx.os.network.api.uiui.pay.GoodsBuyApi;
|
import com.xxpatx.os.network.api.uiui.pay.GoodsBuyApi;
|
||||||
import com.xxpatx.os.network.api.uiui.pay.OrderPayApi;
|
import com.xxpatx.os.network.api.uiui.pay.OrderPayApi;
|
||||||
import com.xxpatx.os.network.api.uiui.pay.OrderPayCheckApi;
|
import com.xxpatx.os.network.api.uiui.pay.OrderPayCheckApi;
|
||||||
|
import com.xxpatx.os.network.api.uiui.sn.ClockSettingApi;
|
||||||
import com.xxpatx.os.network.api.uiui.sn.FamilyAddressApi;
|
import com.xxpatx.os.network.api.uiui.sn.FamilyAddressApi;
|
||||||
import com.xxpatx.os.network.api.uiui.sn.SendScreenshotApi;
|
import com.xxpatx.os.network.api.uiui.sn.SendScreenshotApi;
|
||||||
import com.xxpatx.os.network.api.uiui.sn.SettingApi;
|
import com.xxpatx.os.network.api.uiui.sn.SettingApi;
|
||||||
@@ -427,6 +431,14 @@ public class NetInterfaceManager {
|
|||||||
.observeOn(AndroidSchedulers.mainThread());
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Observable<BaseResponse<ClockSetting>> getClockSettingObservable() {
|
||||||
|
return mRetrofit.create(ClockSettingApi.class)
|
||||||
|
.getClockSetting(Utils.getSerial())
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*闹钟相关
|
*闹钟相关
|
||||||
*/
|
*/
|
||||||
@@ -1168,6 +1180,8 @@ public class NetInterfaceManager {
|
|||||||
mMMKV.encode("is_shopping", systemSettings.getIs_shopping());
|
mMMKV.encode("is_shopping", systemSettings.getIs_shopping());
|
||||||
mMMKV.encode("is_info", systemSettings.getIs_info());
|
mMMKV.encode("is_info", systemSettings.getIs_info());
|
||||||
String s = systemSettings.getSetting_sos();
|
String s = systemSettings.getSetting_sos();
|
||||||
|
mMMKV.encode(CommonConfig.PHONE_WHITE_LIST, systemSettings.getPhone_white_list());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
mCacheHelper.put(UrlAddress.GET_SETTINGS, "");
|
mCacheHelper.put(UrlAddress.GET_SETTINGS, "");
|
||||||
if (callback != null) callback.setContact(null);
|
if (callback != null) callback.setContact(null);
|
||||||
@@ -1242,6 +1256,16 @@ public class NetInterfaceManager {
|
|||||||
ContactsUtils.saveContactPhone(mContext, contactList);
|
ContactsUtils.saveContactPhone(mContext, contactList);
|
||||||
List<Contact> emergencyConcacts = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
|
List<Contact> emergencyConcacts = contactList.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList());
|
||||||
mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, GsonUtils.toJSONString(emergencyConcacts));
|
mMMKV.putString(CommonConfig.EMERGENCY_CONTACT_LIST_KEY, GsonUtils.toJSONString(emergencyConcacts));
|
||||||
|
|
||||||
|
int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
if (phone_white_list == 1) {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
for (Contact contact : contactList) {
|
||||||
|
if (TextUtils.isEmpty(contact.getMobile())) continue;
|
||||||
|
ContactManager.getInstance().addWhiteList(contact.getMobile());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.setContact(contactList);
|
callback.setContact(contactList);
|
||||||
}
|
}
|
||||||
@@ -1264,7 +1288,6 @@ public class NetInterfaceManager {
|
|||||||
Log.e("getContactList", "onComplete: ");
|
Log.e("getContactList", "onComplete: ");
|
||||||
if (callback != null) callback.onComplete();
|
if (callback != null) callback.onComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,9 @@ public class UrlAddress {
|
|||||||
/*编号查询联系人*/
|
/*编号查询联系人*/
|
||||||
public static final String MAIL_LIST_BY_ID = "MailList/mailListById";
|
public static final String MAIL_LIST_BY_ID = "MailList/mailListById";
|
||||||
|
|
||||||
|
/*整点报时设置*/
|
||||||
|
public static final String CLOCK_SETTING = "sn/clock-setting";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应用统计
|
* 应用统计
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.xxpatx.os.network.api.uiui.sn;
|
||||||
|
|
||||||
|
import com.xxpatx.os.bean.BaseResponse;
|
||||||
|
import com.xxpatx.os.bean.ClockSetting;
|
||||||
|
import com.xxpatx.os.network.UrlAddress;
|
||||||
|
|
||||||
|
import io.reactivex.rxjava3.core.Observable;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
|
public interface ClockSettingApi {
|
||||||
|
@GET(UrlAddress.CLOCK_SETTING)
|
||||||
|
Observable<BaseResponse<ClockSetting>> getClockSetting(
|
||||||
|
@Query("sn") String sn
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -49,6 +49,9 @@ public class WeAccessibilityService extends AccessibilityService {
|
|||||||
private static final String CALL_TEXT = "语音通话";
|
private static final String CALL_TEXT = "语音通话";
|
||||||
|
|
||||||
private static final String RECEIVE_DESCRIPTION = "接听";
|
private static final String RECEIVE_DESCRIPTION = "接听";
|
||||||
|
private static final String HANDS_FREE_TEXT = "扬声器已关";
|
||||||
|
private static final String DIALER_HANDS_FREE_TEXT = "免提";
|
||||||
|
private static final String DIALER_HANDS_FREE_CLOSE_TEXT = "免提,已关闭";
|
||||||
|
|
||||||
public static final int TYPE_VOICE = 0;
|
public static final int TYPE_VOICE = 0;
|
||||||
public static final int TYPE_VIDEO = 1;
|
public static final int TYPE_VIDEO = 1;
|
||||||
@@ -138,6 +141,10 @@ public class WeAccessibilityService extends AccessibilityService {
|
|||||||
Log.e(TAG, "_onAccessibilityEvent: " + mCurrentStep);
|
Log.e(TAG, "_onAccessibilityEvent: " + mCurrentStep);
|
||||||
switch (mCurrentStep) {
|
switch (mCurrentStep) {
|
||||||
case WAITING:
|
case WAITING:
|
||||||
|
if (!TextUtils.isEmpty(event.getPackageName()) && "com.android.dialer".equals(event.getPackageName())) {
|
||||||
|
Log.e(TAG, "_onAccessibilityEvent: to dialer hands free");
|
||||||
|
mCurrentStep = Step.DIALER_HANDS_FREE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!TextUtils.isEmpty(event.getClassName())) {
|
if (!TextUtils.isEmpty(event.getClassName())) {
|
||||||
@@ -158,12 +165,22 @@ public class WeAccessibilityService extends AccessibilityService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (stepAnswer(Property.DESCRIPTION, RECEIVE_DESCRIPTION)) {
|
if (stepAnswer(Property.DESCRIPTION, RECEIVE_DESCRIPTION)) {
|
||||||
mCurrentStep = Step.WAITING;
|
mCurrentStep = Step.WECHAT_HANDS_FREE;
|
||||||
Toast.makeText(this, "已自动接听视频/语音", Toast.LENGTH_LONG).show();
|
Toast.makeText(this, "已自动接听视频/语音", Toast.LENGTH_LONG).show();
|
||||||
} else {
|
} else {
|
||||||
// clickAnswer();
|
// clickAnswer();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case WECHAT_HANDS_FREE:
|
||||||
|
handsFree(Property.DESCRIPTION, HANDS_FREE_TEXT);
|
||||||
|
break;
|
||||||
|
case DIALER_HANDS_FREE:
|
||||||
|
if (findHandsFree(Property.DESCRIPTION, DIALER_HANDS_FREE_CLOSE_TEXT)) {
|
||||||
|
dialerHandsFree(Property.TEXT, DIALER_HANDS_FREE_TEXT);
|
||||||
|
} else {
|
||||||
|
mCurrentStep = Step.WAITING;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case CLICK_HOME://主页能找到直接点击进去更多
|
case CLICK_HOME://主页能找到直接点击进去更多
|
||||||
stepHome(Property.TEXT, mName);
|
stepHome(Property.TEXT, mName);
|
||||||
break;
|
break;
|
||||||
@@ -524,6 +541,51 @@ public class WeAccessibilityService extends AccessibilityService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean dialerHandsFree(Property type, String text) {
|
||||||
|
AccessibilityNodeInfo node = findNode(getWindows(), type, text);
|
||||||
|
if (node != null) {
|
||||||
|
Rect rect = new Rect();
|
||||||
|
node.getBoundsInScreen(rect);
|
||||||
|
Log.e(TAG, "dialerHandsFree: rect = " + rect);
|
||||||
|
clickNode(node);
|
||||||
|
Log.e(TAG, "dialerHandsFree: mCurrentStep: " + mCurrentStep + " done");
|
||||||
|
mCurrentStep = Step.WAITING;
|
||||||
|
Log.e(TAG, "dialerHandsFree: next: " + mCurrentStep);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean findHandsFree(Property type, String text) {
|
||||||
|
AccessibilityNodeInfo node = findNode(getWindows(), type, text);
|
||||||
|
if (node != null) {
|
||||||
|
Log.e(TAG, "findHandsFree: true");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "findHandsFree: false");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handsFree(Property type, String text) {
|
||||||
|
AccessibilityNodeInfo node = findNode(getWindows(), type, text);
|
||||||
|
if (node != null) {
|
||||||
|
Point point = getPointtByNode(node);
|
||||||
|
Log.e(TAG, "handsFree: " + point);
|
||||||
|
clickByPoint(point.x, point.y - 50);
|
||||||
|
clickByPoint(point.x, point.y);
|
||||||
|
// clickNode(node);
|
||||||
|
Log.e(TAG, "handsFree: mCurrentStep " + mCurrentStep + " done");
|
||||||
|
mCurrentStep = Step.WAITING;
|
||||||
|
Log.e(TAG, "handsFree: next " + mCurrentStep);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "handsFree: not found");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//根据节点信息可获得对应的x,y坐标
|
//根据节点信息可获得对应的x,y坐标
|
||||||
static Point getPointtByNode(AccessibilityNodeInfo node) {
|
static Point getPointtByNode(AccessibilityNodeInfo node) {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
@@ -609,6 +671,8 @@ public class WeAccessibilityService extends AccessibilityService {
|
|||||||
|
|
||||||
private enum Step {
|
private enum Step {
|
||||||
WAITING,
|
WAITING,
|
||||||
|
WECHAT_HANDS_FREE,
|
||||||
|
DIALER_HANDS_FREE,
|
||||||
CLICK_HOME,
|
CLICK_HOME,
|
||||||
CLICK_QUICK_WECHAT_CALL,
|
CLICK_QUICK_WECHAT_CALL,
|
||||||
CLICK_TARGET,
|
CLICK_TARGET,
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ public class MainSContact {
|
|||||||
void editAlarmClock();
|
void editAlarmClock();
|
||||||
void updateAlarmClock();
|
void updateAlarmClock();
|
||||||
void deleteAlarmClock();
|
void deleteAlarmClock();
|
||||||
|
|
||||||
|
void getClockSetting();
|
||||||
|
|
||||||
|
void getContact();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface MainSView extends BaseView {
|
public interface MainSView extends BaseView {
|
||||||
@@ -21,5 +25,9 @@ public class MainSContact {
|
|||||||
void editAlarmClockFinish();
|
void editAlarmClockFinish();
|
||||||
void updateAlarmClockFinish();
|
void updateAlarmClockFinish();
|
||||||
void deleteAlarmClockFinish();
|
void deleteAlarmClockFinish();
|
||||||
|
|
||||||
|
void getClockSettingFinish();
|
||||||
|
|
||||||
|
void getContactFinish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,17 @@ import com.xxpatx.os.alarm.AlarmClockData;
|
|||||||
import com.xxpatx.os.alarm.AlarmUtils;
|
import com.xxpatx.os.alarm.AlarmUtils;
|
||||||
import com.xxpatx.os.bean.AlarmClockId;
|
import com.xxpatx.os.bean.AlarmClockId;
|
||||||
import com.xxpatx.os.bean.BaseResponse;
|
import com.xxpatx.os.bean.BaseResponse;
|
||||||
|
import com.xxpatx.os.bean.ClockSetting;
|
||||||
|
import com.xxpatx.os.bean.Contact;
|
||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.xxpatx.os.gson.GsonUtils;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
import com.xxpatx.os.network.NetInterfaceManager;
|
import com.xxpatx.os.network.NetInterfaceManager;
|
||||||
import com.xxpatx.os.utils.Utils;
|
import com.xxpatx.os.utils.Utils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -292,6 +297,86 @@ public class MainSPresenter implements MainSContact.Presenter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getClockSetting() {
|
||||||
|
NetInterfaceManager.getInstance().getClockSettingObservable()
|
||||||
|
.compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
|
||||||
|
.subscribe(new Observer<BaseResponse<ClockSetting>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NonNull Disposable d) {
|
||||||
|
Log.e("getClockSetting", "onSubscribe: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NonNull BaseResponse<ClockSetting> baseResponse) {
|
||||||
|
Log.e("getClockSetting", "onNext: " + baseResponse);
|
||||||
|
if (baseResponse.code == 200) {
|
||||||
|
ClockSetting clockSetting = baseResponse.data;
|
||||||
|
String time = clockSetting.getClock();
|
||||||
|
List<Integer> integers = new ArrayList<>();
|
||||||
|
List<String> timeLsit = new ArrayList<>(Arrays.asList(time.split(",")));
|
||||||
|
for (String s : timeLsit) {
|
||||||
|
integers.add(Integer.parseInt(s));
|
||||||
|
}
|
||||||
|
mMMKV.encode(CommonConfig.TIME_HOUR_LIST_KEY, GsonUtils.toJSONString(integers));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(@NonNull Throwable e) {
|
||||||
|
Log.e("getClockSetting", "onError: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
Log.e("getClockSetting", "onComplete: ");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getContact() {
|
||||||
|
NetInterfaceManager.getInstance().getContactListObservable()
|
||||||
|
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
|
||||||
|
.subscribe(new Observer<BaseResponse<List<Contact>>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NonNull Disposable d) {
|
||||||
|
Log.e("getContact", "onSubscribe: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NonNull BaseResponse<List<Contact>> listBaseResponse) {
|
||||||
|
Log.e("getContact", "onNext: " + listBaseResponse);
|
||||||
|
if (listBaseResponse.code == 200) {
|
||||||
|
int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
if (phone_white_list == 1) {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
List<Contact> contactList = listBaseResponse.data;
|
||||||
|
for (Contact contact : contactList) {
|
||||||
|
if (TextUtils.isEmpty(contact.getMobile())) continue;
|
||||||
|
ContactManager.getInstance().addWhiteList(contact.getMobile());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(@NonNull Throwable e) {
|
||||||
|
Log.e("getContact", "onError: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
Log.e("getContact", "onComplete: ");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建被观察者集合
|
* 创建被观察者集合
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import com.xxpatx.os.base.rx.BaseRxService;
|
|||||||
import com.xxpatx.os.bean.AppInfo;
|
import com.xxpatx.os.bean.AppInfo;
|
||||||
import com.xxpatx.os.bean.BaseResponse;
|
import com.xxpatx.os.bean.BaseResponse;
|
||||||
import com.xxpatx.os.config.CommonConfig;
|
import com.xxpatx.os.config.CommonConfig;
|
||||||
|
import com.xxpatx.os.manager.ContactManager;
|
||||||
import com.xxpatx.os.network.NetInterfaceManager;
|
import com.xxpatx.os.network.NetInterfaceManager;
|
||||||
import com.xxpatx.os.receiver.SmsReceiver;
|
import com.xxpatx.os.receiver.SmsReceiver;
|
||||||
import com.xxpatx.os.utils.ApkUtils;
|
import com.xxpatx.os.utils.ApkUtils;
|
||||||
@@ -55,6 +56,7 @@ import java.io.File;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -98,6 +100,8 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
private static final String XXOS_ACTION_TIME_TICK = "xxos_time_tick";
|
private static final String XXOS_ACTION_TIME_TICK = "xxos_time_tick";
|
||||||
public static final String XXOS_ACTION_TIME_CHANGED = "xxos_time_changed";
|
public static final String XXOS_ACTION_TIME_CHANGED = "xxos_time_changed";
|
||||||
|
|
||||||
|
private List<Integer> mTimeList;
|
||||||
|
|
||||||
public MainService() {
|
public MainService() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -111,6 +115,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
public void onConnected(NetworkUtils.NetworkType networkType) {
|
public void onConnected(NetworkUtils.NetworkType networkType) {
|
||||||
if (isScreenOn()) {
|
if (isScreenOn()) {
|
||||||
mPresenter.addAlarmClock();
|
mPresenter.addAlarmClock();
|
||||||
|
mPresenter.getClockSetting();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +259,22 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
@Override
|
@Override
|
||||||
public void onNext(@NonNull Integer hour) {
|
public void onNext(@NonNull Integer hour) {
|
||||||
Log.e("mTimeSignalCallback", "onNext: " + hour);
|
Log.e("mTimeSignalCallback", "onNext: " + hour);
|
||||||
if (hour > 6 && hour < 22) {
|
String timeString = mMMKV.decodeString(CommonConfig.TIME_HOUR_LIST_KEY);
|
||||||
|
if (TextUtils.isEmpty(timeString)) {
|
||||||
|
mTimeList = new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<Integer>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
mTimeList = gson.fromJson(timeString, type);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "getLocalContact: " + e.getMessage());
|
||||||
|
mMMKV.remove(CommonConfig.TIME_HOUR_LIST_KEY);
|
||||||
|
mTimeList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mTimeList.indexOf(hour) != -1) {
|
||||||
mSoundPool.play(soundMap.get(hour), 1, 1, 0, 0, 1);
|
mSoundPool.play(soundMap.get(hour), 1, 1, 0, 0, 1);
|
||||||
} else {
|
} else {
|
||||||
/*10点到86点不报时*/
|
/*10点到86点不报时*/
|
||||||
@@ -272,6 +292,14 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
Log.e("mTimeSignalCallback", "onComplete: ");
|
Log.e("mTimeSignalCallback", "onComplete: ");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mPresenter.getClockSetting();
|
||||||
|
|
||||||
|
int phone_white_list = mMMKV.decodeInt(CommonConfig.PHONE_WHITE_LIST, 0);
|
||||||
|
if (phone_white_list == 1) {
|
||||||
|
mPresenter.getContact();
|
||||||
|
} else {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAlarmTime() {
|
private void setAlarmTime() {
|
||||||
@@ -333,6 +361,16 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
mPresenter.getAlarmClock();
|
mPresenter.getAlarmClock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getClockSettingFinish() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getContactFinish() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
@@ -486,7 +524,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
private TimeSignalCallback mTimeSignalCallback;
|
private TimeSignalCallback mTimeSignalCallback;
|
||||||
|
|
||||||
private void hourlyTimeSignal() {
|
private void hourlyTimeSignal() {
|
||||||
boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
boolean hourly_time = mMMKV.decodeInt(CommonConfig.HOURLY_TIME_SIGNAL_KEY, 0) == 1;
|
||||||
if (hourly_time) {
|
if (hourly_time) {
|
||||||
Calendar cal = Calendar.getInstance();
|
Calendar cal = Calendar.getInstance();
|
||||||
int hour = cal.get(Calendar.HOUR_OF_DAY);
|
int hour = cal.get(Calendar.HOUR_OF_DAY);
|
||||||
@@ -502,7 +540,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void alarmWakeup() {
|
private void alarmWakeup() {
|
||||||
boolean hourly_time = mMMKV.decodeBool(CommonConfig.HOURLY_TIME_SIGNAL_KEY, false);
|
boolean hourly_time = mMMKV.decodeInt(CommonConfig.HOURLY_TIME_SIGNAL_KEY, 0) == 1;
|
||||||
if (hourly_time) {
|
if (hourly_time) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
||||||
@@ -521,6 +559,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(HOURLY_TIME_SIGNAL_KEY);
|
filter.addAction(HOURLY_TIME_SIGNAL_KEY);
|
||||||
filter.addAction(WECHAT_AUTO_ACCEPT);
|
filter.addAction(WECHAT_AUTO_ACCEPT);
|
||||||
|
filter.addAction(VOICE_SPEAKER_KEY);
|
||||||
|
filter.addAction(PHONE_WHITE_LIST);
|
||||||
|
filter.addAction(HOURLY_TIME_SLOT_KEY);
|
||||||
registerReceiver(mTimeSignalReceiver, filter);
|
registerReceiver(mTimeSignalReceiver, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,6 +569,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
|
|
||||||
private static final String HOURLY_TIME_SIGNAL_KEY = "hourly_time_signal";
|
private static final String HOURLY_TIME_SIGNAL_KEY = "hourly_time_signal";
|
||||||
private static final String WECHAT_AUTO_ACCEPT = "wechat_auto_accept";
|
private static final String WECHAT_AUTO_ACCEPT = "wechat_auto_accept";
|
||||||
|
private static final String VOICE_SPEAKER_KEY = "voice_speaker";
|
||||||
|
private static final String PHONE_WHITE_LIST = "phone_white_list";
|
||||||
|
private static final String HOURLY_TIME_SLOT_KEY = "HOURLY_TIME_SLOT";
|
||||||
|
|
||||||
|
|
||||||
private class TimeSignalReceiver extends BroadcastReceiver {
|
private class TimeSignalReceiver extends BroadcastReceiver {
|
||||||
@@ -543,13 +587,31 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
case HOURLY_TIME_SIGNAL_KEY:
|
case HOURLY_TIME_SIGNAL_KEY:
|
||||||
int hour_notify = intent.getIntExtra("hour_notify", 0);
|
int hour_notify = intent.getIntExtra("hour_notify", 0);
|
||||||
Log.e("TimeSignalReceiver", "onReceive: hour_notify = " + hour_notify);
|
Log.e("TimeSignalReceiver", "onReceive: hour_notify = " + hour_notify);
|
||||||
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, hour_notify == 1);
|
mMMKV.encode(CommonConfig.HOURLY_TIME_SIGNAL_KEY, hour_notify);
|
||||||
break;
|
break;
|
||||||
case WECHAT_AUTO_ACCEPT:
|
case WECHAT_AUTO_ACCEPT:
|
||||||
int wechat_auto_accept = intent.getIntExtra("wechat_auto_accept", 0);
|
int wechat_auto_accept = intent.getIntExtra("wechat_auto_accept", 0);
|
||||||
Log.e("TimeSignalReceiver", "onReceive: wechat_auto_accept = " + wechat_auto_accept);
|
Log.e("TimeSignalReceiver", "onReceive: wechat_auto_accept = " + wechat_auto_accept);
|
||||||
mMMKV.encode(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, wechat_auto_accept == 1);
|
mMMKV.encode(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, wechat_auto_accept == 1);
|
||||||
break;
|
break;
|
||||||
|
case VOICE_SPEAKER_KEY:
|
||||||
|
int voice_speaker = intent.getIntExtra("voice_speaker", 0);
|
||||||
|
Log.e("TimeSignalReceiver", "onReceive: voice_speaker = " + voice_speaker);
|
||||||
|
mMMKV.encode(CommonConfig.VOICE_SPEAKER_KEY, voice_speaker == 1);
|
||||||
|
break;
|
||||||
|
case PHONE_WHITE_LIST:
|
||||||
|
int phone_white_list = intent.getIntExtra("phone_white_list", 0);
|
||||||
|
Log.e("TimeSignalReceiver", "onReceive: phone_white_list = " + phone_white_list);
|
||||||
|
mMMKV.encode(CommonConfig.PHONE_WHITE_LIST, phone_white_list);
|
||||||
|
if (phone_white_list == 1) {
|
||||||
|
mPresenter.getContact();
|
||||||
|
} else {
|
||||||
|
ContactManager.getInstance().deleteAllWhitelist();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HOURLY_TIME_SLOT_KEY:
|
||||||
|
mPresenter.getClockSetting();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class Utils {
|
|||||||
Log.e("e", "读取设备序列号异常:" + e.toString());
|
Log.e("e", "读取设备序列号异常:" + e.toString());
|
||||||
}
|
}
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
// return "TYZ185P5250101467";
|
// return "TYZ185P5250100275";
|
||||||
}
|
}
|
||||||
return serial;
|
return serial;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,6 +288,56 @@
|
|||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="60dp"
|
||||||
|
android:onClick="@{click::setBlacklist}">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="电话白名单设置"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="22sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="未开启"
|
||||||
|
android:textColor="@color/setting_disable_color"
|
||||||
|
android:textSize="25sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@drawable/icon_more"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
|
|||||||
@@ -37,6 +37,10 @@
|
|||||||
<variable
|
<variable
|
||||||
name="hourly_time"
|
name="hourly_time"
|
||||||
type="Boolean" />
|
type="Boolean" />
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="voiceSpeaker"
|
||||||
|
type="Boolean" />
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
@@ -332,6 +336,95 @@
|
|||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:onClick="@{click::appSpeak}">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="应用启动播报"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text='@{voiceSpeaker?"已开启":"未开启"}'
|
||||||
|
android:textColor="@{voiceSpeaker?@color/setting_enable_color:@color/setting_disable_color}"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="未开启" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:onClick="@{click::setBlacklist}">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="电话白名单设置"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="未开启"
|
||||||
|
android:textColor="@color/setting_disable_color"
|
||||||
|
android:textSize="25sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@drawable/icon_more"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="80dp"
|
android:layout_height="80dp"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/constraintLayout3"
|
android:id="@+id/constraintLayout3"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp"
|
android:layout_height="64dp"
|
||||||
android:background="@drawable/general_setting_bg"
|
android:background="@drawable/general_setting_bg"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|||||||
923
app/src/main/res/layout/activity_time.xml
Normal file
923
app/src/main/res/layout/activity_time.xml
Normal file
@@ -0,0 +1,923 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context=".activity.setting.TimeActivity">
|
||||||
|
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="click"
|
||||||
|
type="com.xxpatx.os.activity.setting.TimeActivity.BtnClick" />
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout3"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="64dp"
|
||||||
|
android:background="@drawable/general_setting_bg"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_cancel"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:onClick="@{click::exit}"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/add_contact_back"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:text="整点报时"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_confirm"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/icon_confirm"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="@color/white"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/constraintLayout3">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout11"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="64dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="整点报时"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_hour"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/constraintLayout11">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_0"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="0点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_0"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="1点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="2点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="3点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_4"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="4点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_4"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_5"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="5点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_5"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_6"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="6点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_6"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_7"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="7点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_7"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_8"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="8点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_8"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_9"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="9点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_9"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_10"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="10点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_10"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_11"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="11点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_11"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_12"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="12点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_12"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_13"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="13点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_13"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_14"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="14点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_14"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_15"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="15点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_15"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_16"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="16点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_16"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_17"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="17点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_17"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_18"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="18点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_18"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_19"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="19点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_19"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_20"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="20点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_20"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_21"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="21点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_21"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_22"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="22点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_22"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="56dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_time_23"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="23点"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/sw_time_23"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/lightGray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</layout>
|
||||||
140
app/src/main/res/layout/activity_white_list.xml
Normal file
140
app/src/main/res/layout/activity_white_list.xml
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context=".activity.phone.WhiteListActivity">
|
||||||
|
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="click"
|
||||||
|
type="com.xxpatx.os.activity.phone.WhiteListActivity.BtnClick" />
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="whiteList"
|
||||||
|
type="Boolean" />
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout3"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="64dp"
|
||||||
|
android:background="@drawable/general_setting_bg"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_cancel"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:onClick="@{click::exit}"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/add_contact_back"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:text="电话白名单设置"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_confirm"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/icon_confirm"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout13"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:background="@color/white"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/constraintLayout3">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="白名单开关"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:onClick="@{click::openWhiteList}"
|
||||||
|
android:text='@{whiteList?"已开启":"未开启"}'
|
||||||
|
android:textColor="@{whiteList?@color/setting_enable_color:@color/setting_disable_color}"
|
||||||
|
android:textSize="25sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="未开启" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/constraintLayout15"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/white"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/constraintLayout13">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:text="以下号码为白名单列表,添加的联系人会默认加入白名单"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:background="@color/white"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/constraintLayout15" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</layout>
|
||||||
60
app/src/main/res/layout/item_black_list.xml
Normal file
60
app/src/main/res/layout/item_black_list.xml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/root"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="64dp"
|
||||||
|
android:background="@drawable/phone_background"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="2">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_number"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="22sp"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/tv_delete"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
tools:text="1234567890" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_delete"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:text="删除"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1px"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:background="@color/gray"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -6,4 +6,4 @@
|
|||||||
android:canRetrieveWindowContent="true"
|
android:canRetrieveWindowContent="true"
|
||||||
android:description="@string/accessibility_service_description"
|
android:description="@string/accessibility_service_description"
|
||||||
android:notificationTimeout="100"
|
android:notificationTimeout="100"
|
||||||
android:packageNames="com.tencent.mm" />
|
android:packageNames="com.tencent.mm,com.android.dialer" />
|
||||||
|
|||||||
Reference in New Issue
Block a user