version:6.5
fix: update:增加自动接听,语音播报,拨号提示音,悬浮按钮
This commit is contained in:
@@ -13,23 +13,15 @@ import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RemoteViews;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.BaseDataBindingActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.databinding.ActivityAddItemBinding;
|
||||
import com.uiuios.aios.shortcut.ShortcutPkgInfo;
|
||||
import com.uiuios.aios.shortcut.ShortcutUtils;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class AddItemActivity extends BaseMvvmActivity<AddItemViewModel, ActivityAddItemBinding> {
|
||||
private static final String TAG = AddItemActivity.class.getSimpleName();
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
@@ -18,6 +19,7 @@ import com.uiuios.aios.alarm.AlarmUtils;
|
||||
import com.uiuios.aios.alarm.PortAlarmAdapter;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.ActivityAlarmPortBinding;
|
||||
import com.uiuios.aios.dialog.DeleteDialog;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
@@ -31,6 +33,8 @@ import io.reactivex.rxjava3.disposables.Disposable;
|
||||
public class PortAlarmActivity extends BaseMvvmActivity<PortAlarmViewModel, ActivityAlarmPortBinding> {
|
||||
private static final String TAG = PortAlarmActivity.class.getSimpleName();
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
private PortAlarmAdapter mAlarmAdapter;
|
||||
private int mType = 0;
|
||||
|
||||
@@ -65,7 +69,12 @@ public class PortAlarmActivity extends BaseMvvmActivity<PortAlarmViewModel, Acti
|
||||
mAlarmAdapter.setOnLongClickListener(new PortAlarmAdapter.OnLongClickListener() {
|
||||
@Override
|
||||
public void onLongClick(AlarmClockData alarmClockData) {
|
||||
showDialog(alarmClockData);
|
||||
boolean clockModify = mMMKV.decodeBool(CommonConfig.DISABLE_CLOCK_MODIFY, false);
|
||||
if (clockModify) {
|
||||
Toaster.showLong("已禁用联系人修改");
|
||||
} else {
|
||||
showDialog(alarmClockData);
|
||||
}
|
||||
}
|
||||
});
|
||||
mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(PortAlarmActivity.this));
|
||||
@@ -74,7 +83,7 @@ public class PortAlarmActivity extends BaseMvvmActivity<PortAlarmViewModel, Acti
|
||||
@Override
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
switch (newState){
|
||||
switch (newState) {
|
||||
/*正在拖拽*/
|
||||
case RecyclerView.SCROLL_STATE_DRAGGING:
|
||||
break;
|
||||
@@ -201,7 +210,6 @@ public class PortAlarmActivity extends BaseMvvmActivity<PortAlarmViewModel, Acti
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class Click {
|
||||
public void exit(View view) {
|
||||
finish();
|
||||
|
||||
@@ -41,7 +41,6 @@ import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
@@ -6,37 +6,25 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.alarmclock.add.AlarmClockAddActivity;
|
||||
import com.uiuios.aios.alarm.AlarmAdapter;
|
||||
import com.uiuios.aios.alarm.AlarmClockData;
|
||||
import com.uiuios.aios.alarm.AlarmUtils;
|
||||
import com.uiuios.aios.base.mvp.BaseMvpActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.databinding.ActivityAlarmBinding;
|
||||
import com.uiuios.aios.dialog.DeleteDialog;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.uiuios.aios.push.PushManager;
|
||||
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import cn.jzvd.Jzvd;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
@@ -20,8 +20,6 @@ import net.lucode.hackware.magicindicator.ViewPagerHelper;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class FamilySpaceActivity extends BaseMvvmActivity<FamilySpaceViewModel, ActivityFamilySpaceBinding> {
|
||||
|
||||
private HealthCodeAdapter mHealthCodeAdapter;
|
||||
|
||||
@@ -10,32 +10,22 @@ import android.provider.MediaStore;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.luck.picture.lib.basic.PictureSelector;
|
||||
import com.luck.picture.lib.config.SelectMimeType;
|
||||
import com.luck.picture.lib.entity.LocalMedia;
|
||||
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
|
||||
import com.shehuan.niv.NiceImageView;
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.BaseDataBindingActivity;
|
||||
import com.uiuios.aios.base.GlideEngine;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.databinding.ActivityAddContactBinding;
|
||||
import com.uiuios.aios.fragment.contact.ContactFragment;
|
||||
import com.uiuios.aios.manager.RemoteManager;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.uiuios.aios.utils.GlideLoadUtils;
|
||||
import com.uiuios.aios.view.ToggleButton;
|
||||
import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -43,8 +33,6 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
@@ -16,8 +16,6 @@ import com.uiuios.aios.databinding.ActivityDetailsBinding;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class DetailsActivity extends BaseMvvmActivity<DetailsViewModel, ActivityDetailsBinding> {
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
@@ -46,7 +44,6 @@ public class DetailsActivity extends BaseMvvmActivity<DetailsViewModel, Activity
|
||||
*/
|
||||
@Override
|
||||
public void initView() {
|
||||
ButterKnife.bind(this);
|
||||
Intent intent = getIntent();
|
||||
if (intent == null) return;
|
||||
GoodsInfo goodsInfo = (GoodsInfo) intent.getSerializableExtra("GoodsInfo");
|
||||
|
||||
@@ -15,8 +15,6 @@ import com.uiuios.aios.databinding.ActivityDialerBinding;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class DialerActivity extends BaseMvvmActivity<DialerViewModel, ActivityDialerBinding> {
|
||||
|
||||
|
||||
|
||||
@@ -3,12 +3,9 @@ package com.uiuios.aios.activity.emergency;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
@@ -21,11 +18,8 @@ import com.uiuios.aios.manager.AmapManager;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.uiuios.aios.receiver.BootReceiver;
|
||||
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
|
||||
@@ -2,29 +2,22 @@ package com.uiuios.aios.activity.infolist;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.adapter.ArticleAdapter;
|
||||
import com.uiuios.aios.base.BaseDataBindingActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.ArticleInfo;
|
||||
import com.uiuios.aios.bean.ArticleList;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.databinding.ActivityInfoListBinding;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
@@ -4,36 +4,23 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.adapter.InformationAdapter;
|
||||
import com.uiuios.aios.base.BaseDataBindingActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.ArticleInfo;
|
||||
import com.uiuios.aios.bean.ArticleList;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.bean.CategoryBean;
|
||||
import com.uiuios.aios.databinding.ActivityInformationBinding;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
public class InformationActivity extends BaseMvvmActivity<InformationViewModel, ActivityInformationBinding> {
|
||||
private static final String TAG = InformationActivity.class.getSimpleName();
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
|
||||
private int defaultCurrent = 2;
|
||||
|
||||
private CameraManager cameraManager;
|
||||
private boolean flashing = false;
|
||||
|
||||
@Override
|
||||
public void onDisconnected() {
|
||||
@@ -467,6 +468,9 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
|
||||
Permission.WRITE_CALL_LOG,
|
||||
Permission.READ_CONTACTS,
|
||||
Permission.WRITE_CONTACTS,
|
||||
// Permission.READ_SMS,
|
||||
// Permission.RECEIVE_SMS,
|
||||
|
||||
};
|
||||
|
||||
private void getPermission() {
|
||||
@@ -489,6 +493,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
|
||||
}
|
||||
Log.e(TAG, "onGranted: 获取权限成功");
|
||||
addData();
|
||||
initAmap();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -813,7 +818,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
|
||||
return Settings.Secure.getInt(getContentResolver(), "flashlight_enabled", 0) == 1;
|
||||
}
|
||||
|
||||
private boolean flashing = false;
|
||||
|
||||
public class BtnClick {
|
||||
public void dialer(View view) {
|
||||
@@ -831,6 +835,10 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
|
||||
ApkUtils.openPackage(MainActivity.this, "com.ss.android.ugc.aweme");
|
||||
}
|
||||
|
||||
public void toCamera(View v) {
|
||||
ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
|
||||
}
|
||||
|
||||
public void toCalendar(View v) {
|
||||
// startActivity(new Intent(MainActivity.this, EmergencyActivity.class));
|
||||
ApkUtils.openPackage(MainActivity.this, "com.youloft.calendar");
|
||||
|
||||
@@ -21,8 +21,6 @@ import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.ActivityScreenLockBinding;
|
||||
import com.uiuios.aios.manager.RemoteManager;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class ScreenLockActivity extends BaseMvvmActivity<ScreenLockViewModel, ActivityScreenLockBinding> {
|
||||
private static final String TAG = ScreenLockActivity.class.getSimpleName();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.uiuios.aios.activity;
|
||||
package com.uiuios.aios.activity.selectnumber;
|
||||
|
||||
import android.content.Context;
|
||||
import android.telecom.PhoneAccountHandle;
|
||||
@@ -9,15 +9,14 @@ import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.mvp.BaseMvpActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.databinding.ActivitySelectNumberBinding;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class SelectNumberActivity extends BaseMvpActivity {
|
||||
public class SelectNumberActivity extends BaseMvvmActivity<SelectNumberViewModel, ActivitySelectNumberBinding> {
|
||||
private static final String TAG = SelectNumberActivity.class.getSimpleName();
|
||||
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@@ -29,6 +28,14 @@ public class SelectNumberActivity extends BaseMvpActivity {
|
||||
return R.layout.activity_select_number;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
mViewModel.setCtx(this);
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
// mViewDataBinding.setClick(new BtnClick());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initView() {
|
||||
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.uiuios.aios.activity.selectnumber;
|
||||
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.base.mvvm.BaseViewModel;
|
||||
import com.uiuios.aios.databinding.ActivitySelectNumberBinding;
|
||||
|
||||
public class SelectNumberViewModel extends BaseViewModel<ActivitySelectNumberBinding, ActivityEvent> {
|
||||
|
||||
@Override
|
||||
public ActivitySelectNumberBinding getVDBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -9,25 +9,41 @@ import android.net.Uri;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.BuildConfig;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.callwechat.CallWechatActivity;
|
||||
import com.uiuios.aios.activity.tts.TtsActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.ActivitySettingBinding;
|
||||
import com.uiuios.aios.service.WeAccessibilityService;
|
||||
import com.uiuios.aios.service.main.MainService;
|
||||
import com.uiuios.aios.utils.AccessibilityUtils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class SettingActivity extends BaseMvvmActivity<SettingViewModel, ActivitySettingBinding> {
|
||||
private static final String TAG = SettingActivity.class.getSimpleName();
|
||||
private static final int REQUEST_PERMISSION_CODE = 1234;
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
|
||||
private String[] PERMISSIONS_SMS = {
|
||||
Manifest.permission.READ_SMS,
|
||||
Manifest.permission.RECEIVE_SMS,
|
||||
};
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_setting;
|
||||
@@ -51,6 +67,30 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
setStatus();
|
||||
}
|
||||
|
||||
private void setStatus() {
|
||||
boolean showFloatWindow = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false);
|
||||
Log.e(TAG, "initView: showFloatWindow = " + showFloatWindow);
|
||||
mViewDataBinding.setFloatWindowEnable(showFloatWindow);
|
||||
|
||||
boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false);
|
||||
Log.e(TAG, "initView: voiceBroadcast = " + voiceBroadcast);
|
||||
mViewDataBinding.setVoiceBroadcast(voiceBroadcast);
|
||||
|
||||
boolean autoAccept = mMMKV.decodeBool(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, false);
|
||||
Log.e(TAG, "initView: autoAccept = " + autoAccept);
|
||||
mViewDataBinding.setAutoAccept(autoAccept);
|
||||
|
||||
boolean dialTone = mMMKV.decodeBool(CommonConfig.DISABLE_DIAL_TONE_MODIFY, true);
|
||||
Log.e(TAG, "initView: dialTone = " + dialTone);
|
||||
mViewDataBinding.setDialTone(dialTone);
|
||||
}
|
||||
|
||||
private static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200;
|
||||
|
||||
@Override
|
||||
@@ -65,6 +105,15 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
||||
showFloatingWindow();
|
||||
}
|
||||
}
|
||||
setStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == REQUEST_PERMISSION_CODE) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void showFloatingWindow() {
|
||||
@@ -128,7 +177,6 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
||||
public void openFloat(View view) {
|
||||
boolean floatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false);
|
||||
if (floatWindowEnable) {
|
||||
|
||||
hideFloatingWindow();
|
||||
} else {
|
||||
boolean permission = checkFloatPermission(SettingActivity.this);
|
||||
@@ -148,6 +196,57 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void voiceBroadcast(View view) {
|
||||
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(SettingActivity.this, Manifest.permission.READ_SMS)) {
|
||||
ActivityCompat.requestPermissions(SettingActivity.this, PERMISSIONS_SMS, REQUEST_PERMISSION_CODE);
|
||||
Toast.makeText(SettingActivity.this, "请授予读取短信权限", Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(SettingActivity.this, Manifest.permission.RECEIVE_SMS)) {
|
||||
ActivityCompat.requestPermissions(SettingActivity.this, PERMISSIONS_SMS, REQUEST_PERMISSION_CODE);
|
||||
Toast.makeText(SettingActivity.this, "请授予接收短信权限", Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false);
|
||||
Log.e(TAG, "voiceBroadcast: voiceBroadcast = " + voiceBroadcast);
|
||||
mViewDataBinding.setVoiceBroadcast(!voiceBroadcast);
|
||||
mMMKV.encode(CommonConfig.VOICE_BROADCAST, !voiceBroadcast);
|
||||
}
|
||||
|
||||
private String testText = "TTS(从文本到语音,Text To Speech),是将文本转化为语音,人机对话的一部分,让机器能够说话。\n" +
|
||||
"android自带的TTS目前只支持英文、法文、意大利文、德文、西班牙文。不支持中文,如果想要播放出中文语音需要借助中文TTS引擎的帮助。";
|
||||
|
||||
public void testTts(View view) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Intent ttsIntent = new Intent(SettingActivity.this, TtsActivity.class);
|
||||
ttsIntent.putExtra("sender", "test");
|
||||
ttsIntent.putExtra("body", testText);
|
||||
startActivity(ttsIntent);
|
||||
}
|
||||
}
|
||||
|
||||
public void autoAccept(View view) {
|
||||
if (AccessibilityUtils.isAccessibilitySettingsOn(SettingActivity.this)) {
|
||||
boolean autoAccept = mMMKV.decodeBool(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, true);
|
||||
Log.e(TAG, "autoAccept: autoAccept = " + autoAccept);
|
||||
mViewDataBinding.setAutoAccept(!autoAccept);
|
||||
mMMKV.encode(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, !autoAccept);
|
||||
Intent intent = new Intent(WeAccessibilityService.SETTING_AUTOMATIC_ANSWER_ACTION);
|
||||
intent.putExtra("auto_answer", !autoAccept);
|
||||
} else {
|
||||
Toast.makeText(SettingActivity.this, "请在无障碍服务中打开 - 关爱守护快捷服务", Toast.LENGTH_LONG).show();
|
||||
startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
|
||||
}
|
||||
}
|
||||
|
||||
public void setDialTone(View view) {
|
||||
boolean dialTone = mMMKV.decodeBool(CommonConfig.DISABLE_DIAL_TONE_MODIFY, true);
|
||||
Log.e(TAG, "setDialTone: dialTone = " + dialTone);
|
||||
mViewDataBinding.setDialTone(!dialTone);
|
||||
mMMKV.encode(CommonConfig.DISABLE_DIAL_TONE_MODIFY, !dialTone);
|
||||
}
|
||||
|
||||
public void toInternet(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
||||
}
|
||||
@@ -163,5 +262,7 @@ public class SettingActivity extends BaseMvvmActivity<SettingViewModel, Activity
|
||||
public void toSettings(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
package com.uiuios.aios.activity.setting;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.databinding.ActivitySettingBinding;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.ActivityTouchBinding;
|
||||
|
||||
public class TouchActivity extends BaseMvvmActivity<TouchViewModel, ActivityTouchBinding> {
|
||||
private static final String TAG =TouchActivity.class.getSimpleName() ;
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
|
||||
@Override
|
||||
@@ -27,7 +30,17 @@ public class TouchActivity extends BaseMvvmActivity<TouchViewModel, ActivityTouc
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
boolean disableKey = mMMKV.decodeBool(CommonConfig.DISABLE_VOLUME_KEY, false);
|
||||
Log.e(TAG, "initView: disableKey = " + disableKey);
|
||||
mViewDataBinding.setDisableKey(disableKey);
|
||||
|
||||
boolean contactModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false);
|
||||
Log.e(TAG, "initView: contactModify = " + contactModify);
|
||||
mViewDataBinding.setDisableContact(contactModify);
|
||||
|
||||
boolean clockModify = mMMKV.decodeBool(CommonConfig.DISABLE_CLOCK_MODIFY, false);
|
||||
Log.e(TAG, "disableVolumeKey: clockModify = " + clockModify);
|
||||
mViewDataBinding.setDisableClock(clockModify);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -36,16 +49,26 @@ public class TouchActivity extends BaseMvvmActivity<TouchViewModel, ActivityTouc
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
public void toInternet(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
|
||||
public void disableVolumeKey(View view) {
|
||||
boolean disableKey = mMMKV.decodeBool(CommonConfig.DISABLE_VOLUME_KEY, false);
|
||||
Log.e(TAG, "disableVolumeKey: disableKey = " + disableKey);
|
||||
mViewDataBinding.setDisableKey(!disableKey);
|
||||
mMMKV.encode(CommonConfig.DISABLE_VOLUME_KEY, !disableKey);
|
||||
}
|
||||
|
||||
public void toFont(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
|
||||
public void disableContactModify(View view) {
|
||||
boolean contactModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false);
|
||||
Log.e(TAG, "disableVolumeKey: contactModify = " + contactModify);
|
||||
mViewDataBinding.setDisableContact(!contactModify);
|
||||
mMMKV.encode(CommonConfig.DISABLE_CONTACT_MODIFY, !contactModify);
|
||||
}
|
||||
|
||||
public void toSettings(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
||||
public void disableClockModify(View view) {
|
||||
boolean clockModify = mMMKV.decodeBool(CommonConfig.DISABLE_CLOCK_MODIFY, false);
|
||||
Log.e(TAG, "disableVolumeKey: clockModify = " + clockModify);
|
||||
mViewDataBinding.setDisableClock(!clockModify);
|
||||
mMMKV.encode(CommonConfig.DISABLE_CLOCK_MODIFY, !clockModify);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,59 +1,49 @@
|
||||
package com.uiuios.aios.activity;
|
||||
package com.uiuios.aios.activity.spikelist;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.adapter.GoodsListAdapter;
|
||||
import com.uiuios.aios.base.BaseDataBindingActivity;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.bean.GoodsInfo;
|
||||
import com.uiuios.aios.bean.GoodsList;
|
||||
import com.uiuios.aios.databinding.ActivitySpikeListBinding;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
|
||||
public class SpikeListActivity extends BaseDataBindingActivity {
|
||||
@BindView(R.id.recyclerView)
|
||||
RecyclerView recyclerView;
|
||||
@BindView(R.id.iv1)
|
||||
ImageView iv1;
|
||||
@BindView(R.id.iv_back)
|
||||
ImageView iv_back;
|
||||
|
||||
public class SpikeListActivity extends BaseMvvmActivity<SpikeListViewModel, ActivitySpikeListBinding> {
|
||||
private GoodsListAdapter mGoodsAdapter;
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_spike_list;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
DataBindingUtil.setContentView(this,R.layout.activity_spike_list);
|
||||
mViewModel.setCtx(this);
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
mViewDataBinding.setClick(new BtnClick());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initView() {
|
||||
ButterKnife.bind(this);
|
||||
mGoodsAdapter = new GoodsListAdapter();
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||
recyclerView.setAdapter(mGoodsAdapter);
|
||||
iv_back.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
mViewDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||
mViewDataBinding.recyclerView.setAdapter(mGoodsAdapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,10 +67,10 @@ public class SpikeListActivity extends BaseDataBindingActivity {
|
||||
GoodsList goodsList = listBaseResponse.data;
|
||||
List<GoodsInfo> goodsInfos = goodsList.getData();
|
||||
if (goodsInfos != null && goodsInfos.size() != 0) {
|
||||
iv1.setVisibility(android.view.View.GONE);
|
||||
mViewDataBinding.iv1.setVisibility(android.view.View.GONE);
|
||||
mGoodsAdapter.setGoodsInfoList(goodsInfos);
|
||||
} else {
|
||||
iv1.setVisibility(android.view.View.VISIBLE);
|
||||
mViewDataBinding.iv1.setVisibility(android.view.View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,4 +85,10 @@ public class SpikeListActivity extends BaseDataBindingActivity {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
public void exit(View view) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.uiuios.aios.activity.spikelist;
|
||||
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.base.mvvm.BaseViewModel;
|
||||
import com.uiuios.aios.databinding.ActivitySpikeListBinding;
|
||||
|
||||
public class SpikeListViewModel extends BaseViewModel<ActivitySpikeListBinding, ActivityEvent> {
|
||||
|
||||
@Override
|
||||
public ActivitySpikeListBinding getVDBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.uiuios.aios.activity.tts;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.databinding.ActivityTtsBinding;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class TtsActivity extends BaseMvvmActivity<TtsViewModel, ActivityTtsBinding> implements TextToSpeech.OnInitListener {
|
||||
private static final String TAG = TtsActivity.class.getSimpleName();
|
||||
|
||||
|
||||
private TextToSpeech mTextToSpeech;
|
||||
private String mBody;
|
||||
private String mSender;
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_tts;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
mViewModel.setCtx(this);
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
mViewDataBinding.setClick(new BtnClick());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
Intent intent = getIntent();
|
||||
mBody = intent.getStringExtra("body");
|
||||
mSender = intent.getStringExtra("sender");
|
||||
if (TextUtils.isEmpty(mBody)) {
|
||||
finish();
|
||||
} else {
|
||||
mTextToSpeech = new TextToSpeech(this, this);
|
||||
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
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
//中断当前话语
|
||||
mTextToSpeech.stop();
|
||||
//释放资源
|
||||
mTextToSpeech.shutdown();
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
public void exit(View view) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.uiuios.aios.activity.tts;
|
||||
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.uiuios.aios.base.mvvm.BaseViewModel;
|
||||
import com.uiuios.aios.databinding.ActivityTtsBinding;
|
||||
|
||||
public class TtsViewModel extends BaseViewModel<ActivityTtsBinding, ActivityEvent> {
|
||||
|
||||
@Override
|
||||
public ActivityTtsBinding getVDBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -25,21 +25,20 @@ import com.hjq.toast.Toaster;
|
||||
import com.qweather.sdk.bean.base.Code;
|
||||
import com.qweather.sdk.bean.weather.WeatherDailyBean;
|
||||
import com.qweather.sdk.bean.weather.WeatherNowBean;
|
||||
import com.tencent.bugly.crashreport.CrashReport;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.location.LocationAcivity;
|
||||
import com.uiuios.aios.adapter.WeatherDayApdapterPort;
|
||||
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
|
||||
import com.uiuios.aios.bean.JsonBean;
|
||||
import com.uiuios.aios.bean.MapGeoResult;
|
||||
import com.uiuios.aios.bean.QweatherLocation;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.ActivityWeatherBinding;
|
||||
import com.uiuios.aios.manager.AmapManager;
|
||||
import com.uiuios.aios.manager.RemoteManager;
|
||||
import com.uiuios.aios.utils.DataUtil;
|
||||
import com.uiuios.aios.utils.TimeUtils;
|
||||
|
||||
import com.uiuios.aios.view.FadeInOutAnimator;
|
||||
import com.uiuios.aios.view.HorizontalItemDecoration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -119,6 +118,7 @@ public class WeatherActivity extends BaseMvvmActivity<WeatherViewModel, Activity
|
||||
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
||||
}
|
||||
mViewDataBinding.rvWeather.setLayoutManager(linearLayoutManager);
|
||||
mViewDataBinding.rvWeather.setItemAnimator(new FadeInOutAnimator());
|
||||
// mViewDataBinding.rvWeather.setLayoutManager(new GridLayoutManager(this, 3));
|
||||
// mViewDataBinding.rvWeather.addItemDecoration(new RecyclerItemDecoration(ScreenUtils.dp2px(resources, 10), ScreenUtils.dp2px(resources, 10), 3));
|
||||
mWeatherDayApdapter = new WeatherDayApdapterPort();
|
||||
|
||||
@@ -22,8 +22,6 @@ import com.uiuios.aios.view.HorizontalItemDecoration;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class WiFiManagerActivity extends BaseMvvmActivity<WiFiManagerViewModel, ActivityWifiManagerBinding> {
|
||||
|
||||
private SavedWiFiAdapter mSavedWiFiAdapter;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.uiuios.aios.base;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.TextUtils;
|
||||
@@ -46,7 +47,9 @@ public class BaseApplication extends Application {
|
||||
// 初始化 Toast 框架
|
||||
Toaster.init(this);
|
||||
|
||||
CrashReport.initCrashReport(getApplicationContext(), "", false);
|
||||
CrashReport.initCrashReport(getApplicationContext(), "f65d7a4361", false);
|
||||
CrashReport.setDeviceModel(getApplicationContext(), Build.MODEL);
|
||||
xcrash.XCrash.init(this);
|
||||
|
||||
aliyunPushInit();
|
||||
PushManager.init(this);
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
package com.uiuios.aios.base;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.base.rx.BaseRxActivity;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
|
||||
|
||||
public abstract class BaseTransparentActivity extends BaseRxActivity {
|
||||
private static final String TAG = BaseTransparentActivity.class.getSimpleName();
|
||||
|
||||
|
||||
private MMKV mmkv = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
public BaseTransparentActivity() {
|
||||
super();
|
||||
@@ -54,4 +63,25 @@ public abstract class BaseTransparentActivity extends BaseRxActivity {
|
||||
public boolean setfitWindow() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_VOLUME_UP://增大系统媒体音量
|
||||
case KeyEvent.KEYCODE_VOLUME_DOWN://减小系统媒体音量
|
||||
return getVolumeKeyStatus();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
public boolean getVolumeKeyStatus() {
|
||||
boolean disableKey = mmkv.decodeBool(CommonConfig.DISABLE_VOLUME_KEY, false);
|
||||
Log.e(TAG, "getVolumeKeyStatus: disableKey = " + disableKey);
|
||||
if (disableKey){
|
||||
Toaster.showLong("音量键已被禁用");
|
||||
}
|
||||
return disableKey;
|
||||
}
|
||||
}
|
||||
@@ -51,13 +51,13 @@ public class AddressBean implements Serializable {
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
String s = "";
|
||||
StringBuilder s = new StringBuilder();
|
||||
if (!TextUtils.isEmpty(mProvince))
|
||||
s += mProvince;
|
||||
s.append(mProvince);
|
||||
if (!TextUtils.isEmpty(mCity))
|
||||
s += mCity;
|
||||
s.append(" ").append(mCity);
|
||||
if (!TextUtils.isEmpty(mDistrict))
|
||||
s += mDistrict;
|
||||
return s;
|
||||
s.append(" ").append(mDistrict);
|
||||
return s.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,8 +74,22 @@ public class CommonConfig {
|
||||
public static final String EMERGENCY_CONTACT_KEY = "emergency_contact_phone";
|
||||
public static final String FAMILY_ADDRESS_KEY = "Family_Address";
|
||||
|
||||
/*拨号提示音*/
|
||||
public static final String DISABLE_DIAL_TONE_MODIFY = "disable_dial_modify_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 FLOAT_WINDOW = "FloatWindowEnable";
|
||||
/*禁用音量键*/
|
||||
public static final String DISABLE_VOLUME_KEY = "disable_volume_key";
|
||||
/*修改联系人禁用*/
|
||||
public static final String DISABLE_CONTACT_MODIFY = "disable_contact_modify_key";
|
||||
/*禁用闹钟修改*/
|
||||
public static final String DISABLE_CLOCK_MODIFY = "disable_clock_modify_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";
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.uiuios.aios.fragment.custom;
|
||||
|
||||
import com.uiuios.aios.base.mvp.BasePresenter;
|
||||
import com.uiuios.aios.base.mvp.BaseView;
|
||||
import com.uiuios.aios.bean.UserAvatarInfo;
|
||||
|
||||
public class CustomContact {
|
||||
public interface Presenter extends BasePresenter<CustomView> {
|
||||
void getSnInfo();
|
||||
}
|
||||
|
||||
public interface CustomView extends BaseView {
|
||||
void setSnInfo(UserAvatarInfo userAvatarInfo);
|
||||
}
|
||||
}
|
||||
@@ -22,24 +22,18 @@ import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.blankj.utilcode.util.NetworkUtils;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.king.view.circleprogressview.CircleProgressView;
|
||||
import com.qweather.sdk.bean.base.Code;
|
||||
import com.qweather.sdk.bean.base.Lang;
|
||||
import com.qweather.sdk.bean.base.Unit;
|
||||
@@ -50,27 +44,27 @@ import com.qweather.sdk.view.QWeather;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.BuildConfig;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.control.ControlActivity;
|
||||
import com.uiuios.aios.activity.emergency.EmergencyActivity;
|
||||
import com.uiuios.aios.activity.quickapp.QuickAppActivity;
|
||||
import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
|
||||
import com.uiuios.aios.activity.code.FamilySpaceActivity;
|
||||
import com.uiuios.aios.activity.contact.ContactActivity;
|
||||
import com.uiuios.aios.activity.control.ControlActivity;
|
||||
import com.uiuios.aios.activity.emergency.EmergencyActivity;
|
||||
import com.uiuios.aios.activity.quickapp.QuickAppActivity;
|
||||
import com.uiuios.aios.activity.weather.WeatherActivity;
|
||||
import com.uiuios.aios.adapter.NotificationAdapter;
|
||||
import com.uiuios.aios.adapter.SOSNnmberAdapter;
|
||||
import com.uiuios.aios.alarm.AlarmClockData;
|
||||
import com.uiuios.aios.alarm.AlarmUtils;
|
||||
import com.uiuios.aios.base.BaseFragment;
|
||||
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
|
||||
import com.uiuios.aios.bean.AlarmItem;
|
||||
import com.uiuios.aios.bean.Contact;
|
||||
import com.uiuios.aios.bean.HealthCode;
|
||||
import com.uiuios.aios.bean.SnInfo;
|
||||
import com.uiuios.aios.bean.UserAvatarInfo;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.FragmentCustomBinding;
|
||||
import com.uiuios.aios.dialog.PasswordDialog;
|
||||
import com.uiuios.aios.dialog.SingleDialog;
|
||||
import com.uiuios.aios.disklrucache.CacheHelper;
|
||||
import com.uiuios.aios.manager.AmapManager;
|
||||
import com.uiuios.aios.manager.RemoteManager;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
@@ -82,7 +76,6 @@ import com.uiuios.aios.utils.BitmapUtils;
|
||||
import com.uiuios.aios.utils.DayUtils;
|
||||
import com.uiuios.aios.utils.NetStateUtils;
|
||||
import com.uiuios.aios.utils.SchemeUtils;
|
||||
|
||||
import com.uiuios.aios.utils.Utils;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
@@ -92,120 +85,36 @@ import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
* Use the {@link CustomFragment#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
public class CustomFragment extends BaseFragment implements CustomContact.CustomView, NetworkUtils.OnNetworkStatusChangedListener {
|
||||
|
||||
@BindView(R.id.cl_weather)
|
||||
ConstraintLayout cl_weather;
|
||||
@BindView(R.id.cl_clean)
|
||||
ConstraintLayout cl_shared_space;
|
||||
@BindView(R.id.cl_sos)
|
||||
ConstraintLayout cl_soso;
|
||||
@BindView(R.id.cl_guard)
|
||||
ConstraintLayout cl_guard;
|
||||
@BindView(R.id.cl_health)
|
||||
ConstraintLayout cl_health;
|
||||
@BindView(R.id.cl_contact)
|
||||
ConstraintLayout cl_contact;
|
||||
@BindView(R.id.cl_ai)
|
||||
ConstraintLayout cl_ai;
|
||||
@BindView(R.id.cl_app)
|
||||
ConstraintLayout cl_app;
|
||||
@BindView(R.id.cl_appstore)
|
||||
ConstraintLayout cl_appstore;
|
||||
@BindView(R.id.cl_wifi)
|
||||
ConstraintLayout cl_wifi;
|
||||
@BindView(R.id.cl_activation)
|
||||
ConstraintLayout cl_activation;
|
||||
@BindView(R.id.cl_control)
|
||||
ConstraintLayout cl_control;
|
||||
@BindView(R.id.tv_time)
|
||||
TextView tv_time;
|
||||
@BindView(R.id.tv_data)
|
||||
TextView tv_data;
|
||||
@BindView(R.id.tv_battery)
|
||||
TextView tv_battery;
|
||||
@BindView(R.id.tv_location)
|
||||
TextView tv_location;
|
||||
@BindView(R.id.tv_weather)
|
||||
TextView tv_weather;
|
||||
@BindView(R.id.iv_pic)
|
||||
ImageView iv_pic;
|
||||
@BindView(R.id.tv_temp)
|
||||
TextView tv_temp;
|
||||
@BindView(R.id.cpv)
|
||||
CircleProgressView cpv;
|
||||
@BindView(R.id.rv_noti)
|
||||
RecyclerView rv_noti;
|
||||
@BindView(R.id.iv_wifi)
|
||||
ImageView iv_wifi;
|
||||
@BindView(R.id.wifi_ssid)
|
||||
TextView wifi_ssid;
|
||||
@BindView(R.id.iv_sos)
|
||||
ImageView iv_sos;
|
||||
@BindView(R.id.rv_sos)
|
||||
RecyclerView rv_sos;
|
||||
@BindView(R.id.iv_note_nodata)
|
||||
ImageView iv_note_nodata;
|
||||
@BindView(R.id.tv_name)
|
||||
TextView tv_name;
|
||||
@BindView(R.id.iv_app)
|
||||
ImageView iv_app;
|
||||
@BindView(R.id.iv_battery)
|
||||
ImageView iv_battery;
|
||||
public class CustomFragment extends BaseMvvmFragment<CustomViewModel, FragmentCustomBinding> implements NetworkUtils.OnNetworkStatusChangedListener {
|
||||
|
||||
private static final String TAG = CustomFragment.class.getSimpleName();
|
||||
private MMKV mMMKV= MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
// private int[] mShaderColors = new int[]{0xFFfa3db5, 0xFFF8867E, 0xFFF79F6B, 0xFFF79F6B, 0xFFF79F6B, 0xFFF8867E, 0xFFfa3db5};
|
||||
private int[] mShaderColors = new int[]{0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192};
|
||||
private int[] mShaderColorsRed = new int[]{0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000, 0xFFFF0000};
|
||||
private View rootView;
|
||||
|
||||
private List<AlarmItem> alarmItemList;
|
||||
private NotificationAdapter notificationAdapter;
|
||||
// private AlarmClockAdapter alarmClockAdapter;
|
||||
private SOSNnmberAdapter sosNnmberAdapter;
|
||||
|
||||
private Activity mContext;
|
||||
private ContentResolver mCRv;
|
||||
private CacheHelper mCacheHelper;
|
||||
private CustomPresenter mCustomPresenter;
|
||||
|
||||
// TODO: Rename parameter arguments, choose names that match
|
||||
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
|
||||
private static final String ARG_PARAM1 = "param1";
|
||||
private static final String ARG_PARAM2 = "param2";
|
||||
|
||||
// TODO: Rename and change types of parameters
|
||||
private String mParam1;
|
||||
private String mParam2;
|
||||
|
||||
public CustomFragment() {
|
||||
// Required empty public constructor
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this factory method to create a new instance of
|
||||
* this fragment using the provided parameters.
|
||||
*
|
||||
* @param param1 Parameter 1.
|
||||
* @param param2 Parameter 2.
|
||||
* @return A new instance of fragment CustomFragment.
|
||||
*/
|
||||
// TODO: Rename and change types and number of parameters
|
||||
public static CustomFragment newInstance(String param1, String param2) {
|
||||
|
||||
public static CustomFragment newInstance() {
|
||||
CustomFragment fragment = new CustomFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_PARAM1, param1);
|
||||
args.putString(ARG_PARAM2, param2);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@@ -214,14 +123,48 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
// setAlarm();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.fragment_custom;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
mContext = getActivity();
|
||||
mCRv = mContext.getContentResolver();
|
||||
mViewModel.setCtx(getCtx());
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewDataBinding.setClick(new BtnClick());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView(Bundle bundle) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData(Bundle savedInstanceState) {
|
||||
mViewModel.getUserAvatarInfoData().observe(this, new Observer<UserAvatarInfo>() {
|
||||
@Override
|
||||
public void onChanged(UserAvatarInfo userAvatarInfo) {
|
||||
if (userAvatarInfo != null) {
|
||||
if (TextUtils.isEmpty(userAvatarInfo.getSn_name())) {
|
||||
mViewDataBinding.tvName.setText("未设置");
|
||||
} else {
|
||||
mViewDataBinding.tvName.setText(userAvatarInfo.getSn_name());
|
||||
}
|
||||
} else {
|
||||
mViewDataBinding.tvName.setText("未设置");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
NetworkUtils.registerNetworkStatusChangedListener(this);
|
||||
if (getArguments() != null) {
|
||||
mParam1 = getArguments().getString(ARG_PARAM1);
|
||||
mParam2 = getArguments().getString(ARG_PARAM2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -233,22 +176,22 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
|
||||
@Override
|
||||
public void onDisconnected() {
|
||||
wifi_ssid.setText("WiFi未连接");
|
||||
iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
mViewDataBinding.wifiSsid.setText("WiFi未连接");
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnected(NetworkUtils.NetworkType networkType) {
|
||||
if (networkType == NetworkUtils.NetworkType.NETWORK_WIFI) {
|
||||
iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect));
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect));
|
||||
if (isNetworkOnline1()) {
|
||||
wifi_ssid.setText("已连接");
|
||||
mViewDataBinding.wifiSsid.setText("已连接");
|
||||
} else {
|
||||
wifi_ssid.setText("未连接");
|
||||
mViewDataBinding.wifiSsid.setText("未连接");
|
||||
}
|
||||
} else {
|
||||
wifi_ssid.setText("WiFi未连接");
|
||||
iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
mViewDataBinding.wifiSsid.setText("WiFi未连接");
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,7 +304,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
|
||||
int elec = (level * 100) / scale;
|
||||
Log.i(TAG, "electricity:=" + elec + "%");
|
||||
tv_battery.setText(elec + "%");
|
||||
mViewDataBinding.tvBattery.setText(elec + "%");
|
||||
notifyBattery(level, scale, status, isCharging);
|
||||
} else if (Intent.ACTION_POWER_CONNECTED.equals(action)
|
||||
|| Intent.ACTION_POWER_DISCONNECTED.equals(action)
|
||||
@@ -375,7 +318,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
|
||||
public void notifyBattery(int level, int scale, int status, boolean isCharging) {
|
||||
Bitmap bitmap = BitmapUtils.getbatteryIcon(mContext, BitmapFactory.decodeResource(getResources(), R.drawable.battery_icon), level, isCharging);
|
||||
iv_battery.setImageBitmap(bitmap);
|
||||
mViewDataBinding.ivBattery.setImageBitmap(bitmap);
|
||||
}
|
||||
|
||||
//监听时间和日期变化
|
||||
@@ -413,10 +356,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
long time = System.currentTimeMillis();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
Date date = new Date(time);
|
||||
tv_time.setText(sdf.format(date));
|
||||
mViewDataBinding.tvTime.setText(sdf.format(date));
|
||||
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日");
|
||||
Date date2 = new Date(time);
|
||||
tv_data.setText(sdf2.format(date2) + "\t" + getWeek());
|
||||
mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + getWeek());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -434,44 +377,28 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
return weeks[weekIndex];
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
rootView = inflater.inflate(R.layout.fragment_custom, container, false);
|
||||
mContext = (Activity) rootView.getContext();
|
||||
mCustomPresenter = new CustomPresenter(mContext);
|
||||
mCustomPresenter.attachView(this);
|
||||
mCustomPresenter.setLifecycle(getLifecycleSubject());
|
||||
mCacheHelper = new CacheHelper(mContext);
|
||||
mCRv = mContext.getContentResolver();
|
||||
ButterKnife.bind(this, rootView);
|
||||
initView();
|
||||
return rootView;
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
Log.e(TAG, "initView: " + Utils.getBatteryLevel(mContext));
|
||||
registerRefreshReceiver();
|
||||
registerBatteryReceiver();
|
||||
registerAlarmClockReceiver();
|
||||
registerTimeReceiver();
|
||||
wifi_ssid.requestFocus();
|
||||
mViewDataBinding.wifiSsid.requestFocus();
|
||||
setTiem();
|
||||
if (Settings.Global.getInt(mCRv, "is_aihealth", 0) == 1) {
|
||||
cl_appstore.setVisibility(View.GONE);
|
||||
cl_ai.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.clAppstore.setVisibility(View.GONE);
|
||||
mViewDataBinding.clAi.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
cl_appstore.setVisibility(View.VISIBLE);
|
||||
cl_ai.setVisibility(View.GONE);
|
||||
mViewDataBinding.clAppstore.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.clAi.setVisibility(View.GONE);
|
||||
}
|
||||
cpv.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.cpv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
killBackgroundApp();
|
||||
}
|
||||
});
|
||||
cl_guard.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clGuard.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
getAlarm();
|
||||
@@ -484,65 +411,65 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
getAlarm();
|
||||
}
|
||||
});
|
||||
rv_noti.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.rvNoti.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
getAlarm();
|
||||
}
|
||||
});
|
||||
rv_noti.setLayoutManager(new LinearLayoutManager(mContext));
|
||||
rv_noti.setAdapter(notificationAdapter);
|
||||
mViewDataBinding.rvNoti.setLayoutManager(new LinearLayoutManager(mContext));
|
||||
mViewDataBinding.rvNoti.setAdapter(notificationAdapter);
|
||||
if (isWifiConnect()) {
|
||||
iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect));
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_connect));
|
||||
if (isNetworkOnline1()) {
|
||||
wifi_ssid.setText("已连接");
|
||||
mViewDataBinding.wifiSsid.setText("已连接");
|
||||
} else {
|
||||
wifi_ssid.setText("未连接");
|
||||
mViewDataBinding.wifiSsid.setText("未连接");
|
||||
}
|
||||
} else {
|
||||
wifi_ssid.setText("WiFi未连接");
|
||||
iv_wifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
mViewDataBinding.wifiSsid.setText("WiFi未连接");
|
||||
mViewDataBinding.ivWifi.setImageDrawable(mContext.getDrawable(R.drawable.wifi_disconnect));
|
||||
}
|
||||
sosNnmberAdapter = new SOSNnmberAdapter();
|
||||
rv_sos.setLayoutManager(new LinearLayoutManager(mContext));
|
||||
rv_sos.setAdapter(sosNnmberAdapter);
|
||||
cl_soso.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.rvSos.setLayoutManager(new LinearLayoutManager(mContext));
|
||||
mViewDataBinding.rvSos.setAdapter(sosNnmberAdapter);
|
||||
mViewDataBinding.clSos.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
checkSosNumber();
|
||||
}
|
||||
});
|
||||
cl_weather.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clWeather.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startActivity(new Intent(mContext, WeatherActivity.class));
|
||||
}
|
||||
});
|
||||
cl_shared_space.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clClean.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
killBackgroundApp();
|
||||
}
|
||||
});
|
||||
cl_health.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clHealth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
getHealthCode();
|
||||
}
|
||||
});
|
||||
cl_contact.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clContact.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
checkContact();
|
||||
}
|
||||
});
|
||||
cl_ai.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clAi.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
openScheme(SchemeUtils.SCHEME_HAND);
|
||||
}
|
||||
});
|
||||
cl_app.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clApp.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (TextUtils.isEmpty(quickAppPackagesName)) {
|
||||
@@ -555,7 +482,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
}
|
||||
}
|
||||
});
|
||||
cl_app.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
mViewDataBinding.clApp.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
int is_quick = Settings.Global.getInt(mContext.getContentResolver(), QuickAppActivity.QUICK_APP_ENABLED_KEY, 0);
|
||||
@@ -567,13 +494,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
return false;
|
||||
}
|
||||
});
|
||||
cl_appstore.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clAppstore.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.OldMainActivity");
|
||||
}
|
||||
});
|
||||
cl_wifi.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clWifi.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
|
||||
@@ -581,13 +508,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
cl_activation.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clActivation.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ApkUtils.openPackage(mContext, "com.uiuios.sn");
|
||||
}
|
||||
});
|
||||
cl_control.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clControl.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startActivity(new Intent(mContext, ControlActivity.class));
|
||||
@@ -596,19 +523,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
refreshMemory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSnInfo(UserAvatarInfo userAvatarInfo) {
|
||||
if (userAvatarInfo != null) {
|
||||
if (TextUtils.isEmpty(userAvatarInfo.getSn_name())) {
|
||||
tv_name.setText("未设置");
|
||||
} else {
|
||||
tv_name.setText(userAvatarInfo.getSn_name());
|
||||
}
|
||||
} else {
|
||||
tv_name.setText("未设置");
|
||||
}
|
||||
}
|
||||
|
||||
private void showPassword() {
|
||||
PasswordDialog passwordDialog = new PasswordDialog(mContext);
|
||||
passwordDialog.setTitle("请输入密码退出关怀系统");
|
||||
@@ -670,7 +584,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
mCustomPresenter.getSnInfo();
|
||||
mViewModel.getSnInfo();
|
||||
initAmap();
|
||||
getAlarmCache();
|
||||
}
|
||||
@@ -707,10 +621,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (applicationInfo != null) {
|
||||
iv_app.setImageDrawable(applicationInfo.loadIcon(pm));
|
||||
mViewDataBinding.ivApp.setImageDrawable(applicationInfo.loadIcon(pm));
|
||||
}
|
||||
} else {
|
||||
iv_app.setImageDrawable(mContext.getDrawable(R.drawable.home_quick_app));
|
||||
mViewDataBinding.ivApp.setImageDrawable(mContext.getDrawable(R.drawable.home_quick_app));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -753,30 +667,30 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
}
|
||||
|
||||
public void setSosNumber() {
|
||||
String jsonString = mCacheHelper.getAsString(UrlAddress.GET_SETTINGS);
|
||||
//为 "" 是已经请求成功的
|
||||
if (jsonString == null) {
|
||||
// rv_sos.setVisibility(View.GONE);
|
||||
// iv_sos.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
Gson gson = new Gson();
|
||||
Type type = new TypeToken<List<Contact>>() {
|
||||
}.getType();
|
||||
List<Contact> setting_sos = gson.fromJson(jsonString, type);
|
||||
if (setting_sos == null || setting_sos.size() == 0) {
|
||||
// rv_sos.setVisibility(View.VISIBLE);
|
||||
// iv_sos.setVisibility(View.GONE);
|
||||
sosNnmberAdapter.setPhoneNumberList(setting_sos);
|
||||
} else {
|
||||
// rv_sos.setVisibility(View.GONE);
|
||||
// iv_sos.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
// String jsonString = mCacheHelper.getAsString(UrlAddress.GET_SETTINGS);
|
||||
// //为 "" 是已经请求成功的
|
||||
// if (jsonString == null) {
|
||||
// // rvSos.setVisibility(View.GONE);
|
||||
//// iv_sos.setVisibility(View.VISIBLE);
|
||||
// } else {
|
||||
// Gson gson = new Gson();
|
||||
// Type type = new TypeToken<List<Contact>>() {
|
||||
// }.getType();
|
||||
// List<Contact> setting_sos = gson.fromJson(jsonString, type);
|
||||
// if (setting_sos == null || setting_sos.size() == 0) {
|
||||
// // rvSos.setVisibility(View.VISIBLE);
|
||||
//// iv_sos.setVisibility(View.GONE);
|
||||
// sosNnmberAdapter.setPhoneNumberList(setting_sos);
|
||||
// } else {
|
||||
// // rvSos.setVisibility(View.GONE);
|
||||
//// iv_sos.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private void initAmap() {
|
||||
String city = AmapManager.getInstance().getCity();
|
||||
tv_location.setText(city);
|
||||
mViewDataBinding.tvLocation.setText(city);
|
||||
getweather(AmapManager.getInstance().getLocationTude());
|
||||
}
|
||||
|
||||
@@ -791,12 +705,12 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
}.getType();
|
||||
List<AlarmClockData> list = gson.fromJson(jsonString, type);
|
||||
if (list == null || list.size() == 0) {
|
||||
rv_noti.setVisibility(View.GONE);
|
||||
iv_note_nodata.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.rvNoti.setVisibility(View.GONE);
|
||||
mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
notificationAdapter.setDataList(list.subList(0, 1));
|
||||
rv_noti.setVisibility(View.VISIBLE);
|
||||
iv_note_nodata.setVisibility(View.GONE);
|
||||
mViewDataBinding.rvNoti.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.ivNoteNodata.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -809,18 +723,18 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
if (alarmClockData != null) {
|
||||
data.add(alarmClockData);
|
||||
notificationAdapter.setDataList(data);
|
||||
rv_noti.setVisibility(View.VISIBLE);
|
||||
iv_note_nodata.setVisibility(View.GONE);
|
||||
mViewDataBinding.rvNoti.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.ivNoteNodata.setVisibility(View.GONE);
|
||||
} else {
|
||||
rv_noti.setVisibility(View.GONE);
|
||||
iv_note_nodata.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.rvNoti.setVisibility(View.GONE);
|
||||
mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAlarmClockEmpty() {
|
||||
rv_noti.setVisibility(View.GONE);
|
||||
iv_note_nodata.setVisibility(View.VISIBLE);
|
||||
mViewDataBinding.rvNoti.setVisibility(View.GONE);
|
||||
mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -892,10 +806,10 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
WeatherNowBean.NowBaseBean now = weatherBean.getNow();
|
||||
// String imageName = "he" + now.getIcon();
|
||||
// int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
|
||||
// iv_pic.setImageDrawable(mContext.getDrawable(resId));
|
||||
// ivPic.setImageDrawable(mContext.getDrawable(resId));
|
||||
nowString = now.getText();
|
||||
tv_temp.setText(now.getTemp() + "℃");
|
||||
tv_weather.setText(now.getText());
|
||||
mViewDataBinding.tvTemp.setText(now.getTemp() + "℃");
|
||||
mViewDataBinding.tvWeather.setText(now.getText());
|
||||
String iconDay = weatherBean.getNow().getIcon();
|
||||
Log.e("getweather", "onSuccess: iconDay = " + iconDay);
|
||||
switch (iconDay) {
|
||||
@@ -904,13 +818,13 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
case "102":
|
||||
case "152":
|
||||
if (DayUtils.isNight()) {
|
||||
cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun));
|
||||
mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun));
|
||||
} else {
|
||||
cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night));
|
||||
mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain));
|
||||
mViewDataBinding.clWeather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_rain));
|
||||
}
|
||||
} else {
|
||||
//在此查看返回数据失败的原因
|
||||
@@ -939,11 +853,11 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
|
||||
Log.e(TAG, "onSuccess: " + resId);
|
||||
if (resId == 0) {
|
||||
iv_pic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
|
||||
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
|
||||
} else {
|
||||
iv_pic.setImageDrawable(mContext.getDrawable(resId));
|
||||
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
|
||||
}
|
||||
tv_temp.setText(now.getTemp() + "℃");
|
||||
mViewDataBinding.tvTemp.setText(now.getTemp() + "℃");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -969,7 +883,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
List<WeatherDailyBean.DailyBean> dailyBeans = weatherDailyBean.getDaily();
|
||||
if (dailyBeans != null && dailyBeans.size() != 0) {
|
||||
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
|
||||
tv_weather.setText(nowString + "\t" + dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
|
||||
mViewDataBinding.tvWeather.setText(nowString + "\t" + dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -993,18 +907,17 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
long total = AppUtil.getTotalMemory(mContext);
|
||||
int x = (int) (((total - avail) / (double) total) * 100);
|
||||
if (x > 80) {
|
||||
cpv.setProgressColor(mShaderColorsRed);
|
||||
mViewDataBinding.cpv.setProgressColor(mShaderColorsRed);
|
||||
} else {
|
||||
cpv.setProgressColor(mShaderColors);
|
||||
mViewDataBinding.cpv.setProgressColor(mShaderColors);
|
||||
}
|
||||
cpv.showAnimation(0, x, 1000);
|
||||
mViewDataBinding.cpv.showAnimation(0, x, 1000);
|
||||
float x2 = (((total - avail) / (float) total));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
mCustomPresenter.detachView();
|
||||
NetworkUtils.unregisterNetworkStatusChangedListener(this);
|
||||
if (batteryReceiver != null) {
|
||||
mContext.unregisterReceiver(batteryReceiver);
|
||||
@@ -1016,4 +929,8 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
|
||||
mContext.unregisterReceiver(mTimeChangedReceiver);
|
||||
}
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
package com.uiuios.aios.fragment.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||
import com.trello.rxlifecycle4.android.FragmentEvent;
|
||||
import com.uiuios.aios.bean.SnInfo;
|
||||
import com.uiuios.aios.bean.UserAvatarInfo;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject;
|
||||
|
||||
public class CustomPresenter implements CustomContact.Presenter {
|
||||
private static final String TAG = CustomPresenter.class.getSimpleName();
|
||||
private Context mContext;
|
||||
private CustomContact.CustomView mView;
|
||||
|
||||
public CustomPresenter(Context context) {
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
private BehaviorSubject<FragmentEvent> lifecycle;
|
||||
|
||||
void setLifecycle(BehaviorSubject<FragmentEvent> lifecycle) {
|
||||
this.lifecycle = lifecycle;
|
||||
}
|
||||
|
||||
public BehaviorSubject<FragmentEvent> getLifecycle() {
|
||||
return lifecycle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachView(@NonNull CustomContact.CustomView view) {
|
||||
this.mView = view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detachView() {
|
||||
this.mView = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSnInfo() {
|
||||
NetInterfaceManager.getInstance().getUserAvatarInfo(lifecycle, new NetInterfaceManager.UserAvatarInfoCallback() {
|
||||
@Override
|
||||
public void setUserAvatarInfo(UserAvatarInfo info) {
|
||||
mView.setSnInfo(info);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.uiuios.aios.fragment.custom;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.trello.rxlifecycle4.android.FragmentEvent;
|
||||
import com.uiuios.aios.base.mvvm.BaseViewModel;
|
||||
import com.uiuios.aios.bean.UserAvatarInfo;
|
||||
import com.uiuios.aios.databinding.FragmentCustomBinding;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
|
||||
public class CustomViewModel extends BaseViewModel<FragmentCustomBinding, FragmentEvent> {
|
||||
|
||||
@Override
|
||||
public FragmentCustomBinding getVDBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
|
||||
private MutableLiveData<UserAvatarInfo> mUserAvatarInfoData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<UserAvatarInfo> getUserAvatarInfoData() {
|
||||
return mUserAvatarInfoData;
|
||||
}
|
||||
|
||||
public void getSnInfo() {
|
||||
NetInterfaceManager.getInstance().getUserAvatarInfo(getLifecycle(), new NetInterfaceManager.UserAvatarInfoCallback() {
|
||||
@Override
|
||||
public void setUserAvatarInfo(UserAvatarInfo info) {
|
||||
mUserAvatarInfoData.setValue(info);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.camera2.CameraAccessException;
|
||||
import android.hardware.camera2.CameraManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.DisplayMetrics;
|
||||
@@ -72,6 +74,10 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
private HomeAppAdapter mHomeAppAdapter;
|
||||
// private NotificationAdapter notificationAdapter;
|
||||
|
||||
private CameraManager cameraManager;
|
||||
private boolean flashing = false;
|
||||
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
private int[] mShaderColors = new int[]{0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192, 0xFF05d192};
|
||||
@@ -146,6 +152,7 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
mViewDataBinding.setClick(new BtnClick());
|
||||
cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -510,6 +517,19 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
|
||||
startActivity(new Intent(mContext, SettingActivity.class));
|
||||
}
|
||||
|
||||
public void openFlash(View v) {
|
||||
try {
|
||||
String cameraId = cameraManager.getCameraIdList()[0];
|
||||
cameraManager.setTorchMode(cameraId, !flashing);
|
||||
flashing = !flashing;
|
||||
mViewDataBinding.setFlashing(flashing);
|
||||
} catch (CameraAccessException e) {
|
||||
e.printStackTrace();
|
||||
Log.e(TAG, "openFlash: " + e.getMessage());
|
||||
Toaster.show("打开手电筒失败");
|
||||
}
|
||||
}
|
||||
|
||||
public void killApp(View view) {
|
||||
killBackgroundApp();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.contact.AddWechatContactActivity;
|
||||
import com.uiuios.aios.activity.contact.EditContactActivity;
|
||||
@@ -23,6 +24,7 @@ import com.uiuios.aios.adapter.WechatContactAdapter;
|
||||
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.bean.Contact;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.FragmentContactBinding;
|
||||
import com.uiuios.aios.dialog.EditContactDialog;
|
||||
|
||||
@@ -37,6 +39,8 @@ import java.util.List;
|
||||
public class ContactFragment extends BaseMvvmFragment<ContactViewModel, FragmentContactBinding> {
|
||||
private static final String TAG = ContactFragment.class.getSimpleName();
|
||||
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
private Context mContext;
|
||||
private ContactAdapter mContactAdapter;
|
||||
|
||||
@@ -69,7 +73,12 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
|
||||
mContactAdapter.setOnLongClick(new WechatContactAdapter.OnLongClick() {
|
||||
@Override
|
||||
public void setOnLongClickListener(Contact contact) {
|
||||
showDialog(contact);
|
||||
boolean disableModify = mMMKV.decodeBool(CommonConfig.DISABLE_CONTACT_MODIFY, false);
|
||||
if (disableModify){
|
||||
Toaster.showLong("已禁用联系人修改");
|
||||
}else {
|
||||
showDialog(contact);
|
||||
}
|
||||
}
|
||||
});
|
||||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.uiuios.aios.fragment.phone.dialer;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.SoundPool;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
@@ -9,16 +11,19 @@ import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.hjq.toast.Toaster;
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.SelectNumberActivity;
|
||||
import com.uiuios.aios.activity.selectnumber.SelectNumberActivity;
|
||||
import com.uiuios.aios.activity.contact.AddWechatContactActivity;
|
||||
import com.uiuios.aios.activity.contact.ContactActivity;
|
||||
import com.uiuios.aios.activity.records.RecordsActivity;
|
||||
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
|
||||
import com.uiuios.aios.databinding.FragmentDialerBinding;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.databinding.FragmentDialerNewBinding;
|
||||
import com.uiuios.aios.utils.Utils;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* A simple {@link BaseMvvmFragment} subclass.
|
||||
* Use the {@link DialerFragment#newInstance} factory method to
|
||||
@@ -26,9 +31,12 @@ import com.uiuios.aios.utils.Utils;
|
||||
*/
|
||||
public class DialerFragment extends BaseMvvmFragment<DialerViewModel, FragmentDialerNewBinding> {
|
||||
private static final String TAG = DialerFragment.class.getSimpleName();
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private SoundPool soundPool;
|
||||
private HashMap<Integer, Integer> soundMap = new HashMap<>();
|
||||
|
||||
public DialerFragment() {
|
||||
|
||||
@@ -55,7 +63,25 @@ public class DialerFragment extends BaseMvvmFragment<DialerViewModel, FragmentDi
|
||||
|
||||
@Override
|
||||
protected void initView(Bundle bundle) {
|
||||
|
||||
AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景
|
||||
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 设置音效的类型
|
||||
soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 设置音效池的属性
|
||||
.setMaxStreams(12) // 设置最多可容纳10个音频流
|
||||
.build(); // ①
|
||||
// load方法加载指定音频文件,并返回所加载的音效ID
|
||||
// 此处使用HashMap来管理这些音频流
|
||||
soundMap.put(0, soundPool.load(mContext, R.raw.s_0, 1));
|
||||
soundMap.put(1, soundPool.load(mContext, R.raw.s_1, 1));
|
||||
soundMap.put(2, soundPool.load(mContext, R.raw.s_2, 1));
|
||||
soundMap.put(3, soundPool.load(mContext, R.raw.s_3, 1));
|
||||
soundMap.put(4, soundPool.load(mContext, R.raw.s_4, 1));
|
||||
soundMap.put(5, soundPool.load(mContext, R.raw.s_5, 1));
|
||||
soundMap.put(6, soundPool.load(mContext, R.raw.s_6, 1));
|
||||
soundMap.put(7, soundPool.load(mContext, R.raw.s_7, 1));
|
||||
soundMap.put(8, soundPool.load(mContext, R.raw.s_8, 1));
|
||||
soundMap.put(9, soundPool.load(mContext, R.raw.s_9, 1));
|
||||
soundMap.put(10, soundPool.load(mContext, R.raw.s_x, 1));
|
||||
soundMap.put(11, soundPool.load(mContext, R.raw.s_j, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,7 +121,10 @@ public class DialerFragment extends BaseMvvmFragment<DialerViewModel, FragmentDi
|
||||
} else {
|
||||
mViewDataBinding.etPhone.setText(tmp + number);
|
||||
}
|
||||
// soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1);
|
||||
boolean dialTone = mMMKV.decodeBool(CommonConfig.DISABLE_DIAL_TONE_MODIFY, true);
|
||||
if (dialTone) {
|
||||
soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public class BtnClick {
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.uiuios.aios.fragment.second;
|
||||
|
||||
import com.uiui.video.bean.VideoInfo;
|
||||
import com.uiuios.aios.base.mvp.BasePresenter;
|
||||
import com.uiuios.aios.base.mvp.BaseView;
|
||||
import com.uiuios.aios.bean.ArticleInfo;
|
||||
import com.uiuios.aios.bean.GoodsInfo;
|
||||
import com.uiuios.aios.bean.ServeBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SecondContact {
|
||||
public interface Presenter extends BasePresenter<View> {
|
||||
void getGoods();
|
||||
void getArticle();
|
||||
void getLivenVideoList();
|
||||
void getKnowledgeVideoList();
|
||||
void getServe();
|
||||
}
|
||||
|
||||
public interface View extends BaseView {
|
||||
void setGoods(List<GoodsInfo> goodsInfos);
|
||||
void setArticle(List<ArticleInfo> articleInfoList);
|
||||
void setLivenVideoList(ArrayList<VideoInfo> livenVideoList);
|
||||
void setKnowledgeVideoList(ArrayList<VideoInfo> knowledgeVideoList);
|
||||
void setServe(ServeBean serve);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,15 @@
|
||||
package com.uiuios.aios.fragment.second;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearSnapHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
@@ -21,15 +17,15 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.blankj.utilcode.util.NetworkUtils;
|
||||
import com.uiui.video.bean.VideoInfo;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.OrderListActivity;
|
||||
import com.uiuios.aios.adapter.KnowledgeVideoAdapter;
|
||||
import com.uiuios.aios.adapter.LivenVideoAdapter;
|
||||
import com.uiuios.aios.adapter.NewArticleAdapter;
|
||||
import com.uiuios.aios.adapter.NewGoodsAdapter;
|
||||
import com.uiuios.aios.base.BaseFragment;
|
||||
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
|
||||
import com.uiuios.aios.bean.ArticleInfo;
|
||||
import com.uiuios.aios.bean.GoodsInfo;
|
||||
import com.uiuios.aios.bean.ServeBean;
|
||||
import com.uiuios.aios.databinding.FragmentSecondBinding;
|
||||
import com.uiuios.aios.utils.GlideLoadUtils;
|
||||
import com.uiuios.aios.utils.JGYUtils;
|
||||
|
||||
@@ -38,37 +34,15 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
/**
|
||||
* A simple {@link androidx.fragment.app.Fragment} subclass.
|
||||
* Use the {@link SecondFragment#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
public class SecondFragment extends BaseFragment implements SecondContact.View, NetworkUtils.OnNetworkStatusChangedListener {
|
||||
public class SecondFragment extends BaseMvvmFragment<SecondViewModel, FragmentSecondBinding> implements NetworkUtils.OnNetworkStatusChangedListener {
|
||||
private static final String TAG = SecondFragment.class.getSimpleName();
|
||||
|
||||
|
||||
@BindView(R.id.rv_goods)
|
||||
RecyclerView rv_goods;
|
||||
@BindView(R.id.rv_article)
|
||||
RecyclerView rv_article;
|
||||
@BindView(R.id.rv_liven)
|
||||
RecyclerView rv_liven;
|
||||
@BindView(R.id.rv_knowledge)
|
||||
RecyclerView rv_knowledge;
|
||||
|
||||
@BindView(R.id.cl_service)
|
||||
ConstraintLayout cl_service;
|
||||
@BindView(R.id.iv_serve)
|
||||
ImageView iv_serve;
|
||||
|
||||
|
||||
private View rootView;
|
||||
private Context mContext;
|
||||
private ContentResolver mCRv;
|
||||
private SecondPresenter mPresenter;
|
||||
|
||||
private NewGoodsAdapter mNewGoodsAdapter;
|
||||
private NewArticleAdapter mNewArticleAdapter;
|
||||
@@ -86,15 +60,6 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
private Runnable mArticleRunnable;
|
||||
|
||||
|
||||
// TODO: Rename parameter arguments, choose names that match
|
||||
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
|
||||
private static final String ARG_PARAM1 = "param1";
|
||||
private static final String ARG_PARAM2 = "param2";
|
||||
|
||||
// TODO: Rename and change types of parameters
|
||||
private String mParam1;
|
||||
private String mParam2;
|
||||
|
||||
@Override
|
||||
public void onDisconnected() {
|
||||
|
||||
@@ -108,37 +73,18 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
}
|
||||
|
||||
public SecondFragment() {
|
||||
// Required empty public constructor
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this factory method to create a new instance of
|
||||
* this fragment using the provided parameters.
|
||||
*
|
||||
* @param param1 Parameter 1.
|
||||
* @param param2 Parameter 2.
|
||||
* @return A new instance of fragment SecondFragment.
|
||||
*/
|
||||
// TODO: Rename and change types and number of parameters
|
||||
public static SecondFragment newInstance(String param1, String param2) {
|
||||
SecondFragment secondFragment = new SecondFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_PARAM1, param1);
|
||||
args.putString(ARG_PARAM2, param2);
|
||||
secondFragment.setArguments(args);
|
||||
return secondFragment;
|
||||
SecondFragment fragment = new SecondFragment();
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
mParam1 = getArguments().getString(ARG_PARAM1);
|
||||
mParam2 = getArguments().getString(ARG_PARAM2);
|
||||
}
|
||||
NetworkUtils.registerNetworkStatusChangedListener(this);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -148,50 +94,39 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
long time = System.currentTimeMillis();
|
||||
Log.e(TAG, "onCreateView: rootView = " + rootView);
|
||||
if (null != rootView) {
|
||||
ViewGroup parent = (ViewGroup) rootView.getParent();
|
||||
if (null != parent) {
|
||||
parent.removeView(rootView);
|
||||
}
|
||||
} else { // 如ongoing果rootView为空 ,就实例化该视图
|
||||
rootView = inflater.inflate(R.layout.fragment_second, container, false);
|
||||
mContext = rootView.getContext();
|
||||
mCRv = mContext.getContentResolver();
|
||||
ButterKnife.bind(this, rootView);
|
||||
mPresenter = new SecondPresenter(mContext);
|
||||
mPresenter.attachView(this);
|
||||
mPresenter.setLifecycle(getLifecycleSubject());
|
||||
initView();
|
||||
initData();
|
||||
}
|
||||
Log.e(TAG, "onCreateView: tiem = " + (System.currentTimeMillis() - time));
|
||||
return rootView;
|
||||
protected int getLayoutId() {
|
||||
return R.layout.fragment_second;
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
@Override
|
||||
protected void initDataBinding() {
|
||||
mContext = getActivity();
|
||||
mViewModel.setCtx(getCtx());
|
||||
mViewModel.setLifecycle(getLifecycleSubject());
|
||||
mViewModel.setVDBinding(mViewDataBinding);
|
||||
mViewDataBinding.setClick(new BtnClick());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView(Bundle bundle) {
|
||||
mNewGoodsAdapter = new NewGoodsAdapter();
|
||||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
|
||||
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
|
||||
rv_goods.setLayoutManager(linearLayoutManager);
|
||||
rv_goods.setAdapter(mNewGoodsAdapter);
|
||||
mViewDataBinding.rvGoods.setLayoutManager(linearLayoutManager);
|
||||
mViewDataBinding.rvGoods.setAdapter(mNewGoodsAdapter);
|
||||
LinearSnapHelper snapHelper = new LinearSnapHelper();
|
||||
snapHelper.attachToRecyclerView(rv_goods);
|
||||
rv_goods.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
snapHelper.attachToRecyclerView(mViewDataBinding.rvGoods);
|
||||
mViewDataBinding.rvGoods.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
Log.i("rv_goods", "onScrollStateChanged: newState = " + newState);
|
||||
Log.i("rvGoods", "onScrollStateChanged: newState = " + newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
mGoodsScrolling = false;
|
||||
// 获取当前滚动到的条目位置
|
||||
int firstIndex = linearLayoutManager.findFirstVisibleItemPosition();
|
||||
Log.i("rv_goods", "onScrollStateChanged: firstIndex = " + firstIndex);
|
||||
Log.i("rv_goods", "onScrollStateChanged: mCurrentGoodsIndex = " + mCurrentGoodsIndex);
|
||||
Log.i("rvGoods", "onScrollStateChanged: firstIndex = " + firstIndex);
|
||||
Log.i("rvGoods", "onScrollStateChanged: mCurrentGoodsIndex = " + mCurrentGoodsIndex);
|
||||
mCurrentGoodsIndex = firstIndex + 1;
|
||||
} else {
|
||||
mGoodsScrolling = true;
|
||||
@@ -207,21 +142,21 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
mNewArticleAdapter = new NewArticleAdapter();
|
||||
LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(mContext);
|
||||
linearLayoutManager2.setOrientation(LinearLayoutManager.HORIZONTAL);
|
||||
rv_article.setLayoutManager(linearLayoutManager2);
|
||||
rv_article.setAdapter(mNewArticleAdapter);
|
||||
mViewDataBinding.rvArticle.setLayoutManager(linearLayoutManager2);
|
||||
mViewDataBinding.rvArticle.setAdapter(mNewArticleAdapter);
|
||||
LinearSnapHelper snapHelper2 = new LinearSnapHelper();
|
||||
snapHelper2.attachToRecyclerView(rv_article);
|
||||
rv_article.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
snapHelper2.attachToRecyclerView(mViewDataBinding.rvArticle);
|
||||
mViewDataBinding.rvArticle.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
Log.i("rv_article", "onScrollStateChanged: newState = " + newState);
|
||||
Log.i("rvArticle", "onScrollStateChanged: newState = " + newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
mArticleScrolling = false;
|
||||
// 获取当前滚动到的条目位置
|
||||
int firstIndex = linearLayoutManager2.findFirstVisibleItemPosition();
|
||||
Log.i("rv_article", "onScrollStateChanged: firstIndex = " + firstIndex);
|
||||
Log.i("rv_article", "onScrollStateChanged: mCurrentArticleIndex = " + mCurrentArticleIndex);
|
||||
Log.i("rvArticle", "onScrollStateChanged: firstIndex = " + firstIndex);
|
||||
Log.i("rvArticle", "onScrollStateChanged: mCurrentArticleIndex = " + mCurrentArticleIndex);
|
||||
mCurrentArticleIndex = firstIndex + 1;
|
||||
} else {
|
||||
mArticleScrolling = true;
|
||||
@@ -247,7 +182,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
} else {
|
||||
mCurrentGoodsIndex++;
|
||||
}
|
||||
rv_goods.smoothScrollToPosition(mCurrentGoodsIndex);
|
||||
mViewDataBinding.rvGoods.smoothScrollToPosition(mCurrentGoodsIndex);
|
||||
mGoodsHandler.postDelayed(this, 3000);
|
||||
}
|
||||
};
|
||||
@@ -264,7 +199,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
} else {
|
||||
mCurrentArticleIndex++;
|
||||
}
|
||||
rv_article.smoothScrollToPosition(mCurrentArticleIndex);
|
||||
mViewDataBinding.rvArticle.smoothScrollToPosition(mCurrentArticleIndex);
|
||||
mArticleHandler.postDelayed(this, 3000);
|
||||
}
|
||||
};
|
||||
@@ -273,20 +208,20 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
mLivenVideoAdapter = new LivenVideoAdapter();
|
||||
LinearLayoutManager linearLayoutManager3 = new LinearLayoutManager(mContext);
|
||||
linearLayoutManager3.setOrientation(LinearLayoutManager.HORIZONTAL);
|
||||
rv_liven.setLayoutManager(linearLayoutManager3);
|
||||
rv_liven.setAdapter(mLivenVideoAdapter);
|
||||
mViewDataBinding.rvLiven.setLayoutManager(linearLayoutManager3);
|
||||
mViewDataBinding.rvLiven.setAdapter(mLivenVideoAdapter);
|
||||
LinearSnapHelper snapHelper3 = new LinearSnapHelper();
|
||||
snapHelper3.attachToRecyclerView(rv_liven);
|
||||
snapHelper3.attachToRecyclerView(mViewDataBinding.rvLiven);
|
||||
|
||||
mKnowledgeVideoAdapter = new KnowledgeVideoAdapter();
|
||||
LinearLayoutManager linearLayoutManager4 = new LinearLayoutManager(mContext);
|
||||
linearLayoutManager4.setOrientation(LinearLayoutManager.HORIZONTAL);
|
||||
rv_knowledge.setLayoutManager(linearLayoutManager4);
|
||||
rv_knowledge.setAdapter(mKnowledgeVideoAdapter);
|
||||
mViewDataBinding.rvKnowledge.setLayoutManager(linearLayoutManager4);
|
||||
mViewDataBinding.rvKnowledge.setAdapter(mKnowledgeVideoAdapter);
|
||||
LinearSnapHelper snapHelper4 = new LinearSnapHelper();
|
||||
snapHelper4.attachToRecyclerView(rv_knowledge);
|
||||
snapHelper4.attachToRecyclerView(mViewDataBinding.rvKnowledge);
|
||||
|
||||
cl_service.setOnClickListener(new View.OnClickListener() {
|
||||
mViewDataBinding.clService.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// startActivity(new Intent(mContext, OrderListActivity.class));
|
||||
@@ -294,12 +229,61 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData(Bundle savedInstanceState) {
|
||||
mViewModel.getGoodsListData().observe(this, new Observer<List<GoodsInfo>>() {
|
||||
@Override
|
||||
public void onChanged(List<GoodsInfo> goodsInfos) {
|
||||
if (goodsInfos != null && goodsInfos.size() != 0) {
|
||||
mNewGoodsAdapter.setGoodsInfoList(goodsInfos);
|
||||
mGoodsHandler.removeCallbacks(mGoodsRunnable);
|
||||
mGoodsHandler.postDelayed(mGoodsRunnable, 3000);
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
mViewModel.getArticleInfoListData().observe(this, new Observer<List<ArticleInfo>>() {
|
||||
@Override
|
||||
public void onChanged(List<ArticleInfo> articleInfos) {
|
||||
if (articleInfos != null && articleInfos.size() != 0) {
|
||||
mNewArticleAdapter.setArticleBeanList(articleInfos);
|
||||
mArticleHandler.removeCallbacks(mArticleRunnable);
|
||||
mArticleHandler.postDelayed(mArticleRunnable, 3000);
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
mViewModel.getVideoInfoListData().observe(this, new Observer<ArrayList<VideoInfo>>() {
|
||||
@Override
|
||||
public void onChanged(ArrayList<VideoInfo> videoInfos) {
|
||||
mLivenVideoAdapter.setLivenVideoList(videoInfos);
|
||||
}
|
||||
});
|
||||
mViewModel.getKnowledgeVideoInfoListData().observe(this, new Observer<ArrayList<VideoInfo>>() {
|
||||
@Override
|
||||
public void onChanged(ArrayList<VideoInfo> videoInfos) {
|
||||
mKnowledgeVideoAdapter.setLivenVideoList(videoInfos);
|
||||
}
|
||||
});
|
||||
|
||||
mViewModel.getServeBeanData().observe(this, new Observer<ServeBean>() {
|
||||
@Override
|
||||
public void onChanged(ServeBean serveBean) {
|
||||
if (serveBean != null) {
|
||||
GlideLoadUtils.getInstance().glideLoad(mContext, serveBean.getImage(), mViewDataBinding.ivServe, R.drawable.enterprise_wechat);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
mPresenter.getGoods();
|
||||
mPresenter.getArticle();
|
||||
mPresenter.getLivenVideoList();
|
||||
mPresenter.getKnowledgeVideoList();
|
||||
mPresenter.getServe();
|
||||
mViewModel.getGoods();
|
||||
mViewModel.getArticle();
|
||||
mViewModel.getLivenVideoList();
|
||||
mViewModel.getKnowledgeVideoList();
|
||||
mViewModel.getServe();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -331,43 +315,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View,
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGoods(List<GoodsInfo> goodsInfos) {
|
||||
if (goodsInfos != null && goodsInfos.size() != 0) {
|
||||
mNewGoodsAdapter.setGoodsInfoList(goodsInfos);
|
||||
mGoodsHandler.removeCallbacks(mGoodsRunnable);
|
||||
mGoodsHandler.postDelayed(mGoodsRunnable, 3000);
|
||||
} else {
|
||||
public class BtnClick {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setArticle(List<ArticleInfo> articleInfoList) {
|
||||
if (articleInfoList != null && articleInfoList.size() != 0) {
|
||||
mNewArticleAdapter.setArticleBeanList(articleInfoList);
|
||||
mArticleHandler.removeCallbacks(mArticleRunnable);
|
||||
mArticleHandler.postDelayed(mArticleRunnable, 3000);
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLivenVideoList(ArrayList<VideoInfo> livenVideoList) {
|
||||
mLivenVideoAdapter.setLivenVideoList(livenVideoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setKnowledgeVideoList(ArrayList<VideoInfo> knowledgeVideoList) {
|
||||
mKnowledgeVideoAdapter.setLivenVideoList(knowledgeVideoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setServe(ServeBean serve) {
|
||||
if (serve != null) {
|
||||
GlideLoadUtils.getInstance().glideLoad(mContext, serve.getImage(), iv_serve, R.drawable.enterprise_wechat);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
package com.uiuios.aios.fragment.second;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.trello.rxlifecycle4.RxLifecycle;
|
||||
import com.trello.rxlifecycle4.android.FragmentEvent;
|
||||
import com.uiui.video.bean.VideoInfo;
|
||||
import com.uiuios.aios.base.mvvm.BaseViewModel;
|
||||
import com.uiuios.aios.bean.ArticleInfo;
|
||||
import com.uiuios.aios.bean.ArticleList;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.bean.GoodsInfo;
|
||||
import com.uiuios.aios.bean.GoodsList;
|
||||
import com.uiuios.aios.bean.ServeBean;
|
||||
import com.uiuios.aios.databinding.FragmentSecondBinding;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -20,39 +23,25 @@ import java.util.List;
|
||||
import io.reactivex.rxjava3.annotations.NonNull;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject;
|
||||
|
||||
public class SecondPresenter implements SecondContact.Presenter {
|
||||
public class SecondViewModel extends BaseViewModel<FragmentSecondBinding, FragmentEvent> {
|
||||
|
||||
private static final String TAG = SecondPresenter.class.getSimpleName();
|
||||
private Context mContext;
|
||||
private SecondContact.View mView;
|
||||
|
||||
public SecondPresenter(Context context) {
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
private BehaviorSubject<FragmentEvent> lifecycle;
|
||||
|
||||
void setLifecycle(BehaviorSubject<FragmentEvent> lifecycle) {
|
||||
this.lifecycle = lifecycle;
|
||||
}
|
||||
|
||||
public BehaviorSubject<FragmentEvent> getLifecycle() {
|
||||
return lifecycle;
|
||||
@Override
|
||||
public FragmentSecondBinding getVDBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachView(@NonNull SecondContact.View view) {
|
||||
this.mView = view;
|
||||
public void onDestroy() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detachView() {
|
||||
this.mView = null;
|
||||
private MutableLiveData< List<GoodsInfo> > mGoodsListData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<List<GoodsInfo>> getGoodsListData() {
|
||||
return mGoodsListData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getGoods() {
|
||||
NetInterfaceManager.getInstance()
|
||||
.getGoodsListObservable()
|
||||
@@ -70,12 +59,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
GoodsList goodsList = listBaseResponse.data;
|
||||
List<GoodsInfo> goodsInfos = goodsList.getData();
|
||||
if (goodsInfos != null && goodsInfos.size() != 0) {
|
||||
mView.setGoods(goodsInfos);
|
||||
mGoodsListData.setValue(goodsInfos);
|
||||
} else {
|
||||
mView.setGoods(null);
|
||||
mGoodsListData.setValue(null);
|
||||
}
|
||||
} else {
|
||||
mView.setGoods(null);
|
||||
mGoodsListData.setValue(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +80,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
private MutableLiveData<List<ArticleInfo>> mArticleInfoListData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<List<ArticleInfo>> getArticleInfoListData() {
|
||||
return mArticleInfoListData;
|
||||
}
|
||||
|
||||
public void getArticle() {
|
||||
NetInterfaceManager.getInstance().getArticleListObservable()
|
||||
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
|
||||
@@ -109,12 +103,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
List<ArticleInfo> articleInfoList = articleList.getData();
|
||||
if (articleInfoList != null && articleInfoList.size() != 0) {
|
||||
articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
|
||||
mView.setArticle(articleInfoList);
|
||||
mArticleInfoListData.setValue(articleInfoList);
|
||||
} else {
|
||||
mView.setArticle(null);
|
||||
mArticleInfoListData.setValue(null);
|
||||
}
|
||||
} else {
|
||||
mView.setArticle(null);
|
||||
mArticleInfoListData.setValue(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +124,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
private MutableLiveData<ArrayList<VideoInfo> > mVideoInfoListData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<ArrayList<VideoInfo>> getVideoInfoListData() {
|
||||
return mVideoInfoListData;
|
||||
}
|
||||
|
||||
public void getLivenVideoList() {
|
||||
NetInterfaceManager.getInstance().getLivenVideoListObservable()
|
||||
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
|
||||
@@ -146,7 +145,7 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
if (listBaseResponse.code == 200) {
|
||||
ArrayList<VideoInfo> videoInfoArrayList = listBaseResponse.data;
|
||||
videoInfoArrayList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
|
||||
mView.setLivenVideoList(videoInfoArrayList);
|
||||
mVideoInfoListData.setValue(videoInfoArrayList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +161,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
private MutableLiveData<ArrayList<VideoInfo> > mKnowledgeVideoInfoListData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<ArrayList<VideoInfo>> getKnowledgeVideoInfoListData() {
|
||||
return mKnowledgeVideoInfoListData;
|
||||
}
|
||||
|
||||
public void getKnowledgeVideoList() {
|
||||
NetInterfaceManager.getInstance().getKnowledgeVideoListObservable()
|
||||
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
|
||||
@@ -178,7 +182,7 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
if (listBaseResponse.code == 200) {
|
||||
ArrayList<VideoInfo> videoInfoArrayList = listBaseResponse.data;
|
||||
videoInfoArrayList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
|
||||
mView.setKnowledgeVideoList(videoInfoArrayList);
|
||||
mKnowledgeVideoInfoListData.setValue(videoInfoArrayList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +198,12 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
private MutableLiveData<ServeBean> mServeBeanData =new MutableLiveData<>();
|
||||
|
||||
public MutableLiveData<ServeBean> getServeBeanData() {
|
||||
return mServeBeanData;
|
||||
}
|
||||
|
||||
public void getServe() {
|
||||
NetInterfaceManager.getInstance().getServeObservable()
|
||||
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
|
||||
@@ -210,7 +219,7 @@ public class SecondPresenter implements SecondContact.Presenter {
|
||||
if (serveBeanBaseResponse.code == 200) {
|
||||
ServeBean serveBean = serveBeanBaseResponse.data;
|
||||
if (serveBean != null) {
|
||||
mView.setServe(serveBean);
|
||||
mServeBeanData.setValue(serveBean);
|
||||
}
|
||||
} else {
|
||||
|
||||
45
app/src/main/java/com/uiuios/aios/receiver/SmsReceiver.java
Normal file
45
app/src/main/java/com/uiuios/aios/receiver/SmsReceiver.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package com.uiuios.aios.receiver;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.telephony.SmsMessage;
|
||||
import android.util.Log;
|
||||
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.activity.tts.TtsActivity;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
|
||||
public class SmsReceiver extends BroadcastReceiver {
|
||||
private static final String TAG = SmsReceiver.class.getSimpleName();
|
||||
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.e(TAG, "onReceive: " + intent.getAction());
|
||||
Bundle bundle = intent.getExtras();
|
||||
String format = intent.getStringExtra("format");
|
||||
if (bundle != null) {
|
||||
Object[] pdus = (Object[]) bundle.get("pdus");
|
||||
for (Object object : pdus) {
|
||||
SmsMessage message = SmsMessage.createFromPdu((byte[]) object, format);
|
||||
String sender = message.getOriginatingAddress();
|
||||
Log.e(TAG, "onReceive: sender = " + sender);
|
||||
long millis = message.getTimestampMillis();
|
||||
int status = message.getStatus();
|
||||
String body = message.getMessageBody();
|
||||
Log.e(TAG, "onReceive: body = " + body);
|
||||
boolean voiceBroadcast = mMMKV.decodeBool(CommonConfig.VOICE_BROADCAST, false);
|
||||
Log.e(TAG, "onReceive: voiceBroadcast = " + voiceBroadcast);
|
||||
if (voiceBroadcast) {
|
||||
Intent ttsIntent = new Intent(context, TtsActivity.class);
|
||||
ttsIntent.putExtra("sender", sender);
|
||||
ttsIntent.putExtra("body", body);
|
||||
ttsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(ttsIntent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,6 @@ import android.widget.Toast;
|
||||
|
||||
import com.tencent.mmkv.MMKV;
|
||||
import com.uiuios.aios.bean.Contact;
|
||||
import com.uiuios.aios.bean.WechatInfo;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
|
||||
public class WeAccessibilityService extends AccessibilityService {
|
||||
@@ -71,6 +70,7 @@ public class WeAccessibilityService extends AccessibilityService {
|
||||
super.onCreate();
|
||||
Log.e(TAG, "onCreate: ");
|
||||
registerSettingReceiver();
|
||||
mAutoAccept = mMMKV.decodeBool(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, false);
|
||||
handler = new Handler();
|
||||
|
||||
}
|
||||
@@ -131,9 +131,9 @@ public class WeAccessibilityService extends AccessibilityService {
|
||||
switch (mCurrentStep) {
|
||||
case WAITING:
|
||||
if (!mAutoAccept) return;
|
||||
if (step(Property.DESCRIPTION, RECEIVE_DESCRIPTION, Step.WAITING)) {
|
||||
if (stepAnswer(Property.DESCRIPTION, RECEIVE_DESCRIPTION)) {
|
||||
mCurrentStep = Step.WAITING;
|
||||
Toast.makeText(this, "自动接听视频/语音聊天", Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(this, "已自动接听视频/语音", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
break;
|
||||
case CLICK_HOME://主页能找到直接点击进去更多
|
||||
@@ -325,6 +325,23 @@ public class WeAccessibilityService extends AccessibilityService {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean stepAnswer(Property type, String text) {
|
||||
AccessibilityNodeInfo node = findNode(getRootInActiveWindow(), type, text);
|
||||
if (node != null) {
|
||||
Point point = getPointtByNode(node);
|
||||
Log.e(TAG, "stepAnswer: " + point);
|
||||
clickByNode(point.x, point.y + 50);
|
||||
// clickNode(node);
|
||||
Log.e(TAG, "stepAnswer: mCurrentStep " + mCurrentStep + " done");
|
||||
mCurrentStep = Step.WAITING;
|
||||
Log.e(TAG, "stepAnswer: next " + mCurrentStep);
|
||||
return true;
|
||||
} else {
|
||||
Log.e(TAG, "stepAnswer: not found");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//根据节点信息可获得对应的x,y坐标
|
||||
static Point getPointtByNode(AccessibilityNodeInfo node) {
|
||||
if (node == null) {
|
||||
@@ -336,7 +353,6 @@ public class WeAccessibilityService extends AccessibilityService {
|
||||
return point;
|
||||
}
|
||||
|
||||
|
||||
//实现对(x,y)坐标进行点击操作。
|
||||
private boolean clickByNode(int x, int y) {
|
||||
Point point = new Point(x, y);
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.uiuios.aios.service.main;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SmsMessage;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -27,13 +28,14 @@ import com.uiuios.aios.BuildConfig;
|
||||
import com.uiuios.aios.R;
|
||||
import com.uiuios.aios.activity.main.MainActivity;
|
||||
import com.uiuios.aios.activity.noti.NoticeActivity;
|
||||
import com.uiuios.aios.alarm.AlarmClockData;
|
||||
import com.uiuios.aios.alarm.AlarmUtils;
|
||||
import com.uiuios.aios.base.rx.BaseRxService;
|
||||
import com.uiuios.aios.alarm.AlarmClockData;
|
||||
import com.uiuios.aios.bean.BaseResponse;
|
||||
import com.uiuios.aios.config.CommonConfig;
|
||||
import com.uiuios.aios.manager.RemoteManager;
|
||||
import com.uiuios.aios.network.NetInterfaceManager;
|
||||
import com.uiuios.aios.receiver.SmsReceiver;
|
||||
import com.uiuios.aios.utils.ApkUtils;
|
||||
import com.uiuios.aios.utils.AppUsedTimeUtils;
|
||||
import com.uiuios.aios.utils.CmdUtil;
|
||||
@@ -146,6 +148,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
||||
registerLockScreenReceiver();
|
||||
registerRefreshReceiver();
|
||||
registerScreenLockReceiver();
|
||||
registerSmsReceiver();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -174,6 +177,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
||||
if (mWindowReceiver != null) {
|
||||
unregisterReceiver(mWindowReceiver);
|
||||
}
|
||||
if (mSmsReceiver != null) {
|
||||
unregisterReceiver(mSmsReceiver);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -533,6 +539,18 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
||||
}
|
||||
}
|
||||
|
||||
private void registerSmsReceiver() {
|
||||
if (mSmsReceiver == null) {
|
||||
mSmsReceiver = new SmsReceiver();
|
||||
}
|
||||
IntentFilter smsFilter = new IntentFilter();
|
||||
smsFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
|
||||
smsFilter.addAction("android.provider.Telephony.SMS_DELIVER");
|
||||
registerReceiver(new SmsReceiver(), smsFilter);
|
||||
}
|
||||
|
||||
private SmsReceiver mSmsReceiver;
|
||||
|
||||
/**
|
||||
* 显示弹出框
|
||||
*/
|
||||
|
||||
@@ -170,6 +170,9 @@ public class ApkUtils {
|
||||
this.add("com.android.stk");
|
||||
this.add("com.debug.loggerui");
|
||||
this.add("com.mediatek.gnss.nonframeworklbs");
|
||||
this.add("com.tencent.mm");
|
||||
this.add("com.ss.android.ugc.aweme");
|
||||
this.add("com.mediatek.camera");
|
||||
}};
|
||||
|
||||
/**
|
||||
|
||||
114
app/src/main/java/com/uiuios/aios/view/FadeInOutAnimator.java
Normal file
114
app/src/main/java/com/uiuios/aios/view/FadeInOutAnimator.java
Normal file
@@ -0,0 +1,114 @@
|
||||
package com.uiuios.aios.view;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator;
|
||||
|
||||
public class FadeInOutAnimator extends SimpleItemAnimator {
|
||||
private boolean mPendingRemovals = false;
|
||||
private boolean mPendingAdditions = false;
|
||||
|
||||
@Override
|
||||
public boolean animateRemove(final RecyclerView.ViewHolder holder) {
|
||||
mPendingRemovals = true;
|
||||
holder.itemView.animate()
|
||||
.alpha(0)
|
||||
.setDuration(getRemoveDuration())
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator anim) {
|
||||
dispatchRemoveFinished(holder);
|
||||
mPendingRemovals = false;
|
||||
if (!mPendingAdditions && !isRunning()) {
|
||||
dispatchAnimationsFinished();
|
||||
}
|
||||
}
|
||||
})
|
||||
.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean animateAdd(final RecyclerView.ViewHolder holder) {
|
||||
mPendingAdditions = true;
|
||||
holder.itemView.setAlpha(0);
|
||||
holder.itemView.animate()
|
||||
.alpha(1)
|
||||
.setDuration(getAddDuration())
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator anim) {
|
||||
dispatchAddFinished(holder);
|
||||
mPendingAdditions = false;
|
||||
if (!mPendingRemovals && !isRunning()) {
|
||||
dispatchAnimationsFinished();
|
||||
}
|
||||
}
|
||||
})
|
||||
.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
|
||||
// Fade in and out are implemented for add/remove, no need to implement move
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
|
||||
// Fade in and out are implemented for add/remove, no need to implement change
|
||||
mPendingAdditions = true;
|
||||
oldHolder.itemView.animate()
|
||||
.alpha(0)
|
||||
.setDuration(getChangeDuration())
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator anim) {
|
||||
dispatchRemoveFinished(oldHolder);
|
||||
mPendingRemovals = false;
|
||||
if (!mPendingAdditions && !isRunning()) {
|
||||
dispatchAnimationsFinished();
|
||||
}
|
||||
}
|
||||
})
|
||||
.start();
|
||||
newHolder.itemView.animate()
|
||||
.alpha(1)
|
||||
.setDuration(getChangeDuration())
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator anim) {
|
||||
dispatchRemoveFinished(newHolder);
|
||||
mPendingRemovals = false;
|
||||
if (!mPendingAdditions && !isRunning()) {
|
||||
dispatchAnimationsFinished();
|
||||
}
|
||||
}
|
||||
})
|
||||
.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runPendingAnimations() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endAnimation(RecyclerView.ViewHolder item) {
|
||||
item.itemView.animate().cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endAnimations() {
|
||||
// No animations running, nothing to cancel
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRunning() {
|
||||
return mPendingAdditions || mPendingRemovals;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user