version:6.2

fix:
update:手机适配,优化mvvm
This commit is contained in:
2024-07-08 10:35:12 +08:00
parent f06f51c5a7
commit 90e98b73c0
137 changed files with 7047 additions and 4420 deletions

View File

@@ -15,8 +15,8 @@ android {
applicationId "com.uiuios.aios"
minSdkVersion 24
targetSdkVersion 29
versionCode 52
versionName "6.1"
versionCode 53
versionName "6.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -27,7 +27,7 @@ android {
}
manifestPlaceholders = [
AMAP_KEY : "372937d213ff288dc150c31967a200cd"
AMAP_KEY: "372937d213ff288dc150c31967a200cd"
]
}
@@ -121,6 +121,7 @@ dependencies {
implementation "androidx.fragment:fragment:1.4.1"
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.preference:preference:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

View File

@@ -32,6 +32,7 @@
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 允许访问网络,必选权限 -->
<uses-permission android:name="android.permission.INTERNET" />
@@ -141,7 +142,7 @@
<!-- </intent-filter>-->
</activity>
<activity
android:name=".activity.main.OldMainActivity"
android:name=".activity.main.deprecated.OldMainActivity"
android:clearTaskOnLaunch="true"
android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
android:enabled="true"
@@ -179,13 +180,21 @@
</intent-filter>
</activity>
<activity android:name=".activity.ControlActivity" />
<activity android:name=".activity.QuickAppActivity" />
<activity android:name=".activity.control.ControlActivity" />
<activity android:name=".activity.quickapp.QuickAppActivity" />
<activity android:name=".activity.SpikeListActivity" />
<activity android:name=".activity.InfoListActivity" />
<activity android:name=".activity.ArticleActivity" />
<activity android:name=".activity.infolist.InfoListActivity" />
<activity android:name=".activity.article.ArticleActivity" />
<activity
android:name=".activity.DetailsActivity"
android:name=".activity.setting.SettingActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.setting.TouchActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.details.DetailsActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
<activity
@@ -208,8 +217,8 @@
<activity
android:name=".activity.phone.PhoneActivity"
android:configChanges="keyboardHidden"
android:screenOrientation="portrait"
android:launchMode="singleTask" />
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".activity.dailyapp.DailyAppActivity"
android:launchMode="singleTask" />
@@ -230,7 +239,7 @@
android:screenOrientation="portrait"
android:theme="@style/activity_styles" />
<activity
android:name=".activity.EmergencyActivity"
android:name=".activity.emergency.EmergencyActivity"
android:launchMode="singleTask" />
<activity
android:name=".activity.noti.NoticeActivity"
@@ -273,7 +282,7 @@
android:name=".activity.SelectNumberActivity"
android:launchMode="singleTask" />
<activity
android:name=".activity.ScreenLockActivity"
android:name=".activity.screenlock.ScreenLockActivity"
android:configChanges="keyboardHidden"
android:launchMode="singleTask" />
<activity
@@ -335,7 +344,7 @@
</receiver>
<activity
android:name=".activity.AddItemActivity"
android:name=".activity.additem.AddItemActivity"
android:autoRemoveFromRecents="true"
android:excludeFromRecents="true"
android:label="@string/action_add_to_workspace"

View File

@@ -31,7 +31,6 @@ public class SelectNumberActivity extends BaseMvpActivity {
@Override
public void initView() {
ButterKnife.bind(this);
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
telecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);

View File

@@ -6,8 +6,8 @@ import android.os.Handler;
import androidx.databinding.DataBindingUtil;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.main.OldMainActivity;
import com.uiuios.aios.activity.main.PhoneMainActivity;
import com.uiuios.aios.activity.main.deprecated.OldMainActivity;
import com.uiuios.aios.activity.main.deprecated.PhoneMainActivity;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.utils.Utils;

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.additem;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
@@ -22,24 +22,17 @@ 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 BaseDataBindingActivity {
public class AddItemActivity extends BaseMvvmActivity<AddItemViewModel, ActivityAddItemBinding> {
private static final String TAG = AddItemActivity.class.getSimpleName();
@BindView(R.id.tv_app_name)
TextView tv_app_name;
@BindView(R.id.iv_icon)
ImageView iv_icon;
@BindView(R.id.tv_add)
TextView tv_add;
@BindView(R.id.tv_cancel)
TextView tv_cancel;
int mIconDpi = 1000;
@@ -56,9 +49,18 @@ public class AddItemActivity extends BaseDataBindingActivity {
private ShortcutPkgInfo mShortcutPkgInfo;
@Override
protected int getLayoutId() {
return R.layout.activity_add_item;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.add_item_confirmation_activity);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
/**
@@ -66,14 +68,13 @@ public class AddItemActivity extends BaseDataBindingActivity {
*/
@Override
public void initView() {
ButterKnife.bind(this);
tv_cancel.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
tv_add.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -117,9 +118,9 @@ public class AddItemActivity extends BaseDataBindingActivity {
mId = mInfo.getId();
mPackageName = mInfo.getPackage();
mTitle = mInfo.getShortLabel().toString();
tv_app_name.setText(mTitle);
mViewDataBinding.tvAppName.setText(mTitle);
Drawable d = getSystemService(LauncherApps.class).getShortcutIconDrawable(mInfo, mIconDpi);
iv_icon.setImageDrawable(d);
mViewDataBinding.ivIcon.setImageDrawable(d);
mComponentName = mInfo.getActivity();
// Drawable icon = getFullResIcon(mAppWidgetProviderInfo.provider.getPackageName(), mAppWidgetProviderInfo.icon);
// RemoteViews remoteViews = getPreview(mRequest);
@@ -165,4 +166,6 @@ public class AddItemActivity extends BaseDataBindingActivity {
? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon,
iconDpi);
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.additem;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityAddItemBinding;
public class AddItemViewModel extends BaseViewModel<ActivityAddItemBinding, ActivityEvent> {
@Override
public ActivityAddItemBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -3,13 +3,9 @@ package com.uiuios.aios.activity.alarm.main;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
@@ -19,64 +15,34 @@ 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.BaseDataBindingActivity;
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 java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class AlarmActivity extends BaseDataBindingActivity implements AlarmContact.AlarmView {
public class AlarmActivity extends BaseMvvmActivity<AlarmViewModel, ActivityAlarmBinding> {
private static final String TAG = AlarmActivity.class.getSimpleName();
@BindView(R.id.cl_exit)
ConstraintLayout cl_exit;
@BindView(R.id.cl_all)
ConstraintLayout cl_all;
@BindView(R.id.cl_medicine)
ConstraintLayout cl_medicine;
@BindView(R.id.cl_look)
ConstraintLayout cl_look;
@BindView(R.id.cl_reserve)
ConstraintLayout cl_reserve;
@BindView(R.id.imageView1)
ImageView imageView1;
@BindView(R.id.imageView3)
ImageView imageView3;
@BindView(R.id.imageView5)
ImageView imageView5;
@BindView(R.id.imageView7)
ImageView imageView7;
@BindView(R.id.rv_data)
RecyclerView rv_data;
@BindView(R.id.cl_nodata)
ConstraintLayout cl_nodata;
@BindView(R.id.imageView2)
ImageView imageView2;
@BindView(R.id.imageView4)
ImageView imageView4;
@BindView(R.id.imageView6)
ImageView imageView6;
@BindView(R.id.imageView8)
ImageView imageView8;
@BindView(R.id.iv_add)
ImageView iv_add;
private AlarmPresenter mPresenter;
private AlarmAdapter mAlarmAdapter;
private int mType = 0;
@Override
protected int getLayoutId() {
return R.layout.activity_alarm;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.activity_alarm);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
/**
@@ -84,11 +50,6 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta
*/
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new AlarmPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(getLifecycleSubject());
mAlarmAdapter = new AlarmAdapter();
mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
@Override
@@ -96,45 +57,45 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta
showDialog(alarmClockData);
}
});
rv_data.setLayoutManager(new LinearLayoutManager(AlarmActivity.this));
rv_data.setAdapter(mAlarmAdapter);
mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(AlarmActivity.this));
mViewDataBinding.rvData.setAdapter(mAlarmAdapter);
switchItem(0);
cl_exit.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
cl_all.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchItem(0);
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
});
cl_medicine.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clMedicine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchItem(1);
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
});
cl_look.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clLook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchItem(2);
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
});
cl_reserve.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clReserve.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchItem(3);
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
});
iv_add.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(AlarmActivity.this, AlarmClockAddActivity.class));
@@ -147,60 +108,82 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta
*/
@Override
public void initData() {
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClockDataData().observe(this, new androidx.lifecycle.Observer<List<AlarmClockData>>() {
@Override
public void onChanged(List<AlarmClockData> alarmClockData) {
List<AlarmClockData> localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm();
Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm);
if (alarmClockData != null) {
localAddAlarm.addAll(alarmClockData);
}
if (localAddAlarm.size() == 0) {
mAlarmAdapter.setAlarmClockData(null);
// swipeRefreshLayout.setRefreshing(false);
mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
mViewDataBinding.rvData.setVisibility(View.GONE);
Toaster.show("没有数据");
} else {
mAlarmAdapter.setAlarmClockData(localAddAlarm);
// swipeRefreshLayout.setRefreshing(false);
mViewDataBinding.clNodata.setVisibility(View.GONE);
mViewDataBinding.rvData.setVisibility(View.VISIBLE);
}
}
});
mViewModel.getAlarmClock(mType);
}
@Override
protected void onResume() {
super.onResume();
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
private void switchItem(int position) {
mType = position;
cl_all.setBackground(null);
cl_medicine.setBackground(null);
cl_look.setBackground(null);
cl_reserve.setBackground(null);
mViewDataBinding.clAll.setBackground(null);
mViewDataBinding.clMedicine.setBackground(null);
mViewDataBinding.clLook.setBackground(null);
mViewDataBinding.clReserve.setBackground(null);
imageView2.setImageDrawable(null);
imageView4.setImageDrawable(null);
imageView6.setImageDrawable(null);
imageView8.setImageDrawable(null);
mViewDataBinding.imageView2.setImageDrawable(null);
mViewDataBinding.imageView4.setImageDrawable(null);
mViewDataBinding.imageView6.setImageDrawable(null);
mViewDataBinding.imageView8.setImageDrawable(null);
switch (position) {
case 0:
default:
// cl_all.setBackground(getDrawable(R.drawable.alarm_pressed_background));
imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch));
imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed));
imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
mViewDataBinding.imageView2.setImageDrawable(getDrawable(R.drawable.icon_touch));
mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all_pressed));
mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
break;
case 1:
// cl_medicine.setBackground(getDrawable(R.drawable.alarm_pressed_background));
imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch));
imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed));
imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
mViewDataBinding.imageView4.setImageDrawable(getDrawable(R.drawable.icon_touch));
mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine_pressed));
mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
break;
case 2:
// cl_look.setBackground(getDrawable(R.drawable.alarm_pressed_background));
imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch));
imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed));
imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
mViewDataBinding.imageView6.setImageDrawable(getDrawable(R.drawable.icon_touch));
mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look_pressed));
mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve));
break;
case 3:
// cl_reserve.setBackground(getDrawable(R.drawable.alarm_pressed_background));
imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch));
imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed));
mViewDataBinding.imageView8.setImageDrawable(getDrawable(R.drawable.icon_touch));
mViewDataBinding.imageView1.setImageDrawable(getDrawable(R.drawable.icon_alarm_all));
mViewDataBinding.imageView3.setImageDrawable(getDrawable(R.drawable.icon_alarm_medicine));
mViewDataBinding.imageView5.setImageDrawable(getDrawable(R.drawable.icon_alarm_look));
mViewDataBinding.imageView7.setImageDrawable(getDrawable(R.drawable.icon_alarm_reserve_pressed));
break;
}
}
@@ -231,7 +214,7 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta
if (alarmClockData.isIs_local()) {
alarmClockData.setDeleted(true);
AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
} else {
NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
@@ -263,36 +246,10 @@ public class AlarmActivity extends BaseDataBindingActivity implements AlarmConta
@Override
public void onComplete() {
Log.e("deleteAlarm", "onComplete: ");
mPresenter.getAlarmClock(mType);
mViewModel.getAlarmClock(mType);
}
});
}
}
@Override
public void setAlarmClock(List<AlarmClockData> alarmClockData) {
List<AlarmClockData> localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm();
Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm);
if (alarmClockData != null) {
localAddAlarm.addAll(alarmClockData);
}
if (localAddAlarm.size() == 0) {
mAlarmAdapter.setAlarmClockData(null);
// swipeRefreshLayout.setRefreshing(false);
cl_nodata.setVisibility(View.VISIBLE);
rv_data.setVisibility(View.GONE);
Toaster.show("没有数据");
} else {
mAlarmAdapter.setAlarmClockData(localAddAlarm);
// swipeRefreshLayout.setRefreshing(false);
cl_nodata.setVisibility(View.GONE);
rv_data.setVisibility(View.VISIBLE);
}
}
@Override
public void setAlarmClockEmpty() {
}
}

View File

@@ -1,21 +0,0 @@
package com.uiuios.aios.activity.alarm.main;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.base.mvp.BasePresenter;
import com.uiuios.aios.base.mvp.BaseView;
import java.util.List;
public class AlarmContact {
public interface Presenter extends BasePresenter<AlarmView> {
void getAlarmClock();
void getAlarmClock(int type);
}
public interface AlarmView extends BaseView {
void setAlarmClock(List<AlarmClockData> alarmClockData);
void setAlarmClockEmpty();
}
}

View File

@@ -1,11 +1,14 @@
package com.uiuios.aios.activity.alarm.main;
import android.content.Context;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.databinding.ActivityAlarmBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import java.util.List;
@@ -13,40 +16,22 @@ 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 AlarmPresenter implements AlarmContact.Presenter {
private static final String TAG = AlarmPresenter.class.getSimpleName();
private AlarmContact.AlarmView mView;
private Context mContext;
AlarmPresenter(Context context) {
this.mContext = context;
}
private BehaviorSubject<ActivityEvent> lifecycle;
void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
public class AlarmViewModel extends BaseViewModel<ActivityAlarmBinding, ActivityEvent> {
@Override
public void attachView(@NonNull AlarmContact.AlarmView view) {
this.mView = view;
public ActivityAlarmBinding getVDBinding() {
return binding;
}
private static final String TAG = AlarmViewModel.class.getSimpleName();
@Override
public void detachView() {
this.mView = null;
public void onDestroy() {
}
@Override
public void getAlarmClock() {
NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
@Override
@@ -70,7 +55,12 @@ public class AlarmPresenter implements AlarmContact.Presenter {
});
}
@Override
private MutableLiveData<List<AlarmClockData>> mAlarmClockDataData = new MutableLiveData<>();
public MutableLiveData<List<AlarmClockData>> getAlarmClockDataData() {
return mAlarmClockDataData;
}
public void getAlarmClock(int type) {
Log.e(TAG, "getAlarmClock: " + type);
NetInterfaceManager.getInstance().getAlarmClockObservable(type)
@@ -83,7 +73,7 @@ public class AlarmPresenter implements AlarmContact.Presenter {
@Override
public void onNext(@NonNull BaseResponse<List<AlarmClockData>> listBaseResponse) {
Log.e("getAlarmClock", "onNext: " + listBaseResponse);
mView.setAlarmClock(listBaseResponse.data);
mAlarmClockDataData.setValue(listBaseResponse.data);
}
@Override

View File

@@ -9,15 +9,9 @@ import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
@@ -30,19 +24,18 @@ 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.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.base.GlideEngine;
import com.uiuios.aios.base.mvp.BaseMvpActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.databinding.ActivityAddAlarmBinding;
import com.uiuios.aios.service.main.MainService;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.FileUtil;
import com.uiuios.aios.utils.ScreenUtil;
import com.uiuios.aios.utils.TimeUtils;
import com.uiuios.aios.utils.Utils;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
@@ -55,8 +48,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
@@ -64,42 +55,9 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class AlarmClockAddActivity extends BaseMvpActivity {
public class AlarmClockAddActivity extends BaseMvvmActivity<AlarmClockAddViewModel, ActivityAddAlarmBinding> {
private static final String TAG = AlarmClockAddActivity.class.getSimpleName();
@BindView(R.id.cl_content)
ConstraintLayout cl_content;
@BindView(R.id.ll_type)
LinearLayout ll_type;
@BindView(R.id.cl_type)
ConstraintLayout cl_type;
@BindView(R.id.tv_type)
TextView tv_type;
@BindView(R.id.cl_pic)
ConstraintLayout cl_pic;
@BindView(R.id.et_activation)
EditText et_activation;
@BindView(R.id.nv_pic)
NiceImageView nv_pic;
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.tv_duration)
TextView tv_duration;
@BindView(R.id.rb1)
RadioButton rb1;
@BindView(R.id.rb2)
RadioButton rb2;
@BindView(R.id.rb_all)
RadioButton rb_all;
@BindView(R.id.rb_look)
RadioButton rb_look;
@BindView(R.id.rb_reserve)
RadioButton rb_reserve;
@BindView(R.id.iv_add)
ImageView iv_add;
private PopupWindow mPopupWindow;
private TimePickerView pvTime;
@@ -115,6 +73,14 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
return R.layout.activity_add_alarm;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
getLifecycleSubject().onNext(ActivityEvent.CREATE);
@@ -123,95 +89,94 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
.fitWindow(true)
.apply();
ButterKnife.bind(this);
initTimePicker();
rb1.setChecked(true);
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rb1.setChecked(true);
mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb1.setTextColor(colorStateList);
mViewDataBinding.rb1.setTextColor(colorStateList);
mDayType = 1;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb1.setTextColor(colorStateList);
mViewDataBinding.rb1.setTextColor(colorStateList);
}
}
});
rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb2.setTextColor(colorStateList);
mViewDataBinding.rb2.setTextColor(colorStateList);
mDayType = 2;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb2.setTextColor(colorStateList);
mViewDataBinding.rb2.setTextColor(colorStateList);
}
}
});
rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mClockType = 1;
et_activation.setText("用药闹钟");
mViewDataBinding.etActivation.setText("用药闹钟");
} else {
}
}
});
rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mClockType = 2;
et_activation.setText("接送闹钟");
mViewDataBinding.etActivation.setText("接送闹钟");
} else {
}
}
});
rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mClockType = 3;
et_activation.setText("预约闹钟");
mViewDataBinding.etActivation.setText("预约闹钟");
} else {
}
}
});
cl_pic.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openSelector();
}
});
cl_type.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// showTimeFilterWindow();
}
});
nv_pic.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openSelector();
}
});
iv_add.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkContent();
}
});
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
@@ -237,7 +202,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
@Override
public void onClick(View view) {
mDayType = 1;
tv_type.setText("只响一次");
mViewDataBinding.tvType.setText("只响一次");
mPopupWindow.dismiss();
}
});
@@ -245,7 +210,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
@Override
public void onClick(View view) {
mDayType = 2;
tv_type.setText("每天");
mViewDataBinding.tvType.setText("每天");
mPopupWindow.dismiss();
}
});
@@ -253,7 +218,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
@Override
public void onClick(View view) {
mDayType = 3;
tv_type.setText("周一至周五");
mViewDataBinding.tvType.setText("周一至周五");
mPopupWindow.dismiss();
}
});
@@ -261,7 +226,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
@Override
public void onClick(View view) {
mDayType = 4;
tv_type.setText("周六至周日");
mViewDataBinding.tvType.setText("周六至周日");
mPopupWindow.dismiss();
}
});
@@ -269,11 +234,11 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
if (mPopupWindow.isShowing()) {
mPopupWindow.dismiss();
} else {
Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop());
Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop());
mPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0);
Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop());
Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop());
mPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0);
}
}
@@ -282,7 +247,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
private void checkContent() {
pvTime.returnData();
if (TextUtils.isEmpty(et_activation.getText())) {
if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) {
Toaster.show("请输入标题");
return;
}
@@ -304,7 +269,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
alarmClockData.setFile(mPictrueFilePath);
alarmClockData.setType(mDayType);
alarmClockData.setTime(timeStamp);
alarmClockData.setTitle(et_activation.getText().toString());
alarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString());
alarmClockData.setRemind_type(0);
alarmClockData.setIs_onoff(1);
alarmClockData.setClazz(mClockType);
@@ -313,7 +278,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
params.put("sn", Utils.getSerial());
params.put("time", timeStamp);
params.put("type", String.valueOf(mDayType));
params.put("title", et_activation.getText().toString());
params.put("title", mViewDataBinding.etActivation.getText().toString());
params.put("remind_type", "0");
params.put("is_onoff", "1");
params.put("class", String.valueOf(mClockType));
@@ -390,9 +355,9 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
File file = new File(mPictrueFilePath);
if (file.exists()) {
RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockAddActivity.this, 8F)));
Glide.with(nv_pic).load(file).apply(options).into(nv_pic);
nv_pic.setVisibility(View.VISIBLE);
cl_pic.setVisibility(View.GONE);
Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic);
mViewDataBinding.nvPic.setVisibility(View.VISIBLE);
mViewDataBinding.clPic.setVisibility(View.GONE);
if (FileUtil.isVideoFile(mPictrueFilePath)) {
FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer<Integer>() {
@Override
@@ -403,7 +368,7 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
@Override
public void onNext(@NonNull Integer integer) {
Log.e("openSelector", "onNext: " + integer);
tv_duration.setText(TimeUtils.secToTime(integer));
mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer));
}
@Override
@@ -417,12 +382,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
}
});
} else {
tv_duration.setText("");
mViewDataBinding.tvDuration.setText("");
}
} else {
mPictrueFilePath = "";
nv_pic.setVisibility(View.GONE);
cl_pic.setVisibility(View.VISIBLE);
mViewDataBinding.nvPic.setVisibility(View.GONE);
mViewDataBinding.clPic.setVisibility(View.VISIBLE);
}
}
@@ -466,12 +431,12 @@ public class AlarmClockAddActivity extends BaseMvpActivity {
.setContentTextSize(30)
.setDate(selectedDate)
.setRangDate(startDate, selectedDate)
.setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
.setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
.setOutSideColor(0x00000000)
.setOutSideCancelable(false)
.build();
pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉
pvTime.show(cl_content, false);//弹出时间选择器传递参数过去回调的时候则可以绑定此view
pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器传递参数过去回调的时候则可以绑定此view
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.alarmclock.add;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityAddAlarmBinding;
public class AlarmClockAddViewModel extends BaseViewModel<ActivityAddAlarmBinding, ActivityEvent> {
@Override
public ActivityAddAlarmBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -83,7 +83,6 @@ public class PortAlarmClockAddActivity extends BaseMvvmActivity<PortAlarmClockAd
.fitWindow(true)
.apply();
ButterKnife.bind(this);
initTimePicker();
mViewDataBinding.rb1.setChecked(true);

View File

@@ -3,26 +3,15 @@ package com.uiuios.aios.activity.alarmclock.edit;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.TextView;
import androidx.annotation.CallSuper;
import androidx.annotation.CheckResult;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
@@ -35,27 +24,23 @@ 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.LifecycleProvider;
import com.trello.rxlifecycle4.LifecycleTransformer;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
import com.uiuios.aios.R;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.base.GlideEngine;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.databinding.ActivityAddAlarmBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.FFmpegUtils;
import com.uiuios.aios.utils.FileUtil;
import com.uiuios.aios.utils.GlideLoadUtils;
import com.uiuios.aios.utils.ScreenUtil;
import com.uiuios.aios.utils.TimeUtils;
import com.uiuios.aios.utils.Utils;
import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -65,57 +50,17 @@ import java.util.Date;
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.Observable;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class AlarmClockEditActivity extends AppCompatActivity implements LifecycleProvider<ActivityEvent> {
public class AlarmClockEditActivity extends BaseMvvmActivity<AlarmClockEditViewModel, ActivityAddAlarmBinding> {
private static final String TAG = AlarmClockEditActivity.class.getSimpleName();
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
private LoadingDialog mLoadingDialog;
@BindView(R.id.cl_content)
ConstraintLayout cl_content;
@BindView(R.id.ll_type)
LinearLayout ll_type;
@BindView(R.id.cl_type)
ConstraintLayout cl_type;
@BindView(R.id.tv_type)
TextView tv_type;
@BindView(R.id.cl_pic)
ConstraintLayout cl_pic;
@BindView(R.id.et_activation)
EditText et_activation;
@BindView(R.id.nv_pic)
NiceImageView nv_pic;
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.tv_duration)
TextView tv_duration;
@BindView(R.id.rb1)
RadioButton rb1;
@BindView(R.id.rb2)
RadioButton rb2;
@BindView(R.id.rb_all)
RadioButton rb_all;
@BindView(R.id.rb_look)
RadioButton rb_look;
@BindView(R.id.rb_reserve)
RadioButton rb_reserve;
@BindView(R.id.iv_add)
ImageView iv_add;
private PopupWindow mMenuPopupWindow;
private TimePickerView pvTime;
@@ -128,132 +73,77 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
private int mId;
private AlarmClockData mAlarmClockData;
@Override
@androidx.annotation.NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
protected int getLayoutId() {
return R.layout.activity_add_alarm;
}
@Override
@androidx.annotation.NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@androidx.annotation.NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
@androidx.annotation.NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
@Override
@CallSuper
protected void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
@CallSuper
protected void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
@CallSuper
protected void onPause() {
lifecycleSubject.onNext(ActivityEvent.PAUSE);
super.onPause();
}
@Override
@CallSuper
protected void onStop() {
lifecycleSubject.onNext(ActivityEvent.STOP);
super.onStop();
}
@Override
@CallSuper
protected void onDestroy() {
lifecycleSubject.onNext(ActivityEvent.DESTROY);
super.onDestroy();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_alarm);
lifecycleSubject.onNext(ActivityEvent.CREATE);
UltimateBarX.statusBarOnly(this)
.colorRes(R.color.default_blue)
.fitWindow(true)
.apply();
initView();
initData();
}
private void initView() {
ButterKnife.bind(this);
public void initView() {
// tv_title.setText("编辑闹钟");
initTimePicker();
cl_pic.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openSelector();
}
});
cl_type.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// showTimeFilterWindow();
}
});
nv_pic.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.nvPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openSelector();
}
});
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb1.setTextColor(colorStateList);
mViewDataBinding.rb1.setTextColor(colorStateList);
mDayType = 1;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb1.setTextColor(colorStateList);
mViewDataBinding.rb1.setTextColor(colorStateList);
}
}
});
rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
ColorStateList colorStateList = getResources().getColorStateList(R.color.white);
rb2.setTextColor(colorStateList);
mViewDataBinding.rb2.setTextColor(colorStateList);
mDayType = 2;
} else {
ColorStateList colorStateList = getResources().getColorStateList(R.color.radio_botton_gray);
rb2.setTextColor(colorStateList);
mViewDataBinding.rb2.setTextColor(colorStateList);
}
}
});
rb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
@@ -263,7 +153,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
}
}
});
rb_look.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbLook.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
@@ -273,7 +163,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
}
}
});
rb_reserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mViewDataBinding.rbReserve.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
@@ -283,7 +173,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
}
}
});
iv_add.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkContent();
@@ -291,7 +181,8 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
});
}
private void initData() {
@Override
public void initData() {
Intent intent = getIntent();
if (intent == null) {
Toaster.show("获取闹钟信息失败");
@@ -308,7 +199,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
AlarmClockData alarmClockData = clockDataHashMap.get(mId);
if (alarmClockData == null || !alarmClockData.isIs_local()) {
NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId)
.compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<AlarmClockData>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -355,33 +246,33 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
switch (mDayType) {
default:
case AlarmUtils.ONCE:
rb1.setChecked(true);
// tv_type.setText("只响一次");
mViewDataBinding.rb1.setChecked(true);
// tvType.setText("只响一次");
break;
case AlarmUtils.LOOP:
rb2.setChecked(true);
// tv_type.setText("每天");
mViewDataBinding.rb2.setChecked(true);
// tvType.setText("每天");
break;
// case AlarmUtils.WORKING_DAY:
// rb3.setChecked(true);
// tv_type.setText("周一至周五");
// tvType.setText("周一至周五");
// break;
// case AlarmUtils.OFF_DAY:
// rb4.setChecked(true);
// tv_type.setText("周六至周日");
// tvType.setText("周六至周日");
// break;
}
mClockType = alarmClockData.getClazz();
switch (mClockType) {
case 1:
default:
rb_all.setChecked(true);
mViewDataBinding.rbAll.setChecked(true);
break;
case 2:
rb_look.setChecked(true);
mViewDataBinding.rbLook.setChecked(true);
break;
case 3:
rb_reserve.setChecked(true);
mViewDataBinding.rbReserve.setChecked(true);
break;
}
String time = alarmClockData.getTime();
@@ -391,28 +282,28 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
Log.e(TAG, "setAlarmClockInfo: " + date.getTimeInMillis());
pvTime.setDate(date);
String title = alarmClockData.getTitle();
et_activation.setText(title);
mViewDataBinding.etActivation.setText(title);
String fileUrl = alarmClockData.getFile();
mPictrueFilePath = fileUrl;
String fileName = Utils.getFileNamefromURL(fileUrl);
File file = new File(Utils.getDownLoadPath(AlarmClockEditActivity.this) + fileName);
if (TextUtils.isEmpty(fileUrl)) {
cl_pic.setVisibility(View.VISIBLE);
nv_pic.setVisibility(View.GONE);
mViewDataBinding.clPic.setVisibility(View.VISIBLE);
mViewDataBinding.nvPic.setVisibility(View.GONE);
} else {
if (file.exists() && !file.isDirectory()) {
GlideLoadUtils.getInstance().glideLoad(this, file, nv_pic);
GlideLoadUtils.getInstance().glideLoad(this, file, mViewDataBinding.nvPic);
} else {
GlideLoadUtils.getInstance().glideLoad(this, fileUrl, nv_pic);
GlideLoadUtils.getInstance().glideLoad(this, fileUrl, mViewDataBinding.nvPic);
}
cl_pic.setVisibility(View.GONE);
nv_pic.setVisibility(View.VISIBLE);
mViewDataBinding.clPic.setVisibility(View.GONE);
mViewDataBinding.nvPic.setVisibility(View.VISIBLE);
}
}
private void checkContent() {
pvTime.returnData();
if (TextUtils.isEmpty(et_activation.getText())) {
if (TextUtils.isEmpty(mViewDataBinding.etActivation.getText())) {
Toaster.show("请输入标题");
return;
}
@@ -442,7 +333,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
mAlarmClockData.setId(mId);
mAlarmClockData.setType(mDayType);
mAlarmClockData.setTime(timeStamp);
mAlarmClockData.setTitle(et_activation.getText().toString());
mAlarmClockData.setTitle(mViewDataBinding.etActivation.getText().toString());
mAlarmClockData.setFile(mPictrueFilePath);
mAlarmClockData.setRemind_type(0);
mAlarmClockData.setIs_onoff(1);
@@ -455,7 +346,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
params.put("id", String.valueOf(mId));
params.put("type", String.valueOf(mDayType));
params.put("time", timeStamp);
params.put("title", et_activation.getText().toString());
params.put("title", mViewDataBinding.etActivation.getText().toString());
params.put("remind_type", "0");
params.put("is_onoff", "1");
params.put("class", String.valueOf(mClockType));
@@ -479,13 +370,13 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
finish();
} else {
NetInterfaceManager.getInstance().getAlarmClockEditObservable(params, body)
.compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkContent", "onSubscribe: ");
Toaster.show("正在上传");
iv_add.setEnabled(false);
mViewDataBinding.ivAdd.setEnabled(false);
}
@Override
@@ -515,7 +406,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onComplete() {
Log.e("checkContent", "onComplete: ");
iv_add.setEnabled(true);
mViewDataBinding.ivAdd.setEnabled(true);
finish();
mLoadingDialog.close();
}
@@ -537,7 +428,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onClick(View view) {
mDayType = 1;
tv_type.setText("只响一次");
mViewDataBinding.tvType.setText("只响一次");
mMenuPopupWindow.dismiss();
}
});
@@ -545,7 +436,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onClick(View view) {
mDayType = 2;
tv_type.setText("每天");
mViewDataBinding.tvType.setText("每天");
mMenuPopupWindow.dismiss();
}
});
@@ -553,7 +444,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onClick(View view) {
mDayType = 3;
tv_type.setText("周一至周五");
mViewDataBinding.tvType.setText("周一至周五");
mMenuPopupWindow.dismiss();
}
});
@@ -561,7 +452,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onClick(View view) {
mDayType = 4;
tv_type.setText("周六至周日");
mViewDataBinding.tvType.setText("周六至周日");
mMenuPopupWindow.dismiss();
}
});
@@ -569,11 +460,11 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
if (mMenuPopupWindow.isShowing()) {
mMenuPopupWindow.dismiss();
} else {
Log.e(TAG, "showTimeFilterWindow: right " + tv_type.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + tv_type.getTop());
Log.e(TAG, "showTimeFilterWindow: right " + cl_type.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + cl_type.getTop());
mMenuPopupWindow.showAtLocation(cl_type, Gravity.END, 20, 0);
Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.tvType.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.tvType.getTop());
Log.e(TAG, "showTimeFilterWindow: right " + mViewDataBinding.clType.getRight());
Log.e(TAG, "showTimeFilterWindow: top " + mViewDataBinding.clType.getTop());
mMenuPopupWindow.showAtLocation(mViewDataBinding.clType, Gravity.END, 20, 0);
}
}
@@ -589,9 +480,9 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
File file = new File(mPictrueFilePath);
if (file.exists()) {
RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtil.dip2px(AlarmClockEditActivity.this, 8F)));
Glide.with(nv_pic).load(file).apply(options).into(nv_pic);
nv_pic.setVisibility(View.VISIBLE);
cl_pic.setVisibility(View.GONE);
Glide.with(mViewDataBinding.nvPic).load(file).apply(options).into(mViewDataBinding.nvPic);
mViewDataBinding.nvPic.setVisibility(View.VISIBLE);
mViewDataBinding.clPic.setVisibility(View.GONE);
if (FileUtil.isVideoFile(mPictrueFilePath)) {
FFmpegUtils.getDurationInMilliseconds(mPictrueFilePath, new Observer<Integer>() {
@Override
@@ -602,7 +493,7 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
@Override
public void onNext(@NonNull Integer integer) {
Log.e("openSelector", "onNext: " + integer);
tv_duration.setText(TimeUtils.secToTime(integer));
mViewDataBinding.tvDuration.setText(TimeUtils.secToTime(integer));
}
@Override
@@ -616,12 +507,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
}
});
} else {
tv_duration.setText("");
mViewDataBinding.tvDuration.setText("");
}
} else {
mPictrueFilePath = "";
nv_pic.setVisibility(View.GONE);
cl_pic.setVisibility(View.VISIBLE);
mViewDataBinding.nvPic.setVisibility(View.GONE);
mViewDataBinding.clPic.setVisibility(View.VISIBLE);
}
}
@@ -665,12 +556,12 @@ public class AlarmClockEditActivity extends AppCompatActivity implements Lifecyc
.setContentTextSize(30)
.setDate(selectedDate)
.setRangDate(startDate, selectedDate)
.setDecorView(cl_content)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
.setDecorView(mViewDataBinding.clContent)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
.setOutSideColor(0x00000000)
.setOutSideCancelable(false)
.build();
pvTime.setKeyBackCancelable(false);//系统返回键监听屏蔽掉
pvTime.show(cl_content, false);//弹出时间选择器传递参数过去回调的时候则可以绑定此view
pvTime.show(mViewDataBinding.clContent, false);//弹出时间选择器传递参数过去回调的时候则可以绑定此view
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.alarmclock.edit;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityAddAlarmBinding;
public class AlarmClockEditViewModel extends BaseViewModel<ActivityAddAlarmBinding, ActivityEvent> {
@Override
public ActivityAddAlarmBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.article;
import android.content.Intent;
import android.graphics.Bitmap;
@@ -7,42 +7,35 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.ArticleInfo;
import com.uiuios.aios.databinding.ActivityArticlBinding;
import butterknife.BindView;
import butterknife.ButterKnife;
public class ArticleActivity extends BaseMvvmActivity<ArticleViewModel, ActivityArticlBinding> {
public class ArticleActivity extends BaseDataBindingActivity {
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.tv_title)
TextView tv_title;
@BindView(R.id.tv_content)
TextView tv_content;
@BindView(R.id.iv_img)
NiceImageView iv_img;
@Override
protected int getLayoutId() {
return R.layout.activity_articl;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.activity_articl);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
Intent intent = getIntent();
if (intent == null) {
finish();
@@ -51,35 +44,35 @@ public class ArticleActivity extends BaseDataBindingActivity {
if (articleInfo == null) {
finish();
}
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
tv_title.setText(articleInfo.getTitle());
tv_content.setText(articleInfo.getContent());
ViewTreeObserver observer = iv_img.getViewTreeObserver();
mViewDataBinding.tvTitle.setText(articleInfo.getTitle());
mViewDataBinding.tvContent.setText(articleInfo.getContent());
ViewTreeObserver observer = mViewDataBinding.ivImg.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams();
int width = iv_img.getWidth();
ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams();
int width = mViewDataBinding.ivImg.getWidth();
// layoutParams.height = width;
// iv_img.setLayoutParams(layoutParams);
// ivImg.setLayoutParams(layoutParams);
}
});
Glide.with(iv_img).asBitmap().load(articleInfo.getImg()).into(new CustomTarget<Bitmap>() {
Glide.with(mViewDataBinding.ivImg).asBitmap().load(articleInfo.getImg()).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
int imgWidth = resource.getWidth();
int imgHeight = resource.getHeight();
iv_img.setImageBitmap(resource);
mViewDataBinding.ivImg.setImageBitmap(resource);
Log.e("into", "onResourceReady: width = " + imgWidth + "height = " + imgHeight);
ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams();
int width = iv_img.getWidth();
ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivImg.getLayoutParams();
int width = mViewDataBinding.ivImg.getWidth();
layoutParams.height = (int) (imgHeight * (1.0f * width / imgWidth));
iv_img.setLayoutParams(layoutParams);
mViewDataBinding.ivImg.setLayoutParams(layoutParams);
}
@Override
@@ -93,4 +86,6 @@ public class ArticleActivity extends BaseDataBindingActivity {
public void initData() {
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.article;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityArticlBinding;
public class ArticleViewModel extends BaseViewModel<ActivityArticlBinding, ActivityEvent> {
@Override
public ActivityArticlBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -21,17 +21,12 @@ 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.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.base.GlideEngine;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.WechatInfo;
import com.uiuios.aios.databinding.ActivityAddWechatContactBinding;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.ScreenUtil;
import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
@@ -41,8 +36,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.disposables.Disposable;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;

View File

@@ -1,9 +1,8 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.control;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -22,24 +21,18 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivityControlBinding;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.utils.BrightnessUtils;
import com.uiuios.aios.view.RulerSeekBar;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -47,73 +40,27 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class ControlActivity extends BaseDataBindingActivity {
public class ControlActivity extends BaseMvvmActivity<ControlViewModel, ActivityControlBinding> {
private static final String TAG = ControlActivity.class.getSimpleName();
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.tv_wifi)
TextView tv_wifi;
@BindView(R.id.tv_bt)
TextView tv_bt;
@BindView(R.id.seekBar)
RulerSeekBar seekBar;
@BindView(R.id.seekbar_brightness)
SeekBar seekbar_brightness;
@BindView(R.id.seekbar_sound)
SeekBar seekbar_sound;
@BindView(R.id.tv_sound)
TextView tv_sound;
@BindView(R.id.tv_battery)
TextView tv_battery;
@BindView(R.id.tv_flashlight)
TextView tv_flashlight;
@BindView(R.id.tv_brightness)
TextView tv_brightness;
@BindView(R.id.tv_location)
TextView tv_location;
@BindView(R.id.cl_wifi)
ConstraintLayout cl_wifi;
@BindView(R.id.cl_bt)
ConstraintLayout cl_bt;
@BindView(R.id.cl_battery)
ConstraintLayout cl_battery;
@BindView(R.id.cl_flashlight)
ConstraintLayout cl_flashlight;
@BindView(R.id.cl_location)
ConstraintLayout cl_location;
@OnClick({R.id.iv_back})
void OnClick(View v) {
switch (v.getId()) {
case R.id.iv_back:
finish();
break;
default:
}
}
private ContentResolver crv;
private static final String ACTION_FLASHLIGHT_CHANGED =
"com.android.settings.flashlight.action.FLASHLIGHT_CHANGED";
@Override
protected int getLayoutId() {
return R.layout.activity_control;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_control);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
crv = getContentResolver();
getWifi();
registerReceivers();
getBluetooth();
@@ -125,7 +72,7 @@ public class ControlActivity extends BaseDataBindingActivity {
getLocation();
getBrightness();
getSound();
cl_flashlight.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clFlashlight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
@@ -136,7 +83,7 @@ public class ControlActivity extends BaseDataBindingActivity {
}
}
});
cl_battery.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clBattery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS));
@@ -150,7 +97,7 @@ public class ControlActivity extends BaseDataBindingActivity {
}
private void getWifi() {
cl_wifi.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clWifi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
@@ -159,10 +106,10 @@ public class ControlActivity extends BaseDataBindingActivity {
});
if (isWifiEnabled()) {
// tv_wifi_ssid.setText(getConnectWifiSsid());
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item));
} else {
// tv_wifi_ssid.setText("未连接");
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis));
}
}
@@ -214,14 +161,14 @@ public class ControlActivity extends BaseDataBindingActivity {
if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
Log.e(TAG, "wifi断开");
// tv_wifi_ssid.setText("未连接");
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis));
} else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//获取当前wifi名称
String newSSID = wifiInfo.getSSID();
// tv_wifi_ssid.setText(getConnectWifiSsid());
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item));
}
break;
//wifi打开与否
@@ -230,7 +177,7 @@ public class ControlActivity extends BaseDataBindingActivity {
if (wifistate == WifiManager.WIFI_STATE_DISABLED) {
Log.e(TAG, "系统关闭wifi");
// tv_wifi_ssid.setText("");
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis));
} else if (wifistate == WifiManager.WIFI_STATE_ENABLED) {
Log.e(TAG, "系统开启wifi");
}
@@ -277,18 +224,18 @@ public class ControlActivity extends BaseDataBindingActivity {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter.isEnabled()) {
// if (isConnected()) {
// cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
// clBt.setBackground(getDrawable(R.drawable.control_background_item));
// tv_bt_ssid.setText(getBluetoothDeviceName());
// } else {
// cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
// clBt.setBackground(getDrawable(R.drawable.control_background_item_dis));
// tv_bt_ssid.setText("未连接");
// }
} else {
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis));
// tv_bt_ssid.setText("已关闭");
}
getConnectedDevicesV1();
cl_bt.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
@@ -425,30 +372,30 @@ public class ControlActivity extends BaseDataBindingActivity {
switch (blueState) {
case BluetoothAdapter.STATE_TURNING_ON:
// tv_bt_ssid.setText("正在打开");
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item));
break;
case BluetoothAdapter.STATE_ON:
// tv_bt_ssid.setText("已打开");
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item));
break;
case BluetoothAdapter.STATE_TURNING_OFF:
// tv_bt_ssid.setText("正在关闭");
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item));
break;
case BluetoothAdapter.STATE_OFF:
// tv_bt_ssid.setText("已关闭");
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis));
break;
default:
}
break;
case BluetoothDevice.ACTION_ACL_CONNECTED:
// tv_bt_ssid.setText(getBluetoothDeviceName());
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item));
break;
case BluetoothDevice.ACTION_ACL_DISCONNECTED:
// tv_bt_ssid.setText("未连接");
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBt.setBackground(getDrawable(R.drawable.control_background_item_dis));
break;
default:
}
@@ -460,9 +407,9 @@ public class ControlActivity extends BaseDataBindingActivity {
private void getBattery() {
// tv_electricity.setText(getBatteryCapacity() + "%");
if (isBatteryCharging()) {
cl_battery.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item));
} else {
cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis));
}
}
@@ -528,10 +475,10 @@ public class ControlActivity extends BaseDataBindingActivity {
Log.e(TAG, "onReceive: " + action);
switch (action) {
case Intent.ACTION_POWER_CONNECTED:
cl_battery.setBackground(getDrawable(R.drawable.control_background_item));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item));
break;
case Intent.ACTION_POWER_DISCONNECTED:
cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis));
mViewDataBinding.clBattery.setBackground(getDrawable(R.drawable.control_background_item_dis));
break;
// case Intent.ACTION_BATTERY_LEVEL_CHANGED:
// tv_electricity.setText(getBatteryCapacity() + "%");
@@ -547,23 +494,23 @@ public class ControlActivity extends BaseDataBindingActivity {
// private void getFlashlight() {
// if (isFlashlightAvailable()) {
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// } else {
// tv_flashlight_switch.setText("不可用");
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// return;
// }
//// if (isFlashlightEnabled()) {
//// tv_flashlight_switch.setText("");
//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item));
//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item));
//// } else {
//// tv_flashlight_switch.setText("");
//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
//// }
//
// cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
//
// cl_flashlight.setOnClickListener(new View.OnClickListener() {
// clFlashlight.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// if (flashing) {
@@ -575,7 +522,7 @@ public class ControlActivity extends BaseDataBindingActivity {
// }
// flashing = false;
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
// } else {
// try {
// String CameraId = cameraManager.getCameraIdList()[0];
@@ -584,7 +531,7 @@ public class ControlActivity extends BaseDataBindingActivity {
// e.printStackTrace();
// }
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item));
// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item));
// flashing = true;
// }
// }
@@ -631,23 +578,23 @@ public class ControlActivity extends BaseDataBindingActivity {
updateTimeUi();
// if (isFlashlightAvailable()) {
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// } else {
// tv_flashlight_switch.setText("不可用");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// return;
// }
//// if (isFlashlightEnabled()) {
//// tv_flashlight_switch.setText("");
//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item));
//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item));
//// } else {
//// tv_flashlight_switch.setText("");
//// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
//// clFlashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
//// }
//
// cameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
//
// cl_flashlight.setOnClickListener(new View.OnClickListener() {
// clFlashlight.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// if (flashing) {
@@ -659,7 +606,7 @@ public class ControlActivity extends BaseDataBindingActivity {
// }
// flashing = false;
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
// } else {
// try {
// String CameraId = cameraManager.getCameraIdList()[0];
@@ -668,7 +615,7 @@ public class ControlActivity extends BaseDataBindingActivity {
// e.printStackTrace();
// }
// tv_flashlight_switch.setText("");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item));
// clFlashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item));
// flashing = true;
// }
// }
@@ -695,15 +642,15 @@ public class ControlActivity extends BaseDataBindingActivity {
}
// private boolean isFlashlightEnabled() {
// return Settings.Secure.getInt(crv, Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1;
// return Settings.Secure.getInt(getContentResolver(), Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1;
// }
private void getFontSize() {
float fontScale = Settings.System.getFloat(crv, Settings.System.FONT_SCALE, 0.0f);
float fontScale = Settings.System.getFloat(getContentResolver(), Settings.System.FONT_SCALE, 0.0f);
Log.e(TAG, "getHardware: fontScale = " + fontScale);
List<String> mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size));
List<String> strEntryValues = Arrays.asList(getResources().getStringArray(R.array.entryvalues_font_size));
seekBar.setMax(mEntries.size() - 1);
mViewDataBinding.seekBar.setMax(mEntries.size() - 1);
String font_size;
int index = strEntryValues.indexOf(String.valueOf(fontScale));
if (index == -1) {
@@ -712,11 +659,11 @@ public class ControlActivity extends BaseDataBindingActivity {
font_size = mEntries.get(index);
}
// tv_font_size.setText(font_size);
seekBar.setProgress(index);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
mViewDataBinding.seekBar.setProgress(index);
mViewDataBinding.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Settings.System.putFloat(crv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i)));
Settings.System.putFloat(getContentResolver(), Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i)));
}
@Override
@@ -735,11 +682,11 @@ public class ControlActivity extends BaseDataBindingActivity {
String addr = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE).decodeString(CommonConfig.MAP_ADDRESS_KEY);
if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) {
tv_location.setText("未能获取到位置信息");
mViewDataBinding.tvLocation.setText("未能获取到位置信息");
} else {
tv_location.setText(addr);
mViewDataBinding.tvLocation.setText(addr);
}
cl_location.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.clLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AmapManager.getInstance().startLocation();
@@ -748,17 +695,17 @@ public class ControlActivity extends BaseDataBindingActivity {
}
private void getBrightness() {
seekbar_brightness.setMax(255);
mViewDataBinding.seekbarBrightness.setMax(255);
//亮度
int brightness = Settings.System.getInt(crv, Settings.System.SCREEN_BRIGHTNESS, 1);
seekbar_brightness.setProgress(brightness);
int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 1);
mViewDataBinding.seekbarBrightness.setProgress(brightness);
Log.e(TAG, "getHardware: brightness = " + brightness);
int gamma = BrightnessUtils.convertLinearToGamma(brightness, 1, 255);
Log.e(TAG, "getHardware: gamma = " + gamma);
long percentage = Math.round((((double) gamma / 65535) * 100f));
// tv_brightness.setText(percentage + "%");
Log.e(TAG, "getHardware: percentage = " + percentage);
seekbar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
mViewDataBinding.seekbarBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.e(TAG, "onProgressChanged: i = " + i);
@@ -788,20 +735,20 @@ public class ControlActivity extends BaseDataBindingActivity {
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//最大音量
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
seekbar_sound.setMax(maxVolume);
mViewDataBinding.seekbarSound.setMax(maxVolume);
Log.e(TAG, "getHardware: maxVolume = " + maxVolume);
//音量
int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
seekbar_sound.setProgress(streamVolume);
mViewDataBinding.seekbarSound.setProgress(streamVolume);
Log.e(TAG, "getHardware: streamVolume = " + streamVolume);
int currentVolume = (int) (((double) streamVolume / (double) maxVolume) * 100f);
Log.e(TAG, "getHardware: currentVolume = " + currentVolume);
tv_sound.setText(currentVolume + "%");
seekbar_sound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
mViewDataBinding.tvSound.setText(currentVolume + "%");
mViewDataBinding.seekbarSound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
int volume = (int) (((double) i / (double) maxVolume) * 100f);
tv_sound.setText(volume + "%");
mViewDataBinding.tvSound.setText(volume + "%");
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
@@ -823,4 +770,10 @@ public class ControlActivity extends BaseDataBindingActivity {
if (mWifiReceiver != null) unregisterReceiver(mWifiReceiver);
if (mTimeUpdateReceiver != null) unregisterReceiver(mTimeUpdateReceiver);
}
public class BtnClick {
public void exit(View view) {
finish();
}
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.control;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityControlBinding;
public class ControlViewModel extends BaseViewModel<ActivityControlBinding, ActivityEvent> {
@Override
public ActivityControlBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -2,55 +2,49 @@ package com.uiuios.aios.activity.dailyapp;
import android.content.res.Configuration;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.DailyAppAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.DailyAppBean;
import com.uiuios.aios.databinding.ActivityDailyappBinding;
import com.uiuios.aios.manager.AppStatusManager;
import com.uiuios.aios.view.GridSpaceItemDecoration;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class DailyAppActivity extends BaseDataBindingActivity {
public class DailyAppActivity extends BaseMvvmActivity<DailyAppViewModel, ActivityDailyappBinding> {
private static final String TAG = DailyAppActivity.class.getSimpleName();
private DailyAppAdapter mDailyAppAdapter;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.tv_appsize)
TextView tv_appsize;
@Override
protected int getLayoutId() {
return R.layout.activity_dailyapp;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_dailyapp);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
mDailyAppAdapter = new DailyAppAdapter();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
recyclerView.setLayoutManager(new GridLayoutManager(this, 5));
recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50));
mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 5));
mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(5, 50, 50));
} else {
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50));
mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50));
}
recyclerView.setAdapter(mDailyAppAdapter);
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.recyclerView.setAdapter(mDailyAppAdapter);
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
@@ -62,6 +56,7 @@ public class DailyAppActivity extends BaseDataBindingActivity {
public void initData() {
List<DailyAppBean> appBeanList = AppStatusManager.getInstance().getPackageList();
mDailyAppAdapter.setDailyAppBeans(appBeanList);
tv_appsize.setText(String.format(getString(R.string.app_size), appBeanList.size()));
mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), appBeanList.size()));
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.dailyapp;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityDailyappBinding;
public class DailyAppViewModel extends BaseViewModel<ActivityDailyappBinding, ActivityEvent> {
@Override
public ActivityDailyappBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,93 +1,26 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.details;
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.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import com.bumptech.glide.Glide;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.activity.OrderActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.GoodsInfo;
import com.uiuios.aios.bean.RegionInfo;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivityDetailsBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import org.reactivestreams.Publisher;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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;
import io.reactivex.rxjava3.core.ObservableEmitter;
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.ObservableSource;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Function;
import io.reactivex.rxjava3.schedulers.Schedulers;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class DetailsActivity extends BaseDataBindingActivity {
@BindView(R.id.iv_details)
ImageView iv_details;
@BindView(R.id.iv_exit)
ImageView iv_exit;
@BindView(R.id.tv_buying_price)
TextView tv_buying_price;
@BindView(R.id.tv_original_price)
TextView tv_original_price;
@BindView(R.id.tv_stock)
TextView tv_stock;
@BindView(R.id.tv_subsidy)
TextView tv_subsidy;
@BindView(R.id.tv_price)
TextView tv_price;
@BindView(R.id.tv_title)
TextView tv_title;
@BindView(R.id.tv_details)
TextView tv_details;
@BindView(R.id.tv_certified)
TextView tv_certified;
@BindView(R.id.tv_ship)
TextView tv_ship;
@BindView(R.id.tv_insurance)
TextView tv_insurance;
@BindView(R.id.tv_sale)
TextView tv_sale;
@BindView(R.id.tv_type)
TextView tv_type;
@BindView(R.id.ll_buy)
LinearLayout ll_buy;
public class DetailsActivity extends BaseMvvmActivity<DetailsViewModel, ActivityDetailsBinding> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private ActivityDetailsBinding mBinding;
private GoodsInfo mGoodsInfo;
@Override
@@ -95,9 +28,17 @@ public class DetailsActivity extends BaseDataBindingActivity {
return true;
}
@Override
protected int getLayoutId() {
return R.layout.activity_details;
}
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_details);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
/**
@@ -111,37 +52,37 @@ public class DetailsActivity extends BaseDataBindingActivity {
GoodsInfo goodsInfo = (GoodsInfo) intent.getSerializableExtra("GoodsInfo");
if (goodsInfo == null) return;
mGoodsInfo = goodsInfo;
Glide.with(iv_details).load(mGoodsInfo.getDetails_img()).into(iv_details);
ViewTreeObserver observer = iv_details.getViewTreeObserver();
Glide.with(mViewDataBinding.ivDetails).load(mGoodsInfo.getDetails_img()).into(mViewDataBinding.ivDetails);
ViewTreeObserver observer = mViewDataBinding.ivDetails.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams layoutParams = iv_details.getLayoutParams();
int width = iv_details.getWidth();
ViewGroup.LayoutParams layoutParams = mViewDataBinding.ivDetails.getLayoutParams();
int width = mViewDataBinding.ivDetails.getWidth();
layoutParams.height = width;
iv_details.setLayoutParams(layoutParams);
mViewDataBinding.ivDetails.setLayoutParams(layoutParams);
}
});
iv_exit.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
tv_stock.setText("库存:" + mGoodsInfo.getStock());
mViewDataBinding.tvStock.setText("库存:" + mGoodsInfo.getStock());
BigDecimal d = new BigDecimal(mGoodsInfo.getOriginal_price());
BigDecimal d2 = new BigDecimal(mGoodsInfo.getBuying_price());
tv_subsidy.setText("官方补贴" + d.subtract(d2).toString());
tv_buying_price.setText("" + mGoodsInfo.getBuying_price());
tv_original_price.setText("原价:" + mGoodsInfo.getOriginal_price() + "");
tv_price.setText("抢购:" + mGoodsInfo.getBuying_price() + "");
tv_title.setText(mGoodsInfo.getGoods_name());
tv_details.setText(mGoodsInfo.getGoods_desc());
tv_certified.setText(mGoodsInfo.getEnsure());
tv_ship.setText(mGoodsInfo.getDeliver_goods());
tv_insurance.setText(mGoodsInfo.getInsure());
tv_sale.setText(mGoodsInfo.getAfter_sales());
ll_buy.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvSubsidy.setText("官方补贴" + d.subtract(d2).toString());
mViewDataBinding.tvBuyingPrice.setText("" + mGoodsInfo.getBuying_price());
mViewDataBinding.tvOriginalPrice.setText("原价:" + mGoodsInfo.getOriginal_price() + "");
mViewDataBinding.tvPrice.setText("抢购:" + mGoodsInfo.getBuying_price() + "");
mViewDataBinding.tvTitle.setText(mGoodsInfo.getGoods_name());
mViewDataBinding.tvDetails.setText(mGoodsInfo.getGoods_desc());
mViewDataBinding.tvCertified.setText(mGoodsInfo.getEnsure());
mViewDataBinding.tvShip.setText(mGoodsInfo.getDeliver_goods());
mViewDataBinding.tvInsurance.setText(mGoodsInfo.getInsure());
mViewDataBinding.tvSale.setText(mGoodsInfo.getAfter_sales());
mViewDataBinding.llBuy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Uri uri = Uri.parse(goodsInfo.getJump_url());
@@ -229,7 +170,7 @@ public class DetailsActivity extends BaseDataBindingActivity {
// });
}
});
tv_type.setText(mGoodsInfo.getType());
mViewDataBinding.tvType.setText(mGoodsInfo.getType());
}
/**

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.details;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityDetailsBinding;
public class DetailsViewModel extends BaseViewModel<ActivityDetailsBinding, ActivityEvent> {
@Override
public ActivityDetailsBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -7,72 +7,39 @@ import android.net.Uri;
import android.text.TextUtils;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.databinding.ActivityDialerBinding;
import java.util.HashMap;
import butterknife.BindView;
import butterknife.ButterKnife;
public class DialerActivity extends BaseDataBindingActivity {
public class DialerActivity extends BaseMvvmActivity<DialerViewModel, ActivityDialerBinding> {
@BindView(R.id.et_phone)
EditText et_phone;
@BindView(R.id.iv_delete)
ImageView iv_delete;
@BindView(R.id.nv_dialer)
NiceImageView nv_dialer;
@BindView(R.id.iv_contact)
ImageView iv_contact;
@BindView(R.id.tv_contact)
TextView tv_contact;
@BindView(R.id.cl_0)
ConstraintLayout cl_0;
@BindView(R.id.cl_1)
ConstraintLayout cl_1;
@BindView(R.id.cl_2)
ConstraintLayout cl_2;
@BindView(R.id.cl_3)
ConstraintLayout cl_3;
@BindView(R.id.cl_4)
ConstraintLayout cl_4;
@BindView(R.id.cl_5)
ConstraintLayout cl_5;
@BindView(R.id.cl_6)
ConstraintLayout cl_6;
@BindView(R.id.cl_7)
ConstraintLayout cl_7;
@BindView(R.id.cl_8)
ConstraintLayout cl_8;
@BindView(R.id.cl_9)
ConstraintLayout cl_9;
@BindView(R.id.cl_11)
ConstraintLayout cl_11;
@BindView(R.id.cl_12)
ConstraintLayout cl_12;
private SoundPool soundPool;
private HashMap<Integer, Integer> soundMap = new HashMap<>();
@Override
protected int getLayoutId() {
return R.layout.activity_dialer;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_dialer);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
ButterKnife.bind(this);
AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 设置音效的类型
soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 设置音效池的属性
@@ -96,107 +63,107 @@ public class DialerActivity extends BaseDataBindingActivity {
@Override
public void initData() {
cl_0.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("0", 0);
}
});
cl_1.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("1", 1);
}
});
cl_2.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("2", 2);
}
});
cl_3.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("3", 3);
}
});
cl_4.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("4", 4);
}
});
cl_5.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("5", 5);
}
});
cl_6.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("6", 6);
}
});
cl_7.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("7", 7);
}
});
cl_8.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("8", 8);
}
});
cl_9.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("9", 9);
}
});
cl_11.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl11.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("*", 10);
}
});
cl_12.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.cl12.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNumber("#", 11);
}
});
nv_dialer.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phone = et_phone.getText().toString();
String phone = mViewDataBinding.etPhone.getText().toString();
Intent dialIntent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + phone);
dialIntent.setData(data);
startActivity(dialIntent);
}
});
iv_delete.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String tmp = et_phone.getText().toString();
String tmp = mViewDataBinding.etPhone.getText().toString();
if (TextUtils.isEmpty(tmp)) {
et_phone.setText("");
mViewDataBinding.etPhone.setText("");
} else {
et_phone.setText(tmp.substring(0, tmp.length() - 1));
mViewDataBinding.etPhone.setText(tmp.substring(0, tmp.length() - 1));
}
}
});
iv_contact.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DialerActivity.this, ContactActivity.class);
startActivity(intent);
}
});
tv_contact.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DialerActivity.this, ContactActivity.class);
@@ -207,13 +174,14 @@ public class DialerActivity extends BaseDataBindingActivity {
private void addNumber(String number, int position) {
String tmp = et_phone.getText().toString();
String tmp = mViewDataBinding.etPhone.getText().toString();
if (TextUtils.isEmpty(tmp)) {
et_phone.setText(number);
mViewDataBinding.etPhone.setText(number);
} else {
et_phone.setText(tmp + number);
mViewDataBinding.etPhone.setText(tmp + number);
}
soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1);
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.dialer;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityDialerBinding;
public class DialerViewModel extends BaseViewModel<ActivityDialerBinding, ActivityEvent> {
@Override
public ActivityDialerBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,38 +1,28 @@
package com.uiuios.aios.activity;
import androidx.appcompat.app.AppCompatActivity;
package com.uiuios.aios.activity.emergency;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.disklrucache.CacheHelper;
import com.uiuios.aios.databinding.ActivityEmergencyBinding;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.network.UrlAddress;
import com.uiuios.aios.receiver.BootReceiver;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -43,17 +33,11 @@ import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class EmergencyActivity extends AppCompatActivity {
public class EmergencyActivity extends BaseMvvmActivity<EmergencyViewModel, ActivityEmergencyBinding> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@BindView(R.id.tv_countdown)
TextView tv_countdown;
@BindView(R.id.iv_finish)
ImageView iv_finish;
private Disposable subscribe;
private String TAG = EmergencyActivity.class.getSimpleName();
private boolean needDial = false;
@@ -62,12 +46,21 @@ public class EmergencyActivity extends AppCompatActivity {
// private CacheHelper mCacheHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.e(TAG, "onCreate: ");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_emergency);
protected int getLayoutId() {
return R.layout.activity_emergency;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
// mCacheHelper = new CacheHelper(this);
ButterKnife.bind(this);
//发送紧急广播
Intent bootIntent = new Intent(BootReceiver.SOS);
@@ -107,7 +100,7 @@ public class EmergencyActivity extends AppCompatActivity {
.subscribe(aLong -> {
Log.e("TAG", "倒计时:" + aLong);
if (aLong < time && !subscribe.isDisposed()) {
tv_countdown.setText("倒计时(" + (time - aLong - 1) + ")秒");
mViewDataBinding.tvCountdown.setText("倒计时(" + (time - aLong - 1) + ")秒");
Log.e(TAG, "accept: " + (time - aLong - 1));
} else {
String longitude = mMMKV.decodeString(CommonConfig.MAP_LONGITUDE_KEY, "");
@@ -154,7 +147,7 @@ public class EmergencyActivity extends AppCompatActivity {
finish();
}
});
iv_finish.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
@@ -177,6 +170,11 @@ public class EmergencyActivity extends AppCompatActivity {
//// mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键
}
@Override
protected void initData() {
}
@Override
protected void onStart() {
super.onStart();

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.emergency;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityEmergencyBinding;
public class EmergencyViewModel extends BaseViewModel<ActivityEmergencyBinding, ActivityEvent> {
@Override
public ActivityEmergencyBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.infolist;
import android.util.Log;
import android.view.View;
@@ -13,9 +13,11 @@ 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;
@@ -27,28 +29,28 @@ import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class InfoListActivity extends BaseDataBindingActivity {
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
public class InfoListActivity extends BaseMvvmActivity<InfoListViewModel, ActivityInfoListBinding> {
private ArticleAdapter mArticleAdapter;
@Override
protected int getLayoutId() {
return R.layout.activity_info_list;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_info_list);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
mArticleAdapter = new ArticleAdapter();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mArticleAdapter);
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
mViewDataBinding.recyclerView.setAdapter(mArticleAdapter);
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
@@ -73,10 +75,10 @@ public class InfoListActivity extends BaseDataBindingActivity {
List<ArticleInfo> articleInfoList = articleList.getData();
if (articleInfoList != null && articleInfoList.size() != 0) {
articleInfoList.sort((o1, o2) -> Integer.compare(o2.getWeight(), o1.getWeight()));
iv1.setVisibility(android.view.View.GONE);
mViewDataBinding.iv1.setVisibility(android.view.View.GONE);
mArticleAdapter.setArticleBeanList(articleInfoList);
} else {
iv1.setVisibility(android.view.View.VISIBLE);
mViewDataBinding.iv1.setVisibility(android.view.View.VISIBLE);
}
}
@@ -91,4 +93,5 @@ public class InfoListActivity extends BaseDataBindingActivity {
}
});
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.infolist;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityInfoListBinding;
public class InfoListViewModel extends BaseViewModel<ActivityInfoListBinding, ActivityEvent> {
@Override
public ActivityInfoListBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -11,6 +11,9 @@ import android.content.pm.PackageManager;
import android.content.pm.ShortcutManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
@@ -22,6 +25,7 @@ import android.view.KeyEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
@@ -35,36 +39,44 @@ import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.phone.PhoneActivity;
import com.uiuios.aios.base.BaseFragmentPagerAdapter;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.AlarmItem;
import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.PhoneActivityMainBinding;
import com.uiuios.aios.fragment.app.AppListFragment;
import com.uiuios.aios.fragment.control.ControlFragment;
import com.uiuios.aios.fragment.contact.ContactFragment;
import com.uiuios.aios.fragment.home.HomeFragment;
import com.uiuios.aios.fragment.settings.SettingsFragment;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.service.NotificationService;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUsedTimeUtils;
import com.uiuios.aios.utils.DayUtils;
import com.uiuios.aios.view.ScaleCircleNavigator;
import net.lucode.hackware.magicindicator.ViewPagerHelper;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityMainBinding> implements RemoteManager.ConnectedListener {
public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityMainBinding> implements RemoteManager.ConnectedListener, NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = MainActivity.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
@@ -72,15 +84,29 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter;
private List<Fragment> mFragments;
private ControlFragment mControlFragment;
// private ControlFragment mControlFragment;
private SettingsFragment mSettingsFragment;
private HomeFragment mHomeFragment;
// private CustomFragment mCustomFragment;
private ContactFragment mSecondFragment;
private ContactFragment mContactFragment;
private boolean is_twoscreen = false;
private int appListIndex = 3;
private int defaultCurrent = 2;
private CameraManager cameraManager;
@Override
public void onDisconnected() {
Log.e(TAG, "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e(TAG, "onConnected: " + networkType);
initAmap();
}
@Override
public void onRemoteConnected() {
setDefaultDesktop();
@@ -121,6 +147,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
// Toaster.show("请授予\"" + getString(R.string.app_name) + "\"使用通知权");
// gotoNotificationAccessSetting(MainActivity.this);
// }
cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
@@ -128,18 +155,19 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments);
// fragmentTransaction.add(R.id.viewPager, appListFragment);
// fragmentTransaction.commit();
mControlFragment = new ControlFragment();
mFragments.add(mControlFragment);
// mControlFragment = new ControlFragment();
// mFragments.add(mControlFragment);
mSettingsFragment = new SettingsFragment();
mFragments.add(mSettingsFragment);
// is_twoscreen = Settings.Global.getInt(getContentResolver(), "is_twoscreen", 1) == 1;
// if (is_twoscreen) {
// appListIndex = 2;
// defaultCurrent = 1;
mSecondFragment = new ContactFragment();
mFragments.add(mSecondFragment);
mContactFragment = new ContactFragment();
mFragments.add(mContactFragment);
// }
// mCustomFragment = new CustomFragment();
// mFragments.add(mCustomFragment);
mHomeFragment = new HomeFragment();
mFragments.add(mHomeFragment);
@@ -151,7 +179,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
x = i;
} else if (i != 0 &&i == desktopIcons.size()) {
} else if (i != 0 && i == desktopIcons.size()) {
AppListFragment appListFragment = new AppListFragment();
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
@@ -177,8 +205,8 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
}
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
// View decorView = getWindow().getDecorView();
// decorView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
// 隐藏导航栏
hideNavigationBar();
@@ -201,7 +229,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
private void hideNavigationBar() {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
// | View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
}
@@ -219,7 +247,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
x = i;
} else if (i != 0 &&i == desktopIcons.size()) {
} else if (i != 0 && i == desktopIcons.size()) {
AppListFragment appListFragment = new AppListFragment();
appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
mFragments.add(appListFragment);
@@ -247,6 +275,28 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
};
bindAlarmService();
RemoteManager.setListener(this);
initAmap();
}
private void initAmap() {
boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false);
String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, CommonConfig.DEFAULT_LOCATION_TUDE);
if (!manual) {
LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict());
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude());
// mViewDataBinding.tvLocation.setText(mapBean.getDistrict());
mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude());
}
});
} else {
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
// mViewDataBinding.tvLocation.setText(district);
mViewModel.getWeather(tude);
}
}
private ServiceConnection mAlarmServiceConnection;
@@ -312,7 +362,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
fragmentList.add(appListFragment);
x = i;
} else if (i != 0 &&i == applicationInfoList.size()) {
} else if (i != 0 && i == applicationInfoList.size()) {
Log.e(TAG, "addData: i == size");
AppListFragment appListFragment = new AppListFragment();
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
@@ -361,7 +411,6 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
}
switch (action) {
default:
break;
case Intent.ACTION_MAIN:
mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
break;
@@ -582,6 +631,7 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
registerSOSNumberReceiver();
registerUpdateDesktopReceiver();
registmUpdateAddressReceiver();
registerTimeReceiver();
}
private void unregisterAllReceiver() {
@@ -597,6 +647,9 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
if (mUpdateAddressReceiver != null) {
unregisterReceiver(mUpdateAddressReceiver);
}
if (mTimeChangedReceiver != null) {
unregisterReceiver(mTimeChangedReceiver);
}
}
private void registNewAppReceiver() {
@@ -691,23 +744,122 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, PhoneActivityM
}
}
//监听时间和日期变化
public void registerTimeReceiver() {
mTimeChangedReceiver = new TimeChangedReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(mTimeChangedReceiver, filter);
}
private TimeChangedReceiver mTimeChangedReceiver;
private class TimeChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "data changed");
} else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "time changed");
} else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
} else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "time tick");
}
setTime();
}
}
private void setTime() {
long time = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = new Date(time);
LiveEventBus
.get("time")
.post(sdf.format(date));
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日");
Date date2 = new Date(time);
LiveEventBus
.get("week")
.post(sdf2.format(date2) + "\t" + DayUtils.getWeek());
}
private boolean isFlashlightAvailable() {
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
// return Settings.Secure.getInt(getContentResolver(), "flashlight_available", 0) == 1;
}
private static String getCameraId(Context context) throws CameraAccessException {
final CameraManager cameraManager = context.getSystemService(CameraManager.class);
final String[] ids = cameraManager.getCameraIdList();
for (String id : ids) {
CameraCharacteristics c = cameraManager.getCameraCharacteristics(id);
Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
if (flashAvailable != null && flashAvailable
&& lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
return id;
}
}
return null;
}
private boolean isFlashlightEnabled() {
return Settings.Secure.getInt(getContentResolver(), "flashlight_enabled", 0) == 1;
}
private boolean flashing = false;
public class BtnClick {
public void dialer(View view) {
// startActivity(new Intent(Intent.ACTION_DIAL));
startActivity(new Intent(MainActivity.this, PhoneActivity.class));
}
public void mms(View v) {
ApkUtils.openPackage(MainActivity.this, "com.android.mms");
public void wechat(View v) {
// ApkUtils.openPackage(MainActivity.this, "com.android.mms");
ApkUtils.openPackage(MainActivity.this, "com.tencent.mm");
}
public void camera(View v) {
ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
public void toTiktok(View v) {
// ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
ApkUtils.openPackage(MainActivity.this, "com.ss.android.ugc.aweme");
}
public void sos(View v) {
startActivity(new Intent(MainActivity.this, EmergencyActivity.class));
public void toCalendar(View v) {
// startActivity(new Intent(MainActivity.this, EmergencyActivity.class));
ApkUtils.openPackage(MainActivity.this, "com.youloft.calendar");
}
public void openFlash(View v) {
if (flashing) {
try {
String CameraId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(CameraId, false);
} catch (CameraAccessException e) {
e.printStackTrace();
}
flashing = false;
// tv_flashlight_switch.setText("关");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item_dis));
} else {
try {
String CameraId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(CameraId, true);
} catch (CameraAccessException e) {
e.printStackTrace();
}
// tv_flashlight_switch.setText("开");
// cl_flashlight.setBackground(mContext.getDrawable(R.drawable.control_background_item));
flashing = true;
}
}
}
}

View File

@@ -5,7 +5,17 @@ import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.qweather.sdk.bean.base.Code;
import com.qweather.sdk.bean.base.Lang;
import com.qweather.sdk.bean.base.Unit;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.qweather.sdk.bean.weather.WeatherHourlyBean;
import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.qweather.sdk.view.QWeather;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
@@ -20,6 +30,7 @@ import com.uiuios.aios.databinding.PhoneActivityMainBinding;
import com.uiuios.aios.manager.AppManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.ActivationUtil;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUsedTimeUtils;
@@ -50,6 +61,128 @@ public class MainViewModel extends BaseViewModel<PhoneActivityMainBinding, Activ
}
public void getWeather(String location) {
Log.e(TAG, "getweather: " + location);
boolean activation = ActivationUtil.isActivation(getCtx());
Log.e(TAG, "getweather: is_activation = " + activation);
if (!activation) {
Toaster.show("请先激活设备");
return;
}
getWeatherNow(location);
getWeather24Hourly(location);
getWeather7D(location);
}
private MutableLiveData<WeatherNowBean.NowBaseBean> mNowBaseBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherNowBean.NowBaseBean> getNowBaseBeanData() {
return mNowBaseBeanData;
}
public void getWeatherNow(String location) {
Log.e(TAG, "getWeatherNow: " + location);
/**
* 实况天气数据
* @param location 所查询的地区可通过该地区名称、ID、IP和经纬度进行查询经纬度格式经度,纬度
* (英文,分隔,十进制格式,北纬东经为正,南纬西经为负)
* @param lang (选填)多语言,可以不使用该参数,默认为简体中文
* @param unit (选填)单位选择公制m或英制i默认为公制单位
* @param listener 网络访问结果回调
*/
QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() {
@Override
public void onError(Throwable e) {
Log.e("getWeatherNow", "onError: " + e);
}
@Override
public void onSuccess(WeatherNowBean weatherBean) {
Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean));
//先判断返回的status是否正确当status正确时获取数据若status不正确可查看status对应的Code值找到原因
if (Code.OK == weatherBean.getCode()) {
WeatherNowBean.NowBaseBean now = weatherBean.getNow();
LiveEventBus
.get("some_key1")
.post(now);
mNowBaseBeanData.postValue(now);
Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now));
} else {
//在此查看返回数据失败的原因
Code code = weatherBean.getCode();
Log.d("getWeatherNow", "failed code: " + code);
}
}
});
}
private MutableLiveData<WeatherHourlyBean.HourlyBean> mHourlyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherHourlyBean.HourlyBean> getHourlyBeanData() {
return mHourlyBeanData;
}
public void getWeather24Hourly(String location) {
QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather24Hourly", "onError: " + throwable);
}
@Override
public void onSuccess(WeatherHourlyBean weatherHourlyBean) {
Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean));
if (Code.OK == weatherHourlyBean.getCode()) {
List<WeatherHourlyBean.HourlyBean> hourly = weatherHourlyBean.getHourly();
if (hourly != null && hourly.size() != 0) {
WeatherHourlyBean.HourlyBean now = hourly.get(0);
mHourlyBeanData.postValue(now);
LiveEventBus
.get("some_key2")
.post(now);
}
} else {
//在此查看返回数据失败的原因
Code code = weatherHourlyBean.getCode();
Log.e("getWeather24Hourly", "failed code: " + code);
}
}
});
}
private MutableLiveData<WeatherDailyBean.DailyBean> DailyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherDailyBean.DailyBean> getDailyBeanData() {
return DailyBeanData;
}
public void getWeather7D(String location) {
QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather7D", "onError: " + throwable.getMessage());
}
@Override
public void onSuccess(WeatherDailyBean weatherDailyBean) {
String jsonString = new Gson().toJson(weatherDailyBean);
Log.d("getWeather7D", "onSuccess: " + jsonString);
mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
List<WeatherDailyBean.DailyBean> dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
DailyBeanData.postValue(dailyBean);
LiveEventBus
.get("some_key3")
.post(dailyBean);
}
}
});
}
private MutableLiveData<SnInfo> mSnInfoData = new MutableLiveData<>();
public MutableLiveData<SnInfo> getSnInfoData() {
@@ -88,6 +221,7 @@ public class MainViewModel extends BaseViewModel<PhoneActivityMainBinding, Activ
});
}
private MutableLiveData<ArrayList<DesktopIcon>> mDesktopIconData = new MutableLiveData<>();
public MutableLiveData<ArrayList<DesktopIcon>> getDesktopIconData() {

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity.main;
package com.uiuios.aios.activity.main.deprecated;
import android.content.Intent;
import android.os.Bundle;
@@ -8,7 +8,9 @@ import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.main.MainActivity;
@Deprecated
public class OldMainActivity extends MainActivity {
private static final String TAG = OldMainActivity.class.getSimpleName();

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity.main;
package com.uiuios.aios.activity.main.deprecated;
import android.content.Intent;
import android.view.View;
@@ -6,10 +6,12 @@ import android.view.View;
import androidx.databinding.DataBindingUtil;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.emergency.EmergencyActivity;
import com.uiuios.aios.activity.main.MainActivity;
import com.uiuios.aios.databinding.PhoneActivityMainBinding;
import com.uiuios.aios.utils.ApkUtils;
@Deprecated
public class PhoneMainActivity extends MainActivity {
private static final String TAG = PhoneMainActivity.class.getSimpleName();

View File

@@ -1,28 +1,24 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.quickapp;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.AppSelectedAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.AppSelectBean;
import com.uiuios.aios.databinding.ActivityQuickAppBinding;
import com.uiuios.aios.view.GridSpaceItemDecoration;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class QuickAppActivity extends BaseDataBindingActivity {
public class QuickAppActivity extends BaseMvvmActivity<QuickAppViewModel, ActivityQuickAppBinding> {
private static final String TAG = QuickAppActivity.class.getSimpleName();
public static final String QUICK_APP_KEY = "QuickAppPackageKey";
@@ -31,26 +27,30 @@ public class QuickAppActivity extends BaseDataBindingActivity {
private AppSelectedAdapter mAppSelectedAdapter;
@BindView(R.id.rv_goods)
RecyclerView recyclerView;
@Override
protected int getLayoutId() {
return R.layout.activity_quick_app;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_quick_app);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
mAppSelectedAdapter = new AppSelectedAdapter();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
recyclerView.addItemDecoration(new GridSpaceItemDecoration(3,50,50));
mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 3));
mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(3, 50, 50));
} else {
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
recyclerView.addItemDecoration(new GridSpaceItemDecoration(2,50,50));
mViewDataBinding.rvApps.setLayoutManager(new GridLayoutManager(this, 2));
mViewDataBinding.rvApps.addItemDecoration(new GridSpaceItemDecoration(2, 50, 50));
}
recyclerView.setAdapter(mAppSelectedAdapter);
mViewDataBinding.rvApps.setAdapter(mAppSelectedAdapter);
}
@Override
@@ -76,4 +76,5 @@ public class QuickAppActivity extends BaseDataBindingActivity {
}
return appSelectBeanList;
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.quickapp;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityQuickAppBinding;
public class QuickAppViewModel extends BaseViewModel<ActivityQuickAppBinding, ActivityEvent> {
@Override
public ActivityQuickAppBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -7,73 +7,72 @@ import android.os.Bundle;
import android.provider.CallLog;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.dialer.DialerActivity;
import com.uiuios.aios.adapter.CallRecordAdapter;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.RecordsInfo;
import com.uiuios.aios.databinding.ActivityRecordsBinding;
import com.uiuios.aios.dialog.DeleteDialog;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class RecordsActivity extends AppCompatActivity {
public class RecordsActivity extends BaseMvvmActivity<RecordsViewModel, ActivityRecordsBinding> {
private static final String TAG = RecordsActivity.class.getSimpleName();
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.iv_cancel)
ImageView iv_cancel;
@BindView(R.id.iv_clear)
ImageView iv_clear;
@BindView(R.id.nv_dialer)
NiceImageView nv_dialer;
@BindView(R.id.tv_nodata)
TextView tv_nodata;
private CallRecordAdapter mCallRecordAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_records);
}
@Override
protected int getLayoutId() {
return R.layout.activity_records;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
UltimateBarX.statusBarOnly(this)
.colorRes(R.color.default_blue)
.fitWindow(true)
.apply();
ButterKnife.bind(this);
Log.e(TAG, "initData: " + dataList);
mCallRecordAdapter = new CallRecordAdapter();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecordsActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(mCallRecordAdapter);
mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager);
mViewDataBinding.recyclerView.setAdapter(mCallRecordAdapter);
iv_cancel.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
nv_dialer.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.nvDialer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(RecordsActivity.this, DialerActivity.class));
}
});
iv_clear.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog();
@@ -81,6 +80,11 @@ public class RecordsActivity extends AppCompatActivity {
});
}
@Override
protected void initData() {
}
private void showDialog() {
DeleteDialog dialog = new DeleteDialog(this);
dialog.setTitle("提醒")
@@ -116,11 +120,11 @@ public class RecordsActivity extends AppCompatActivity {
private void getData() {
dataList = getDataList();
if (dataList.size() == 0) {
tv_nodata.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
mViewDataBinding.tvNodata.setVisibility(View.VISIBLE);
mViewDataBinding.recyclerView.setVisibility(View.GONE);
} else {
tv_nodata.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
mViewDataBinding.tvNodata.setVisibility(View.GONE);
mViewDataBinding.recyclerView.setVisibility(View.VISIBLE);
}
mCallRecordAdapter.setRecordsInfoList(dataList);
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.records;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityRecordsBinding;
public class RecordsViewModel extends BaseViewModel<ActivityRecordsBinding, ActivityEvent> {
@Override
public ActivityRecordsBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,4 +1,4 @@
package com.uiuios.aios.activity;
package com.uiuios.aios.activity.screenlock;
import android.content.Context;
import android.media.AudioAttributes;
@@ -11,63 +11,22 @@ import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.tuo.customview.VerificationCodeView;
import com.uiuios.aios.R;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivityScreenLockBinding;
import com.uiuios.aios.manager.RemoteManager;
import butterknife.BindView;
import butterknife.ButterKnife;
public class ScreenLockActivity extends BaseDataBindingActivity {
public class ScreenLockActivity extends BaseMvvmActivity<ScreenLockViewModel, ActivityScreenLockBinding> {
private static final String TAG = ScreenLockActivity.class.getSimpleName();
@BindView(R.id.iv_back)
ImageView iv_back;
@BindView(R.id.bt_0)
TextView bt0;
@BindView(R.id.bt_1)
TextView bt1;
@BindView(R.id.bt_2)
TextView bt2;
@BindView(R.id.bt_3)
TextView bt3;
@BindView(R.id.bt_4)
TextView bt4;
@BindView(R.id.bt_5)
TextView bt5;
@BindView(R.id.bt_6)
TextView bt6;
@BindView(R.id.bt_7)
TextView bt7;
@BindView(R.id.bt_8)
TextView bt8;
@BindView(R.id.bt_9)
TextView bt9;
@BindView(R.id.bt_del)
TextView bt_del;
@BindView(R.id.bt_confirm)
TextView bt_confirm;
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.tv_hint)
TextView tv_hint;
@BindView(R.id.ll_keyboard)
LinearLayout ll_keyboard;
@BindView(R.id.icv)
VerificationCodeView codeView;
private SoundPool soundPool;
private int soundId;
@@ -86,23 +45,30 @@ public class ScreenLockActivity extends BaseDataBindingActivity {
soundId = soundPool.load(this, R.raw.click, 1);
}
@Override
protected int getLayoutId() {
return R.layout.activity_screen_lock;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this,R.layout.activity_screen_lock);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
InputMethodManager imm = (InputMethodManager) ScreenLockActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0);
codeView.getEditText().setOnClickListener(new View.OnClickListener() {
imm.hideSoftInputFromWindow(mViewDataBinding.codeView.getWindowToken(), 0);
mViewDataBinding.codeView.getEditText().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ll_keyboard.setVisibility(View.VISIBLE);
mViewDataBinding.llKeyboard.setVisibility(View.VISIBLE);
}
});
codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() {
mViewDataBinding.codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() {
@Override
public void inputComplete() {
checkPasswd();
@@ -114,39 +80,39 @@ public class ScreenLockActivity extends BaseDataBindingActivity {
}
});
bt_del.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.btDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv_hint.setText("");
codeView.clearInputContent();
mViewDataBinding.tvHint.setText("");
mViewDataBinding.codeView.clearInputContent();
}
});
bt_confirm.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.btConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkPasswd();
}
});
iv_back.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
bt0.setOnClickListener(view1 -> add(codeView, "0"));
bt1.setOnClickListener(view1 -> add(codeView, "1"));
bt2.setOnClickListener(view1 -> add(codeView, "2"));
bt3.setOnClickListener(view1 -> add(codeView, "3"));
bt4.setOnClickListener(view1 -> add(codeView, "4"));
bt5.setOnClickListener(view1 -> add(codeView, "5"));
bt6.setOnClickListener(view1 -> add(codeView, "6"));
bt7.setOnClickListener(view1 -> add(codeView, "7"));
bt8.setOnClickListener(view1 -> add(codeView, "8"));
bt9.setOnClickListener(view1 -> add(codeView, "9"));
mViewDataBinding.bt0.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "0"));
mViewDataBinding.bt1.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "1"));
mViewDataBinding.bt2.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "2"));
mViewDataBinding.bt3.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "3"));
mViewDataBinding.bt4.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "4"));
mViewDataBinding.bt5.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "5"));
mViewDataBinding.bt6.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "6"));
mViewDataBinding.bt7.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "7"));
mViewDataBinding.bt8.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "8"));
mViewDataBinding.bt9.setOnClickListener(view1 -> add(mViewDataBinding.codeView, "9"));
}
private void checkPasswd() {
String content = codeView.getInputContent();
String content = mViewDataBinding.codeView.getInputContent();
if (TextUtils.isEmpty(content) || content.length() != 4) {
return;
}
@@ -157,13 +123,13 @@ public class ScreenLockActivity extends BaseDataBindingActivity {
exitDesktop();
} else {
setEmpty();
tv_hint.setText("密码错误");
mViewDataBinding.tvHint.setText("密码错误");
}
} else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) {
exitDesktop();
} else {
setEmpty();
tv_hint.setText("密码错误");
mViewDataBinding.tvHint.setText("密码错误");
}
}
@@ -171,8 +137,8 @@ public class ScreenLockActivity extends BaseDataBindingActivity {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
codeView.clearInputContent();
tv_hint.setText("");
mViewDataBinding.codeView.clearInputContent();
mViewDataBinding.tvHint.setText("");
}
}, 1000);
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.screenlock;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityScreenLockBinding;
public class ScreenLockViewModel extends BaseViewModel<ActivityScreenLockBinding, ActivityEvent> {
@Override
public ActivityScreenLockBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -0,0 +1,167 @@
package com.uiuios.aios.activity.setting;
import android.Manifest;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.provider.Settings;
import android.view.View;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.ActivitySettingBinding;
import com.uiuios.aios.service.main.MainService;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class SettingActivity extends BaseMvvmActivity<SettingViewModel, ActivitySettingBinding> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override
protected int getLayoutId() {
return R.layout.activity_setting;
}
@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() {
}
private static final int REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION = 200;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
// 权限被拒绝
Toast.makeText(this, "用户取消授予悬浮窗权限", Toast.LENGTH_SHORT).show();
} else {
// 权限已授予,可以显示悬浮窗
showFloatingWindow();
}
}
}
private void showFloatingWindow() {
mViewDataBinding.setFloatWindowEnable(true);
mMMKV.encode(CommonConfig.FLOAT_WINDOW, true);
startService(new Intent(SettingActivity.this, MainService.class));
sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_ON));
}
private void hideFloatingWindow() {
mViewDataBinding.setFloatWindowEnable(false);
mMMKV.encode(CommonConfig.FLOAT_WINDOW, false);
startService(new Intent(SettingActivity.this, MainService.class));
sendBroadcast(new Intent(MainService.ACTION_FLOAT_WINDOW_OFF));
}
/***
* 检查悬浮窗开启权限
* @param context
* @return
*/
public boolean checkFloatPermission(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return true;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
try {
Class cls = Class.forName("android.content.Context");
Field declaredField = cls.getDeclaredField("APP_OPS_SERVICE");
declaredField.setAccessible(true);
Object obj = declaredField.get(cls);
if (!(obj instanceof String)) {
return false;
}
String str2 = (String) obj;
obj = cls.getMethod("getSystemService", String.class).invoke(context, str2);
cls = Class.forName("android.app.AppOpsManager");
Field declaredField2 = cls.getDeclaredField("MODE_ALLOWED");
declaredField2.setAccessible(true);
Method checkOp = cls.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class);
int result = (Integer) checkOp.invoke(obj, 24, Binder.getCallingUid(), context.getPackageName());
return result == declaredField2.getInt(cls);
} catch (Exception e) {
return false;
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
if (appOpsMgr == null)
return false;
int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), context
.getPackageName());
return Settings.canDrawOverlays(context) || mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED;
} else {
return Settings.canDrawOverlays(context);
}
}
}
public class BtnClick {
public void openFloat(View view) {
boolean floatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false);
if (floatWindowEnable) {
hideFloatingWindow();
} else {
boolean permission = checkFloatPermission(SettingActivity.this);
if (permission) {
showFloatingWindow();
} else {
// 在Activity或Fragment中请求权限
if (!Settings.canDrawOverlays(SettingActivity.this)) {
Toast.makeText(SettingActivity.this, "请先打开悬浮窗权限", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE_DRAW_OVER_OTHER_APPS_PERMISSION);
} else {
showFloatingWindow();
}
}
}
}
public void toInternet(View view) {
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
}
public void toFont(View view) {
startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
}
public void toTouch(View view) {
startActivity(new Intent(SettingActivity.this, TouchActivity.class));
}
public void toSettings(View view) {
startActivity(new Intent(Settings.ACTION_SETTINGS));
}
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.setting;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivitySettingBinding;
public class SettingViewModel extends BaseViewModel<ActivitySettingBinding, ActivityEvent> {
@Override
public ActivitySettingBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -0,0 +1,54 @@
package com.uiuios.aios.activity.setting;
import android.os.Bundle;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceFragmentCompat;
import com.uiuios.aios.R;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
public class SettingsActivity extends BaseMvvmActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
protected int getLayoutId() {
return 0;
}
@Override
protected void initDataBinding() {
}
@Override
protected void initView() {
}
@Override
protected void initData() {
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
}
}

View File

@@ -0,0 +1,51 @@
package com.uiuios.aios.activity.setting;
import android.content.Intent;
import android.provider.Settings;
import android.view.View;
import com.uiuios.aios.R;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.databinding.ActivitySettingBinding;
import com.uiuios.aios.databinding.ActivityTouchBinding;
public class TouchActivity extends BaseMvvmActivity<TouchViewModel, ActivityTouchBinding> {
@Override
protected int getLayoutId() {
return R.layout.activity_touch;
}
@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() {
}
public class BtnClick {
public void toInternet(View view) {
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
}
public void toFont(View view) {
startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
}
public void toSettings(View view) {
startActivity(new Intent(Settings.ACTION_SETTINGS));
}
}
}

View File

@@ -0,0 +1,18 @@
package com.uiuios.aios.activity.setting;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.databinding.ActivityTouchBinding;
public class TouchViewModel extends BaseViewModel<ActivityTouchBinding, ActivityEvent> {
@Override
public ActivityTouchBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -1,18 +0,0 @@
package com.uiuios.aios.activity.wifi;
import com.uiuios.aios.base.mvp.BasePresenter;
import com.uiuios.aios.base.mvp.BaseView;
import com.uiuios.aios.bean.WiFiInfo;
import java.util.List;
public class WiFiContact {
public interface Presenter extends BasePresenter<WiFiView> {
void getWiFiList();
}
public interface WiFiView extends BaseView {
void setSavedWiFiList(List<WiFiInfo> wiFiList);
void setAvailableWiFiList(List<WiFiInfo> wiFiList);
}
}

View File

@@ -7,77 +7,65 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.hjq.toast.Toaster;
import com.uiuios.aios.R;
import com.uiuios.aios.adapter.AvailableWiFiAdapter;
import com.uiuios.aios.adapter.SavedWiFiAdapter;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.WiFiInfo;
import com.uiuios.aios.databinding.ActivityWifiManagerBinding;
import com.uiuios.aios.view.HorizontalItemDecoration;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFiContact.WiFiView {
public class WiFiManagerActivity extends BaseMvvmActivity<WiFiManagerViewModel, ActivityWifiManagerBinding> {
@BindView(R.id.iv_close)
ImageView iv_close;
@BindView(R.id.rv_saved)
RecyclerView rv_saved;
@BindView(R.id.rv_available)
RecyclerView rv_available;
@BindView(R.id.tv_refresh)
TextView tv_refresh;
@BindView(R.id.tv_refresh2)
TextView tv_refresh2;
private WiFiPresenter mPresenter;
private SavedWiFiAdapter mSavedWiFiAdapter;
private AvailableWiFiAdapter mAvailableWiFiAdapter;
@Override
public boolean setNightMode() {
return true;
}
@Override
protected int getLayoutId() {
return R.layout.activity_wifi_manager;
}
@Override
protected void initDataBinding() {
DataBindingUtil.setContentView(this, R.layout.activity_wifi_manager);
mViewModel.setCtx(this);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
// mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new WiFiPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(getLifecycleSubject());
iv_close.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.ivClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
tv_refresh.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPresenter.getWiFiList();
mViewModel.getWiFiList();
}
});
tv_refresh2.setOnClickListener(new View.OnClickListener() {
mViewDataBinding.tvRefresh2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPresenter.getWiFiList();
mViewModel.getWiFiList();
}
});
@@ -86,14 +74,14 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
rv_saved.setLayoutManager(linearLayoutManager);
rv_saved.addItemDecoration(new HorizontalItemDecoration(30, this));
rv_saved.setAdapter(mSavedWiFiAdapter);
mViewDataBinding.rvSaved.setLayoutManager(linearLayoutManager);
mViewDataBinding.rvSaved.addItemDecoration(new HorizontalItemDecoration(30, this));
mViewDataBinding.rvSaved.setAdapter(mSavedWiFiAdapter);
LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(this);
linearLayoutManager2.setOrientation(LinearLayoutManager.VERTICAL);
rv_available.setLayoutManager(linearLayoutManager2);
rv_available.setAdapter(mAvailableWiFiAdapter);
mViewDataBinding.rvAvailable.setLayoutManager(linearLayoutManager2);
mViewDataBinding.rvAvailable.setAdapter(mAvailableWiFiAdapter);
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
@@ -105,12 +93,25 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi
registerReceiver(broadcastReceiver, filter);
mPresenter.getWiFiList();
mViewModel.getWiFiList();
}
@Override
public void initData() {
mViewModel.getSavedWiFiList().observe(this, new Observer<List<WiFiInfo>>() {
@Override
public void onChanged(List<WiFiInfo> wiFiInfos) {
Toaster.show("刷新成功");
mSavedWiFiAdapter.setResultList(wiFiInfos);
}
});
mViewModel.getAvailableWiFiList().observe(this, new Observer<List<WiFiInfo>>() {
@Override
public void onChanged(List<WiFiInfo> wiFiInfos) {
mAvailableWiFiAdapter.setResultList(wiFiInfos);
}
});
}
@Override
@@ -132,22 +133,11 @@ public class WiFiManagerActivity extends BaseDataBindingActivity implements WiFi
case WifiManager.NETWORK_STATE_CHANGED_ACTION:
case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
default:
mPresenter.getWiFiList();
mViewModel.getWiFiList();
break;
}
}
}
};
@Override
public void setSavedWiFiList(List<WiFiInfo> wiFiList) {
Toaster.show("刷新成功");
mSavedWiFiAdapter.setResultList(wiFiList);
}
@Override
public void setAvailableWiFiList(List<WiFiInfo> wiFiList) {
mAvailableWiFiAdapter.setResultList(wiFiList);
}
}

View File

@@ -6,10 +6,12 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import androidx.annotation.NonNull;
import androidx.lifecycle.MutableLiveData;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.WiFiInfo;
import com.uiuios.aios.databinding.ActivityWifiManagerBinding;
import java.util.ArrayList;
import java.util.Comparator;
@@ -19,42 +21,35 @@ import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
import static android.text.TextUtils.isEmpty;
public class WiFiPresenter implements WiFiContact.Presenter {
public class WiFiManagerViewModel extends BaseViewModel<ActivityWifiManagerBinding, ActivityEvent> {
private WiFiContact.WiFiView mView;
private Context mContext;
private BehaviorSubject<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
WiFiPresenter(Context context) {
this.mContext = context;
@Override
public ActivityWifiManagerBinding getVDBinding() {
return binding;
}
@Override
public void attachView(@NonNull WiFiContact.WiFiView view) {
this.mView = view;
public void onDestroy() {
}
@Override
public void detachView() {
this.mView = null;
private MutableLiveData<List<WiFiInfo>> mSavedWiFiList =new MutableLiveData<>();
public MutableLiveData<List<WiFiInfo>> getSavedWiFiList() {
return mSavedWiFiList;
}
private MutableLiveData<List<WiFiInfo>> mAvailableWiFiList =new MutableLiveData<>();
public MutableLiveData<List<WiFiInfo>> getAvailableWiFiList() {
return mAvailableWiFiList;
}
@Override
public void getWiFiList() {
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
if (getCtx()==null)return;
WifiManager wifiManager = (WifiManager) getCtx().getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> wifiConfigurations = wifiManager.getConfiguredNetworks();
Map<String, WifiConfiguration> savedWifiConfiguration = new HashMap<>();
for (WifiConfiguration wifiConfiguration : wifiConfigurations) {
@@ -110,7 +105,7 @@ public class WiFiPresenter implements WiFiContact.Presenter {
}
});
}
mView.setSavedWiFiList(savedList.stream().sorted(new Comparator<WiFiInfo>() {
mSavedWiFiList.setValue(savedList.stream().sorted(new Comparator<WiFiInfo>() {
@Override
public int compare(WiFiInfo o1, WiFiInfo o2) {
if (o1.isAvailable()) {
@@ -122,6 +117,6 @@ public class WiFiPresenter implements WiFiContact.Presenter {
}
}
}).collect(Collectors.toList()));
mView.setAvailableWiFiList(availableList);
mAvailableWiFiList.setValue(availableList);
}
}

View File

@@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.QuickAppActivity;
import com.uiuios.aios.activity.quickapp.QuickAppActivity;
import com.uiuios.aios.bean.AppSelectBean;
import com.uiuios.aios.config.CommonConfig;

View File

@@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.ArticleActivity;
import com.uiuios.aios.activity.article.ArticleActivity;
import com.uiuios.aios.bean.ArticleInfo;
import java.util.List;

View File

@@ -2,12 +2,10 @@ package com.uiuios.aios.adapter;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -17,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.DetailsActivity;
import com.uiuios.aios.activity.details.DetailsActivity;
import com.uiuios.aios.bean.GoodsInfo;
import java.util.List;

View File

@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.DetailsActivity;
import com.uiuios.aios.activity.details.DetailsActivity;
import com.uiuios.aios.bean.GoodsInfo;
import java.util.List;

View File

@@ -2,7 +2,6 @@ package com.uiuios.aios.adapter;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -15,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.DetailsActivity;
import com.uiuios.aios.activity.details.DetailsActivity;
import com.uiuios.aios.activity.GoodsActivity;
import com.uiuios.aios.bean.GoodsInfo;

View File

@@ -12,7 +12,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.emergency.EmergencyActivity;
import com.uiuios.aios.bean.Contact;
import java.util.List;

View File

@@ -3,7 +3,6 @@ package com.uiuios.aios.adapter;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -16,17 +15,10 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.hjq.toast.Toaster;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.callwechat.CallWechatActivity;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.WechatInfo;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.dialog.DeleteContactDialog;
import com.uiuios.aios.dialog.DeleteDialog;
import com.uiuios.aios.service.WeAccessibilityService;
import com.uiuios.aios.utils.AccessibilityUtils;
import java.util.List;

View File

@@ -17,7 +17,7 @@ import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.db.WechatContactManager;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.AppManager;
import com.uiuios.aios.manager.AppStatusManager;
@@ -76,7 +76,7 @@ public class BaseApplication extends Application {
} catch (Exception e) {
Log.e(TAG, "onCreate: " + e.getMessage());
}
ContactManager.init(this);
WechatContactManager.init(this);
}
private void aliyunPushInit() {

View File

@@ -74,4 +74,8 @@ 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 FLOAT_WINDOW = "FloatWindowEnable";
public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key";
public static final String AMAP_LOCATION_District = "AMapLocationMapBean_key";
}

View File

@@ -10,27 +10,27 @@ import androidx.annotation.Nullable;
import java.io.File;
public class ContactDbHelper extends SQLiteOpenHelper {
public class WechatContactDbHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "contactList.db";
public static final String TABLE_NAME = "contact_table";
private static final int DATABASE_VERSION = 1;
public ContactDbHelper(Context context) {
public WechatContactDbHelper(Context context) {
// super(context, DATABASE_FILE_NAME, null, DATABASE_VERSION);
super(context, context.getExternalCacheDir() + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
// super(context, Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_FILE_NAME, null, DATABASE_VERSION);
}
public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public ContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
public WechatContactDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
// public ContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) {
// public WechatContactDbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) {
// super(context, name, version, openParams);
// }

View File

@@ -12,39 +12,39 @@ import com.uiuios.aios.bean.WechatInfo;
import java.util.ArrayList;
import java.util.List;
public class ContactManager {
private static String TAG = ContactManager.class.getSimpleName();
public class WechatContactManager {
private static String TAG = WechatContactManager.class.getSimpleName();
@SuppressLint("StaticFieldLeak")
private static ContactManager sInstance;
private static WechatContactManager sInstance;
private Context mContext;
private ContactDbHelper mDBHelper;
private WechatContactDbHelper mDBHelper;
private ContactManager(Context context) {
private WechatContactManager(Context context) {
if (context == null) {
throw new RuntimeException("Context is NULL");
}
mContext = context;
mDBHelper = new ContactDbHelper(context);
mDBHelper = new WechatContactDbHelper(context);
}
public static void init(Context context) {
if (sInstance == null) {
sInstance = new ContactManager(context);
sInstance = new WechatContactManager(context);
}
}
public static ContactManager getInstance() {
public static WechatContactManager getInstance() {
if (sInstance == null) {
throw new IllegalStateException("You must be init ContactManager first");
throw new IllegalStateException("You must be init WechatContactManager first");
}
return sInstance;
}
public ContactDbHelper getDBHelper() {
public WechatContactDbHelper getDBHelper() {
if (mDBHelper == null) {
mDBHelper = new ContactDbHelper(mContext);
mDBHelper = new WechatContactDbHelper(mContext);
}
return mDBHelper;
}
@@ -57,11 +57,11 @@ public class ContactManager {
values.put("wechatid", wechatInfo.getWechatId());
values.put("mobile", wechatInfo.getMobile());
values.put("avatar_path", wechatInfo.getAvatarPath());
// long id = db.insert(ContactDbHelper.TABLE_NAME, null, values);
// long id = db.insert(WechatContactDbHelper.TABLE_NAME, null, values);
long id = -1;
db.beginTransaction();
try {
id = db.insertWithOnConflict(ContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
id = db.insertWithOnConflict(WechatContactDbHelper.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e(TAG, "addWechatInfo: " + e.getMessage());
@@ -73,13 +73,13 @@ public class ContactManager {
public boolean delete(Integer sqlId) {
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.delete(ContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()});
long id = db.delete(WechatContactDbHelper.TABLE_NAME, "_id=?", new String[]{sqlId.toString()});
return id > 0;
}
public boolean deleteAll() {
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.delete(ContactDbHelper.TABLE_NAME, "", null);
long id = db.delete(WechatContactDbHelper.TABLE_NAME, "", null);
return id > 0;
}
@@ -91,7 +91,7 @@ public class ContactManager {
values.put("wechatid", wechatInfo.getWechatId());
values.put("mobile", wechatInfo.getMobile());
values.put("avatar_path", wechatInfo.getAvatarPath());
long id = db.update(ContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())});
long id = db.update(WechatContactDbHelper.TABLE_NAME, values, "_id=?", new String[]{String.valueOf(wechatInfo.getId())});
return id > 0;
}
@@ -99,7 +99,7 @@ public class ContactManager {
List<WechatInfo> wechatInfoList = new ArrayList<>();
SQLiteDatabase db = mDBHelper.getReadableDatabase();
long time = System.currentTimeMillis();
String sql = "select * from " + ContactDbHelper.TABLE_NAME;
String sql = "select * from " + WechatContactDbHelper.TABLE_NAME;
Cursor cursor = null;
try {
cursor = db.rawQuery(sql, null);

View File

@@ -5,7 +5,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Process;
@@ -27,15 +26,13 @@ import com.hjq.toast.Toaster;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.ScreenLockActivity;
import com.uiuios.aios.activity.screenlock.ScreenLockActivity;
import com.uiuios.aios.activity.dailyapp.DailyAppActivity;
import com.uiuios.aios.activity.main.OldMainActivity;
import com.uiuios.aios.activity.main.deprecated.OldMainActivity;
import com.uiuios.aios.base.BaseFragment;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.FragmentApplistBinding;
import com.uiuios.aios.dialog.DailyAppDialog;
import com.uiuios.aios.dialog.ShortcutDialog;
import com.uiuios.aios.manager.AppManager;

View File

@@ -8,10 +8,17 @@ import android.view.Gravity;
import android.view.View;
import android.view.Window;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.qweather.sdk.bean.weather.WeatherHourlyBean;
import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.contact.AddWechatContactActivity;
import com.uiuios.aios.activity.contact.EditContactActivity;
@@ -19,18 +26,22 @@ 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.bean.WechatInfo;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.FragmentContactHomeBinding;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.dialog.DeleteContactDialog;
import com.uiuios.aios.dialog.EditContactDialog;
import com.uiuios.aios.utils.DayUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class ContactFragment extends BaseMvvmFragment<ContactViewModel, FragmentContactHomeBinding> {
private static final String TAG = ContactFragment.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentActivity mContext;
private WechatContactAdapter mContactAdapter;
@Override
@@ -40,6 +51,7 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(getCtx());
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
@@ -61,10 +73,111 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(getContext(), 2));
}
mViewDataBinding.rvContact.setAdapter(mContactAdapter);
setTime();
initAmap();
}
private void setTime() {
long time = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = new Date(time);
mViewDataBinding.tvTime.setText(sdf.format(date));
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日");
Date date2 = new Date(time);
mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + DayUtils.getWeek());
}
private void initAmap() {
boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false);
if (!manual) {
LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
mViewDataBinding.tvLocation.setText(mapBean.getDistrict());
}
});
} else {
}
}
@Override
protected void initData(Bundle savedInstanceState) {
LiveEventBus
.get("some_key1", WeatherNowBean.NowBaseBean.class)
.observe(this, new Observer<WeatherNowBean.NowBaseBean>() {
@Override
public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) {
mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "");
if (DayUtils.isNight()) {
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
} else {
switch (nowBaseBean.getIcon()) {
default:
case "100":
case "150":
//晴
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
break;
case "102":
case "152":
//少云
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
break;
}
}
// mViewDataBinding.tvWeather.setText(nowBaseBean.getText());
}
});
LiveEventBus
.get("some_key2", WeatherHourlyBean.HourlyBean.class)
.observe(this, new Observer<WeatherHourlyBean.HourlyBean>() {
@Override
public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
String imageName = "he" + hourlyBean.getIcon();
Log.e(TAG, "onSuccess: " + imageName);
if (isAdded()) {
int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
Log.e(TAG, "onSuccess: " + resId);
if (resId == 0) {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
} else {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
}
mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "");
}
}
});
LiveEventBus
.get("some_key3", WeatherDailyBean.DailyBean.class)
.observe(this, new Observer<WeatherDailyBean.DailyBean>() {
@Override
public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "");
}
});
LiveEventBus
.get("time", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvTime.setText(s);
}
});
LiveEventBus
.get("week", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvData.setText(s);
}
});
mViewModel.getContactList().observe(this, new Observer<List<Contact>>() {
@Override
public void onChanged(List<Contact> contacts) {
@@ -94,13 +207,14 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
@Override
public void fetchData() {
Log.e(TAG, "fetchData: ");
mViewModel.getContact();
}
@Override
public void onResume() {
super.onResume();
mViewModel.getContact();
mViewModel.getCacheContact();
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
mViewDataBinding.tvLocation.setText(district);
}
private EditContactDialog mEditContactDialog;
@@ -114,8 +228,8 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
.setOnClickBottomListener(new EditContactDialog.OnClickBottomListener() {
@Override
public void onEditClick() {
Intent intent =new Intent(getContext(), EditContactActivity.class);
intent.putExtra("Contact",contact);
Intent intent = new Intent(getContext(), EditContactActivity.class);
intent.putExtra("Contact", contact);
startActivity(intent);
mEditContactDialog.dismiss();
}

View File

@@ -1,5 +1,6 @@
package com.uiuios.aios.fragment.contact;
import android.text.TextUtils;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
@@ -12,10 +13,8 @@ import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.WechatInfo;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.FragmentContactHomeBinding;
import com.uiuios.aios.db.ContactManager;
import com.uiuios.aios.gson.GsonUtils;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.network.UrlAddress;
@@ -24,14 +23,9 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableEmitter;
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class ContactViewModel extends BaseViewModel<FragmentContactHomeBinding, FragmentEvent> {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@@ -52,40 +46,21 @@ public class ContactViewModel extends BaseViewModel<FragmentContactHomeBinding,
return mContactList;
}
public void getContact() {
// Observable.create(new ObservableOnSubscribe<List<WechatInfo>>() {
// @Override
// public void subscribe(@NonNull ObservableEmitter<List<WechatInfo>> emitter) throws Throwable {
// emitter.onNext(ContactManager.getInstance().getWechatInfoList());
// }
// })
// .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(new Observer<List<WechatInfo>>() {
// @Override
// public void onSubscribe(@NonNull Disposable d) {
// Log.e("getWechatInfoList", "onSubscribe: ");
// }
//
// @Override
// public void onNext(@NonNull List<WechatInfo> wechatInfos) {
// Log.e("getWechatInfoList", "onNext: " + wechatInfos);
// mContactList.setValue(wechatInfos);
// }
//
// @Override
// public void onError(@NonNull Throwable e) {
// Log.e("getWechatInfoList", "onError: " + e.getMessage());
// mContactList.setValue(null);
// }
//
// @Override
// public void onComplete() {
// Log.e("getWechatInfoList", "onComplete: ");
// }
// });
public void getCacheContact() {
String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
Gson gson = new Gson();
Type type = new TypeToken<List<Contact>>() {
}.getType();
if (!TextUtils.isEmpty(jsonString)) {
List<Contact> contacts = gson.fromJson(jsonString, type);
if (contacts != null) {
mContactList.setValue(contacts);
}
}
getContact();
}
public void getContact() {
NetInterfaceManager.getInstance()
.getContactListObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))

View File

@@ -32,17 +32,14 @@ import android.view.WindowManager;
import android.widget.SeekBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.setting.SettingActivity;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.FamilyAddress;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.PhoneFragmentControlBinding;
import com.uiuios.aios.manager.AmapManager;
@@ -171,12 +168,13 @@ public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFra
mViewDataBinding.clFlashlight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
startActivity(new Intent(Settings.ACTION_SETTINGS));
} catch (Exception e) {
Toaster.show("打开失败");
Log.e(TAG, "onClick: " + e.getMessage());
}
// try {
// startActivity(new Intent(Settings.ACTION_SETTINGS));
// } catch (Exception e) {
// Toaster.show("打开失败");
// Log.e(TAG, "onClick: " + e.getMessage());
// }
startActivity(new Intent(mContext, SettingActivity.class));
}
});
mViewDataBinding.clBattery.setOnClickListener(new View.OnClickListener() {
@@ -215,7 +213,7 @@ public class ControlFragment extends BaseMvvmFragment<ControlViewModel, PhoneFra
}
}
});
// LiveEventBus.get("MapBean", MapBean.class)
// LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
// .observe(this, new Observer<MapBean>() {
// @Override
// public void onChanged(@Nullable MapBean mapBean) {

View File

@@ -50,9 +50,9 @@ 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.ControlActivity;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.QuickAppActivity;
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;
@@ -79,6 +79,7 @@ import com.uiuios.aios.push.PushManager;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUtil;
import com.uiuios.aios.utils.BitmapUtils;
import com.uiuios.aios.utils.DayUtils;
import com.uiuios.aios.utils.NetStateUtils;
import com.uiuios.aios.utils.SchemeUtils;
@@ -902,7 +903,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
case "150":
case "102":
case "152":
if (isnight()) {
if (DayUtils.isNight()) {
cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun));
} else {
cl_weather.setBackground(ContextCompat.getDrawable(mContext, R.drawable.background_weather_sun_night));
@@ -974,14 +975,6 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
});
}
private boolean isnight() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
return hour >= 16 && minute >= 30;
}
private void killBackgroundApp() {
List<String> pkgList = ApkUtils.queryFilterAppList(mContext);
for (String pkg : pkgList) {

View File

@@ -26,11 +26,12 @@ import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.EmergencyActivity;
import com.uiuios.aios.activity.emergency.EmergencyActivity;
import com.uiuios.aios.activity.addicon.AddIconActivity;
import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.dailyapp.DailyAppActivity;
import com.uiuios.aios.activity.setting.SettingActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
import com.uiuios.aios.adapter.HomeAppAdapter;
import com.uiuios.aios.alarm.AlarmClockData;
@@ -47,6 +48,7 @@ import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.push.PushManager;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUtil;
import com.uiuios.aios.utils.DayUtils;
import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration;
import java.text.ParseException;
@@ -128,7 +130,7 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
@Override
public void fetchData() {
Log.e(TAG, "fetchData: " );
Log.e(TAG, "fetchData: ");
// initAmap();
}
@@ -214,55 +216,79 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
// }
}
});
mViewModel.getNowBaseBeanData().observe(this, new Observer<WeatherNowBean.NowBaseBean>() {
@Override
public void onChanged(WeatherNowBean.NowBaseBean nowBaseBean) {
mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "");
if (isNight()) {
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
} else {
switch (nowBaseBean.getIcon()) {
default:
case "100":
case "150":
//晴
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
break;
case "102":
case "152":
//少云
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
break;
}
}
LiveEventBus
.get("some_key1", WeatherNowBean.NowBaseBean.class)
.observe(this, new Observer<WeatherNowBean.NowBaseBean>() {
@Override
public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) {
mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "");
if (DayUtils.isNight()) {
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
} else {
switch (nowBaseBean.getIcon()) {
default:
case "100":
case "150":
//晴
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
break;
case "102":
case "152":
//少云
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
break;
}
}
// mViewDataBinding.tvWeather.setText(nowBaseBean.getText());
}
});
mViewModel.getHourlyBeanData().observe(this, new Observer<WeatherHourlyBean.HourlyBean>() {
@Override
public void onChanged(WeatherHourlyBean.HourlyBean hourlyBean) {
String imageName = "he" + hourlyBean.getIcon();
Log.e(TAG, "onSuccess: " + imageName);
if (isAdded()) {
int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
Log.e(TAG, "onSuccess: " + resId);
if (resId == 0) {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
} else {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
}
mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "");
}
}
});
});
mViewModel.getDailyBeanData().observe(this, new Observer<WeatherDailyBean.DailyBean>() {
@Override
public void onChanged(WeatherDailyBean.DailyBean dailyBean) {
mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "");
}
});
LiveEventBus
.get("some_key2", WeatherHourlyBean.HourlyBean.class)
.observe(this, new Observer<WeatherHourlyBean.HourlyBean>() {
@Override
public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
String imageName = "he" + hourlyBean.getIcon();
Log.e(TAG, "onSuccess: " + imageName);
if (isAdded()) {
int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
Log.e(TAG, "onSuccess: " + resId);
if (resId == 0) {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
} else {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
}
mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "");
}
}
});
LiveEventBus
.get("some_key3", WeatherDailyBean.DailyBean.class)
.observe(this, new Observer<WeatherDailyBean.DailyBean>() {
@Override
public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "");
}
});
LiveEventBus
.get("time", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvTime.setText(s);
}
});
LiveEventBus
.get("week", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvData.setText(s);
}
});
}
@@ -271,18 +297,6 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
setTime();
refreshMemory();
// notificationAdapter = new NotificationAdapter();
// notificationAdapter.setOnClickListener(new NotificationAdapter.OnClickListener() {
// @Override
// public void onClick() {
// getAlarm();
// }
// });
// mViewDataBinding.rvNoti.setLayoutManager(new LinearLayoutManager(mContext));
// mViewDataBinding.rvNoti.setAdapter(notificationAdapter);
mViewDataBinding.rvApp.setLayoutManager(new GridLayoutManager(mContext, 3));
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -304,6 +318,8 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
Log.e(TAG, "onResume: ");
mViewModel.init();
registerReceivers();
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
mViewDataBinding.tvLocation.setText(district);
}
@Override
@@ -319,49 +335,15 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
}
private void registerReceivers() {
registerTimeReceiver();
registerAlarmClockReceiver();
}
private void unregisterReceivers() {
if (mTimeChangedReceiver != null) {
mContext.unregisterReceiver(mTimeChangedReceiver);
}
if (mAlarmClockReceiver != null) {
mContext.unregisterReceiver(mAlarmClockReceiver);
}
}
//监听时间和日期变化
public void registerTimeReceiver() {
mTimeChangedReceiver = new TimeChangedReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);
mContext.registerReceiver(mTimeChangedReceiver, filter);
}
private TimeChangedReceiver mTimeChangedReceiver;
private class TimeChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "data changed");
} else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "time changed");
} else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
} else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "time tick");
}
setTime();
}
}
private void registerAlarmClockReceiver() {
if (null == mAlarmClockReceiver) {
@@ -493,33 +475,19 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
private void initAmap() {
boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false);
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
String tude = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, CommonConfig.DEFAULT_LOCATION_TUDE);
mViewDataBinding.tvLocation.setText(district);
mViewModel.getWeather(tude);
if (!manual) {
LiveEventBus.get("MapBean", MapBean.class)
LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, mapBean.getDistrict());
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapBean.getLongitude() + "," + mapBean.getLatitude());
mViewDataBinding.tvLocation.setText(mapBean.getDistrict());
mViewModel.getWeather(mapBean.getLongitude() + "," + mapBean.getLatitude());
}
});
} else {
}
}
private boolean isNight() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
return hour >= 16 && minute >= 30;
}
public class BtnClick {
public void edit(View view) {
startActivity(new Intent(mContext, AddIconActivity.class));
@@ -537,6 +505,11 @@ public class HomeFragment extends BaseMvvmFragment<HomeViewModel, FragmentHomeBi
ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.MainActivity");
}
public void openSettings(View view) {
// startActivity(new Intent(Settings.ACTION_SETTINGS));
startActivity(new Intent(mContext, SettingActivity.class));
}
public void killApp(View view) {
killBackgroundApp();
}

View File

@@ -111,115 +111,4 @@ public class HomeViewModel extends BaseViewModel<FragmentHomeBinding, FragmentEv
activationData.setValue(activation);
}
public void getWeather(String location) {
Log.e(TAG, "getweather: " + location);
boolean activation = ActivationUtil.isActivation(getCtx());
Log.e(TAG, "getweather: is_activation = " + activation);
if (!activation) {
Toaster.show("请先激活设备");
return;
}
getWeatherNow(location);
getWeather24Hourly(location);
getWeather7D(location);
}
private MutableLiveData<WeatherNowBean.NowBaseBean> mNowBaseBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherNowBean.NowBaseBean> getNowBaseBeanData() {
return mNowBaseBeanData;
}
public void getWeatherNow(String location) {
Log.e(TAG, "getWeatherNow: " + location);
/**
* 实况天气数据
* @param location 所查询的地区可通过该地区名称、ID、IP和经纬度进行查询经纬度格式经度,纬度
* (英文,分隔,十进制格式,北纬东经为正,南纬西经为负)
* @param lang (选填)多语言,可以不使用该参数,默认为简体中文
* @param unit (选填)单位选择公制m或英制i默认为公制单位
* @param listener 网络访问结果回调
*/
QWeather.getWeatherNow(getCtx(), location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() {
@Override
public void onError(Throwable e) {
Log.e("getWeatherNow", "onError: " + e);
}
@Override
public void onSuccess(WeatherNowBean weatherBean) {
Log.d("getWeatherNow", "onSuccess: " + new Gson().toJson(weatherBean));
//先判断返回的status是否正确当status正确时获取数据若status不正确可查看status对应的Code值找到原因
if (Code.OK == weatherBean.getCode()) {
WeatherNowBean.NowBaseBean now = weatherBean.getNow();
mNowBaseBeanData.postValue(now);
Log.d("getWeatherNow", "onSuccess: now " + new Gson().toJson(now));
} else {
//在此查看返回数据失败的原因
Code code = weatherBean.getCode();
Log.d("getWeatherNow", "failed code: " + code);
}
}
});
}
private MutableLiveData<WeatherHourlyBean.HourlyBean> mHourlyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherHourlyBean.HourlyBean> getHourlyBeanData() {
return mHourlyBeanData;
}
public void getWeather24Hourly(String location) {
QWeather.getWeather24Hourly(getCtx(), location, new QWeather.OnResultWeatherHourlyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather24Hourly", "onError: " + throwable);
}
@Override
public void onSuccess(WeatherHourlyBean weatherHourlyBean) {
Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean));
if (Code.OK == weatherHourlyBean.getCode()) {
List<WeatherHourlyBean.HourlyBean> hourly = weatherHourlyBean.getHourly();
if (hourly != null && hourly.size() != 0) {
WeatherHourlyBean.HourlyBean now = hourly.get(0);
mHourlyBeanData.postValue(now);
}
} else {
//在此查看返回数据失败的原因
Code code = weatherHourlyBean.getCode();
Log.e("getWeather24Hourly", "failed code: " + code);
}
}
});
}
private MutableLiveData<WeatherDailyBean.DailyBean> DailyBeanData = new MutableLiveData<>();
public MutableLiveData<WeatherDailyBean.DailyBean> getDailyBeanData() {
return DailyBeanData;
}
public void getWeather7D(String location) {
QWeather.getWeather7D(getCtx(), location, new QWeather.OnResultWeatherDailyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather7D", "onError: " + throwable.getMessage());
}
@Override
public void onSuccess(WeatherDailyBean weatherDailyBean) {
String jsonString = new Gson().toJson(weatherDailyBean);
Log.d("getWeather7D", "onSuccess: " + jsonString);
mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
List<WeatherDailyBean.DailyBean> dailyBeans = weatherDailyBean.getDaily();
if (dailyBeans != null && dailyBeans.size() != 0) {
WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
DailyBeanData.postValue(dailyBean);
}
}
});
}
}

View File

@@ -105,10 +105,10 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
} else {
Toaster.show("删除失败:" + baseResponse.msg);
}
mViewModel.getContact();
mViewModel. getContact();
}
});
mViewModel.getContact();
mViewModel.getCacheContact();
}
@Override
@@ -120,7 +120,7 @@ public class ContactFragment extends BaseMvvmFragment<ContactViewModel, Fragment
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
mViewModel.getContact();
mViewModel.getCacheContact();
}
public static final String NAME = "name";

View File

@@ -1,5 +1,6 @@
package com.uiuios.aios.fragment.phone.contact;
import android.text.TextUtils;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
@@ -19,6 +20,7 @@ import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.network.UrlAddress;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.rxjava3.annotations.NonNull;
@@ -44,6 +46,20 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
return mContactListData;
}
public void getCacheContact() {
String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
Gson gson = new Gson();
Type type = new TypeToken<List<Contact>>() {
}.getType();
if (!TextUtils.isEmpty(jsonString)) {
List<Contact> contacts = gson.fromJson(jsonString, type);
if (contacts != null) {
mContactListData.setValue(contacts);
}
}
getContact();
}
public void getContact() {
NetInterfaceManager.getInstance()
.getContactListObservable()
@@ -62,7 +78,7 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
mContactListData.setValue(listBaseResponse.data);
} else {
mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
// mContactListData.setValue(null);
mContactListData.setValue(new ArrayList<>());
}
}
@@ -75,7 +91,7 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
}.getType();
List<Contact> contacts = gson.fromJson(jsonString, type);
if (contacts == null) {
// mContactListData.setValue(null);
mContactListData.setValue(new ArrayList<>());
} else {
mContactListData.setValue(contacts);
}
@@ -89,7 +105,7 @@ public class ContactViewModel extends BaseViewModel<FragmentContactBinding, Frag
});
}
private MutableLiveData<BaseResponse> mDeleteData =new MutableLiveData<>();
private MutableLiveData<BaseResponse> mDeleteData = new MutableLiveData<>();
public MutableLiveData<BaseResponse> getDeleteData() {
return mDeleteData;

View File

@@ -0,0 +1,315 @@
package com.uiuios.aios.fragment.settings;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
import com.blankj.utilcode.util.NetworkUtils;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.qweather.sdk.bean.weather.WeatherHourlyBean;
import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.R;
import com.uiuios.aios.activity.addicon.AddIconActivity;
import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
import com.uiuios.aios.activity.contact.AddContactActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.dailyapp.DailyAppActivity;
import com.uiuios.aios.activity.emergency.EmergencyActivity;
import com.uiuios.aios.activity.setting.SettingActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
import com.uiuios.aios.adapter.HomeAppAdapter;
import com.uiuios.aios.alarm.AlarmClockData;
import com.uiuios.aios.alarm.AlarmUtils;
import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.FragmentHomeBinding;
import com.uiuios.aios.databinding.FragmentSettingsBinding;
import com.uiuios.aios.dialog.SingleDialog;
import com.uiuios.aios.fragment.home.HomeViewModel;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.push.PushManager;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUtil;
import com.uiuios.aios.utils.DayUtils;
import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link SettingsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class SettingsFragment extends BaseMvvmFragment<SettingsViewModel, FragmentSettingsBinding> implements NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = SettingsFragment.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private FragmentActivity mContext;
public SettingsFragment() {
}
public static SettingsFragment newInstance() {
SettingsFragment fragment = new SettingsFragment();
return fragment;
}
@Override
public void onDisconnected() {
Log.e(TAG, "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e(TAG, "onConnected: " + networkType);
initAmap();
}
@Override
public void fetchData() {
Log.e(TAG, "fetchData: ");
}
@Override
protected int getLayoutId() {
return R.layout.fragment_settings;
}
@Override
protected void initDataBinding() {
mContext = getActivity();
mViewModel.setCtx(mContext);
mViewModel.setVDBinding(mViewDataBinding);
mViewModel.setLifecycle(getLifecycleSubject());
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView(Bundle bundle) {
NetworkUtils.registerNetworkStatusChangedListener(this);
initView();
}
@Override
protected void initData(Bundle savedInstanceState) {
LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
mViewDataBinding.tvLocation2.setText(mapBean.getAddress());
}
});
LiveEventBus
.get("some_key1", WeatherNowBean.NowBaseBean.class)
.observe(this, new Observer<WeatherNowBean.NowBaseBean>() {
@Override
public void onChanged(@Nullable WeatherNowBean.NowBaseBean nowBaseBean) {
mViewDataBinding.tvTemp.setText(nowBaseBean.getTemp() + "");
if (DayUtils.isNight()) {
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
} else {
switch (nowBaseBean.getIcon()) {
default:
case "100":
case "150":
//晴
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
break;
case "102":
case "152":
//少云
mViewDataBinding.clWeather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
break;
}
}
// mViewDataBinding.tvWeather.setText(nowBaseBean.getText());
}
});
LiveEventBus
.get("some_key2", WeatherHourlyBean.HourlyBean.class)
.observe(this, new Observer<WeatherHourlyBean.HourlyBean>() {
@Override
public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
String imageName = "he" + hourlyBean.getIcon();
Log.e(TAG, "onSuccess: " + imageName);
if (isAdded()) {
int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
Log.e(TAG, "onSuccess: " + resId);
if (resId == 0) {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
} else {
mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
}
mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "");
}
}
});
LiveEventBus
.get("some_key3", WeatherDailyBean.DailyBean.class)
.observe(this, new Observer<WeatherDailyBean.DailyBean>() {
@Override
public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "");
}
});
LiveEventBus
.get("time", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvTime.setText(s);
}
});
LiveEventBus
.get("week", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
mViewDataBinding.tvData.setText(s);
}
});
}
private void initView() {
initAmap();
setTime();
getLocation();
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
mViewModel.init();
registerReceivers();
String district = mMMKV.decodeString(CommonConfig.MANUALLY_SELECT_LOCATION_DISTRICT, CommonConfig.DEFAULT_LOCATION_DISTRICT);
mViewDataBinding.tvLocation.setText(district);
}
@Override
public void onPause() {
super.onPause();
unregisterReceivers();
}
@Override
public void onDestroyView() {
super.onDestroyView();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
}
private void registerReceivers() {
}
private void unregisterReceivers() {
}
private void setTime() {
long time = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = new Date(time);
mViewDataBinding.tvTime.setText(sdf.format(date));
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日");
Date date2 = new Date(time);
mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + DayUtils.getWeek());
}
private void initAmap() {
boolean manual = mMMKV.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION_KEY, false);
if (!manual) {
LiveEventBus.get(CommonConfig.AMAP_LOCATION_MAP_BEAN, MapBean.class)
.observe(this, new Observer<MapBean>() {
@Override
public void onChanged(@Nullable MapBean mapBean) {
mViewDataBinding.tvLocation.setText(mapBean.getDistrict());
}
});
} else {
}
}
private void getLocation() {
String addr = mMMKV.decodeString(CommonConfig.MAP_ADDRESS_KEY);
if (TextUtils.isEmpty(addr) || "nullnull".equals(addr) || "null".equals(addr)) {
mViewDataBinding.tvLocation2.setText("获取地址失败");
} else {
mViewDataBinding.tvLocation2.setText(addr);
}
}
public class BtnClick {
public void toSn(View view) {
if (!ApkUtils.openPackage(mContext, "com.uiuios.sn")) {
Toaster.show("打开失败,请检查应用是否安装");
}
}
public void addContact(View view) {
startActivity(new Intent(mContext, AddContactActivity.class));
}
public void openWifi(View view) {
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
}
public void openNetwork(View view) {
startActivity(new Intent(Settings.ACTION_DATA_USAGE_SETTINGS));
// startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS));
}
public void toWeather(View view) {
startActivity(new Intent(mContext, WeatherActivity.class));
}
public void getAddress(View view) {
AmapManager.getInstance().startLocation();
}
}
}

View File

@@ -0,0 +1,29 @@
package com.uiuios.aios.fragment.settings;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.databinding.FragmentSettingsBinding;
public class SettingsViewModel extends BaseViewModel<FragmentSettingsBinding, FragmentEvent> {
private static final String TAG = SettingsViewModel.class.getSimpleName();
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@Override
public FragmentSettingsBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public void init() {
}
}

View File

@@ -128,7 +128,7 @@ public class AmapManager {
mMapBean = getMapBean(aMapLocation);
saveMapResult(mMapBean);
LiveEventBus
.get("MapBean")
.get(CommonConfig.AMAP_LOCATION_MAP_BEAN)
.post(mMapBean);
Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
sb.append(aMapLocation.getAddress()).append("\n");

View File

@@ -8,7 +8,7 @@ import android.content.pm.ResolveInfo;
import android.util.Log;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.activity.main.OldMainActivity;
import com.uiuios.aios.activity.main.deprecated.OldMainActivity;
import com.uiuios.aios.bean.DailyAppBean;
import com.uiuios.aios.config.CommonConfig;

View File

@@ -5,21 +5,33 @@ 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.IBinder;
import android.os.PowerManager;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import com.arialyy.annotations.Download;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.task.DownloadTask;
import com.blankj.utilcode.util.NetworkUtils;
import com.shehuan.niv.NiceImageView;
import com.tencent.mmkv.MMKV;
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.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.utils.ApkUtils;
@@ -48,8 +60,18 @@ import okhttp3.RequestBody;
public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = MainService.class.getSimpleName();
@SuppressLint("StaticFieldLeak")
public MainSPresenter mPresenter;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
public MainSPresenter mPresenter;
private boolean mFloatWindowEnable;
private WindowManager mWindowManager;
private View mBallView;
private WindowManager.LayoutParams mBallParams;
public boolean isBallShown = false;
private static final String Float_Window_X = "float_window_x_key";
private static final String Float_Window_Y = "float_window_y_key";
public MainService() {
@@ -106,6 +128,11 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
// ApkUtils.UninstallAPP(this, "com.joytv.live");
// ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader");
mFloatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, false);
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
showPopupWindow();
Aria.init(this);
Aria.download(this).register();
mPresenter = new MainSPresenter(this);
@@ -113,10 +140,12 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
mPresenter.setLifecycle(lifecycleSubject);
NetworkUtils.registerNetworkStatusChangedListener(this);
mPresenter.addAlarmClock();
registerAlarmReceiver();
registerTimeReceiver();
registerLockScreenReceiver();
registerRefreshReceiver();
registerScreenLockReceiver();
}
@Override
@@ -142,6 +171,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
if (mUploadAlarmClockReceiver != null) {
unregisterReceiver(mUploadAlarmClockReceiver);
}
if (mWindowReceiver != null) {
unregisterReceiver(mWindowReceiver);
}
}
@Override
@@ -455,6 +487,158 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
}
}
public static final String ACTION_FLOAT_WINDOW_ON = "com.tt.float.window.on";
public static final String ACTION_FLOAT_WINDOW_OFF = "com.tt.float.window.off";
private WindowReceiver mWindowReceiver;
private void registerScreenLockReceiver() {
if (null == mWindowReceiver) {
mWindowReceiver = new WindowReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_FLOAT_WINDOW_ON);
filter.addAction(ACTION_FLOAT_WINDOW_OFF);
registerReceiver(mWindowReceiver, filter);
}
private class WindowReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e(TAG, "onReceive: " + action);
if (TextUtils.isEmpty(action)) {
return;
}
switch (action) {
case ACTION_FLOAT_WINDOW_ON:
mMMKV.encode(CommonConfig.FLOAT_WINDOW, true);
mFloatWindowEnable = true;
showPopupWindow();
break;
case ACTION_FLOAT_WINDOW_OFF:
mMMKV.encode(CommonConfig.FLOAT_WINDOW, false);
mFloatWindowEnable = false;
if (mWindowManager != null && mBallView != null) {
if (mBallView.isAttachedToWindow()) {
mWindowManager.removeView(mBallView);
}
mMMKV.encode(Float_Window_X, mBallParams.x);
mMMKV.encode(Float_Window_Y, mBallParams.y);
}
isBallShown = false;
break;
default:
}
}
}
/**
* 显示弹出框
*/
@SuppressWarnings("WrongConstant")
public void showPopupWindow() {
if (!mFloatWindowEnable) {
Log.e(TAG, "showPopupWindow: not enable");
return;
}
if (isBallShown) {
return;
}
if (!Settings.canDrawOverlays(this)) {
return;
}
mBallView = setUpView();
mBallParams = new WindowManager.LayoutParams();
// 类型,系统提示以及它总是出现在应用程序窗口之上。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mBallParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
mBallParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
// 设置flag
// | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE弹出的View收不到Back键的事件
mBallParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
// | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
// 不设置这个弹出框的透明遮罩显示为黑色
mBallParams.format = PixelFormat.TRANSLUCENT;
// FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口
// 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按
// 不设置这个flag的话home页的划屏会有问题
mBallParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mBallParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
// mBallParams.gravity = Gravity.TOP;
int x = mMMKV.decodeInt(Float_Window_X, 0);
int y = mMMKV.decodeInt(Float_Window_Y, 0);
mBallParams.x = x;
mBallParams.y = y;
mWindowManager.addView(mBallView, mBallParams);
isBallShown = true;
}
private View setUpView() {
View view = LayoutInflater.from(this).inflate(R.layout.window_float_ball, null);
NiceImageView iv_ball = view.findViewById(R.id.iv_ball);
iv_ball.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("iv_ball", "onClick: ");
// closeToolWindow();
Intent intent = new Intent(MainService.this, MainActivity.class);
intent.setAction("android.intent.action.MAIN");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
iv_ball.setOnTouchListener(new View.OnTouchListener() {
private float lastX; //上一次位置的X.Y坐标
private float lastY;
private float nowX; //当前移动位置的X.Y坐标
private float nowY;
private float tranX; //悬浮窗移动位置的相对值
private float tranY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取按下时的XY坐标
lastX = event.getRawX();
lastY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 获取移动时的XY坐标
nowX = event.getRawX();
nowY = event.getRawY();
// 计算XY坐标偏移量
tranX = nowX - lastX;
tranY = nowY - lastY;
mBallParams.x += tranX;
mBallParams.y += tranY;
//更新悬浮窗位置
mWindowManager.updateViewLayout(mBallView, mBallParams);
mMMKV.encode(Float_Window_X, mBallParams.x);
mMMKV.encode(Float_Window_Y, mBallParams.y);
//记录当前坐标作为下一次计算的上一次移动的位置坐标
lastX = nowX;
lastY = nowY;
break;
case MotionEvent.ACTION_UP:
break;
default:
}
return false;
}
});
return view;
}
//在这里处理任务执行中的状态,如进度进度条的刷新
@Download.onTaskRunning
protected void running(DownloadTask task) {

View File

@@ -22,7 +22,7 @@ import androidx.annotation.RequiresApi;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
import com.uiuios.aios.BuildConfig;
import com.uiuios.aios.activity.QuickAppActivity;
import com.uiuios.aios.activity.quickapp.QuickAppActivity;
import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.config.CommonConfig;
import com.uiuios.aios.manager.AppManager;
@@ -163,6 +163,7 @@ public class ApkUtils {
}};
private static List<String> hideApp = new ArrayList<String>() {{
this.add("com.uiuios.sn");
this.add("com.uiuios.aios");
this.add("com.uiuios.appstore");
this.add("com.android.quicksearchbox");
@@ -373,12 +374,12 @@ public class ApkUtils {
resolveInfos.add(resolveInfo);
}
} else {
if ("com.uiuios.sn".equals(pkg)) {
resolveInfos.add(resolveInfo);
} else {
Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg);
AppStatusManager.getInstance().addHidedApp(pkg);
}
// if ("com.uiuios.sn".equals(pkg)) {
// resolveInfos.add(resolveInfo);
// } else {
Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg);
AppStatusManager.getInstance().addHidedApp(pkg);
// }
}
} else {
if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) {
@@ -528,6 +529,7 @@ public class ApkUtils {
pkgContext.startActivity(intent);
return true;
}
Toaster.show("应用未安装");
return false;
}

View File

@@ -0,0 +1,29 @@
package com.uiuios.aios.utils;
import java.util.Calendar;
import java.util.Date;
public class DayUtils {
public static boolean isNight() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
return hour >= 16 && minute >= 30;
}
/**
* @return 根据日期取得星期几
*/
public static String getWeek() {
Date date = new Date();
String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (weekIndex < 0) {
weekIndex = 0;
}
return weeks[weekIndex];
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 B

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<solid android:color="#0F1013" />
<solid android:color="#494949" />
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_8" />

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="#536076"
android:startColor="#626E82"
android:type="linear" />
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#5682F7"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#FFB70D"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#EB6100"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#A088FF"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#5F52A0"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#13B5B1"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 内部颜色 -->
<!-- <solid android:color="@color/default_blue" />-->
<!-- 圆角的幅度 -->
<corners android:radius="@dimen/dp_12" />
<!-- <gradient-->
<!-- android:angle="270"-->
<!-- android:endColor="#4C4C4D"-->
<!-- android:startColor="#636364" />-->
<solid android:color="#5F52A0"/>
<!-- <padding-->
<!-- android:bottom="0dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="0dp" />-->
</shape>

Some files were not shown because too many files have changed in this diff Show More