diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cae341c..f6c84c4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -141,7 +141,7 @@
+
+
+
+
+
+
+
+
+
+
@@ -163,13 +177,7 @@
-
-
@@ -187,14 +195,18 @@
+ android:screenOrientation="portrait" />
+
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+
+ android:screenOrientation="portrait" />
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
stringIntegerHashMap = new HashMap<>();
- WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
- DisplayMetrics dm = new DisplayMetrics();
- wm.getDefaultDisplay().getRealMetrics(dm);
- float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 1));//top间距
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
- recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
- mAddAppAdapter = new AddAppAdapter();
- recyclerView.setAdapter(mAddAppAdapter);
- }
-
- @Override
- public void initData() {
- ArrayList desktopIcons = AppManager.getInstance().getAllAppList();
- mAddAppAdapter.setDesktopIcons(desktopIcons);
- Set appList = AppManager.getInstance().getAddPackages();
- mAddAppAdapter.setPackageSet(appList);
- tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size()));
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/activity/AddItemActivity.java b/app/src/main/java/com/uiuios/aios/activity/AddItemActivity.java
index 03c1c2d..e653261 100644
--- a/app/src/main/java/com/uiuios/aios/activity/AddItemActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/AddItemActivity.java
@@ -123,7 +123,7 @@ public class AddItemActivity extends BaseDataBindingActivity {
mComponentName = mInfo.getActivity();
// Drawable icon = getFullResIcon(mAppWidgetProviderInfo.provider.getPackageName(), mAppWidgetProviderInfo.icon);
// RemoteViews remoteViews = getPreview(mRequest);
- mShortcutPkgInfo = new ShortcutPkgInfo(mId, mTitle, mPackageName, mComponentName, d);
+ mShortcutPkgInfo = new ShortcutPkgInfo(mId, mTitle, mPackageName, mComponentName);
}
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java b/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java
index 8552b0c..02087f3 100644
--- a/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/NoticeActivity.java
@@ -81,6 +81,9 @@ public class NoticeActivity extends AppCompatActivity {
mMediaPlayer.release();
mMediaPlayer = null;
}
+ if (mVibrator != null) {
+ mVibrator.cancel();
+ }
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java b/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java
index 0b0ffb3..600cfb5 100644
--- a/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/NoticeInfoActivity.java
@@ -249,6 +249,9 @@ public class NoticeInfoActivity extends AppCompatActivity {
mMediaPlayer.release();
mMediaPlayer = null;
}
+ if (mVibrator != null) {
+ mVibrator.cancel();
+ }
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java b/app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java
new file mode 100644
index 0000000..ab2e1d6
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java
@@ -0,0 +1,56 @@
+package com.uiuios.aios.activity;
+
+import android.content.Context;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.base.mvp.BaseMvpActivity;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import butterknife.ButterKnife;
+
+public class SelectNumberActivity extends BaseMvpActivity {
+ private static final String TAG = SelectNumberActivity.class.getSimpleName();
+
+ private TelephonyManager mTelephonyManager;
+ private SubscriptionManager subscriptionManager;
+ private TelecomManager telecomManager;
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_select_number;
+ }
+
+ @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);
+ }
+
+ @Override
+ public void initData() {
+ List subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
+ for (SubscriptionInfo subscriptionInfo : subscriptionInfos) {
+ Log.e(TAG, "initData: id = " + subscriptionInfo.getSubscriptionId());
+// Log.e(TAG, "initData: mCardString = " + subscriptionInfo.getCardString());
+// Log.e(TAG, "initData: phone = " + mTelephonyManager.getLine1Number(subscriptionInfo.getSubscriptionId()));
+ }
+ List phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();
+ Map phoneAccountHandleMap = new HashMap<>();
+ for (PhoneAccountHandle phoneAccountHandle : phoneAccountHandleList) {
+ phoneAccountHandleMap.put(phoneAccountHandle.getId(), phoneAccountHandle);
+ }
+
+ Log.e(TAG, "initData: end");
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java b/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java
index 816921a..c044be0 100644
--- a/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/SplashActivity.java
@@ -6,7 +6,7 @@ import android.os.Handler;
import androidx.databinding.DataBindingUtil;
import com.uiuios.aios.R;
-import com.uiuios.aios.activity.main.MainActivity;
+import com.uiuios.aios.activity.main.OldMainActivity;
import com.uiuios.aios.activity.main.PhoneMainActivity;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.utils.Utils;
@@ -28,7 +28,7 @@ public class SplashActivity extends BaseDataBindingActivity {
@Override
public void run() {
if (Utils.isTablet(SplashActivity.this)) {
- startActivity(new Intent(SplashActivity.this, MainActivity.class));
+ startActivity(new Intent(SplashActivity.this, OldMainActivity.class));
} else {
startActivity(new Intent(SplashActivity.this, PhoneMainActivity.class));
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconActivity.java b/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconActivity.java
new file mode 100644
index 0000000..df6dcce
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconActivity.java
@@ -0,0 +1,81 @@
+package com.uiuios.aios.activity.addicon;
+
+import android.content.Context;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.GridLayoutManager;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.adapter.AddAppAdapter;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
+import com.uiuios.aios.bean.DesktopIcon;
+import com.uiuios.aios.databinding.ActivityAddIconBinding;
+import com.uiuios.aios.view.RecyclerViewSpacesItemDecoration;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Set;
+
+public class AddIconActivity extends BaseMvvmActivity {
+
+ private AddAppAdapter mAddAppAdapter;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_add_icon;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ public void initView() {
+ mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
+ HashMap stringIntegerHashMap = new HashMap<>();
+ WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getRealMetrics(dm);
+ float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 1));//top间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
+ mViewDataBinding.recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
+ mAddAppAdapter = new AddAppAdapter();
+ mViewDataBinding.recyclerView.setAdapter(mAddAppAdapter);
+ }
+
+ @Override
+ public void initData() {
+ mViewModel.getDesktopIconData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(ArrayList desktopIcons) {
+ mAddAppAdapter.setDesktopIcons(desktopIcons);
+ mViewDataBinding.tvAppsize.setText(String.format(getString(R.string.app_size), desktopIcons.size()));
+ }
+ });
+ mViewModel.getPkgSet().observe(this, new Observer>() {
+ @Override
+ public void onChanged(Set strings) {
+ mAddAppAdapter.setPackageSet(strings);
+ }
+ });
+
+ mViewModel.getAppList();
+ mViewModel.getAddPackages();
+ }
+
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconViewModel.java b/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconViewModel.java
new file mode 100644
index 0000000..b8d1203
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/addicon/AddIconViewModel.java
@@ -0,0 +1,90 @@
+package com.uiuios.aios.activity.addicon;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.bean.DesktopIcon;
+import com.uiuios.aios.databinding.ActivityAddIconBinding;
+import com.uiuios.aios.manager.AppManager;
+
+import java.util.ArrayList;
+import java.util.Set;
+
+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 AddIconViewModel extends BaseViewModel {
+ private static final String TAG = AddIconViewModel.class.getSimpleName();
+
+
+ @Override
+ public ActivityAddIconBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ private MutableLiveData> mDesktopIconData = new MutableLiveData<>();
+
+ public MutableLiveData> getDesktopIconData() {
+ return mDesktopIconData;
+ }
+
+ public void getAppList() {
+ Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable {
+ emitter.onNext(AppManager.getInstance().getAllAppList());
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAppList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull ArrayList desktopIcons) {
+ Log.e("getAppList", "onNext: " + desktopIcons.size());
+ mDesktopIconData.postValue(desktopIcons);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAppList", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAppList", "onComplete: ");
+ }
+ });
+ }
+
+ private MutableLiveData> mPkgSet = new MutableLiveData<>();
+
+ public MutableLiveData> getPkgSet() {
+ return mPkgSet;
+ }
+
+ public void getAddPackages() {
+ Set appList = AppManager.getInstance().getAddPackages();
+ mPkgSet.setValue(appList);
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
index da90133..1dffef6 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/AddContactActivity.java
@@ -80,7 +80,6 @@ public class AddContactActivity extends BaseDataBindingActivity {
@Override
public void initView() {
ButterKnife.bind(this);
-
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
index a3bcde2..5dd23a9 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/ContactActivity.java
@@ -3,102 +3,85 @@ package com.uiuios.aios.activity.contact;
import android.content.Intent;
import android.content.res.Configuration;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-import androidx.databinding.DataBindingUtil;
+import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
import com.uiuios.aios.R;
-import com.uiuios.aios.adapter.ContactAdapter;
-import com.uiuios.aios.base.BaseDataBindingActivity;
+import com.uiuios.aios.adapter.OldContactAdapter;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
import com.uiuios.aios.bean.Contact;
+import com.uiuios.aios.databinding.ActivityContactBinding;
import java.util.List;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
+public class ContactActivity extends BaseMvvmActivity {
-public class ContactActivity extends BaseDataBindingActivity implements ContactContact.ContactView {
- @BindView(R.id.rv_contact)
- RecyclerView rv_contact;
- @BindView(R.id.tv_people)
- TextView tv_people;
- @BindView(R.id.iv_back)
- ImageView iv_back;
- @BindView(R.id.tv_add)
- TextView tv_add;
- @OnClick({R.id.iv_back})
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.iv_back:
- finish();
- break;
- default:
- }
+ private OldContactAdapter mOldContactAdapter;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_contact;
}
- private ContactPresenter mContactPresenter;
- private ContactAdapter mContactAdapter;
-
@Override
protected void initDataBinding() {
- DataBindingUtil.setContentView(this, R.layout.activity_contact);
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
- ButterKnife.bind(this);
- mContactPresenter = new ContactPresenter(this);
- mContactPresenter.attachView(this);
- mContactPresenter.setLifecycle(getLifecycleSubject());
- mContactAdapter = new ContactAdapter();
+ mOldContactAdapter = new OldContactAdapter();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
- rv_contact.setLayoutManager(new GridLayoutManager(this, 3));
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(this, 3));
} else {
- rv_contact.setLayoutManager(new GridLayoutManager(this, 2));
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(this, 2));
}
- rv_contact.setAdapter(mContactAdapter);
- tv_add.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(ContactActivity.this, AddContactActivity.class);
- startActivity(intent);
- }
- });
+ mViewDataBinding.rvContact.setAdapter(mOldContactAdapter);
}
@Override
public void initData() {
-
+ mViewModel.getContactList().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List contacts) {
+ if (contacts == null || contacts.size() == 0) {
+ mViewDataBinding.tvPeople.setText("暂无数据");
+ } else {
+ mViewDataBinding.tvPeople.setText(contacts.size() + "人");
+ }
+ Contact contact = new Contact();
+ contact.setName("拨号");
+ contact.setMobile(OldContactAdapter.DIALER_PACKAGE);
+ contacts.add(0, contact);
+ mOldContactAdapter.setContactList(contacts);
+ }
+ });
+ mViewModel.getContact();
}
@Override
protected void onResume() {
super.onResume();
- mContactPresenter.getContact();
}
@Override
protected void onDestroy() {
super.onDestroy();
- mContactPresenter.detachView();
}
- @Override
- public void setContact(List contactList) {
- if (contactList == null || contactList.size() == 0) {
- tv_people.setText("暂无数据");
- } else {
- tv_people.setText(contactList.size() + "人");
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+
+ public void toAdd(View view){
+ Intent intent = new Intent(ContactActivity.this, AddContactActivity.class);
+ startActivity(intent);
}
- Contact contact = new Contact();
- contact.setName("拨号");
- contact.setMobile(ContactAdapter.DIALER_PACKAGE);
- contactList.add(0, contact);
- mContactAdapter.setContactList(contactList);
}
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java
deleted file mode 100644
index 6e74a17..0000000
--- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.uiuios.aios.activity.contact;
-
-import com.uiuios.aios.base.mvp.BasePresenter;
-import com.uiuios.aios.base.mvp.BaseView;
-import com.uiuios.aios.bean.Contact;
-
-import java.util.List;
-
-public class ContactContact {
- public interface Presenter extends BasePresenter {
- void getContact();
- }
-
- public interface ContactView extends BaseView {
- void setContact(List contactList);
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/activity/contact/ContactPresenter.java b/app/src/main/java/com/uiuios/aios/activity/contact/ContactViewModel.java
similarity index 71%
rename from app/src/main/java/com/uiuios/aios/activity/contact/ContactPresenter.java
rename to app/src/main/java/com/uiuios/aios/activity/contact/ContactViewModel.java
index 614aba3..eb3f79d 100644
--- a/app/src/main/java/com/uiuios/aios/activity/contact/ContactPresenter.java
+++ b/app/src/main/java/com/uiuios/aios/activity/contact/ContactViewModel.java
@@ -1,16 +1,19 @@
package com.uiuios.aios.activity.contact;
-import android.content.Context;
import android.util.Log;
+import androidx.lifecycle.MutableLiveData;
+
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.config.CommonConfig;
+import com.uiuios.aios.databinding.ActivityContactBinding;
import com.uiuios.aios.gson.GsonUtils;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.network.UrlAddress;
@@ -22,42 +25,30 @@ 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 ContactPresenter implements ContactContact.Presenter {
- private Context mContext;
- private ContactContact.ContactView mView;
+public class ContactViewModel extends BaseViewModel {
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
- private BehaviorSubject lifecycle;
-
- void setLifecycle(BehaviorSubject lifecycle) {
- this.lifecycle = lifecycle;
- }
-
- public BehaviorSubject getLifecycle() {
- return lifecycle;
- }
-
- ContactPresenter(Context context) {
- this.mContext = context;
+ @Override
+ public ActivityContactBinding getVDBinding() {
+ return binding;
}
@Override
- public void attachView(@NonNull ContactContact.ContactView view) {
- this.mView = view;
+ public void onDestroy() {
+
}
- @Override
- public void detachView() {
- this.mView = null;
+ private MutableLiveData> mContactList = new MutableLiveData<>();
+
+ public MutableLiveData> getContactList() {
+ return mContactList;
}
- @Override
public void getContact() {
NetInterfaceManager.getInstance()
.getContactListObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -69,10 +60,10 @@ public class ContactPresenter implements ContactContact.Presenter {
Log.e("getContactList", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data));
- mView.setContact(listBaseResponse.data);
+ mContactList.setValue(listBaseResponse.data);
} else {
mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
- mView.setContact(new ArrayList<>());
+ mContactList.setValue(new ArrayList<>());
}
}
@@ -85,9 +76,9 @@ public class ContactPresenter implements ContactContact.Presenter {
}.getType();
List contacts = gson.fromJson(jsonString, type);
if (contacts == null) {
- mView.setContact(new ArrayList<>());
+ mContactList.setValue(new ArrayList<>());
}else {
- mView.setContact(contacts);
+ mContactList.setValue(contacts);
}
onComplete();
}
@@ -98,4 +89,5 @@ public class ContactPresenter implements ContactContact.Presenter {
}
});
}
+
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/DailyAppActivity.java b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java
similarity index 98%
rename from app/src/main/java/com/uiuios/aios/activity/DailyAppActivity.java
rename to app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java
index 49fe89e..b4ac196 100644
--- a/app/src/main/java/com/uiuios/aios/activity/DailyAppActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/dailyapp/DailyAppActivity.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.activity;
+package com.uiuios.aios.activity.dailyapp;
import android.content.res.Configuration;
import android.view.View;
diff --git a/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java
index 0c37220..b8e6473 100644
--- a/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/location/LocationAcivity.java
@@ -168,8 +168,8 @@ public class LocationAcivity extends BaseDataBindingActivity implements Location
float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 4));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 4));//底部间距
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 30));//左间距
- stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 30));//右间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 4));//左间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 4));//右间距
rv_city.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mCityAdapter = new CityAdapter();
mCityAdapter.setCityList(popularCities);
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java
deleted file mode 100644
index f6acd3d..0000000
--- a/app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java
+++ /dev/null
@@ -1,692 +0,0 @@
-package com.uiuios.aios.activity.main;
-
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.content.pm.ShortcutManager;
-import android.content.res.Configuration;
-import android.graphics.Color;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
-import androidx.viewpager.widget.ViewPager;
-
-import com.alarmclock.uiui.IAlarmAidlInterface;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.hjq.permissions.OnPermissionCallback;
-import com.hjq.permissions.Permission;
-import com.hjq.permissions.XXPermissions;
-import com.hjq.toast.Toaster;
-import com.uiuios.aios.BuildConfig;
-import com.uiuios.aios.R;
-import com.uiuios.aios.base.BaseDataBindingActivity;
-import com.uiuios.aios.base.BaseFragmentPagerAdapter;
-import com.uiuios.aios.bean.AlarmItem;
-import com.uiuios.aios.bean.DesktopIcon;
-import com.uiuios.aios.config.CommonConfig;
-import com.uiuios.aios.fragment.AppListFragment;
-import com.uiuios.aios.fragment.ControlFragment;
-import com.uiuios.aios.fragment.home.HomeFragment;
-import com.uiuios.aios.fragment.second.SecondFragment;
-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.view.ScaleCircleNavigator;
-
-import net.lucode.hackware.magicindicator.MagicIndicator;
-import net.lucode.hackware.magicindicator.ViewPagerHelper;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
-public abstract class BaseMainActivity extends BaseDataBindingActivity implements MainContact.MainView, RemoteManager.ConnectedListener {
- private static final String TAG = BaseMainActivity.class.getSimpleName();
-
- private MainPresenter mMainPresenter;
-
- @BindView(R.id.viewPager)
- ViewPager mViewPager;
- @BindView(R.id.magicIndicator)
- MagicIndicator mMagicIndicator;
-
- private FragmentManager mFragmentManager;
- private FragmentTransaction mFragmentTransaction;
-
- private ScaleCircleNavigator scaleCircleNavigator;
- private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter;
-
- private List mFragments;
- private ControlFragment mControlFragment;
- private HomeFragment mHomeFragment;
- // private CustomFragment mCustomFragment;
- private SecondFragment mSecondFragment;
-
- private boolean is_twoscreen = false;
- private int appListIndex = 3;
- private int defaultCurrent = 2;
-
- @Override
- public void onConnected() {
- setDefaultDesktop();
- }
-
- @Override
- public void initView() {
- getLocationPermission();
-
- ButterKnife.bind(this);
- toggleNotificationListenerService(this);
- mMainPresenter = new MainPresenter(this);
- mMainPresenter.attachView(this);
- mMainPresenter.setLifecycle(getLifecycleSubject());
-
- if (BuildConfig.DEBUG) {
-// SystemClock.setCurrentTimeMillis(1662123600000L);//09-02
-// SystemClock.setCurrentTimeMillis(1662210000000L);//09-03
- }
-
-// if (!isNotificationListenersEnabled()) {
-// Toaster.show("请授予\"" + getString(R.string.app_name) + "\"使用通知权");
-// gotoNotificationAccessSetting(BaseMainActivity.this);
-// }
-
- mFragmentManager = getSupportFragmentManager();
- mFragmentTransaction = mFragmentManager.beginTransaction();
- mFragments = new ArrayList<>();
- mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments);
-// fragmentTransaction.add(R.id.viewPager, appListFragment);
-// fragmentTransaction.commit();
- mControlFragment = new ControlFragment();
- mFragments.add(mControlFragment);
-// is_twoscreen = Settings.Global.getInt(getContentResolver(), "is_twoscreen", 1) == 1;
-// if (is_twoscreen) {
-// appListIndex = 2;
-// defaultCurrent = 1;
- mSecondFragment = new SecondFragment();
- mFragments.add(mSecondFragment);
-// }
-// mCustomFragment = new CustomFragment();
-// mFragments.add(mCustomFragment);
-
- mHomeFragment = new HomeFragment();
- mFragments.add(mHomeFragment);
-
- mMainPresenter.getSystemSettings();
-// mMainPresenter.getAdminSnSetting();
- ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(this);
- int x = 0;
- for (int i = 0; i <= desktopIcons.size(); i++) {
- if (i != 0 && i % APP_LIST_SIZE == 0) {
- AppListFragment appListFragment = new AppListFragment();
- appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
- mFragments.add(appListFragment);
- x = i;
- } else if (i == desktopIcons.size()) {
- AppListFragment appListFragment = new AppListFragment();
- mFragments.add(appListFragment);
- appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
- }
- }
-
- scaleCircleNavigator = new ScaleCircleNavigator(this);
- scaleCircleNavigator.setCircleCount(mFragments.size());
- scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
- scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
- scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
- @Override
- public void onClick(int index) {
-
- }
- });
-
- mViewPager.setAdapter(mBaseFragmentPagerAdapter);
- mViewPager.setOffscreenPageLimit(3);
- mMagicIndicator.setNavigator(scaleCircleNavigator);
- ViewPagerHelper.bind(mMagicIndicator, mViewPager);
- if (mFragments.size() > 1) {
- mViewPager.setCurrentItem(defaultCurrent);
- }
-
- View decorView = getWindow().getDecorView();
- decorView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
-
- // 隐藏导航栏
- hideNavigationBar();
- ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
- Log.e(TAG, "isRequestPinShortcutSupported: " + shortcutManager.isRequestPinShortcutSupported());
- }
-
- private View.OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener =
- new View.OnSystemUiVisibilityChangeListener() {
- @Override
- public void onSystemUiVisibilityChange(int visibility) {
- if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
- // 导航栏显示中,重新隐藏导航栏
- hideNavigationBar();
- }
- }
- };
-
- // 隐藏导航栏
- private void hideNavigationBar() {
- View decorView = getWindow().getDecorView();
- int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
- decorView.setSystemUiVisibility(uiOptions);
- }
-
-
- @Override
- public void initData() {
- registReceiver();
-
- mAlarmServiceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- Log.e(TAG, "onServiceConnected: ");
- mIAlarmAidlInterface = IAlarmAidlInterface.Stub.asInterface(service);
- getAlarmData();
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- Log.e(TAG, "onServiceDisconnected: ");
- mIAlarmAidlInterface = null;
- }
- };
- bindAlarmService();
- RemoteManager.setListener(this);
- }
-
- private ServiceConnection mAlarmServiceConnection;
- private IAlarmAidlInterface mIAlarmAidlInterface;
-
- private void bindAlarmService() {
- if (mIAlarmAidlInterface == null) {
- //这是连接aidl服务的代码
- Intent intent = new Intent();
- intent.setAction("com.alarmclock.uiui.IAlarmAidlInterface");
- intent.setPackage("com.alarmclock.uiui");
- intent.setComponent(new ComponentName("com.alarmclock.uiui", "com.alarmclock.uiui.AIDLAlarmService"));
- bindService(intent, mAlarmServiceConnection, Context.BIND_AUTO_CREATE);
- } else {
-
- }
- }
-
- public static void toggleNotificationListenerService(Context context) {
- Log.e(TAG, "toggleNotificationListenerService");
- PackageManager pm = context.getPackageManager();
- pm.setComponentEnabledSetting(new ComponentName(context, NotificationService.class),
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-
- pm.setComponentEnabledSetting(new ComponentName(context, NotificationService.class),
- PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
- }
-
- private void getAlarmData() {
- if (mIAlarmAidlInterface == null) {
- bindAlarmService();
- return;
- }
- try {
- String json = mIAlarmAidlInterface.getAlarm();
- Log.e(TAG, "onServiceConnected: " + json);
- if ("暂无闹钟".equalsIgnoreCase(json) || TextUtils.isEmpty(json)) {
-// mCustomFragment.setAlarmItem(null);
- return;
- }
- Type type = new TypeToken>() {
- }.getType();
- List alarmItem = new Gson().fromJson(json, type);
-// mCustomFragment.setAlarmItem(alarmItem);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-
- private final static int APP_LIST_SIZE = 3 * 4;
-
- private void addData() {
- Log.e(TAG, "addData: ");
- List fragmentList = new ArrayList<>();
- ArrayList applicationInfoList = ApkUtils.queryFilterAppInfo(this);
- int x = 0;
- for (int i = 0; i <= applicationInfoList.size(); i++) {
- if (i != 0 && i % APP_LIST_SIZE == 0) {
- AppListFragment appListFragment = new AppListFragment();
- appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
- fragmentList.add(appListFragment);
- x = i;
- } else if (i == applicationInfoList.size()) {
- AppListFragment appListFragment = new AppListFragment();
- fragmentList.add(appListFragment);
- appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
- }
- }
- //从第三个开始改
- for (int i = 0; i < fragmentList.size(); i++) {
- if (i + appListIndex < mFragments.size()) {
- mBaseFragmentPagerAdapter.replaceFragment(i + appListIndex, fragmentList.get(i));
-// mFragments.remove(i + 2);
-// mFragments.add(i + 2, fragmentList.get(i));
- } else {
-// mFragments.add(fragmentList.get(i));
-// mBaseFragmentPagerAdapter.getFragments();
- mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i));
- }
- }
- for (int i = mFragments.size(); i > fragmentList.size() + appListIndex; i--) {
- mFragments.remove(i - 1);
- }
- scaleCircleNavigator.setCircleCount(mFragments.size());
- scaleCircleNavigator.notifyDataSetChanged();
- mBaseFragmentPagerAdapter.notifyItemChanged();
- }
-
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
- return false;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- Log.e(TAG, "onNewIntent: " + intent.getAction());
- String action = intent.getAction();
- if (TextUtils.isEmpty(action)) {
- return;
- }
- switch (action) {
- default:
- break;
- case Intent.ACTION_MAIN:
- mViewPager.setCurrentItem(defaultCurrent);
- break;
- }
- }
-
- @Override
- public void onConfigurationChanged(@NonNull Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
- AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
- getAlarmData();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- Log.e(TAG, "onResume: ");
-
- getPermission();
- }
-
- public static final String Launcher3 = "com.android.launcher3";
- public static final String Launcher3Class = "com.android.launcher3.Launcher";
- public static final String Launcher3QuickstepClass = "com.android.launcher3.uioverrides.QuickstepLauncher";
-
- private void setDefaultDesktop() {
- int is_activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
- Log.e(TAG, "onResume: is_activation = " + is_activation);
- if (is_activation == 1) {
- RemoteManager.getInstance().setDefaultDesktop(BuildConfig.APPLICATION_ID, this.getClass().getName());
- } else {
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
- RemoteManager.getInstance().setDefaultDesktop(Launcher3, Launcher3QuickstepClass);
- } else {
- RemoteManager.getInstance().setDefaultDesktop(Launcher3, Launcher3Class);
- }
- }
- }
-
-
- private String[] permission = new String[]{
- Permission.CALL_PHONE,
-// Permission.REQUEST_INSTALL_PACKAGES,
- Permission.WRITE_EXTERNAL_STORAGE,
- Permission.READ_PHONE_STATE,
- Permission.WRITE_SETTINGS,
- Permission.READ_CALL_LOG,
- Permission.WRITE_CALL_LOG,
- Permission.READ_CONTACTS,
- Permission.WRITE_CONTACTS,
- };
-
- private void getPermission() {
- XXPermissions.with(this)
- // 申请单个权限
- .permission(permission)
- // 申请多个权限
-// .permission(Permission.Group.STORAGE)
- // 设置权限请求拦截器(局部设置)
- //.interceptor(new PermissionInterceptor())
- // 设置不触发错误检测机制(局部设置)
- //.unchecked()
- .request(new OnPermissionCallback() {
- @Override
- public void onGranted(@NonNull List permissions, boolean allGranted) {
- Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted);
- if (!allGranted) {
- Toaster.show("获取部分权限成功,但部分权限未正常授予");
- return;
- }
- Log.e(TAG, "onGranted: 获取权限成功");
- addData();
- }
-
- @Override
- public void onDenied(@NonNull List permissions, boolean doNotAskAgain) {
- Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain);
- if (doNotAskAgain) {
- Toaster.show("被永久拒绝授权,请手动授予权限");
- // 如果是被永久拒绝就跳转到应用权限系统设置页面
- XXPermissions.startPermissionActivity(BaseMainActivity.this, permissions);
- } else {
- Log.e(TAG, "onGranted: 获取权限失败");
- }
- }
- });
- }
-
- private String[] mLocationPermission = new String[]{
- Permission.ACCESS_COARSE_LOCATION,
- Permission.ACCESS_FINE_LOCATION,
- Permission.ACCESS_BACKGROUND_LOCATION,
- };
-
- private void getLocationPermission() {
- XXPermissions.with(this)
- // 申请单个权限
- .permission(mLocationPermission)
- // 申请多个权限
-// .permission(Permission.Group.STORAGE)
- // 设置权限请求拦截器(局部设置)
- //.interceptor(new PermissionInterceptor())
- // 设置不触发错误检测机制(局部设置)
- //.unchecked()
- .request(new OnPermissionCallback() {
- @Override
- public void onGranted(@NonNull List permissions, boolean allGranted) {
- Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted);
- if (!allGranted) {
- Toaster.show("获取部分权限成功,但部分权限未正常授予");
- return;
- }
- Log.e(TAG, "onGranted: 获取定位权限成功");
- }
-
- @Override
- public void onDenied(@NonNull List permissions, boolean doNotAskAgain) {
- Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain);
-// if (doNotAskAgain) {
-// Toaster.show("被永久拒绝授权,请手动授予定位权限");
-// // 如果是被永久拒绝就跳转到应用权限系统设置页面
-// XXPermissions.startPermissionActivity(BaseMainActivity.this, permissions);
-// } else {
-// Log.e(TAG, "onGranted: 获取定位权限失败");
-// }
- }
- });
- }
-
- private static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
-
- private boolean isNotificationListenersEnabled() {
- String pkgName = getPackageName();
- final String flat = Settings.Secure.getString(getContentResolver(), ENABLED_NOTIFICATION_LISTENERS);
- if (!TextUtils.isEmpty(flat)) {
- final String[] names = flat.split(":");
- for (int i = 0; i < names.length; i++) {
- final ComponentName cn = ComponentName.unflattenFromString(names[i]);
- if (cn != null) {
- if (TextUtils.equals(pkgName, cn.getPackageName())) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- public static boolean gotoNotificationAccessSetting(Context context) {
- try {
- Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent);
- return true;
-
- } catch (ActivityNotFoundException e) {//普通情况下找不到的时候需要再特殊处理找一次
- try {
- Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.Settings$NotificationAccessSettingsActivity");
- intent.setComponent(cn);
- intent.putExtra(":settings:show_fragment", "NotificationAccessSettings");
- context.startActivity(intent);
- return true;
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- Toaster.show("对不起,您的手机暂不支持");
- e.printStackTrace();
- return false;
- }
- }
-
-
- @Override
- protected void onRestart() {
- super.onRestart();
-// mMainPresenter.sendAPPUsage();
-// mMainPresenter.sendRunningInfo();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mMainPresenter.detachView();
- unregisterAllReceiver();
- RemoteManager.removeListener(this);
- }
-
- @Override
- protected void onSaveInstanceState(@NonNull Bundle outState) {
-// super.onSaveInstanceState(outState);
- }
-
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
-// super.onRestoreInstanceState(savedInstanceState);
- }
-
- private void registReceiver() {
- registNewAppReceiver();
- registerSOSNumberReceiver();
- registerUpdateDesktopReceiver();
- registmUpdateAddressReceiver();
- }
-
- private void unregisterAllReceiver() {
- if (mNewAppReceiver != null) {
- unregisterReceiver(mNewAppReceiver);
- }
- if (mSOSNumberReceiver != null) {
- unregisterReceiver(mSOSNumberReceiver);
- }
- if (mUpdateDesktopReceiver != null) {
- unregisterReceiver(mUpdateDesktopReceiver);
- }
- if (mUpdateAddressReceiver != null) {
- unregisterReceiver(mUpdateAddressReceiver);
- }
- }
-
- private void registNewAppReceiver() {
- mNewAppReceiver = new NewAppReceiver();
- IntentFilter filter = new IntentFilter();
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- filter.addAction(Intent.ACTION_PACKAGE_ADDED);
- filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
- filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
- filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- filter.addDataScheme("package");
- registerReceiver(mNewAppReceiver, filter);
- }
-
- private NewAppReceiver mNewAppReceiver;
-
- class NewAppReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- Log.e(TAG, "onReceive: " + action);
- if (Intent.ACTION_PACKAGE_ADDED.equals(action)
- || Intent.ACTION_PACKAGE_REMOVED.equals(action)
- || Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
- addData();
- }
- }
- }
-
- private SOSNumberReceiver mSOSNumberReceiver;
-
- private void registerSOSNumberReceiver() {
- if (mSOSNumberReceiver == null) {
- mSOSNumberReceiver = new SOSNumberReceiver();
- }
- IntentFilter filter = new IntentFilter();
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- filter.addAction("setting_sos");
- registerReceiver(mSOSNumberReceiver, filter);
- }
-
- class SOSNumberReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.e(TAG, "onReceive: " + intent.getAction());
- String setting_sos = intent.getStringExtra("setting_sos");
- if (TextUtils.isEmpty(setting_sos)) return;
-// mCustomFragment.setSosNumber();
- }
- }
-
- public static final String ACTION_PACKAGE_HIDE = "com.uiui.aios.ACTION_PACKAGE_HIDE";
-
- private UpdateDesktopReceiver mUpdateDesktopReceiver;
-
- private void registerUpdateDesktopReceiver() {
- if (mUpdateDesktopReceiver == null) {
- mUpdateDesktopReceiver = new UpdateDesktopReceiver();
- }
- IntentFilter filter = new IntentFilter();
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- filter.addAction("UPDATE_DESKTOP_ICON");
- filter.addAction(ACTION_PACKAGE_HIDE);
- registerReceiver(mUpdateDesktopReceiver, filter);
- }
-
- class UpdateDesktopReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.e(TAG, "onReceive: " + intent.getAction());
- addData();
- }
- }
-
- private UpdateAddressReceiver mUpdateAddressReceiver;
-
- private void registmUpdateAddressReceiver() {
- mUpdateAddressReceiver = new UpdateAddressReceiver();
- IntentFilter filter = new IntentFilter();
- filter.addAction(CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION);
- registerReceiver(mUpdateAddressReceiver, filter);
- }
-
- class UpdateAddressReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION.equals(action)) {
- AmapManager.getInstance().startLocation();
- }
- }
- }
-
- @Override
- public void setSystemSettings() {
-// mMainPresenter.getDesktopLayout();
- }
-
- @Override
- public void getDesktopLayoutFinish() {
-
- }
-
- @Override
- public void updateDesktopLayoutFinish() {
-
- }
-
- @Override
- public void sendAPPUsageFinish() {
-
- }
-
- @Override
- public void sendRunningInfoFinish() {
-
- }
-
- @Override
- public void setAdminSnSetting() {
-
- }
-}
-
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java
index 6b34f8e..d3e7af1 100644
--- a/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/main/MainActivity.java
@@ -1,33 +1,704 @@
package com.uiuios.aios.activity.main;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ShortcutManager;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.os.Build;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.provider.Settings;
+import android.text.TextUtils;
import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
-import androidx.annotation.Nullable;
-import androidx.databinding.DataBindingUtil;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.lifecycle.Observer;
+import com.alarmclock.uiui.IAlarmAidlInterface;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.hjq.toast.Toaster;
+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.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.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.view.ScaleCircleNavigator;
-public class MainActivity extends BaseMainActivity {
+import net.lucode.hackware.magicindicator.ViewPagerHelper;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MainActivity extends BaseMvvmActivity implements RemoteManager.ConnectedListener {
private static final String TAG = MainActivity.class.getSimpleName();
+ private FragmentManager mFragmentManager;
+ private FragmentTransaction mFragmentTransaction;
+
+ private ScaleCircleNavigator scaleCircleNavigator;
+ private BaseFragmentPagerAdapter mBaseFragmentPagerAdapter;
+
+ private List mFragments;
+ private ControlFragment mControlFragment;
+ private HomeFragment mHomeFragment;
+ // private CustomFragment mCustomFragment;
+ private ContactFragment mSecondFragment;
+
+ private boolean is_twoscreen = false;
+ private int appListIndex = 3;
+ private int defaultCurrent = 2;
+
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.e(TAG, "onCreate: ");
+ public void onConnected() {
+ setDefaultDesktop();
+ }
+
+ @Override
+ public boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.phone_activity_main;
}
@Override
protected void initDataBinding() {
- DataBindingUtil.setContentView(this, R.layout.activity_main);
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+
+ @Override
+ public void initView() {
+ getLocationPermission();
+
+ toggleNotificationListenerService(this);
+
+ if (BuildConfig.DEBUG) {
+// SystemClock.setCurrentTimeMillis(1662123600000L);//09-02
+// SystemClock.setCurrentTimeMillis(1662210000000L);//09-03
+ }
+
+// if (!isNotificationListenersEnabled()) {
+// Toaster.show("请授予\"" + getString(R.string.app_name) + "\"使用通知权");
+// gotoNotificationAccessSetting(MainActivity.this);
+// }
+
+ mFragmentManager = getSupportFragmentManager();
+ mFragmentTransaction = mFragmentManager.beginTransaction();
+ mFragments = new ArrayList<>();
+ mBaseFragmentPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments);
+// fragmentTransaction.add(R.id.viewPager, appListFragment);
+// fragmentTransaction.commit();
+ mControlFragment = new ControlFragment();
+ mFragments.add(mControlFragment);
+// is_twoscreen = Settings.Global.getInt(getContentResolver(), "is_twoscreen", 1) == 1;
+// if (is_twoscreen) {
+// appListIndex = 2;
+// defaultCurrent = 1;
+ mSecondFragment = new ContactFragment();
+ mFragments.add(mSecondFragment);
+// }
+// mCustomFragment = new CustomFragment();
+// mFragments.add(mCustomFragment);
+
+ mHomeFragment = new HomeFragment();
+ mFragments.add(mHomeFragment);
+
+ ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(this);
+ int x = 0;
+ for (int i = 0; i <= desktopIcons.size(); i++) {
+ if (i != 0 && i % APP_LIST_SIZE == 0) {
+ AppListFragment appListFragment = new AppListFragment();
+ appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
+ mFragments.add(appListFragment);
+ x = i;
+ } else if (i == desktopIcons.size()) {
+ AppListFragment appListFragment = new AppListFragment();
+ mFragments.add(appListFragment);
+ appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
+ }
+ }
+
+ scaleCircleNavigator = new ScaleCircleNavigator(this);
+ scaleCircleNavigator.setCircleCount(mFragments.size());
+ scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
+ scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
+ scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
+ @Override
+ public void onClick(int index) {
+
+ }
+ });
+
+ mViewDataBinding.viewPager.setAdapter(mBaseFragmentPagerAdapter);
+ mViewDataBinding.viewPager.setOffscreenPageLimit(3);
+ mViewDataBinding.magicIndicator.setNavigator(scaleCircleNavigator);
+ ViewPagerHelper.bind(mViewDataBinding.magicIndicator, mViewDataBinding.viewPager);
+ if (mFragments.size() > 1) {
+ mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
+ }
+
+ View decorView = getWindow().getDecorView();
+ decorView.setOnSystemUiVisibilityChangeListener(mOnSystemUiVisibilityChangeListener);
+
+ // 隐藏导航栏
+ hideNavigationBar();
+ ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
+ Log.e(TAG, "isRequestPinShortcutSupported: " + shortcutManager.isRequestPinShortcutSupported());
+ }
+
+ private View.OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener =
+ new View.OnSystemUiVisibilityChangeListener() {
+ @Override
+ public void onSystemUiVisibilityChange(int visibility) {
+ if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
+ // 导航栏显示中,重新隐藏导航栏
+ hideNavigationBar();
+ }
+ }
+ };
+
+ // 隐藏导航栏
+ private void hideNavigationBar() {
+ View decorView = getWindow().getDecorView();
+ int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ decorView.setSystemUiVisibility(uiOptions);
+ }
+
+
+ @Override
+ public void initData() {
+ mViewModel.getDesktopIconData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(ArrayList desktopIcons) {
+ int x = 0;
+ for (int i = 0; i <= desktopIcons.size(); i++) {
+ if (i != 0 && i % APP_LIST_SIZE == 0) {
+ AppListFragment appListFragment = new AppListFragment();
+ appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
+ mFragments.add(appListFragment);
+ x = i;
+ } else if (i == desktopIcons.size()) {
+ AppListFragment appListFragment = new AppListFragment();
+ mFragments.add(appListFragment);
+ appListFragment.setAppList(new ArrayList<>(desktopIcons.subList(x, i)));
+ }
+ }
+ }
+ });
+// mViewModel.getAppList();
+
+ registReceiver();
+
+ mAlarmServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ Log.e(TAG, "onServiceConnected: ");
+ mIAlarmAidlInterface = IAlarmAidlInterface.Stub.asInterface(service);
+ getAlarmData();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ Log.e(TAG, "onServiceDisconnected: ");
+ mIAlarmAidlInterface = null;
+ }
+ };
+ bindAlarmService();
+ RemoteManager.setListener(this);
+ }
+
+ private ServiceConnection mAlarmServiceConnection;
+ private IAlarmAidlInterface mIAlarmAidlInterface;
+
+ private void bindAlarmService() {
+ if (mIAlarmAidlInterface == null) {
+ //这是连接aidl服务的代码
+ Intent intent = new Intent();
+ intent.setAction("com.alarmclock.uiui.IAlarmAidlInterface");
+ intent.setPackage("com.alarmclock.uiui");
+ intent.setComponent(new ComponentName("com.alarmclock.uiui", "com.alarmclock.uiui.AIDLAlarmService"));
+ bindService(intent, mAlarmServiceConnection, Context.BIND_AUTO_CREATE);
+ } else {
+
+ }
+ }
+
+ public static void toggleNotificationListenerService(Context context) {
+ Log.e(TAG, "toggleNotificationListenerService");
+ PackageManager pm = context.getPackageManager();
+ pm.setComponentEnabledSetting(new ComponentName(context, NotificationService.class),
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+
+ pm.setComponentEnabledSetting(new ComponentName(context, NotificationService.class),
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
+ }
+
+ private void getAlarmData() {
+ if (mIAlarmAidlInterface == null) {
+ bindAlarmService();
+ return;
+ }
+ try {
+ String json = mIAlarmAidlInterface.getAlarm();
+ Log.e(TAG, "onServiceConnected: " + json);
+ if ("暂无闹钟".equalsIgnoreCase(json) || TextUtils.isEmpty(json)) {
+// mCustomFragment.setAlarmItem(null);
+ return;
+ }
+ Type type = new TypeToken>() {
+ }.getType();
+ List alarmItem = new Gson().fromJson(json, type);
+// mCustomFragment.setAlarmItem(alarmItem);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private final static int APP_LIST_SIZE = 3 * 4;
+
+ private void addData() {
+ Log.e(TAG, "addData: ");
+ List fragmentList = new ArrayList<>();
+ ArrayList applicationInfoList = ApkUtils.queryFilterAppInfo(this);
+ int x = 0;
+ for (int i = 0; i <= applicationInfoList.size(); i++) {
+ if (i != 0 && i % APP_LIST_SIZE == 0) {
+ AppListFragment appListFragment = new AppListFragment();
+ appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
+ fragmentList.add(appListFragment);
+ x = i;
+ } else if (i == applicationInfoList.size()) {
+ AppListFragment appListFragment = new AppListFragment();
+ fragmentList.add(appListFragment);
+ appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
+ }
+ }
+ //从第三个开始改
+ for (int i = 0; i < fragmentList.size(); i++) {
+ if (i + appListIndex < mFragments.size()) {
+ mBaseFragmentPagerAdapter.replaceFragment(i + appListIndex, fragmentList.get(i));
+// mFragments.remove(i + 2);
+// mFragments.add(i + 2, fragmentList.get(i));
+ } else {
+// mFragments.add(fragmentList.get(i));
+// mBaseFragmentPagerAdapter.getFragments();
+ mBaseFragmentPagerAdapter.addFragment(fragmentList.get(i));
+ }
+ }
+ for (int i = mFragments.size(); i > fragmentList.size() + appListIndex; i--) {
+ mFragments.remove(i - 1);
+ }
+ scaleCircleNavigator.setCircleCount(mFragments.size());
+ scaleCircleNavigator.notifyDataSetChanged();
+ mBaseFragmentPagerAdapter.notifyItemChanged();
+ }
+
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
+ return false;
+ }
+ return super.onKeyDown(keyCode, event);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
- Log.e(TAG, "onNewIntent: getAction = " + intent.getAction());
- Log.e(TAG, "onNewIntent: getCategories = " + intent.getCategories());
- Log.e(TAG, "onNewIntent: getFlags = " + intent.getFlags());
+ Log.e(TAG, "onNewIntent: " + intent.getAction());
+ String action = intent.getAction();
+ if (TextUtils.isEmpty(action)) {
+ return;
+ }
+ switch (action) {
+ default:
+ break;
+ case Intent.ACTION_MAIN:
+ mViewDataBinding.viewPager.setCurrentItem(defaultCurrent);
+ break;
+ }
+ }
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
+ AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
+ getAlarmData();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ Log.e(TAG, "onResume: ");
+
+ getPermission();
+ }
+
+ public static final String Launcher3 = "com.android.launcher3";
+ public static final String Launcher3Class = "com.android.launcher3.Launcher";
+ public static final String Launcher3QuickstepClass = "com.android.launcher3.uioverrides.QuickstepLauncher";
+
+ private void setDefaultDesktop() {
+ int is_activation = Settings.Global.getInt(getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
+ Log.e(TAG, "onResume: is_activation = " + is_activation);
+ if (is_activation == 1) {
+ RemoteManager.getInstance().setDefaultDesktop(BuildConfig.APPLICATION_ID, this.getClass().getName());
+ } else {
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
+ RemoteManager.getInstance().setDefaultDesktop(Launcher3, Launcher3QuickstepClass);
+ } else {
+ RemoteManager.getInstance().setDefaultDesktop(Launcher3, Launcher3Class);
+ }
+ }
+ }
+
+
+ private String[] permission = new String[]{
+ Permission.CALL_PHONE,
+// Permission.REQUEST_INSTALL_PACKAGES,
+ Permission.WRITE_EXTERNAL_STORAGE,
+ Permission.READ_PHONE_STATE,
+ Permission.WRITE_SETTINGS,
+ Permission.READ_CALL_LOG,
+ Permission.WRITE_CALL_LOG,
+ Permission.READ_CONTACTS,
+ Permission.WRITE_CONTACTS,
+ };
+
+ private void getPermission() {
+ XXPermissions.with(this)
+ // 申请单个权限
+ .permission(permission)
+ // 申请多个权限
+// .permission(Permission.Group.STORAGE)
+ // 设置权限请求拦截器(局部设置)
+ //.interceptor(new PermissionInterceptor())
+ // 设置不触发错误检测机制(局部设置)
+ //.unchecked()
+ .request(new OnPermissionCallback() {
+ @Override
+ public void onGranted(@NonNull List permissions, boolean allGranted) {
+ Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted);
+ if (!allGranted) {
+ Toaster.show("获取部分权限成功,但部分权限未正常授予");
+ return;
+ }
+ Log.e(TAG, "onGranted: 获取权限成功");
+ addData();
+ }
+
+ @Override
+ public void onDenied(@NonNull List permissions, boolean doNotAskAgain) {
+ Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain);
+ if (doNotAskAgain) {
+ Toaster.show("被永久拒绝授权,请手动授予权限");
+ // 如果是被永久拒绝就跳转到应用权限系统设置页面
+ XXPermissions.startPermissionActivity(MainActivity.this, permissions);
+ } else {
+ Log.e(TAG, "onGranted: 获取权限失败");
+ }
+ }
+ });
+ }
+
+ private String[] mLocationPermission = new String[]{
+ Permission.ACCESS_COARSE_LOCATION,
+ Permission.ACCESS_FINE_LOCATION,
+ Permission.ACCESS_BACKGROUND_LOCATION,
+ };
+
+ private void getLocationPermission() {
+ XXPermissions.with(this)
+ // 申请单个权限
+ .permission(mLocationPermission)
+ // 申请多个权限
+// .permission(Permission.Group.STORAGE)
+ // 设置权限请求拦截器(局部设置)
+ //.interceptor(new PermissionInterceptor())
+ // 设置不触发错误检测机制(局部设置)
+ //.unchecked()
+ .request(new OnPermissionCallback() {
+ @Override
+ public void onGranted(@NonNull List permissions, boolean allGranted) {
+ Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted);
+ if (!allGranted) {
+ Toaster.show("获取部分权限成功,但部分权限未正常授予");
+ return;
+ }
+ Log.e(TAG, "onGranted: 获取定位权限成功");
+ }
+
+ @Override
+ public void onDenied(@NonNull List permissions, boolean doNotAskAgain) {
+ Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain);
+// if (doNotAskAgain) {
+// Toaster.show("被永久拒绝授权,请手动授予定位权限");
+// // 如果是被永久拒绝就跳转到应用权限系统设置页面
+// XXPermissions.startPermissionActivity(MainActivity.this, permissions);
+// } else {
+// Log.e(TAG, "onGranted: 获取定位权限失败");
+// }
+ }
+ });
+ }
+
+ private static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
+
+ private boolean isNotificationListenersEnabled() {
+ String pkgName = getPackageName();
+ final String flat = Settings.Secure.getString(getContentResolver(), ENABLED_NOTIFICATION_LISTENERS);
+ if (!TextUtils.isEmpty(flat)) {
+ final String[] names = flat.split(":");
+ for (int i = 0; i < names.length; i++) {
+ final ComponentName cn = ComponentName.unflattenFromString(names[i]);
+ if (cn != null) {
+ if (TextUtils.equals(pkgName, cn.getPackageName())) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public static boolean gotoNotificationAccessSetting(Context context) {
+ try {
+ Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ return true;
+
+ } catch (ActivityNotFoundException e) {//普通情况下找不到的时候需要再特殊处理找一次
+ try {
+ Intent intent = new Intent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.Settings$NotificationAccessSettingsActivity");
+ intent.setComponent(cn);
+ intent.putExtra(":settings:show_fragment", "NotificationAccessSettings");
+ context.startActivity(intent);
+ return true;
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+ Toaster.show("对不起,您的手机暂不支持");
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+
+ @Override
+ protected void onRestart() {
+ super.onRestart();
+// mMainPresenter.sendAPPUsage();
+// mMainPresenter.sendRunningInfo();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unregisterAllReceiver();
+ RemoteManager.removeListener(this);
+ }
+
+ @Override
+ protected void onSaveInstanceState(@NonNull Bundle outState) {
+// super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+// super.onRestoreInstanceState(savedInstanceState);
+ }
+
+ private void registReceiver() {
+ registNewAppReceiver();
+ registerSOSNumberReceiver();
+ registerUpdateDesktopReceiver();
+ registmUpdateAddressReceiver();
+ }
+
+ private void unregisterAllReceiver() {
+ if (mNewAppReceiver != null) {
+ unregisterReceiver(mNewAppReceiver);
+ }
+ if (mSOSNumberReceiver != null) {
+ unregisterReceiver(mSOSNumberReceiver);
+ }
+ if (mUpdateDesktopReceiver != null) {
+ unregisterReceiver(mUpdateDesktopReceiver);
+ }
+ if (mUpdateAddressReceiver != null) {
+ unregisterReceiver(mUpdateAddressReceiver);
+ }
+ }
+
+ private void registNewAppReceiver() {
+ mNewAppReceiver = new NewAppReceiver();
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addDataScheme("package");
+ registerReceiver(mNewAppReceiver, filter);
+ }
+
+ private NewAppReceiver mNewAppReceiver;
+
+ class NewAppReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ Log.e(TAG, "onReceive: " + action);
+ if (Intent.ACTION_PACKAGE_ADDED.equals(action)
+ || Intent.ACTION_PACKAGE_REMOVED.equals(action)
+ || Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
+ addData();
+ }
+ }
+ }
+
+ private SOSNumberReceiver mSOSNumberReceiver;
+
+ private void registerSOSNumberReceiver() {
+ if (mSOSNumberReceiver == null) {
+ mSOSNumberReceiver = new SOSNumberReceiver();
+ }
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction("setting_sos");
+ registerReceiver(mSOSNumberReceiver, filter);
+ }
+
+ class SOSNumberReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.e(TAG, "onReceive: " + intent.getAction());
+ String setting_sos = intent.getStringExtra("setting_sos");
+ if (TextUtils.isEmpty(setting_sos)) return;
+// mCustomFragment.setSosNumber();
+ }
+ }
+
+ public static final String ACTION_PACKAGE_HIDE = "com.uiui.aios.ACTION_PACKAGE_HIDE";
+
+ private UpdateDesktopReceiver mUpdateDesktopReceiver;
+
+ private void registerUpdateDesktopReceiver() {
+ if (mUpdateDesktopReceiver == null) {
+ mUpdateDesktopReceiver = new UpdateDesktopReceiver();
+ }
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction("UPDATE_DESKTOP_ICON");
+ filter.addAction(ACTION_PACKAGE_HIDE);
+ registerReceiver(mUpdateDesktopReceiver, filter);
+ }
+
+ class UpdateDesktopReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Log.e(TAG, "onReceive: " + intent.getAction());
+ addData();
+ }
+ }
+
+ private UpdateAddressReceiver mUpdateAddressReceiver;
+
+ private void registmUpdateAddressReceiver() {
+ mUpdateAddressReceiver = new UpdateAddressReceiver();
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION);
+ registerReceiver(mUpdateAddressReceiver, filter);
+ }
+
+ class UpdateAddressReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (CommonConfig.UIUIAIOS_UPDATE_ADDRESS_ACTION.equals(action)) {
+ AmapManager.getInstance().startLocation();
+ }
+ }
+ }
+
+ 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 camera(View v) {
+ ApkUtils.openPackage(MainActivity.this, "com.mediatek.camera");
+ }
+
+ public void sos(View v) {
+ startActivity(new Intent(MainActivity.this, EmergencyActivity.class));
+ }
}
}
+
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java b/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java
deleted file mode 100644
index e4abda1..0000000
--- a/app/src/main/java/com/uiuios/aios/activity/main/MainContact.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.uiuios.aios.activity.main;
-
-import com.uiuios.aios.base.mvp.BasePresenter;
-import com.uiuios.aios.base.mvp.BaseView;
-
-public class MainContact {
- public interface Presenter extends BasePresenter {
- /*获取系统设置*/
- void getSystemSettings();
- /*获取桌面布局*/
- void getDesktopLayout();
- /*更新桌面布局*/
- void updateDesktopLayout();
- /*上传正在运行的APP*/
- void sendAPPUsage();
- /*上传后台运行的APP*/
- void sendRunningInfo();
- /*获取负二屏开关*/
- void getAdminSnSetting();
- }
-
- public interface MainView extends BaseView {
- void setSystemSettings();
- void getDesktopLayoutFinish();
- void updateDesktopLayoutFinish();
- void sendAPPUsageFinish();
- void sendRunningInfoFinish();
- void setAdminSnSetting();
-
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/MainPresenter.java b/app/src/main/java/com/uiuios/aios/activity/main/MainViewModel.java
similarity index 64%
rename from app/src/main/java/com/uiuios/aios/activity/main/MainPresenter.java
rename to app/src/main/java/com/uiuios/aios/activity/main/MainViewModel.java
index 6ed2b18..b685a4a 100644
--- a/app/src/main/java/com/uiuios/aios/activity/main/MainPresenter.java
+++ b/app/src/main/java/com/uiuios/aios/activity/main/MainViewModel.java
@@ -1,90 +1,95 @@
package com.uiuios.aios.activity.main;
-import android.content.Context;
-import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
+import androidx.lifecycle.MutableLiveData;
+
import com.google.gson.JsonObject;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.BuildConfig;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
import com.uiuios.aios.bean.BaseResponse;
-import com.uiuios.aios.bean.Contact;
+import com.uiuios.aios.bean.DesktopIcon;
import com.uiuios.aios.bean.NetDesktopIcon;
+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.ApkUtils;
import com.uiuios.aios.utils.AppUsedTimeUtils;
-import com.uiuios.aios.utils.Utils;
+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.subjects.BehaviorSubject;
+import io.reactivex.rxjava3.schedulers.Schedulers;
-public class MainPresenter implements MainContact.Presenter {
- private static final String TAG = MainPresenter.class.getSimpleName();
- private MainContact.MainView mView;
- private Context mContext;
+public class MainViewModel extends BaseViewModel {
+ private static final String TAG = MainViewModel.class.getSimpleName();
- private BehaviorSubject lifecycle;
-
- void setLifecycle(BehaviorSubject lifecycle) {
- this.lifecycle = lifecycle;
- }
-
- public BehaviorSubject getLifecycle() {
- return lifecycle;
- }
-
- MainPresenter(Context context) {
- this.mContext = context;
- Log.e(TAG, "MainPresenter: " + context.getClass());
+ @Override
+ public PhoneActivityMainBinding getVDBinding() {
+ return binding;
}
@Override
- public void attachView(MainContact.MainView view) {
- this.mView = view;
+ public void onDestroy() {
+
}
- @Override
- public void detachView() {
- this.mView = null;
+ private MutableLiveData> mDesktopIconData = new MutableLiveData<>();
+
+ public MutableLiveData> getDesktopIconData() {
+ return mDesktopIconData;
}
- @Override
- public void getSystemSettings() {
-// NetInterfaceManager.getInstance().getSystemSettings(true, getLifecycle(), new NetInterfaceManager.ContactCallback() {
-// @Override
-// public void setContact(List contactList) {
-// Intent intent = new Intent("setting_sos");
-// mContext.sendBroadcast(intent);
-// }
-//
-// @Override
-// public void setEmergencyContact(List emergencyContact) {
-//
-// }
-//
-// @Override
-// public void setEmpty() {
-//
-// }
-//
-// @Override
-// public void onComplete() {
-// }
-// });
- mView.setSystemSettings();
+ public void getAppList() {
+ Observable.create(new ObservableOnSubscribe>() {
+ @Override
+ public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable {
+ emitter.onNext(AppManager.getInstance().getAllAppList());
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>() {
+
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAppList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull ArrayList desktopIcons) {
+ Log.e("getAppList", "onNext: " + desktopIcons.size());
+ mDesktopIconData.postValue(desktopIcons);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAppList", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAppList", "onComplete: ");
+ }
+ });
}
- @Override
+
+ @Deprecated
public void getDesktopLayout() {
NetInterfaceManager.getInstance().getDesktopLayoutObservable()
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -109,26 +114,21 @@ public class MainPresenter implements MainContact.Presenter {
});
}
- @Override
- public void updateDesktopLayout() {
-
- }
-
- @Override
+ @Deprecated
public void sendAPPUsage() {
AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
String packagename = AppUsedTimeUtils.getInstance().getAppPackageName();
Log.e(TAG, "onRestart packagename == " + packagename);
if (!TextUtils.isEmpty(packagename)) {
- Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(mContext, packagename));
+ Log.e(TAG, "onRestart: " + ApkUtils.getAppNameByPackage(getCtx(), packagename));
Log.e(TAG, "onRestart: " + packagename);
NetInterfaceManager.getInstance().getAppUsageRecordControl()
.sendappUsageRecord(RemoteManager.getInstance().getSerial(),
- ApkUtils.getAppNameByPackage(mContext, packagename),
+ ApkUtils.getAppNameByPackage(getCtx(), packagename),
packagename,
AppUsedTimeUtils.getInstance().getStartTime() / 1000,
AppUsedTimeUtils.getInstance().getEndTime() / 1000)
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
@@ -149,29 +149,27 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onComplete() {
Log.e("sendAPPUsage", "onComplete: ");
- mView.sendAPPUsageFinish();
}
});
} else {
Log.e("onRestart", "app = null" + packagename);
- mView.sendAPPUsageFinish();
}
}
- @Override
+ @Deprecated
public void sendRunningInfo() {
AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
long time = AppUsedTimeUtils.getInstance().getStartTime();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID);
- jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(mContext, BuildConfig.APPLICATION_ID));
+ jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(getCtx(), BuildConfig.APPLICATION_ID));
jsonObject.addProperty("start_time", time / 1000);
String jsonString = jsonObject.toString();
Log.e(TAG, "sendRunningInfo: " + jsonString);
NetInterfaceManager.getInstance()
.getRunningAppObservable(jsonString)
- .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
@@ -196,9 +194,9 @@ public class MainPresenter implements MainContact.Presenter {
});
}
- @Override
+ @Deprecated
public void getAdminSnSetting() {
- NetInterfaceManager.getInstance().getAdminSnSetting(true, lifecycle, new NetInterfaceManager.onCompleteCallback() {
+ NetInterfaceManager.getInstance().getAdminSnSetting(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java
new file mode 100644
index 0000000..16432b9
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java
@@ -0,0 +1,33 @@
+package com.uiuios.aios.activity.main;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+import androidx.databinding.DataBindingUtil;
+
+import com.uiuios.aios.R;
+
+public class OldMainActivity extends MainActivity {
+ private static final String TAG = OldMainActivity.class.getSimpleName();
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Log.e(TAG, "onCreate: ");
+ }
+
+ @Override
+ protected void initDataBinding() {
+ DataBindingUtil.setContentView(this, R.layout.activity_main_old);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ Log.e(TAG, "onNewIntent: getAction = " + intent.getAction());
+ Log.e(TAG, "onNewIntent: getCategories = " + intent.getCategories());
+ Log.e(TAG, "onNewIntent: getFlags = " + intent.getFlags());
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java b/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java
index d933893..9c6eed9 100644
--- a/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/main/PhoneMainActivity.java
@@ -1,14 +1,49 @@
package com.uiuios.aios.activity.main;
+import android.content.Intent;
+import android.view.View;
+
import androidx.databinding.DataBindingUtil;
import com.uiuios.aios.R;
+import com.uiuios.aios.activity.EmergencyActivity;
+import com.uiuios.aios.databinding.PhoneActivityMainBinding;
+import com.uiuios.aios.utils.ApkUtils;
-public class PhoneMainActivity extends BaseMainActivity {
+public class PhoneMainActivity extends MainActivity {
private static final String TAG = PhoneMainActivity.class.getSimpleName();
+ PhoneActivityMainBinding mBinding;
+
@Override
protected void initDataBinding() {
- DataBindingUtil.setContentView(this, R.layout.phone_activity_main);
+ mBinding = DataBindingUtil.setContentView(this, R.layout.phone_activity_main);
+
+ mBinding.cl0.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(Intent.ACTION_DIAL));
+ }
+ });
+ mBinding.cl1.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ApkUtils.openPackage(PhoneMainActivity.this, "com.android.mms");
+ }
+ });
+ mBinding.cl2.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ApkUtils.openPackage(PhoneMainActivity.this, "com.mediatek.camera");
+ }
+ });
+ mBinding.cl3.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(PhoneMainActivity.this, EmergencyActivity.class));
+ }
+ });
}
+
+
}
diff --git a/app/src/main/java/com/uiuios/aios/activity/phone/PhoneActivity.java b/app/src/main/java/com/uiuios/aios/activity/phone/PhoneActivity.java
new file mode 100644
index 0000000..6ddc131
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/phone/PhoneActivity.java
@@ -0,0 +1,85 @@
+package com.uiuios.aios.activity.phone;
+
+import android.view.View;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.base.mvvm.BaseMvvmActivity;
+import com.uiuios.aios.databinding.ActivityPhoneBinding;
+import com.uiuios.aios.fragment.phone.contact.ContactFragment;
+import com.uiuios.aios.fragment.phone.dialer.DialerFragment;
+import com.uiuios.aios.fragment.phone.record.RecordFragment;
+import com.uiuios.aios.view.CustomPagerAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PhoneActivity extends BaseMvvmActivity {
+ private static final String TAG = PhoneActivity.class.getSimpleName();
+
+
+ private FragmentManager mFragmentManager;
+ private CustomPagerAdapter mCustomPagerAdapter;
+ private List mFragments;
+ private ContactFragment mContactFragment;
+ private DialerFragment mDialerFragment;
+ private RecordFragment mRecordFragment;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_phone;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ protected void initView() {
+ mFragmentManager = getSupportFragmentManager();
+ mFragments = new ArrayList<>();
+ if (mContactFragment == null) {
+ mContactFragment = new ContactFragment();
+ }
+ mFragments.add(mContactFragment);
+ if (mDialerFragment == null) {
+ mDialerFragment = new DialerFragment();
+ }
+ mFragments.add(mDialerFragment);
+ if (mRecordFragment == null) {
+ mRecordFragment = new RecordFragment();
+ }
+ mFragments.add(mRecordFragment);
+ mCustomPagerAdapter = new CustomPagerAdapter(mFragmentManager, mFragments, getLifecycle());
+ mViewDataBinding.viewPager.setAdapter(mCustomPagerAdapter);
+ }
+
+ @Override
+ protected void initData() {
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ public class BtnClick {
+ public void toContact(View view) {
+ mViewDataBinding.viewPager.setCurrentItem(0, true);
+ }
+
+ public void call(View view) {
+ mViewDataBinding.viewPager.setCurrentItem(1, true);
+ }
+ public void toRecord(View view) {
+ mViewDataBinding.viewPager.setCurrentItem(2, true);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/phone/PhoneViewModel.java b/app/src/main/java/com/uiuios/aios/activity/phone/PhoneViewModel.java
new file mode 100644
index 0000000..2d51551
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/activity/phone/PhoneViewModel.java
@@ -0,0 +1,19 @@
+package com.uiuios.aios.activity.phone;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.databinding.ActivityPhoneBinding;
+
+public class PhoneViewModel extends BaseViewModel {
+ @Override
+ public ActivityPhoneBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
index 7807d8b..f100819 100644
--- a/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/weather/WeatherActivity.java
@@ -100,7 +100,6 @@ public class WeatherActivity extends BaseMvvmActivity>() {
- @Override
- public void onChanged(List jsonBeans) {
- options1Items = jsonBeans;
- }
- });
- mViewModel.getOptions2ItemsData().observe(this, new Observer>>() {
- @Override
- public void onChanged(ArrayList> arrayLists) {
- options2Items = arrayLists;
- }
- });
- mViewModel.getOptions3ItemsData().observe(this, new Observer>>>() {
- @Override
- public void onChanged(ArrayList>> arrayLists) {
- options3Items = arrayLists;
- }
- });
- mViewModel.getBooleanData().observe(this, new Observer() {
- @Override
- public void onChanged(Boolean aBoolean) {
- mLoaded = aBoolean;
- }
- });
-
mViewModel.getGeoResultData().observe(this, new Observer() {
@Override
public void onChanged(MapGeoResult mapGeoResult) {
if (mapGeoResult != null) {
mMMKV.encode(CommonConfig.MANUALLY_SELECT_LOCATION_TUDE, mapGeoResult.getLocation().toString());
- mViewModel.getWeatherNow(mapGeoResult.getLocation().toString());
- mViewModel.getWeather7D(mapGeoResult.getLocation().toString());
+ mViewModel.getWeather(mapGeoResult.getLocation().toString());
} else {
Toaster.show("获取位置信息失败");
}
@@ -229,8 +201,7 @@ public class WeatherActivity extends BaseMvvmActivity> mOptions1ItemsData = new MutableLiveData<>();
- private MutableLiveData>> mOptions2ItemsData = new MutableLiveData<>();
- private MutableLiveData>>> mOptions3ItemsData = new MutableLiveData<>();
- private MutableLiveData mBooleanData = new MutableLiveData<>();
-
-
- public MutableLiveData> getOptions1ItemsData() {
- return mOptions1ItemsData;
- }
-
- public MutableLiveData>> getOptions2ItemsData() {
- return mOptions2ItemsData;
- }
-
- public MutableLiveData>>> getOptions3ItemsData() {
- return mOptions3ItemsData;
- }
-
- public MutableLiveData getBooleanData() {
- return mBooleanData;
- }
-
private MutableLiveData mGeoResultData = new MutableLiveData<>();
private MutableLiveData mLocationData = new MutableLiveData<>();
private MutableLiveData mWeatherNowData = new MutableLiveData<>();
@@ -100,81 +80,6 @@ public class WeatherViewModel extends BaseViewModel>() {
- @Override
- public void subscribe(@NonNull ObservableEmitter> emitter) throws Throwable {
- Log.e("loadProvince", "subscribe: ");
- String JsonData = new GetJsonDataUtil().getJson(getCtx(), "province.json");//获取assets目录下的json文件数据
- ArrayList detail = new ArrayList<>();
- JSONArray data = new JSONArray(JsonData);
- Gson gson = new Gson();
- for (int i = 0; i < data.length(); i++) {
- JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
- detail.add(entity);
- }
- emitter.onNext(detail);
- }
- }).subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("loadProvince", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull ArrayList jsonBeans) {
- Log.e("loadProvince", "onNext: ");
- mOptions1ItemsData.setValue(jsonBeans);
-
- ArrayList> options2Items = new ArrayList<>();
- ArrayList>> options3Items = new ArrayList<>();
-
- for (int i = 0; i < jsonBeans.size(); i++) {//遍历省份
- ArrayList cityList = new ArrayList<>();//该省的城市列表(第二级)
- ArrayList> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)
-
- for (int c = 0; c < jsonBeans.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
- String cityName = jsonBeans.get(i).getCityList().get(c).getName();
- cityList.add(cityName);//添加城市
- ArrayList city_AreaList = new ArrayList<>();//该城市的所有地区列表
-
- //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
- /*if (jsonBean.get(i).getCityList().get(c).getArea() == null
- || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
- city_AreaList.add("");
- } else {
- city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
- }*/
- city_AreaList.addAll(jsonBeans.get(i).getCityList().get(c).getArea());
- province_AreaList.add(city_AreaList);//添加该省所有地区数据
- }
- options2Items.add(cityList);
- /**
- * 添加地区数据
- */
- options3Items.add(province_AreaList);
- }
- mOptions2ItemsData.setValue(options2Items);
- mOptions3ItemsData.setValue(options3Items);
- mBooleanData.setValue(true);
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("loadProvince", "onError: " + e.getMessage());
- mBooleanData.setValue(false);
- }
-
- @Override
- public void onComplete() {
- Log.e("loadProvince", "onComplete: ");
- }
- });
- }
-
public void decodeGeo(String address) {
Log.e(TAG, "decodeGeo: " + address);
NetInterfaceManager.getInstance().getGeoObservable(address)
@@ -239,6 +144,20 @@ public class WeatherViewModel extends BaseViewModel
private List desktopIcons;
+ public void setDesktopIcons(List desktopIcons) {
+ this.desktopIcons = desktopIcons;
+ notifyDataSetChanged();
+ }
+
private Set packageSet;
+ public void setPackageSet(Set packageSet) {
+ this.packageSet = packageSet;
+ }
+
@NonNull
@Override
public AppHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -42,7 +52,7 @@ public class AddAppAdapter extends RecyclerView.Adapter
DesktopIcon desktopIcon = desktopIcons.get(position);
String lable = desktopIcon.getTitle();
holder.tv_appname.setText(lable);
- holder.iv_icon.setImageDrawable(desktopIcon.getIcon());
+ holder.iv_icon.setImageDrawable(desktopIcon.getIcon(mContext));
String pkg = desktopIcon.getPackage();
if (packageSet != null) {
@@ -60,15 +70,15 @@ public class AddAppAdapter extends RecyclerView.Adapter
int resID = mContext.getResources().getIdentifier(val, "drawable", "com.uiui.zyos");
if (resID == 0) {
Log.e(TAG, "getView: not found src : " + pkg);
- holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon()));
+ holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon(mContext)));
} else {
holder.iv_icon.setImageDrawable(mContext.getResources().getDrawable(resID));
}
} else {
if (AppManager.ADD_NAME.equals(pkg)) {
- holder.iv_icon.setImageDrawable(desktopIcon.getIcon());
+ holder.iv_icon.setImageDrawable(desktopIcon.getIcon(mContext));
} else {
- holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon()));
+ holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon(mContext)));
}
}
holder.root.setOnClickListener(new View.OnClickListener() {
@@ -78,8 +88,12 @@ public class AddAppAdapter extends RecyclerView.Adapter
packageSet.remove(pkg);
AppManager.getInstance().removeAddPakcage(pkg);
} else {
- packageSet.add(pkg);
- AppManager.getInstance().addAddPakcage(pkg);
+ if (packageSet.size() == 6) {
+ Toaster.show("最多添加6个");
+ } else {
+ packageSet.add(pkg);
+ AppManager.getInstance().addAddPakcage(pkg);
+ }
}
notifyDataSetChanged();
}
@@ -91,15 +105,6 @@ public class AddAppAdapter extends RecyclerView.Adapter
return desktopIcons == null ? 0 : desktopIcons.size();
}
- public void setDesktopIcons(List desktopIcons) {
- this.desktopIcons = desktopIcons;
- notifyDataSetChanged();
- }
-
- public void setPackageSet(Set packageSet) {
- this.packageSet = packageSet;
- }
-
class AppHolder extends RecyclerView.ViewHolder {
ConstraintLayout root;
TextView tv_appname;
diff --git a/app/src/main/java/com/uiuios/aios/adapter/CallRecordAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/CallRecordAdapter.java
index e4064b4..374bbbe 100644
--- a/app/src/main/java/com/uiuios/aios/adapter/CallRecordAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/adapter/CallRecordAdapter.java
@@ -14,24 +14,35 @@ import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
+import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
+import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.RecordsInfo;
+import com.uiuios.aios.utils.GlideLoadUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
+import java.util.Map;
public class CallRecordAdapter extends RecyclerView.Adapter {
private Context mContext;
private List mRecordsInfoList;
- private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("HH:mm:ss");
+ private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("MM/dd HH:mm:ss");
public void setRecordsInfoList(List recordsInfoList) {
this.mRecordsInfoList = recordsInfoList;
notifyDataSetChanged();
}
+ private Map mContactMap;
+
+ public void setContactMap(Map contactMap) {
+ mContactMap = contactMap;
+ notifyDataSetChanged();
+ }
+
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -44,6 +55,8 @@ public class CallRecordAdapter extends RecyclerView.Adapter {
@@ -46,13 +46,18 @@ public class ContactAdapter extends RecyclerView.Adapter {
+ private List mContactList;
+ private Context mContext;
+
+ public static final String DIALER_PACKAGE = "com.android.dialer";
+ public static final String DIALER_ADD_CONTACT = "com.uiui.aios.contact.add";
+
+ public void setContactList(List contactList) {
+ this.mContactList = contactList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public ContactHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new ContactHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact_home, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ContactHolder contactHolder, int position) {
+ Contact contact = mContactList.get(position);
+ contactHolder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+// int qch_call_forbid = Settings.System.getInt(mContext.getContentResolver(), "qch_call_forbid", 0);
+// if (qch_call_forbid == 1) {
+// Toaster.show("电话功能被禁用");
+// icon_return;
+// }
+ Intent dialIntent = new Intent(Intent.ACTION_CALL);
+ String phone = contact.getMobile();
+ if (DIALER_PACKAGE.equals(phone)) {
+ try {
+// mContext.startActivity(new Intent(Intent.ACTION_DIAL));
+// mContext.startActivity(new Intent(mContext, DialerActivity.class));
+ mContext.startActivity(new Intent(mContext, RecordsActivity.class));
+ } catch (Exception e) {
+ Toaster.show("无法打开电话功能");
+ }
+ } else if (DIALER_ADD_CONTACT.equals(contact.getMobile())) {
+ Intent intent = new Intent(mContext, AddContactActivity.class);
+ mContext.startActivity(intent);
+ } else if (!TextUtils.isEmpty(phone)) {
+ Uri data = Uri.parse("tel:" + phone);
+ dialIntent.setData(data);
+ mContext.startActivity(dialIntent);
+ }
+ }
+ });
+ contactHolder.tv_name.setText(contact.getName());
+ if (DIALER_PACKAGE.equals(contact.getMobile())) {
+ contactHolder.cl_contact.setVisibility(View.GONE);
+ contactHolder.iv_head2.setVisibility(View.VISIBLE);
+ contactHolder.tv_phone.setText("");
+ Glide.with(contactHolder.iv_head).load(R.drawable.home_dialer_cion_circle).error(R.drawable.home_dialer_cion_circle).into(contactHolder.iv_head);
+ } else if (DIALER_ADD_CONTACT.equals(contact.getMobile())) {
+ Glide.with(contactHolder.iv_head).load(R.drawable.icon_contact_add).error(R.drawable.icon_contact_add).into(contactHolder.iv_head);
+ } else {
+ contactHolder.cl_contact.setVisibility(View.VISIBLE);
+ contactHolder.iv_head2.setVisibility(View.GONE);
+ contactHolder.tv_phone.setText(contact.getMobile());
+ Glide.with(contactHolder.iv_head).load(contact.getAvatar()).error(R.drawable.default_avatar).into(contactHolder.iv_head);
+ }
+// int index = position % 3;
+// switch (index) {
+// case 0:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain));
+// break;
+// case 1:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sun));
+// break;
+// case 2:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sunny));
+// break;
+// default:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain));
+// }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mContactList == null ? 0 : mContactList.size();
+ }
+
+ static class ContactHolder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ ConstraintLayout cl_contact;
+ NiceImageView iv_head;
+ NiceImageView iv_head2;
+ TextView tv_name;
+ TextView tv_phone;
+
+ public ContactHolder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ cl_contact = itemView.findViewById(R.id.cl_contact);
+ iv_head = itemView.findViewById(R.id.iv_head);
+ iv_head2 = itemView.findViewById(R.id.iv_head2);
+ tv_name = itemView.findViewById(R.id.tv_name);
+ tv_phone = itemView.findViewById(R.id.tv_phone);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java
index 73a3000..ae05816 100644
--- a/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/adapter/KnowledgeVideoAdapter.java
@@ -48,7 +48,7 @@ public class KnowledgeVideoAdapter extends RecyclerView.Adapter {
+ private List mContactList;
+ private Context mContext;
+
+ public static final String DIALER_PACKAGE = "com.android.dialer";
+ public static final String DIALER_ADD_CONTACT = "com.uiui.aios.contact.add";
+
+ public void setContactList(List contactList) {
+ this.mContactList = contactList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public ContactHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = parent.getContext();
+ return new ContactHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact_old, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ContactHolder contactHolder, int position) {
+ Contact contact = mContactList.get(position);
+ contactHolder.root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+// int qch_call_forbid = Settings.System.getInt(mContext.getContentResolver(), "qch_call_forbid", 0);
+// if (qch_call_forbid == 1) {
+// Toaster.show("电话功能被禁用");
+// icon_return;
+// }
+ Intent dialIntent = new Intent(Intent.ACTION_CALL);
+ String phone = contact.getMobile();
+ if (DIALER_PACKAGE.equals(phone)) {
+ try {
+// mContext.startActivity(new Intent(Intent.ACTION_DIAL));
+// mContext.startActivity(new Intent(mContext, DialerActivity.class));
+ mContext.startActivity(new Intent(mContext, RecordsActivity.class));
+ } catch (Exception e) {
+ Toaster.show("无法打开电话功能");
+ }
+ } else if (DIALER_ADD_CONTACT.equals(contact.getMobile())) {
+ Intent intent = new Intent(mContext, AddContactActivity.class);
+ mContext.startActivity(intent);
+ } else if (!TextUtils.isEmpty(phone)) {
+ Uri data = Uri.parse("tel:" + phone);
+ dialIntent.setData(data);
+ mContext.startActivity(dialIntent);
+ }
+ }
+ });
+ contactHolder.tv_name.setText(contact.getName());
+ if (DIALER_PACKAGE.equals(contact.getMobile())) {
+ contactHolder.cl_contact.setVisibility(View.GONE);
+ contactHolder.iv_head2.setVisibility(View.VISIBLE);
+ contactHolder.tv_phone.setText("");
+ Glide.with(contactHolder.iv_head).load(R.drawable.home_dialer_cion_circle).error(R.drawable.home_dialer_cion_circle).into(contactHolder.iv_head);
+ } else if (DIALER_ADD_CONTACT.equals(contact.getMobile())) {
+ Glide.with(contactHolder.iv_head).load(R.drawable.icon_contact_add).error(R.drawable.icon_contact_add).into(contactHolder.iv_head);
+ } else {
+ contactHolder.cl_contact.setVisibility(View.VISIBLE);
+ contactHolder.iv_head2.setVisibility(View.GONE);
+ contactHolder.tv_phone.setText(contact.getMobile());
+ Glide.with(contactHolder.iv_head).load(contact.getAvatar()).error(R.drawable.default_avatar).into(contactHolder.iv_head);
+ }
+// int index = position % 3;
+// switch (index) {
+// case 0:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain));
+// break;
+// case 1:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sun));
+// break;
+// case 2:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_sunny));
+// break;
+// default:
+// contactHolder.root.setBackground(mContext.getDrawable(R.drawable.background_weather_rain));
+// }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mContactList == null ? 0 : mContactList.size();
+ }
+
+ static class ContactHolder extends RecyclerView.ViewHolder {
+ ConstraintLayout root;
+ ConstraintLayout cl_contact;
+ NiceImageView iv_head;
+ NiceImageView iv_head2;
+ TextView tv_name;
+ TextView tv_phone;
+
+ public ContactHolder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.root);
+ cl_contact = itemView.findViewById(R.id.cl_contact);
+ iv_head = itemView.findViewById(R.id.iv_head);
+ iv_head2 = itemView.findViewById(R.id.iv_head2);
+ tv_name = itemView.findViewById(R.id.tv_name);
+ tv_phone = itemView.findViewById(R.id.tv_phone);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmDialogFragment.java b/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmDialogFragment.java
new file mode 100644
index 0000000..0ab9f92
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmDialogFragment.java
@@ -0,0 +1,311 @@
+package com.uiuios.aios.base.mvvm.fragment;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.CheckResult;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.Toolbar;
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.trello.rxlifecycle4.LifecycleProvider;
+import com.trello.rxlifecycle4.LifecycleTransformer;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.ParameterizedType;
+
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public abstract class BaseMvvmDialogFragment extends DialogFragment implements LifecycleProvider {
+ /**
+ * 是否顯示了
+ */
+ protected boolean mIsVisible;
+ /**
+ * 是否準備好了-Created
+ */
+ protected boolean mHasPrepare;
+
+
+ protected VM mViewModel;
+ protected VDB mViewDataBinding;
+ protected Class vmClass;
+ //
+ protected Toolbar toolbar;
+ protected View statusBarView;
+ //
+ protected Bundle bundle;//来自getArguments()
+ protected Bundle savedInstanceState;
+
+ /**
+ * 上下文
+ */
+ private WeakReference ctx;
+
+ public Context getCtx() {
+ return ctx == null ? null : ctx.get();
+ }
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ ctx = new WeakReference<>(context);
+ }
+
+ /**
+ * onCreate、onResume里不能调用
+ *
+ * @return
+ */
+ public boolean isAttached() {
+ boolean flag = getCtx() != null && isAdded();
+ Log.d("BaseMvvmDialogFragment", " >> isAttached >> flag: " + flag);
+ return flag;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ //ViewDataBinding
+ mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
+ mViewDataBinding.setLifecycleOwner(this);
+
+ //ViewModel
+ vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ mViewModel = new ViewModelProvider(this).get(vmClass);
+ //
+ getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ return mViewDataBinding.getRoot();
+ }
+
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW);
+
+ if (initStatusBarToolBar()) {
+ toolbar = getToolbar();
+ }
+// //注册eventbus
+// if (getClass().isAnnotationPresent(BindEventBus.class))
+// EventBusManager.register(this);
+// //
+
+ fitsLayoutOverlap();
+ initView(bundle = getArguments());
+ //
+ initData(this.savedInstanceState = savedInstanceState);
+ //
+ if (mIsVisible) {
+ onEnter();
+ }
+ mHasPrepare = true;
+ }
+
+ @Override
+ public void onDestroyView() {
+ lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW);
+ super.onDestroyView();
+ mHasPrepare = false;
+ mViewDataBinding = null;
+// //移除eventbus
+// if (getClass().isAnnotationPresent(BindEventBus.class))
+// EventBusManager.unregister(this);
+// //
+ }
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ if (mIsVisible == getUserVisibleHint())
+ return;
+ mIsVisible = getUserVisibleHint();
+ if (mIsVisible) {
+ if (!mHasPrepare)
+ return;
+ onEnter();
+ } else {
+ onExit();
+ }
+ }
+
+ @LayoutRes
+ protected abstract int getLayoutId();
+
+ protected abstract Toolbar getToolbar();
+
+ protected View getStatusView() {
+ return null;
+ }
+
+ protected abstract void initView(Bundle bundle);
+
+ protected abstract void initData(Bundle savedInstanceState);
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ fitsLayoutOverlap();
+ }
+
+ protected boolean isImmersionBarEnabled() {
+ return true;
+ }
+
+ protected boolean initStatusBarToolBar() {
+ return true;
+ }
+
+
+ private void fitsLayoutOverlap() {
+ if (!isImmersionBarEnabled()) return;
+ if (statusBarView != null) {
+// ImmersionBar.setStatusBarView(getActivity(), statusBarView);
+ }
+ if (toolbar != null) {
+// ImmersionBar.setTitleBar(getActivity(), toolbar);
+ }
+ }
+
+ protected void hideInputMethod(Activity activity) {
+ InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
+ View view = activity.getCurrentFocus();
+ if (view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+ }
+
+ protected void hideInputMethod(Activity activity, EditText editText) {
+ InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
+ View view = activity.getCurrentFocus();
+ if (view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+
+ protected void showInputMethod(EditText editText) {
+ InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
+ }
+
+ /**
+ * 進入界面
+ */
+ protected void onEnter() {
+
+ }
+
+ /**
+ * 離開界面
+ */
+ protected void onExit() {
+
+ }
+
+
+ private final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+
+ public BehaviorSubject getLifecycleSubject() {
+ return lifecycleSubject;
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final Observable lifecycle() {
+ return lifecycleSubject.hide();
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) {
+ return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindToLifecycle() {
+ return RxLifecycleAndroid.bindFragment(lifecycleSubject);
+ }
+
+ @Override
+ @CallSuper
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ lifecycleSubject.onNext(FragmentEvent.ATTACH);
+ }
+
+ @Override
+ @CallSuper
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ lifecycleSubject.onNext(FragmentEvent.CREATE);
+ }
+
+ @Override
+ @CallSuper
+ public void onStart() {
+ super.onStart();
+ lifecycleSubject.onNext(FragmentEvent.START);
+
+ }
+
+ @Override
+ @CallSuper
+ public void onResume() {
+ super.onResume();
+ lifecycleSubject.onNext(FragmentEvent.RESUME);
+ }
+
+ @Override
+ @CallSuper
+ public void onPause() {
+ lifecycleSubject.onNext(FragmentEvent.PAUSE);
+ super.onPause();
+ }
+
+ @Override
+ @CallSuper
+ public void onStop() {
+ lifecycleSubject.onNext(FragmentEvent.STOP);
+ super.onStop();
+ }
+
+ @Override
+ @CallSuper
+ public void onDestroy() {
+ lifecycleSubject.onNext(FragmentEvent.DESTROY);
+ super.onDestroy();
+ }
+
+ @Override
+ @CallSuper
+ public void onDetach() {
+ lifecycleSubject.onNext(FragmentEvent.DETACH);
+ super.onDetach();
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmFragment.java b/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmFragment.java
new file mode 100644
index 0000000..cfafc3b
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmFragment.java
@@ -0,0 +1,275 @@
+package com.uiuios.aios.base.mvvm.fragment;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.uiuios.aios.base.BaseFragment;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.ParameterizedType;
+
+/**
+ * @author: lml
+ * @date: 2021/12/15
+ */
+public abstract class BaseMvvmFragment extends BaseFragment {
+ protected String mTag = this.getClass().getSimpleName();
+ /**
+ * 是否顯示了
+ */
+ protected boolean mIsVisible;
+ /**
+ * 是否準備好了-Created
+ */
+ protected boolean mHasPrepare;
+
+
+ protected VM mViewModel;
+ protected VDB mViewDataBinding;
+ protected Class vmClass;
+ //
+// protected Toolbar toolbar;
+// protected View statusBarView;
+ //
+ protected Bundle bundle;//来自getArguments()
+ protected Bundle savedInstanceState;
+
+// protected Context context;
+
+ /**
+ * 上下文
+ */
+ private WeakReference ctx;
+
+ public Context getCtx() {
+ return ctx == null ? null : ctx.get();
+ }
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+// this.context = context;
+ ctx = new WeakReference<>(context);
+ }
+
+ /**
+ * onCreate、onResume里不能调用
+ *
+ * @return
+ */
+ public boolean isAttached() {
+ boolean flag = getCtx() != null && isAdded();
+ Log.e(" >> isAttached >>", "flag = " + flag);
+ return flag;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ //ViewDataBinding
+ mViewDataBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
+ mViewDataBinding.setLifecycleOwner(this);
+
+ //ViewModel
+ vmClass = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ mViewModel = new ViewModelProvider(this).get(vmClass);
+ //
+ return mViewDataBinding.getRoot();
+ }
+
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+// if (initStatusBarToolBar()) {
+// toolbar = getToolbar();
+// }
+ //注册eventbus
+// if (getClass().isAnnotationPresent(BindEventBus.class))
+// EventBusManager.register(this);
+ //
+
+// fitsLayoutOverlap();
+ initDataBinding();
+ initView(bundle = getArguments());
+ //
+ initData(this.savedInstanceState = savedInstanceState);
+ //
+ if (mIsVisible) {
+ onEnter();
+ }
+ mHasPrepare = true;
+ //
+// LiveDataBus.get().with(ConstantUtils.DATA_BUS_LOADING_FRAGMENT, Boolean.class).observe(getActivity(), bool -> {
+// L.e(" >> LiveDataBus >> DATA_BUS_LOADING_FRAGMENT: %s", bool);
+// if(bool) {
+// showLoading(R.string.str_please_wait);
+// } else {
+// hideLoading();
+// }
+// });
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ mHasPrepare = false;
+ mViewDataBinding = null;
+ //移除eventbus
+// if (getClass().isAnnotationPresent(BindEventBus.class))
+// EventBusManager.unregister(this);
+ //
+ }
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ if (mIsVisible == getUserVisibleHint())
+ return;
+ mIsVisible = getUserVisibleHint();
+ if (mIsVisible) {
+ if (!mHasPrepare)
+ return;
+ onEnter();
+ } else {
+ onExit();
+ }
+ }
+
+ @LayoutRes
+ protected abstract int getLayoutId();
+
+// protected abstract Toolbar getToolbar();
+
+// protected View getStatusView() {
+// return null;
+// }
+
+ protected abstract void initDataBinding();
+
+ protected abstract void initView(Bundle bundle);
+
+ protected abstract void initData(Bundle savedInstanceState);
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+// fitsLayoutOverlap();
+ }
+
+// protected boolean isImmersionBarEnabled() {
+// return true;
+// }
+
+// protected boolean initStatusBarToolBar() {
+// return true;
+// }
+
+
+// private void fitsLayoutOverlap() {
+// if (!isImmersionBarEnabled()) return;
+// if (statusBarView != null) {
+// ImmersionBar.setStatusBarView(getActivity(), statusBarView);
+// }
+// if (toolbar != null) {
+// ImmersionBar.setTitleBar(getActivity(), toolbar);
+// }
+// }
+
+ protected void hideInputMethod(Activity activity) {
+ InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
+ View view = activity.getCurrentFocus();
+ if (view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+ }
+
+ protected void hideInputMethod(Activity activity, EditText editText) {
+ InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
+ View view = activity.getCurrentFocus();
+ if (view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+
+ protected void showInputMethod(EditText editText) {
+ InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
+ }
+
+
+// private CustomDialog mWaitDialog;
+//
+// public void showLoading(@StringRes int contentID) {
+// showLoading(contentID, R.color.white);
+// }
+//
+// public void showLoading(@StringRes int contentID, @ColorRes int color) {
+// hideLoading();
+// DialogX.init(getActivity());
+// if (color == R.color.white) {
+// mWaitDialog = DialogXUtil.getInstance().showLoading(getActivity(), getString(contentID), getResources().getColor(color));
+// } else {
+// mWaitDialog = DialogXUtil.getInstance().showLoading_black(getActivity(), getString(contentID), getResources().getColor(color));
+// }
+// }
+//
+// public void updateLoadingTip(@StringRes int messageID, int percent) {
+// try {
+// if (mWaitDialog != null && mWaitDialog.isShow()) {
+// TextView tvTip = mWaitDialog.getCustomView().findViewById(R.id.tv_load_tip);
+// if (tvTip != null)
+// tvTip.setText(getResources().getString(messageID) + (percent == -1 ? "" : percent + "%"));
+// }
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+//
+// public boolean isShowLoading() {
+// return mWaitDialog != null && mWaitDialog.isShow();
+// }
+//
+// public void hideLoading() {
+// try {
+// boolean isShow = isShowLoading();
+// L.d(" >> hideLoading :: isShow: %s", isShow);
+// if (isShow)
+// mWaitDialog.dismiss();
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+
+ /**
+ * 進入界面
+ */
+ protected void onEnter() {
+
+ }
+
+ /**
+ * 離開界面
+ */
+ protected void onExit() {
+
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/bean/Contact.java b/app/src/main/java/com/uiuios/aios/bean/Contact.java
index fdb1499..d6deca4 100644
--- a/app/src/main/java/com/uiuios/aios/bean/Contact.java
+++ b/app/src/main/java/com/uiuios/aios/bean/Contact.java
@@ -15,6 +15,17 @@ public class Contact implements Serializable {
int is_urgent;//是否紧急联系人 0否1是
String mobile;//手机号
String avatar;//头像
+ boolean simContact;
+
+ public Contact() {
+
+ }
+
+ public Contact(String name, String mobile, boolean sim) {
+ this.name = name;
+ this.mobile = mobile;
+ this.simContact = sim;
+ }
public int getId() {
return id;
@@ -56,6 +67,14 @@ public class Contact implements Serializable {
this.avatar = avatar;
}
+ public boolean isSimContact() {
+ return simContact;
+ }
+
+ public void setSimContact(boolean simContact) {
+ this.simContact = simContact;
+ }
+
@NonNull
@Override
public String toString() {
diff --git a/app/src/main/java/com/uiuios/aios/bean/DailyAppBean.java b/app/src/main/java/com/uiuios/aios/bean/DailyAppBean.java
index 3f428b8..553460a 100644
--- a/app/src/main/java/com/uiuios/aios/bean/DailyAppBean.java
+++ b/app/src/main/java/com/uiuios/aios/bean/DailyAppBean.java
@@ -1,7 +1,12 @@
package com.uiuios.aios.bean;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
+import com.uiuios.aios.utils.IconUtils;
+
import java.io.Serializable;
public class DailyAppBean implements Serializable {
@@ -10,13 +15,11 @@ public class DailyAppBean implements Serializable {
String appName;
String packageName;
String className;
- Drawable icon;
- public DailyAppBean(String appName, String packageName, String className, Drawable icon) {
+ public DailyAppBean(String appName, String packageName, String className) {
this.appName = appName;
this.packageName = packageName;
this.className = className;
- this.icon = icon;
}
public String getAppName() {
@@ -43,11 +46,26 @@ public class DailyAppBean implements Serializable {
this.className = className;
}
- public Drawable getIcon() {
- return icon;
- }
-
- public void setIcon(Drawable icon) {
- this.icon = icon;
+ public Drawable getIcon(Context context) {
+ PackageManager pm = context.getPackageManager();
+ ApplicationInfo info = null;
+ try {
+ info = pm.getApplicationInfo(packageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (info == null) {
+ return null;
+ } else {
+ int i = IconUtils.appClassNameList.indexOf(packageName);
+ if (i != -1) {
+ String val = IconUtils.appIconList.get(i);
+ int resID = context.getResources().getIdentifier(val, "drawable", "com.uiuios.aios");
+ if (resID != 0) {
+ return context.getResources().getDrawable(resID);
+ }
+ }
+ return info.loadIcon(pm);
+ }
}
}
diff --git a/app/src/main/java/com/uiuios/aios/bean/DesktopIcon.java b/app/src/main/java/com/uiuios/aios/bean/DesktopIcon.java
index bd6090c..cbae543 100644
--- a/app/src/main/java/com/uiuios/aios/bean/DesktopIcon.java
+++ b/app/src/main/java/com/uiuios/aios/bean/DesktopIcon.java
@@ -1,6 +1,7 @@
package com.uiuios.aios.bean;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
@@ -11,6 +12,9 @@ import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
+import com.uiuios.aios.R;
+import com.uiuios.aios.manager.AppManager;
+import com.uiuios.aios.utils.IconUtils;
import java.io.Serializable;
@@ -20,7 +24,6 @@ public class DesktopIcon implements Serializable, Parcelable {
protected String mTitle;
protected String mClass;
protected String mPackage;
- protected Drawable icon;
int position;
@@ -74,14 +77,6 @@ public class DesktopIcon implements Serializable, Parcelable {
this.mClass = aClass;
}
- public Drawable getIcon() {
- return icon;
- }
-
- public void setIcon(Drawable icon) {
- this.icon = icon;
- }
-
public String getTitle() {
return mTitle;
}
@@ -98,12 +93,43 @@ public class DesktopIcon implements Serializable, Parcelable {
this.position = position;
}
+ public Drawable getIcon(Context context) {
+ switch (mPackage) {
+ case AppManager.ADD_NAME:
+ return context.getDrawable(R.drawable.home_icon_add);
+ case "aios.daily.app":
+ return context.getDrawable(R.drawable.icon_daily_app);
+ case "aios.appstore":
+ return context.getDrawable(R.drawable.com_android_appstore);
+ default:
+ PackageManager pm = context.getPackageManager();
+ ApplicationInfo info = null;
+ try {
+ info = pm.getApplicationInfo(mPackage, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (info == null) {
+ return null;
+ } else {
+ int i = IconUtils.appClassNameList.indexOf(mPackage);
+ if (i != -1) {
+ String val = IconUtils.appIconList.get(i);
+ int resID = context.getResources().getIdentifier(val, "drawable", "com.uiuios.aios");
+ if (resID != 0) {
+ return context.getResources().getDrawable(resID);
+ }
+ }
+ return info.loadIcon(pm);
+ }
+ }
+ }
+
public static DesktopIcon creatDesktopIcon(Context context, ResolveInfo resolveInfo) {
PackageManager pm = context.getPackageManager();
DesktopIcon desktopIcon = new DesktopIcon();
desktopIcon.setPackage(resolveInfo.activityInfo.packageName);
desktopIcon.setClass(resolveInfo.activityInfo.name);
- desktopIcon.setIcon(resolveInfo.loadIcon(pm));
desktopIcon.setTitle(resolveInfo.loadLabel(pm).toString());
desktopIcon.setPosition(0);
return desktopIcon;
@@ -114,7 +140,6 @@ public class DesktopIcon implements Serializable, Parcelable {
DesktopIcon desktopIcon = new DesktopIcon();
desktopIcon.setPackage(resolveInfo.activityInfo.packageName);
desktopIcon.setClass(resolveInfo.activityInfo.name);
- desktopIcon.setIcon(resolveInfo.loadIcon(pm));
desktopIcon.setTitle(resolveInfo.loadLabel(pm).toString());
desktopIcon.setPosition(position);
return desktopIcon;
diff --git a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
index f879222..a53fa3c 100644
--- a/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
+++ b/app/src/main/java/com/uiuios/aios/config/CommonConfig.java
@@ -27,6 +27,8 @@ public class CommonConfig {
/*是否激活接口请求缓存*/
public static final String ACTIVATION_BEAN_KEY = "AIOS_UIUI_ACTIVATION_BEAN_KEY";
+
+
/*是否激活*/
public static final String UIUI_ACTIVATION_KEY = "aios_uiui_activation";
/*激活码类型*/
@@ -34,10 +36,13 @@ public class CommonConfig {
/*体验到期时间戳*/
public static final String UIUI_EXPIRE_TIME_KEY = "aios_uiui_expire_time";
+
public static final String SETTING_OTHER_APPINSTALLER_KEY = "setting_other_appInstaller";
public static final String VIDEO_INFO_BUNDLE = "video_bundle_info";
+ /*是否手动选择位置地址*/
+ public static final String MANUALLY_SELECT_LOCATION_KEY = "map_manually_select_location";
/*手动选择位置地址*/
public static final String MANUALLY_SELECT_LOCATION_ADDRESS = "map_manually_select_location";
/*手动选择位置 区*/
diff --git a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java
similarity index 88%
rename from app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java
rename to app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java
index ddebac8..fcdf6fb 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/AppListFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/app/AppListFragment.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.fragment;
+package com.uiuios.aios.fragment.app;
import android.app.ActivityOptions;
import android.content.Context;
@@ -27,13 +27,14 @@ 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.DailyAppActivity;
import com.uiuios.aios.activity.ScreenLockActivity;
-import com.uiuios.aios.activity.main.MainActivity;
-import com.uiuios.aios.base.BaseFragment;
+import com.uiuios.aios.activity.dailyapp.DailyAppActivity;
+import com.uiuios.aios.activity.main.OldMainActivity;
+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;
@@ -46,7 +47,6 @@ import com.uiuios.aios.shortcut.ShortcutUtils;
import com.uiuios.aios.utils.ApkUtils;
import com.uiuios.aios.utils.AppUsedTimeUtils;
import com.uiuios.aios.utils.IconUtils;
-
import com.uiuios.aios.view.MyGridLayout;
import java.util.ArrayList;
@@ -60,7 +60,7 @@ import io.reactivex.rxjava3.disposables.Disposable;
* Use the {@link AppListFragment#newInstance} factory method to
* create an instance of this fragment.
*/
-public class AppListFragment extends BaseFragment {
+public class AppListFragment extends BaseMvvmFragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
@@ -70,7 +70,6 @@ public class AppListFragment extends BaseFragment {
private String mParam1;
private String mParam2;
- private Context mContext;
private ArrayList mDesktopIcons;
private MyGridLayout gridLayout;
private String TAG = AppListFragment.class.getSimpleName();
@@ -115,35 +114,35 @@ public class AppListFragment extends BaseFragment {
}
- private View rootView;
-
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- rootView = inflater.inflate(R.layout.fragment_applist, container, false);
- mContext = rootView.getContext();
- mLauncherApps = (LauncherApps) mContext.getSystemService(Context.LAUNCHER_APPS_SERVICE);
- initView();
- return rootView;
+ protected int getLayoutId() {
+ return R.layout.fragment_applist;
}
- private void initView() {
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(getCtx());
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ }
+
+ @Override
+ protected void initView(Bundle bundle) {
if (mDesktopIcons.size() != 12) {
mDesktopIcons.addAll(new ArrayList<>(Arrays.asList(new DesktopIcon[12 - mDesktopIcons.size()])));
}
- gridLayout = rootView.findViewById(R.id.list);
- if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
- gridLayout.set(4, 3);
+ gridLayout = getActivity().findViewById(R.id.list);
+ if (getCtx().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ gridLayout.set(3, 3);
} else {
- gridLayout.set(3, 4);
+ gridLayout.set(3, 3);
}
gridLayout.setGridAdapter(new MyGridLayout.GridAdatper() {
@Override
public View getView(int index) {
- PackageManager pm = rootView.getContext().getPackageManager();
- View view = getLayoutInflater().inflate(R.layout.item_actions,
- null);
+ PackageManager pm = getCtx().getPackageManager();
+ View view = getLayoutInflater().inflate(R.layout.item_actions, null);
ImageView iv = view.findViewById(R.id.iv);
ImageView iv_app = view.findViewById(R.id.iv_app);
TextView tv = view.findViewById(R.id.tv);
@@ -154,7 +153,7 @@ public class AppListFragment extends BaseFragment {
String pkg = desktopIcon.getPackage();
if (desktopIcon instanceof ShortcutPkgInfo) {
iv_app.setVisibility(View.VISIBLE);
- iv_app.setImageDrawable(ApkUtils.getAppDrawable(mContext, pkg));
+ iv_app.setImageDrawable(ApkUtils.getAppDrawable(getCtx(), pkg));
} else {
iv_app.setVisibility(View.GONE);
}
@@ -172,7 +171,7 @@ public class AppListFragment extends BaseFragment {
}
if ("aios.daily.app".equals(pkg)) {
- int appSize = AppStatusManager.getInstance().getPackageList().size();
+ long appSize = AppStatusManager.getInstance().getPackageListSize();
if (appSize == 0) {
bg.setVisibility(View.GONE);
} else {
@@ -185,13 +184,13 @@ public class AppListFragment extends BaseFragment {
int resID = getActivity().getResources().getIdentifier(val, "drawable", "com.uiuios.aios");
if (resID == 0) {
Log.e(TAG, "getView: not found src : " + pkg);
- iv.setImageDrawable(desktopIcon.getIcon());
+ iv.setImageDrawable(desktopIcon.getIcon(getCtx()));
} else {
iv.setImageDrawable(getActivity().getResources().getDrawable(resID));
- desktopIcon.setIcon(mContext.getResources().getDrawable(resID));
+// desktopIcon.setIcon(getCtx().getResources().getDrawable(resID));
}
} else {
- iv.setImageDrawable(desktopIcon.getIcon());
+ iv.setImageDrawable(desktopIcon.getIcon(getCtx()));
}
tv.setText(desktopIcon.getTitle());
// linearLayout.setEnabled(true);
@@ -231,10 +230,10 @@ public class AppListFragment extends BaseFragment {
}
switch (desktopIcon.getPackage()) {
case "aios.daily.app":
- startActivity(new Intent(mContext, DailyAppActivity.class));
+ startActivity(new Intent(getCtx(), DailyAppActivity.class));
break;
case "aios.exit":
- int is_activation = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
+ int is_activation = Settings.Global.getInt(getCtx().getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0);
if (is_activation == 0) {
RemoteManager.getInstance().openLauncher3();
} else {
@@ -243,10 +242,10 @@ public class AppListFragment extends BaseFragment {
break;
case "aios.family":
// startActivity(new Intent(mContext, FamilySpaceActivity.class));
- ApkUtils.openApp(mContext, "com.uiui.videoplayer");
+ ApkUtils.openApp(getCtx(), "com.uiui.videoplayer");
break;
case "aios.appstore":
- ApkUtils.openApp(mContext, "com.uiuios.appstore");
+ ApkUtils.openApp(getCtx(), "com.uiuios.appstore");
break;
case "com.android.dialer":
// int aole_call_forbid = Settings.System.getInt(mContext.getContentResolver(), "aole_call_forbid", 0);
@@ -270,9 +269,9 @@ public class AppListFragment extends BaseFragment {
// SendRunningApp(getActivity());
break;
default:
- int setting_other_appInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1);
+ int setting_other_appInstaller = Settings.Global.getInt(getCtx().getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1);
if (setting_other_appInstaller == 0
- && !ApkUtils.isSystemApp(mContext, desktopIcon.getPackage()
+ && !ApkUtils.isSystemApp(getCtx(), desktopIcon.getPackage()
)) {
Toaster.show("已禁止应用打开");
} else {
@@ -308,6 +307,13 @@ public class AppListFragment extends BaseFragment {
});
}
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+
+ }
+
+
private void updateAppDisableStatus(String pkg, String label) {
AppManager.getInstance().addAddPakcage(pkg);
NetInterfaceManager.getInstance().getUpdateAppIconObservable(pkg, label, 0)
@@ -344,26 +350,26 @@ public class AppListFragment extends BaseFragment {
}
private void startScreenLockActivity() {
- Intent intent = new Intent(mContext, ScreenLockActivity.class);
- mContext.startActivity(intent);
+ Intent intent = new Intent(getCtx(), ScreenLockActivity.class);
+ getCtx().startActivity(intent);
}
private void showShortcutDialog(ShortcutPkgInfo shortcutPkgInfo) {
if (shortcutPkgInfo == null) return;
String label = shortcutPkgInfo.getTitle();
String pkg = shortcutPkgInfo.getPackage();
- ShortcutDialog shortcutDialog = new ShortcutDialog(mContext);
+ ShortcutDialog shortcutDialog = new ShortcutDialog(getCtx());
shortcutDialog.setTitle("删除快捷方式");
shortcutDialog.setMessage(label);
- shortcutDialog.setIconImage(shortcutPkgInfo.getIcon());
- shortcutDialog.setAppIconImage(ApkUtils.getAppDrawable(mContext, pkg));
+ shortcutDialog.setIconImage(shortcutPkgInfo.getIcon(getCtx()));
+ shortcutDialog.setAppIconImage(ApkUtils.getAppDrawable(getCtx(), pkg));
shortcutDialog.setOnClickBottomListener(new ShortcutDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
if (!ShortcutUtils.getInstance().deleteShortcut(shortcutPkgInfo.getId(), shortcutPkgInfo.getPackageName())) {
Toaster.show("删除失败");
}
- mContext.sendBroadcast(new Intent(MainActivity.ACTION_PACKAGE_HIDE));
+ getCtx().sendBroadcast(new Intent(OldMainActivity.ACTION_PACKAGE_HIDE));
shortcutDialog.dismiss();
}
@@ -378,10 +384,10 @@ public class AppListFragment extends BaseFragment {
private void showHideDialog(DesktopIcon desktopIcon) {
String label = desktopIcon.getTitle();
String pkg = desktopIcon.getPackage();
- DailyAppDialog dailyAppDialog = new DailyAppDialog(mContext);
+ DailyAppDialog dailyAppDialog = new DailyAppDialog(getCtx());
dailyAppDialog.setTitle("移到日常应用");
dailyAppDialog.setMessage(label);
- dailyAppDialog.setIconImage(desktopIcon.getIcon());
+ dailyAppDialog.setIconImage(desktopIcon.getIcon(getCtx()));
dailyAppDialog.setOnClickBottomListener(new DailyAppDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
@@ -435,6 +441,7 @@ public class AppListFragment extends BaseFragment {
public void setAppList(ArrayList appList) {
this.mDesktopIcons = appList;
+
}
@Override
diff --git a/app/src/main/java/com/uiuios/aios/fragment/app/AppListViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/app/AppListViewModel.java
new file mode 100644
index 0000000..0be81ca
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/app/AppListViewModel.java
@@ -0,0 +1,17 @@
+package com.uiuios.aios.fragment.app;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.databinding.FragmentApplistBinding;
+
+public class AppListViewModel extends BaseViewModel {
+ @Override
+ public FragmentApplistBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java
new file mode 100644
index 0000000..6a28ca0
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java
@@ -0,0 +1,83 @@
+package com.uiuios.aios.fragment.contact;
+
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.GridLayoutManager;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.contact.AddContactActivity;
+import com.uiuios.aios.adapter.HomeContactAdapter;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
+import com.uiuios.aios.bean.Contact;
+import com.uiuios.aios.databinding.FragmentContactHomeBinding;
+
+import java.util.List;
+
+public class ContactFragment extends BaseMvvmFragment {
+ private static final String TAG = ContactFragment.class.getSimpleName();
+
+
+ private HomeContactAdapter mContactAdapter;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_contact_home;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(getCtx());
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ protected void initView(Bundle bundle) {
+ mContactAdapter = new HomeContactAdapter();
+ if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(getContext(), 3));
+ } else {
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(getContext(), 2));
+ }
+ mViewDataBinding.rvContact.setAdapter(mContactAdapter);
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+ mViewModel.getContactList().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List contacts) {
+ if (contacts == null || contacts.size() == 0) {
+// mViewDataBinding.tvPeople.setText("暂无数据");
+ } else {
+// mViewDataBinding.tvPeople.setText(contacts.size() + "人");
+ }
+// Contact contact = new Contact();
+// contact.setName("拨号");
+// contact.setMobile(OldContactAdapter.DIALER_PACKAGE);
+// contacts.add(0, contact);
+ mContactAdapter.setContactList(contacts);
+ }
+ });
+ }
+
+ @Override
+ public void fetchData() {
+ Log.e(TAG, "fetchData: ");
+ mViewModel.getContact();
+ }
+
+ public class BtnClick {
+
+ public void toAdd(View view) {
+ Intent intent = new Intent(getContext(), AddContactActivity.class);
+ startActivity(intent);
+ }
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/contact/ContactViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactViewModel.java
new file mode 100644
index 0000000..1e3659c
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/contact/ContactViewModel.java
@@ -0,0 +1,92 @@
+package com.uiuios.aios.fragment.contact;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
+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.config.CommonConfig;
+import com.uiuios.aios.databinding.FragmentContactHomeBinding;
+import com.uiuios.aios.gson.GsonUtils;
+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;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class ContactViewModel extends BaseViewModel {
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
+ @Override
+ public FragmentContactHomeBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ private MutableLiveData> mContactList = new MutableLiveData<>();
+
+ public MutableLiveData> getContactList() {
+ return mContactList;
+ }
+
+ public void getContact() {
+ NetInterfaceManager.getInstance()
+ .getContactListObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getContactList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getContactList", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data));
+ mContactList.setValue(listBaseResponse.data);
+ } else {
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
+ mContactList.setValue(new ArrayList<>());
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getContactList", "onError: " + e.getMessage());
+ String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
+ Gson gson = new Gson();
+ Type type = new TypeToken>() {
+ }.getType();
+ List contacts = gson.fromJson(jsonString, type);
+ if (contacts == null) {
+ mContactList.setValue(new ArrayList<>());
+ } else {
+ mContactList.setValue(contacts);
+ }
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getContactList", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java
similarity index 89%
rename from app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java
rename to app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java
index 697805d..67ea6c3 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/ControlFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/control/ControlFragment.java
@@ -1,4 +1,4 @@
-package com.uiuios.aios.fragment;
+package com.uiuios.aios.fragment.control;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
@@ -26,36 +26,28 @@ import android.os.Looper;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
-import android.widget.ImageView;
import android.widget.SeekBar;
-import android.widget.TextView;
import androidx.annotation.NonNull;
-import androidx.constraintlayout.widget.ConstraintLayout;
+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.ControlActivity;
-import com.uiuios.aios.activity.SplashActivity;
-import com.uiuios.aios.activity.main.MainActivity;
-import com.uiuios.aios.activity.main.PhoneMainActivity;
-import com.uiuios.aios.base.BaseFragment;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
+import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
-import com.uiuios.aios.disklrucache.CacheHelper;
+import com.uiuios.aios.databinding.PhoneFragmentControlBinding;
import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.utils.BrightnessUtils;
-import com.uiuios.aios.utils.Utils;
-import com.uiuios.aios.view.RulerSeekBar;
-
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -63,48 +55,14 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
/**
* A simple {@link Fragment} subclass.
* Use the {@link ControlFragment#newInstance} factory method to
* create an instance of this fragment.
*/
-public class ControlFragment extends BaseFragment {
+public class ControlFragment extends BaseMvvmFragment {
private static final String TAG = ControlFragment.class.getSimpleName();
- @BindView(R.id.tv_wifi)
- TextView tv_wifi;
- @BindView(R.id.tv_battery)
- TextView tv_battery;
-
- @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_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;
-
-
- private View rootView;
private Context mContext;
private ContentResolver mCRv;
@@ -162,34 +120,30 @@ public class ControlFragment extends BaseFragment {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- long time = System.currentTimeMillis();
- Log.e(TAG, "onCreateView: rootView = " + rootView);
- if (null != rootView) {
- ViewGroup parent = (ViewGroup) rootView.getParent();
- if (null != parent) {
- parent.removeView(rootView);
- }
- } else { // 如ongoing果rootView为空 ,就实例化该视图
- if (Utils.isTablet(container.getContext())) {
- rootView = inflater.inflate(R.layout.fragment_control, container, false);
- } else {
- rootView = inflater.inflate(R.layout.phone_fragment_control, container, false);
- }
- mContext = rootView.getContext();
- mCRv = mContext.getContentResolver();
- ButterKnife.bind(this, rootView);
- initView();
- initData();
- }
- Log.e(TAG, "onCreateView: tiem = " + (System.currentTimeMillis() - time));
- return rootView;
+ protected int getLayoutId() {
+ return R.layout.phone_fragment_control;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mContext = getActivity();
+ mCRv = mContext.getContentResolver();
+ mViewModel.setCtx(mContext);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ }
+
+ @Override
+ protected void initView(Bundle bundle) {
+ initView();
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+ initData();
}
private void initView() {
- mCRv = mContext.getContentResolver();
getWifi();
registerReceivers();
getBluetooth();
@@ -201,7 +155,7 @@ public class ControlFragment extends BaseFragment {
getLocation();
getBrightness();
getSound();
- cl_flashlight.setOnClickListener(new View.OnClickListener() {
+ mViewDataBinding.clFlashlight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
@@ -212,7 +166,7 @@ public class ControlFragment extends BaseFragment {
}
}
});
- 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));
@@ -237,11 +191,18 @@ public class ControlFragment extends BaseFragment {
};
private void initData() {
-
+ LiveEventBus.get("MapBean", MapBean.class)
+ .observe(this, new Observer() {
+ @Override
+ public void onChanged(@Nullable MapBean mapBean) {
+ Toaster.showShort("刷新成功");
+ mViewDataBinding.tvLocation.setText(mapBean.getAddress());
+ }
+ });
}
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));
@@ -379,7 +340,7 @@ public class ControlFragment extends BaseFragment {
// 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));
@@ -552,11 +513,11 @@ public class ControlFragment extends BaseFragment {
int level = getBatteryCapacity();
Log.e(TAG, "getBattery: " + level);
if (level <= 20) {
- tv_battery.setTextColor(mContext.getColor(R.color.red));
+ mViewDataBinding.tvBattery.setTextColor(mContext.getColor(R.color.red));
} else {
- tv_battery.setTextColor(mContext.getColor(R.color.control_text_color));
+ mViewDataBinding.tvBattery.setTextColor(mContext.getColor(R.color.control_text_color));
}
- tv_battery.setText(level + "%");
+ mViewDataBinding.tvBattery.setText(level + "%");
if (isBatteryCharging()) {
// cl_battery.setBackground(mContext.getDrawable(R.drawable.control_background_item));
@@ -805,7 +766,7 @@ public class ControlFragment extends BaseFragment {
Log.e(TAG, "getHardware: fontScale = " + fontScale);
List mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size));
List 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) {
@@ -814,8 +775,8 @@ public class ControlFragment extends BaseFragment {
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(mCRv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i)));
@@ -837,11 +798,11 @@ public class ControlFragment extends BaseFragment {
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();
@@ -850,17 +811,17 @@ public class ControlFragment extends BaseFragment {
}
private void getBrightness() {
- seekbar_brightness.setMax(255);
+ mViewDataBinding.seekbarBrightness.setMax(255);
//亮度
int brightness = Settings.System.getInt(mCRv, Settings.System.SCREEN_BRIGHTNESS, 1);
- seekbar_brightness.setProgress(brightness);
+ 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);
@@ -899,20 +860,20 @@ public class ControlFragment extends BaseFragment {
mAudioManager = (AudioManager) mContext.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);
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/control/ControlViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/control/ControlViewModel.java
new file mode 100644
index 0000000..a31f855
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/control/ControlViewModel.java
@@ -0,0 +1,20 @@
+package com.uiuios.aios.fragment.control;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.databinding.PhoneFragmentControlBinding;
+
+public class ControlViewModel extends BaseViewModel {
+ @Override
+ public PhoneFragmentControlBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java
index f1c2cb8..383fef1 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/custom/CustomFragment.java
@@ -569,7 +569,7 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
cl_appstore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.MainActivity");
+ ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.OldMainActivity");
}
});
cl_wifi.setOnClickListener(new View.OnClickListener() {
diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java
deleted file mode 100644
index 2a59203..0000000
--- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.uiuios.aios.fragment.home;
-
-import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.base.mvp.BasePresenter;
-import com.uiuios.aios.base.mvp.BaseView;
-import com.uiuios.aios.bean.DesktopIcon;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class HomeContact {
- public interface Presenter extends BasePresenter {
- void getInstalledApp();
- void getAlarmClock();
- }
-
- public interface PrecisionView extends BaseView {
- void setInstalledApp(ArrayList desktopIcons);
- void setAlarmClock(List alarmClockList);
- void setAlarmClockEmpty();
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java
index 8c8f43b..36ca703 100644
--- a/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java
+++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeFragment.java
@@ -8,47 +8,39 @@ import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.TextView;
-import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import com.google.gson.Gson;
-import com.king.view.circleprogressview.CircleProgressView;
-import com.qweather.sdk.bean.base.Code;
-import com.qweather.sdk.bean.base.Lang;
-import com.qweather.sdk.bean.base.Unit;
+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.qweather.sdk.view.QWeather;
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.addicon.AddIconActivity;
import com.uiuios.aios.activity.alarm.port.PortAlarmActivity;
import com.uiuios.aios.activity.contact.ContactActivity;
import com.uiuios.aios.activity.weather.WeatherActivity;
import com.uiuios.aios.adapter.HomeAppAdapter;
import com.uiuios.aios.adapter.NotificationAdapter;
import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.alarm.AlarmUtils;
-import com.uiuios.aios.base.BaseFragment;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
import com.uiuios.aios.bean.AlarmItem;
import com.uiuios.aios.bean.Contact;
import com.uiuios.aios.bean.DesktopIcon;
+import com.uiuios.aios.bean.MapBean;
import com.uiuios.aios.config.CommonConfig;
+import com.uiuios.aios.databinding.FragmentHomeBinding;
import com.uiuios.aios.dialog.SingleDialog;
-import com.uiuios.aios.manager.AmapManager;
import com.uiuios.aios.manager.RemoteManager;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.push.PushManager;
@@ -63,62 +55,16 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
/**
* A simple {@link Fragment} subclass.
* Use the {@link HomeFragment#newInstance} factory method to
* create an instance of this fragment.
*/
-public class HomeFragment extends BaseFragment implements HomeContact.PrecisionView {
+public class HomeFragment extends BaseMvvmFragment {
private static final String TAG = HomeFragment.class.getSimpleName();
- @BindView(R.id.cl_weather)
- ConstraintLayout cl_weather;
- @BindView(R.id.cl_app)
- ConstraintLayout cl_app;
- @BindView(R.id.cl_space)
- ConstraintLayout cl_space;
- @BindView(R.id.cl_health)
- ConstraintLayout cl_health;
- @BindView(R.id.cl_alarmclock)
- ConstraintLayout cl_alarmclock;
- @BindView(R.id.cl_clear)
- ConstraintLayout cl_clear;
- @BindView(R.id.cl_sos)
- ConstraintLayout cl_sos;
- @BindView(R.id.cl_contact)
- ConstraintLayout cl_contact;
- @BindView(R.id.cl_appstore)
- ConstraintLayout cl_appstore;
- @BindView(R.id.tv_time)
- TextView tv_time;
- @BindView(R.id.tv_location)
- TextView tv_location;
- @BindView(R.id.tv_data)
- TextView tv_data;
- @BindView(R.id.iv_pic)
- ImageView iv_pic;
- @BindView(R.id.tv_temp)
- TextView tv_temp;
- @BindView(R.id.tv_weather)
- TextView tv_weather;
- @BindView(R.id.cpv)
- CircleProgressView cpv;
- @BindView(R.id.rv_noti)
- RecyclerView rv_noti;
- @BindView(R.id.iv_note_nodata)
- ImageView iv_note_nodata;
- @BindView(R.id.rv_app)
- RecyclerView rv_app;
- @BindView(R.id.iv_nodata)
- ImageView iv_nodata;
-
- private View rootView;
private FragmentActivity mContext;
- private HomePresenter mHomePresenter;
private HomeAppAdapter mHomeAppAdapter;
private List alarmItemList;
private NotificationAdapter notificationAdapter;
@@ -174,33 +120,121 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- Log.e(TAG, "onCreateView: ");
- if (null != rootView) {
- ViewGroup parent = (ViewGroup) rootView.getParent();
- if (null != parent) {
- parent.removeView(rootView);
- }
- } else { // 如ongoing果rootView为空 ,就实例化该视图
- rootView = inflater.inflate(R.layout.fragment_home, container, false);
- mContext = (FragmentActivity) rootView.getContext();
- mHomePresenter = new HomePresenter(mContext);
- mHomePresenter.attachView(this);
- mHomePresenter.setLifecycle(getLifecycleSubject());
- ButterKnife.bind(this, rootView);
- initView();
+ protected int getLayoutId() {
+ return R.layout.fragment_home;
+ }
+
+ @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) {
+ initView();
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+ mViewModel.getDesktopIconData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(ArrayList desktopIcons) {
+ Log.e(TAG, "setInstalledApp: " + desktopIcons);
+ if (desktopIcons == null || desktopIcons.size() == 0) {
+ mViewDataBinding.ivNodata.setVisibility(View.VISIBLE);
+ mViewDataBinding.rvApp.setVisibility(View.INVISIBLE);
+ } else {
+ mViewDataBinding.ivNodata.setVisibility(View.GONE);
+ mViewDataBinding.rvApp.setVisibility(View.VISIBLE);
+ mHomeAppAdapter.setDesktopIcons(desktopIcons);
+ }
+ }
+ });
+
+ mViewModel.getAlarmClockData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List alarmClockData) {
+ if (alarmClockData != null && alarmClockData.size() != 0) {
+ notificationAdapter.setDataList(alarmClockData);
+ mViewDataBinding.rvNoti.setVisibility(View.VISIBLE);
+ mViewDataBinding.ivNoteNodata.setVisibility(View.GONE);
+ } else {
+ mViewDataBinding.rvNoti.setVisibility(View.GONE);
+ mViewDataBinding.ivNoteNodata.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+
+ mViewModel.getActivationData().observe(this, new Observer() {
+ @Override
+ public void onChanged(Boolean aBoolean) {
+// if (aBoolean) {
+// mViewDataBinding.clActivation.setVisibility(View.GONE);
+// } else {
+// mViewDataBinding.clActivation.setVisibility(View.VISIBLE);
+// }
+ }
+ });
+ mViewModel.getNowBaseBeanData().observe(this, new Observer() {
+ @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;
+ }
+ }
+// mViewDataBinding.tvWeather.setText(nowBaseBean.getText());
+ }
+ });
+
+ mViewModel.getHourlyBeanData().observe(this, new Observer() {
+ @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() {
+ @Override
+ public void onChanged(WeatherDailyBean.DailyBean dailyBean) {
+ mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
+ }
+ });
- }
- return rootView;
}
private void initView() {
initAmap();
setTime();
refreshMemory();
-
registerTimeReceiver();
registerAlarmClockReceiver();
@@ -211,16 +245,11 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
getAlarm();
}
});
- rv_noti.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- getAlarm();
- }
- });
- rv_noti.setLayoutManager(new LinearLayoutManager(mContext));
- rv_noti.setAdapter(notificationAdapter);
- rv_app.setLayoutManager(new GridLayoutManager(mContext, 3));
+ mViewDataBinding.rvNoti.setLayoutManager(new LinearLayoutManager(mContext));
+ mViewDataBinding.rvNoti.setAdapter(notificationAdapter);
+
+ mViewDataBinding.rvApp.setLayoutManager(new GridLayoutManager(mContext, 3));
HashMap stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
@@ -230,114 +259,16 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 40));//底部间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 4));//左间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 4));//右间距
- rv_app.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
+ mViewDataBinding.rvApp.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mHomeAppAdapter = new HomeAppAdapter();
- rv_app.setAdapter(mHomeAppAdapter);
-
- cl_weather.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(mContext, WeatherActivity.class));
- }
- });
- cl_app.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- });
- cl_space.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.MainActivity");
- }
- });
-
- cl_health.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- });
- cl_alarmclock.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- });
- cl_clear.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- killBackgroundApp();
- }
- });
- cl_sos.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- checkSosNumber();
- }
- });
- cl_contact.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(mContext, ContactActivity.class));
- }
- });
- cl_appstore.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- ApkUtils.openPackage(mContext, "com.uiuios.appstore");
- }
- });
- iv_note_nodata.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(new Intent(mContext, PortAlarmActivity.class));
- }
- });
+ mViewDataBinding.rvApp.setAdapter(mHomeAppAdapter);
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
- mHomePresenter.getInstalledApp();
- }
-
- @Override
- public void setInstalledApp(ArrayList desktopIcons) {
- Log.e(TAG, "setInstalledApp: " + desktopIcons);
- if (desktopIcons == null || desktopIcons.size() == 0) {
- iv_nodata.setVisibility(View.VISIBLE);
- rv_app.setVisibility(View.INVISIBLE);
- } else {
- iv_nodata.setVisibility(View.GONE);
- rv_app.setVisibility(View.VISIBLE);
- mHomeAppAdapter.setDesktopIcons(desktopIcons);
- }
- mHomePresenter.getAlarmClock();
- }
-
- @Override
- public void setAlarmClock(List alarmClockList) {
-// AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock();
-// List data = new ArrayList<>();
-// if (alarmClockData != null) {
-// data.add(alarmClockData);
- if (alarmClockList != null) {
- notificationAdapter.setDataList(alarmClockList);
- rv_noti.setVisibility(View.VISIBLE);
- iv_note_nodata.setVisibility(View.GONE);
- } else {
- rv_noti.setVisibility(View.GONE);
- iv_note_nodata.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- public void setAlarmClockEmpty() {
- rv_noti.setVisibility(View.GONE);
- iv_note_nodata.setVisibility(View.VISIBLE);
+ mViewModel.init();
}
//监听时间和日期变化
@@ -392,7 +323,7 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
- mHomePresenter.getAlarmClock();
+ mViewModel.getAlarmClock();
}
}, 3456);
}
@@ -466,11 +397,11 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
long total = AppUtil.getTotalMemory(mContext);
int x = (int) (((total - avail) / (double) total) * 100);
if (x > 80) {
- cpv.setProgressColor(mShaderColorsRed);
+ mViewDataBinding.cpv.setProgressColor(mShaderColorsRed);
} else {
- cpv.setProgressColor(mShaderColors);
+ mViewDataBinding.cpv.setProgressColor(mShaderColors);
}
- cpv.showAnimation(0, x, 1000);
+ mViewDataBinding.cpv.showAnimation(0, x, 1000);
float x2 = (((total - avail) / (float) total));
}
@@ -478,10 +409,10 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
long time = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = new Date(time);
- tv_time.setText(sdf.format(date));
+ mViewDataBinding.tvTime.setText(sdf.format(date));
SimpleDateFormat sdf2 = new SimpleDateFormat("MM月-dd日");
Date date2 = new Date(time);
- tv_data.setText(sdf2.format(date2) + "\t" + getWeek());
+ mViewDataBinding.tvData.setText(sdf2.format(date2) + "\t" + getWeek());
}
/**
@@ -500,9 +431,23 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
}
private void initAmap() {
- String city = AmapManager.getInstance().getCity();
- tv_location.setText(city);
- getweather(AmapManager.getInstance().getLocationTude());
+ 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)
+ .observe(this, new Observer() {
+ @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());
+ }
+ });
+ }
}
@@ -514,147 +459,37 @@ public class HomeFragment extends BaseFragment implements HomeContact.PrecisionV
return hour >= 16 && minute >= 30;
}
- private String nowString;
+ public class BtnClick {
+ public void edit(View view) {
+ startActivity(new Intent(mContext, AddIconActivity.class));
+ }
- private void getweather(String location) {
- Log.e(TAG, "getweather: " + location);
- /**
- * 实况天气数据
- * @param location 所查询的地区,可通过该地区名称、ID、IP和经纬度进行查询经纬度格式:经度,纬度
- * (英文,分隔,十进制格式,北纬东经为正,南纬西经为负)
- * @param lang (选填)多语言,可以不使用该参数,默认为简体中文
- * @param unit (选填)单位选择,公制(m)或英制(i),默认为公制单位
- * @param listener 网络访问结果回调
- */
- QWeather.getWeatherNow(mContext, location, Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener() {
- @Override
- public void onError(Throwable e) {
- Log.e("getWeatherNow", "onError: " + e);
- }
+ public void getAlarmClock(View view) {
+ getAlarm();
+ }
- @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();
-// String imageName = "he" + now.getIcon();
-// int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
-// iv_pic.setImageDrawable(mContext.getDrawable(resId));
- nowString = now.getText();
- tv_temp.setText(now.getTemp() + "℃");
- tv_weather.setText(now.getText());
- String iconDay = weatherBean.getNow().getIcon();
- Log.e("getweather", "onSuccess: iconDay = " + iconDay);
- if (isNight()) {
- cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_night));
- } else {
- switch (weatherBean.getNow().getIcon()) {
- default:
- case "100":
- case "150":
- //晴
- cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather));
- break;
- case "102":
- case "152":
- //少云
- cl_weather.setBackground(mContext.getDrawable(R.drawable.custom_bg_weather_rain));
- break;
- }
- }
- } else {
- //在此查看返回数据失败的原因
- Code code = weatherBean.getCode();
- Log.d("getWeatherNow", "failed code: " + code);
- }
- }
- });
+ public void toWeather(View view) {
+ startActivity(new Intent(mContext, WeatherActivity.class));
+ }
- QWeather.getWeather24Hourly(mContext, location, new QWeather.OnResultWeatherHourlyListener() {
- @Override
- public void onError(Throwable throwable) {
- Log.e("getWeather24Hourly", "onError: " + throwable);
- }
+ public void toVideoplayer(View view) {
+ ApkUtils.openPackage(mContext, "com.uiui.videoplayer", "com.uiui.videoplayer.activity.main.MainActivity");
+ }
- @Override
- public void onSuccess(WeatherHourlyBean weatherHourlyBean) {
- Log.d("getWeather24Hourly", "onSuccess: " + new Gson().toJson(weatherHourlyBean));
- if (Code.OK == weatherHourlyBean.getCode()) {
- List hourly = weatherHourlyBean.getHourly();
- if (hourly != null && hourly.size() != 0) {
- WeatherHourlyBean.HourlyBean now = hourly.get(0);
- String imageName = "he" + now.getIcon();
- Log.e(TAG, "onSuccess: " + imageName);
- if (isAdded()) {
- int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
- Log.e(TAG, "onSuccess: " + resId);
- if (resId == 0) {
- iv_pic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
- } else {
- iv_pic.setImageDrawable(mContext.getDrawable(resId));
- }
- tv_temp.setText(now.getTemp() + "℃");
- }
- }
- } else {
- //在此查看返回数据失败的原因
- Code code = weatherHourlyBean.getCode();
- Log.e("getWeather24Hourly", "failed code: " + code);
- }
- }
- });
+ public void killApp(View view) {
+ killBackgroundApp();
+ }
- QWeather.getWeather7D(mContext, location, new QWeather.OnResultWeatherDailyListener() {
- @Override
- public void onError(Throwable throwable) {
- Log.e("getWeather", "onError: " + throwable.getMessage());
+ public void toSos(View view) {
+ checkSosNumber();
+ }
- }
+ public void toContact(View view) {
+ startActivity(new Intent(mContext, ContactActivity.class));
+ }
- @Override
- public void onSuccess(WeatherDailyBean weatherDailyBean) {
- String jsonString = new Gson().toJson(weatherDailyBean);
- Log.d("getWeather", "onSuccess: " + jsonString);
- mMMKV.encode(CommonConfig.WEATHER_DAILY_KEY, jsonString);
- List dailyBeans = weatherDailyBean.getDaily();
- if (dailyBeans != null && dailyBeans.size() != 0) {
- WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
- tv_weather.setText(nowString + "\t" + dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
- }
- }
- });
+ public void toAppstore(View view) {
+ ApkUtils.openPackage(mContext, "com.uiuios.appstore");
+ }
}
-
- private void getAlarmClock() {
- NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() {
- @Override
- public void setAlarmClock(List alarmClockList) {
- AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock();
- List data = new ArrayList<>();
- if (alarmClockData != null) {
- data.add(alarmClockData);
- notificationAdapter.setDataList(data);
- rv_noti.setVisibility(View.VISIBLE);
- iv_note_nodata.setVisibility(View.GONE);
- } else {
- rv_noti.setVisibility(View.GONE);
- iv_note_nodata.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- public void setAlarmClockEmpty() {
- rv_noti.setVisibility(View.GONE);
- iv_note_nodata.setVisibility(View.VISIBLE);
- }
-
- @Override
- public void onError() {
-
- }
- });
- }
-
-
}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomePresenter.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomePresenter.java
deleted file mode 100644
index 6ecf893..0000000
--- a/app/src/main/java/com/uiuios/aios/fragment/home/HomePresenter.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.uiuios.aios.fragment.home;
-
-import android.content.Context;
-
-import com.trello.rxlifecycle4.android.FragmentEvent;
-import com.uiuios.aios.R;
-import com.uiuios.aios.alarm.AlarmClockData;
-import com.uiuios.aios.bean.DesktopIcon;
-import com.uiuios.aios.manager.AppManager;
-import com.uiuios.aios.network.NetInterfaceManager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import io.reactivex.rxjava3.annotations.NonNull;
-import io.reactivex.rxjava3.subjects.BehaviorSubject;
-
-public class HomePresenter implements HomeContact.Presenter {
- private static final String TAG = HomePresenter.class.getSimpleName();
- private Context mContext;
- private HomeContact.PrecisionView mView;
-
- public HomePresenter(Context context) {
- this.mContext = context;
- }
-
- private BehaviorSubject lifecycle;
-
- void setLifecycle(BehaviorSubject lifecycle) {
- this.lifecycle = lifecycle;
- }
-
- public BehaviorSubject getLifecycle() {
- return lifecycle;
- }
-
- @Override
- public void attachView(@NonNull HomeContact.PrecisionView view) {
- this.mView = view;
- }
-
- @Override
- public void detachView() {
- this.mView = null;
- }
-
-
- @Override
- public void getInstalledApp() {
- ArrayList desktopIcons = AppManager.getInstance().getAddDesktopIcon();
-// DesktopIcon updateDesktopIcon = new DesktopIcon();
-// updateDesktopIcon.setLable("应用更新");
-// updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME);
-// updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update));
-// desktopIcons.add(desktopIcons.size(), updateDesktopIcon);
-
- DesktopIcon desktopIcon = new DesktopIcon();
- desktopIcon.setTitle("添加应用");
- desktopIcon.setPackage(AppManager.ADD_NAME);
- desktopIcon.setIcon(mContext.getDrawable(R.drawable.home_icon_add));
- desktopIcons.add(desktopIcons.size(), desktopIcon);
-
- mView.setInstalledApp(desktopIcons);
- }
-
- @Override
- public void getAlarmClock() {
- NetInterfaceManager.getInstance().getAlarmClockFragment(lifecycle, new NetInterfaceManager.AlarmClockCallback() {
- @Override
- public void setAlarmClock(List alarmClockList) {
- mView.setAlarmClock(alarmClockList);
- }
-
- @Override
- public void setAlarmClockEmpty() {
- mView.setAlarmClockEmpty();
- }
-
- @Override
- public void onError() {
-
- }
- });
- }
-}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/home/HomeViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/home/HomeViewModel.java
new file mode 100644
index 0000000..6b75405
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/home/HomeViewModel.java
@@ -0,0 +1,225 @@
+package com.uiuios.aios.fragment.home;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.google.gson.Gson;
+import com.hjq.toast.Toaster;
+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.android.FragmentEvent;
+import com.uiuios.aios.alarm.AlarmClockData;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.bean.DesktopIcon;
+import com.uiuios.aios.config.CommonConfig;
+import com.uiuios.aios.databinding.FragmentHomeBinding;
+import com.uiuios.aios.manager.AppManager;
+import com.uiuios.aios.network.NetInterfaceManager;
+import com.uiuios.aios.utils.ActivationUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HomeViewModel extends BaseViewModel {
+ private static final String TAG = HomeViewModel.class.getSimpleName();
+
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
+
+ @Override
+ public FragmentHomeBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public void init() {
+ getInstalledApp();
+ getAlarmClock();
+ }
+
+ private MutableLiveData> DesktopIconData = new MutableLiveData<>();
+
+ public MutableLiveData> getDesktopIconData() {
+ return DesktopIconData;
+ }
+
+ public void getInstalledApp() {
+ ArrayList desktopIcons = AppManager.getInstance().getAddDesktopIcon();
+// DesktopIcon updateDesktopIcon = new DesktopIcon();
+// updateDesktopIcon.setLable("应用更新");
+// updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME);
+// updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update));
+// desktopIcons.add(desktopIcons.size(), updateDesktopIcon);
+
+ if (desktopIcons.size()!=6){
+ DesktopIcon desktopIcon = new DesktopIcon();
+ desktopIcon.setTitle("添加应用");
+ desktopIcon.setPackage(AppManager.ADD_NAME);
+// desktopIcon.setIcon(mContext.getDrawable(R.drawable.home_icon_add));
+ desktopIcons.add(desktopIcons.size(), desktopIcon);
+ }
+
+ DesktopIconData.setValue(desktopIcons);
+ }
+
+ private MutableLiveData> mAlarmClockData = new MutableLiveData<>();
+
+ public MutableLiveData> getAlarmClockData() {
+ return mAlarmClockData;
+ }
+
+ public void getAlarmClock() {
+ NetInterfaceManager.getInstance().getAlarmClockFragment(getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
+ @Override
+ public void setAlarmClock(List alarmClockList) {
+ mAlarmClockData.setValue(alarmClockList);
+ }
+
+ @Override
+ public void setAlarmClockEmpty() {
+ mAlarmClockData.setValue(new ArrayList<>());
+ }
+
+ @Override
+ public void onError() {
+
+ }
+ });
+ }
+
+
+ private MutableLiveData activationData = new MutableLiveData<>();
+
+ public MutableLiveData getActivationData() {
+ return activationData;
+ }
+
+ public void getSnIsActivation() {
+ boolean activation = ActivationUtil.isActivation(getCtx());
+ Log.e(TAG, "getSnIsActivation: is_activation = " + activation);
+ 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 mNowBaseBeanData = new MutableLiveData<>();
+
+ public MutableLiveData 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 mHourlyBeanData = new MutableLiveData<>();
+
+ public MutableLiveData 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 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 DailyBeanData = new MutableLiveData<>();
+
+ public MutableLiveData 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 dailyBeans = weatherDailyBean.getDaily();
+ if (dailyBeans != null && dailyBeans.size() != 0) {
+ WeatherDailyBean.DailyBean dailyBean = weatherDailyBean.getDaily().get(0);
+ DailyBeanData.postValue(dailyBean);
+ }
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java
new file mode 100644
index 0000000..ebe9a22
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java
@@ -0,0 +1,122 @@
+package com.uiuios.aios.fragment.phone.contact;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.GridLayoutManager;
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.contact.AddContactActivity;
+import com.uiuios.aios.adapter.ContactAdapter;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
+import com.uiuios.aios.bean.Contact;
+import com.uiuios.aios.databinding.FragmentContactBinding;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A simple {@link BaseMvvmFragment} subclass.
+ * Use the {@link ContactFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class ContactFragment extends BaseMvvmFragment {
+ private static final String TAG = ContactFragment.class.getSimpleName();
+
+ private Context mContext;
+ private ContactAdapter mContactAdapter;
+
+ public ContactFragment() {
+
+ }
+
+ public static ContactFragment newInstance() {
+ ContactFragment fragment = new ContactFragment();
+ return fragment;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_contact;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mContext = getActivity();
+ mViewModel.setCtx(mContext);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ }
+
+ @Override
+ protected void initView(Bundle bundle) {
+ mContactAdapter = new ContactAdapter();
+ if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(mContext, 3));
+ } else {
+ mViewDataBinding.rvContact.setLayoutManager(new GridLayoutManager(mContext, 2));
+ }
+ mViewDataBinding.rvContact.setAdapter(mContactAdapter);
+ mViewDataBinding.tvAdd.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(mContext, AddContactActivity.class);
+ startActivity(intent);
+ }
+ });
+ mViewModel.getContactListData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List contacts) {
+ List sim = getSIMContacts();
+ mViewDataBinding.tvPeople.setText(contacts.size() + "人");
+ if (sim.size() != 0) {
+ contacts.addAll(sim);
+ }
+ mContactAdapter.setContactList(contacts);
+ }
+ });
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+ mViewModel.getContact();
+ }
+
+ @Override
+ public void fetchData() {
+
+ }
+
+ public static final String NAME = "name";
+ public static final String NUMBER = "number";
+
+ private List getSIMContacts() {
+ List contactList = new ArrayList<>();
+ ContentResolver resolver = mContext.getContentResolver();
+ // 获取Sims卡联系人
+ Uri uri = Uri.parse("content://icc/adn");
+ Cursor phoneCursor = resolver.query(uri, null, null, null, null);
+ if (phoneCursor != null) {
+ final int colName = phoneCursor.getColumnIndex(NAME);
+ final int colNumber = phoneCursor.getColumnIndex(NUMBER);
+ while (phoneCursor.moveToNext()) {
+ String number = phoneCursor.getString(colNumber);
+ // 当手机号码为空的或者为空字段 跳过当前循环
+ String username = phoneCursor.getString(colName);
+ Log.e(TAG, "getSIMContacts: number = " + number + " username = " + username);
+ Contact contact = new Contact(username, number, true);
+ contactList.add(contact);
+ }
+ phoneCursor.close();
+ }
+ return contactList;
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactViewModel.java
new file mode 100644
index 0000000..9a9ec4e
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactViewModel.java
@@ -0,0 +1,92 @@
+package com.uiuios.aios.fragment.phone.contact;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.tencent.mmkv.MMKV;
+import com.trello.rxlifecycle4.RxLifecycle;
+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.config.CommonConfig;
+import com.uiuios.aios.databinding.FragmentContactBinding;
+import com.uiuios.aios.gson.GsonUtils;
+import com.uiuios.aios.network.NetInterfaceManager;
+import com.uiuios.aios.network.UrlAddress;
+
+import java.lang.reflect.Type;
+import java.util.List;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class ContactViewModel extends BaseViewModel {
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
+ @Override
+ public FragmentContactBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ private MutableLiveData> mContactListData = new MutableLiveData<>();
+
+ public MutableLiveData> getContactListData() {
+ return mContactListData;
+ }
+
+ public void getContact() {
+ NetInterfaceManager.getInstance()
+ .getContactListObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getContactList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getContactList", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, GsonUtils.toJSONString(listBaseResponse.data));
+ mContactListData.setValue(listBaseResponse.data);
+ } else {
+ mMMKV.putString(UrlAddress.GET_MAIL_LIST, "");
+// mContactListData.setValue(null);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getContactList", "onError: " + e.getMessage());
+ String jsonString = mMMKV.getString(UrlAddress.GET_MAIL_LIST, null);
+ Gson gson = new Gson();
+ Type type = new TypeToken>() {
+ }.getType();
+ List contacts = gson.fromJson(jsonString, type);
+ if (contacts == null) {
+// mContactListData.setValue(null);
+ } else {
+ mContactListData.setValue(contacts);
+ }
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getContactList", "onComplete: ");
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerFragment.java b/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerFragment.java
new file mode 100644
index 0000000..c1ceaf1
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerFragment.java
@@ -0,0 +1,176 @@
+package com.uiuios.aios.fragment.phone.dialer;
+
+import android.content.Context;
+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 com.hjq.toast.Toaster;
+import com.uiuios.aios.R;
+import com.uiuios.aios.activity.SelectNumberActivity;
+import com.uiuios.aios.activity.contact.ContactActivity;
+import com.uiuios.aios.activity.records.RecordsActivity;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
+import com.uiuios.aios.databinding.FragmentDialerBinding;
+import com.uiuios.aios.utils.Utils;
+
+/**
+ * A simple {@link BaseMvvmFragment} subclass.
+ * Use the {@link DialerFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class DialerFragment extends BaseMvvmFragment {
+ private static final String TAG = DialerFragment.class.getSimpleName();
+
+ private Context mContext;
+
+
+ public DialerFragment() {
+
+ }
+
+ public static DialerFragment newInstance(String param1, String param2) {
+ DialerFragment fragment = new DialerFragment();
+ return fragment;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_dialer;
+ }
+
+ @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) {
+
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+
+ }
+
+ @Override
+ public void fetchData() {
+
+ }
+
+ private void callNumber() {
+ String phone = mViewDataBinding.etPhone.getText().toString();
+ if (TextUtils.isEmpty(phone)) {
+ Toaster.show("请输入号码");
+ } else {
+ if (Utils.isMultiSim(mContext)) {
+ startActivity(new Intent(mContext, SelectNumberActivity.class));
+ } else {
+ try {
+ Intent dialIntent = new Intent(Intent.ACTION_CALL);
+ Uri data = Uri.parse("tel:" + phone);
+ dialIntent.setData(data);
+ startActivity(dialIntent);
+ } catch (Exception e) {
+ Log.e(TAG, "callNumber: " + e.getMessage());
+ }
+ }
+ }
+ }
+
+ private void addNumber(String number, int position) {
+ String tmp = mViewDataBinding.etPhone.getText().toString();
+ if (TextUtils.isEmpty(tmp)) {
+ mViewDataBinding.etPhone.setText(number);
+ } else {
+ mViewDataBinding.etPhone.setText(tmp + number);
+ }
+// soundPool.play(soundMap.get(position), 1, 1, 0, 0, 1);
+ }
+
+ public class BtnClick {
+ public void number0(View view) {
+ addNumber("0", 0);
+ }
+
+ public void number1(View view) {
+ addNumber("1", 1);
+ }
+
+ public void number2(View view) {
+ addNumber("2", 2);
+ }
+
+ public void number3(View view) {
+ addNumber("3", 3);
+ }
+
+ public void number4(View view) {
+ addNumber("4", 4);
+ }
+
+ public void number5(View view) {
+ addNumber("5", 5);
+ }
+
+ public void number6(View view) {
+ addNumber("6", 6);
+ }
+
+ public void number7(View view) {
+ addNumber("7", 7);
+ }
+
+ public void number8(View view) {
+ addNumber("8", 8);
+ }
+
+ public void number9(View view) {
+ addNumber("9", 9);
+ }
+
+ public void numberStar(View view) {
+ addNumber("*", 10);
+ }
+
+ public void numberSharp(View view) {
+ addNumber("#", 11);
+ }
+
+ public void call(View view) {
+ if (Utils.hasSimCard(mContext)) {
+ callNumber();
+ } else {
+ Toaster.show("请插入SIM卡");
+ }
+ }
+
+ public void backSpace(View view) {
+ String tmp = mViewDataBinding.etPhone.getText().toString();
+ if (TextUtils.isEmpty(tmp)) {
+ mViewDataBinding.etPhone.setText("");
+ } else {
+ mViewDataBinding.etPhone.setText(tmp.substring(0, tmp.length() - 1));
+ }
+ }
+
+ public void toContact(View view) {
+ Intent intent = new Intent(mContext, ContactActivity.class);
+ startActivity(intent);
+ }
+
+ public void toRecord(View view) {
+ Intent intent = new Intent(mContext, RecordsActivity.class);
+ startActivity(intent);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerViewModel.java
new file mode 100644
index 0000000..708897a
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerViewModel.java
@@ -0,0 +1,20 @@
+package com.uiuios.aios.fragment.phone.dialer;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiuios.aios.base.mvvm.BaseViewModel;
+import com.uiuios.aios.databinding.FragmentDialerBinding;
+
+public class DialerViewModel extends BaseViewModel {
+ @Override
+ public FragmentDialerBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+
+
+}
diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordFragment.java b/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordFragment.java
new file mode 100644
index 0000000..8285394
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordFragment.java
@@ -0,0 +1,172 @@
+package com.uiuios.aios.fragment.phone.record;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.provider.CallLog;
+import android.util.Log;
+import android.view.View;
+
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+
+import com.uiuios.aios.R;
+import com.uiuios.aios.adapter.CallRecordAdapter;
+import com.uiuios.aios.base.mvvm.fragment.BaseMvvmFragment;
+import com.uiuios.aios.bean.Contact;
+import com.uiuios.aios.bean.RecordsInfo;
+import com.uiuios.aios.databinding.FragmentRecordBinding;
+import com.uiuios.aios.dialog.DeleteDialog;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link RecordFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class RecordFragment extends BaseMvvmFragment {
+ private static final String TAG = RecordFragment.class.getSimpleName();
+
+
+ private Context mContext;
+ private CallRecordAdapter mCallRecordAdapter;
+ private List dataList = new ArrayList<>();
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public RecordFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment RecordFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static RecordFragment newInstance(String param1, String param2) {
+ RecordFragment fragment = new RecordFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_record;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mContext = getActivity();
+ mViewModel.setCtx(mContext);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ }
+
+ @Override
+ protected void initView(Bundle bundle) {
+ mCallRecordAdapter = new CallRecordAdapter();
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
+ linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ mViewDataBinding.recyclerView.setLayoutManager(linearLayoutManager);
+ mViewDataBinding.recyclerView.setAdapter(mCallRecordAdapter);
+
+ mViewDataBinding.ivClear.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ showDialog();
+ }
+ });
+ }
+
+ @Override
+ protected void initData(Bundle savedInstanceState) {
+ mViewModel.getRecordsInfoData().observe(this, new Observer>() {
+ @Override
+ public void onChanged(List recordsInfos) {
+ dataList = recordsInfos;
+ if (dataList.size() == 0) {
+ mViewDataBinding.tvNodata.setVisibility(View.VISIBLE);
+ mViewDataBinding.recyclerView.setVisibility(View.GONE);
+ } else {
+ mViewDataBinding.tvNodata.setVisibility(View.GONE);
+ mViewDataBinding.recyclerView.setVisibility(View.VISIBLE);
+ }
+ mCallRecordAdapter.setRecordsInfoList(dataList);
+ }
+ });
+ mViewModel.getContactMapData().observe(this, new Observer