From 4268c004f5e76564c558da3307575340eb1af9f6 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Tue, 25 Jun 2024 09:24:10 +0800 Subject: [PATCH] =?UTF-8?q?version:5.6=20fix:=20update:=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 67 +- .../uiuios/aios/activity/AddIconActivity.java | 77 - .../uiuios/aios/activity/AddItemActivity.java | 2 +- .../uiuios/aios/activity/NoticeActivity.java | 3 + .../aios/activity/NoticeInfoActivity.java | 3 + .../aios/activity/SelectNumberActivity.java | 56 + .../uiuios/aios/activity/SplashActivity.java | 4 +- .../activity/addicon/AddIconActivity.java | 81 + .../activity/addicon/AddIconViewModel.java | 90 ++ .../activity/contact/AddContactActivity.java | 1 - .../activity/contact/ContactActivity.java | 101 +- .../aios/activity/contact/ContactContact.java | 17 - ...ctPresenter.java => ContactViewModel.java} | 48 +- .../{ => dailyapp}/DailyAppActivity.java | 2 +- .../activity/location/LocationAcivity.java | 4 +- .../aios/activity/main/BaseMainActivity.java | 692 --------- .../aios/activity/main/MainActivity.java | 691 ++++++++- .../aios/activity/main/MainContact.java | 31 - ...{MainPresenter.java => MainViewModel.java} | 136 +- .../aios/activity/main/OldMainActivity.java | 33 + .../aios/activity/main/PhoneMainActivity.java | 39 +- .../aios/activity/phone/PhoneActivity.java | 85 + .../aios/activity/phone/PhoneViewModel.java | 19 + .../activity/weather/WeatherActivity.java | 36 +- .../activity/weather/WeatherViewModel.java | 113 +- .../uiuios/aios/adapter/AddAppAdapter.java | 35 +- .../aios/adapter/CallRecordAdapter.java | 38 +- .../uiuios/aios/adapter/ContactAdapter.java | 13 +- .../uiuios/aios/adapter/DailyAppAdapter.java | 4 +- .../uiuios/aios/adapter/HomeAppAdapter.java | 8 +- .../aios/adapter/HomeContactAdapter.java | 129 ++ .../aios/adapter/KnowledgeVideoAdapter.java | 2 +- .../aios/adapter/LivenVideoAdapter.java | 2 +- .../aios/adapter/OldContactAdapter.java | 130 ++ .../mvvm/fragment/BaseMvvmDialogFragment.java | 311 ++++ .../base/mvvm/fragment/BaseMvvmFragment.java | 275 ++++ .../java/com/uiuios/aios/bean/Contact.java | 19 + .../com/uiuios/aios/bean/DailyAppBean.java | 36 +- .../com/uiuios/aios/bean/DesktopIcon.java | 47 +- .../com/uiuios/aios/config/CommonConfig.java | 5 + .../fragment/{ => app}/AppListFragment.java | 93 +- .../aios/fragment/app/AppListViewModel.java | 17 + .../fragment/contact/ContactFragment.java | 83 + .../fragment/contact/ContactViewModel.java | 92 ++ .../{ => control}/ControlFragment.java | 155 +- .../fragment/control/ControlViewModel.java | 20 + .../aios/fragment/custom/CustomFragment.java | 2 +- .../aios/fragment/home/HomeContact.java | 22 - .../aios/fragment/home/HomeFragment.java | 507 ++---- .../aios/fragment/home/HomePresenter.java | 85 - .../aios/fragment/home/HomeViewModel.java | 225 +++ .../phone/contact/ContactFragment.java | 122 ++ .../phone/contact/ContactViewModel.java | 92 ++ .../fragment/phone/dialer/DialerFragment.java | 176 +++ .../phone/dialer/DialerViewModel.java | 20 + .../fragment/phone/record/RecordFragment.java | 172 ++ .../phone/record/RecordViewModel.java | 145 ++ .../aios/fragment/second/SecondFragment.java | 2 +- .../com/uiuios/aios/manager/AmapManager.java | 6 + .../uiuios/aios/manager/AppStatusManager.java | 38 +- .../uiuios/aios/manager/RemoteManager.java | 3 +- .../uiuios/aios/shortcut/ShortcutPkgInfo.java | 6 +- .../uiuios/aios/shortcut/ShortcutUtils.java | 4 +- .../com/uiuios/aios/utils/ActivationUtil.java | 91 ++ .../java/com/uiuios/aios/utils/ApkUtils.java | 4 +- .../java/com/uiuios/aios/utils/Utils.java | 50 +- .../custom => view}/CustomPagerAdapter.java | 2 +- .../{fragment => view}/ViewPager2Adapter.java | 2 +- .../res/drawable-hdpi/android_icon_sos.png | Bin 0 -> 17967 bytes app/src/main/res/drawable-hdpi/bg_aero.png | Bin 0 -> 256632 bytes .../main/res/drawable-hdpi/dialer_call.png | Bin 0 -> 1227 bytes .../drawable-hdpi/home_dialer_icon_circle.png | Bin 0 -> 5400 bytes .../home_dialer_icon_contacts.png | Bin 0 -> 5552 bytes .../home_dialer_icon_records.png | Bin 0 -> 5407 bytes .../main/res/drawable-hdpi/home_icon_add.png | Bin 2012 -> 2360 bytes .../main/res/drawable-hdpi/home_icon_edit.png | Bin 0 -> 2155 bytes app/src/main/res/drawable-hdpi/sim_card.png | Bin 0 -> 2212 bytes app/src/main/res/drawable/add_contact_bg.xml | 13 + app/src/main/res/drawable/dialer_call_bg.xml | 13 + .../fragment_add_contact_background.xml | 13 + .../drawable/phone_navigation_backround.xml | 19 + .../main/res/drawable/position_background.xml | 8 +- .../main/res/layout-land/activity_contact.xml | 135 +- .../res/layout-land/activity_dailyapp.xml | 2 +- .../main/res/layout-land/activity_phone.xml | 102 ++ .../main/res/layout-land/fragment_custom.xml | 1206 ++++++++------- .../main/res/layout-land/fragment_dialer.xml | 511 ++++++ .../main/res/layout-land/fragment_home.xml | 472 ++++++ .../main/res/layout-port/activity_contact.xml | 136 +- .../res/layout-port/activity_dailyapp.xml | 14 +- .../main/res/layout-port/activity_phone.xml | 102 ++ .../main/res/layout-port/fragment_custom.xml | 1378 +++++++++-------- .../main/res/layout-port/fragment_dialer.xml | 494 ++++++ .../main/res/layout-port/fragment_home.xml | 574 +++++++ .../main/res/layout/activity_add_contact.xml | 36 +- app/src/main/res/layout/activity_add_icon.xml | 119 +- .../main/res/layout/activity_alarm_port.xml | 14 +- app/src/main/res/layout/activity_location.xml | 19 +- ...ctivity_main.xml => activity_main_old.xml} | 2 +- .../res/layout/activity_select_number.xml | 14 + app/src/main/res/layout/activity_weather.xml | 27 +- app/src/main/res/layout/dialog_delete.xml | 2 +- app/src/main/res/layout/fragment_applist.xml | 95 +- app/src/main/res/layout/fragment_contact.xml | 81 + .../main/res/layout/fragment_contact_home.xml | 47 + app/src/main/res/layout/fragment_home.xml | 454 ------ app/src/main/res/layout/fragment_record.xml | 78 + app/src/main/res/layout/item_actions.xml | 20 +- app/src/main/res/layout/item_add_app.xml | 8 +- app/src/main/res/layout/item_call_record.xml | 60 +- app/src/main/res/layout/item_city.xml | 2 +- app/src/main/res/layout/item_contact.xml | 42 +- app/src/main/res/layout/item_contact_home.xml | 91 ++ app/src/main/res/layout/item_contact_old.xml | 88 ++ app/src/main/res/layout/item_daily_app.xml | 8 +- app/src/main/res/layout/item_district.xml | 8 +- app/src/main/res/layout/item_home_app.xml | 4 +- app/src/main/res/layout/item_weather_port.xml | 20 +- .../main/res/layout/phone_activity_main.xml | 211 ++- .../res/layout/phone_fragment_control.xml | 765 ++++----- app/src/main/res/values/colors.xml | 2 + settings.gradle | 2 +- 122 files changed, 8932 insertions(+), 4300 deletions(-) delete mode 100644 app/src/main/java/com/uiuios/aios/activity/AddIconActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/SelectNumberActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/addicon/AddIconActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/addicon/AddIconViewModel.java delete mode 100644 app/src/main/java/com/uiuios/aios/activity/contact/ContactContact.java rename app/src/main/java/com/uiuios/aios/activity/contact/{ContactPresenter.java => ContactViewModel.java} (71%) rename app/src/main/java/com/uiuios/aios/activity/{ => dailyapp}/DailyAppActivity.java (98%) delete mode 100644 app/src/main/java/com/uiuios/aios/activity/main/BaseMainActivity.java delete mode 100644 app/src/main/java/com/uiuios/aios/activity/main/MainContact.java rename app/src/main/java/com/uiuios/aios/activity/main/{MainPresenter.java => MainViewModel.java} (64%) create mode 100644 app/src/main/java/com/uiuios/aios/activity/main/OldMainActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/phone/PhoneActivity.java create mode 100644 app/src/main/java/com/uiuios/aios/activity/phone/PhoneViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/adapter/HomeContactAdapter.java create mode 100644 app/src/main/java/com/uiuios/aios/adapter/OldContactAdapter.java create mode 100644 app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmDialogFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/base/mvvm/fragment/BaseMvvmFragment.java rename app/src/main/java/com/uiuios/aios/fragment/{ => app}/AppListFragment.java (88%) create mode 100644 app/src/main/java/com/uiuios/aios/fragment/app/AppListViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/contact/ContactFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/contact/ContactViewModel.java rename app/src/main/java/com/uiuios/aios/fragment/{ => control}/ControlFragment.java (89%) create mode 100644 app/src/main/java/com/uiuios/aios/fragment/control/ControlViewModel.java delete mode 100644 app/src/main/java/com/uiuios/aios/fragment/home/HomeContact.java delete mode 100644 app/src/main/java/com/uiuios/aios/fragment/home/HomePresenter.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/home/HomeViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/contact/ContactViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/dialer/DialerViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordFragment.java create mode 100644 app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordViewModel.java create mode 100644 app/src/main/java/com/uiuios/aios/utils/ActivationUtil.java rename app/src/main/java/com/uiuios/aios/{fragment/custom => view}/CustomPagerAdapter.java (94%) rename app/src/main/java/com/uiuios/aios/{fragment => view}/ViewPager2Adapter.java (99%) create mode 100644 app/src/main/res/drawable-hdpi/android_icon_sos.png create mode 100644 app/src/main/res/drawable-hdpi/bg_aero.png create mode 100644 app/src/main/res/drawable-hdpi/dialer_call.png create mode 100644 app/src/main/res/drawable-hdpi/home_dialer_icon_circle.png create mode 100644 app/src/main/res/drawable-hdpi/home_dialer_icon_contacts.png create mode 100644 app/src/main/res/drawable-hdpi/home_dialer_icon_records.png create mode 100644 app/src/main/res/drawable-hdpi/home_icon_edit.png create mode 100644 app/src/main/res/drawable-hdpi/sim_card.png create mode 100644 app/src/main/res/drawable/add_contact_bg.xml create mode 100644 app/src/main/res/drawable/dialer_call_bg.xml create mode 100644 app/src/main/res/drawable/fragment_add_contact_background.xml create mode 100644 app/src/main/res/drawable/phone_navigation_backround.xml create mode 100644 app/src/main/res/layout-land/activity_phone.xml create mode 100644 app/src/main/res/layout-land/fragment_dialer.xml create mode 100644 app/src/main/res/layout-land/fragment_home.xml create mode 100644 app/src/main/res/layout-port/activity_phone.xml create mode 100644 app/src/main/res/layout-port/fragment_dialer.xml create mode 100644 app/src/main/res/layout-port/fragment_home.xml rename app/src/main/res/layout/{activity_main.xml => activity_main_old.xml} (96%) create mode 100644 app/src/main/res/layout/activity_select_number.xml create mode 100644 app/src/main/res/layout/fragment_contact.xml create mode 100644 app/src/main/res/layout/fragment_contact_home.xml delete mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_record.xml create mode 100644 app/src/main/res/layout/item_contact_home.xml create mode 100644 app/src/main/res/layout/item_contact_old.xml 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>() { + @Override + public void onChanged(Map stringContactMap) { + mCallRecordAdapter.setContactMap(stringContactMap); + } + }); + mViewModel.getContact(); + mViewModel.getRecordsInfoList(); + } + + @Override + public void fetchData() { + Log.e(TAG, "fetchData: "); + mViewModel.getRecordsInfoList(); + } + + @Override + public void onResume() { + super.onResume(); + Log.e(TAG, "onResume: "); + mViewModel.getRecordsInfoList(); + } + + private void showDialog() { + DeleteDialog dialog = new DeleteDialog(mContext); + dialog.setTitle("提醒") + .setMessage("清空全部通话记录") + .setPositive("确定") + .setNegtive("取消") +// .setSingle(true) + .setOnClickBottomListener(new DeleteDialog.OnClickBottomListener() { + @Override + public void onPositiveClick() { + for (RecordsInfo recordsInfo : dataList) { + String queryString = "NUMBER=" + recordsInfo.getNumber(); + mContext.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null); + } + mViewModel.getRecordsInfoList(); + dialog.dismiss(); + } + + @Override + public void onNegtiveClick() { + dialog.dismiss(); + } + }); + dialog.show(); + } +} diff --git a/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordViewModel.java b/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordViewModel.java new file mode 100644 index 0000000..1c91aa8 --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/fragment/phone/record/RecordViewModel.java @@ -0,0 +1,145 @@ +package com.uiuios.aios.fragment.phone.record; + +import android.content.ContentResolver; +import android.database.Cursor; +import android.provider.CallLog; +import android.text.TextUtils; + +import androidx.lifecycle.MutableLiveData; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiuios.aios.base.mvvm.BaseViewModel; +import com.uiuios.aios.bean.Contact; +import com.uiuios.aios.bean.RecordsInfo; +import com.uiuios.aios.config.CommonConfig; +import com.uiuios.aios.databinding.FragmentRecordBinding; +import com.uiuios.aios.network.UrlAddress; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class RecordViewModel extends BaseViewModel { + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + @Override + public FragmentRecordBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + + private MutableLiveData> mRecordsInfoData = new MutableLiveData<>(); + + public MutableLiveData> getRecordsInfoData() { + return mRecordsInfoData; + } + + /** + * 读取数据 + * + * @return 读取到的数据 + */ + public void getRecordsInfoList() { + if (getCtx() == null) { + return; + } + // 1.获得ContentResolver + ContentResolver resolver = getCtx().getContentResolver(); + // 2.利用ContentResolver的query方法查询通话记录数据库 + /** + * @param uri 需要查询的URI,(这个URI是ContentProvider提供的) + * @param projection 需要查询的字段 + * @param selection sql语句where之后的语句 + * @param selectionArgs ?占位符代表的数据 + * @param sortOrder 排序方式 + * + */ + Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, // 查询通话记录的URI + new String[]{CallLog.Calls.CACHED_NAME// 通话记录的联系人 + , CallLog.Calls.NUMBER// 通话记录的电话号码 + , CallLog.Calls.DATE// 通话记录的日期 + , CallLog.Calls.DURATION// 通话时长 + , CallLog.Calls.TYPE}// 通话类型 + , null, null, CallLog.Calls.DEFAULT_SORT_ORDER// 按照时间逆序排列,最近打的最先显示 + ); + // 3.通过Cursor获得数据 + List list = new ArrayList<>(); + while (cursor.moveToNext()) { + String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); + String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); + long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); +// String date = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date(dateLong)); + int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)); + int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); + + RecordsInfo recordsInfo = new RecordsInfo(); + recordsInfo.setName(name); + recordsInfo.setNumber(number); + recordsInfo.setDate(dateLong); + recordsInfo.setDuration(duration); + recordsInfo.setType(type); + list.add(recordsInfo); + + String typeString = ""; + switch (type) { + case CallLog.Calls.INCOMING_TYPE: + typeString = "打入"; + break; + case CallLog.Calls.OUTGOING_TYPE: + typeString = "打出"; + break; + case CallLog.Calls.MISSED_TYPE: + typeString = "未接"; + break; + default: + break; + } + } + + mRecordsInfoData.setValue(list); + } + + private MutableLiveData> mContactMapData = new MutableLiveData(); + + public MutableLiveData> getContactMapData() { + return mContactMapData; + } + + public void getContact() { + String jsonString = mMMKV.decodeString(UrlAddress.GET_MAIL_LIST); + if (!TextUtils.isEmpty(jsonString)) { + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List contactList = gson.fromJson(jsonString, type); + if (contactList != null) { + Map map = contactList.stream().collect(Collectors.toMap(new Function() { + @Override + public String apply(Contact contact) { + return contact.getMobile(); + } + }, new Function() { + @Override + public Contact apply(Contact contact) { + return contact; + } + })); + mContactMapData.setValue(map); + } + } + + } +} diff --git a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java index 2b8e532..043da68 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java +++ b/app/src/main/java/com/uiuios/aios/fragment/second/SecondFragment.java @@ -321,7 +321,7 @@ public class SecondFragment extends BaseFragment implements SecondContact.View, try { Intent intent = new Intent(Intent.ACTION_MAIN); /*知道要跳转应用的包命与目标Activity*/ - ComponentName componentName = new ComponentName("com.uiui.city", "com.uiui.city.activity.MainActivity"); + ComponentName componentName = new ComponentName("com.uiui.city", "com.uiui.city.activity.OldMainActivity"); intent.putExtra("position", position); intent.setComponent(componentName); intent.putExtra("", "");//这里Intent传值 diff --git a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java index 53f81fb..3eaafa7 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AmapManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AmapManager.java @@ -18,6 +18,7 @@ import com.uiuios.aios.bean.MapBean; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.gson.GsonUtils; import com.uiuios.aios.network.NetInterfaceManager; +import com.uiuios.aios.utils.ActivationUtil; import java.lang.reflect.Type; @@ -103,6 +104,11 @@ public class AmapManager { } public void startLocation() { + boolean activation = ActivationUtil.isActivation(mContext); + if (!activation) { + Log.e(TAG, "startLocation: 未激活" ); + return; + } mAMapLocationClient.stopLocation(); mAMapLocationClient.startLocation(); Log.e(TAG, "initAmap: " + "startLocation"); diff --git a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java index 75813ad..cdce3c3 100644 --- a/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/AppStatusManager.java @@ -8,15 +8,15 @@ import android.content.pm.ResolveInfo; import android.util.Log; import com.tencent.mmkv.MMKV; -import com.uiuios.aios.activity.main.MainActivity; +import com.uiuios.aios.activity.main.OldMainActivity; import com.uiuios.aios.bean.DailyAppBean; import com.uiuios.aios.config.CommonConfig; -import com.uiuios.aios.utils.IconUtils; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Predicate; public class AppStatusManager { private static final String TAG = AppStatusManager.class.getSimpleName(); @@ -66,13 +66,13 @@ public class AppStatusManager { public void addHidedApp(String pkg) { this.hidedAppSet.add(pkg); mMMKV.encode(APP_STATUS_MANAGER_KEY, hidedAppSet); - mContext.sendBroadcast(new Intent(MainActivity.ACTION_PACKAGE_HIDE)); + mContext.sendBroadcast(new Intent(OldMainActivity.ACTION_PACKAGE_HIDE)); } public void removeHidedApp(String pkg) { this.hidedAppSet.remove(pkg); mMMKV.encode(APP_STATUS_MANAGER_KEY, hidedAppSet); - mContext.sendBroadcast(new Intent(MainActivity.ACTION_PACKAGE_HIDE)); + mContext.sendBroadcast(new Intent(OldMainActivity.ACTION_PACKAGE_HIDE)); } public List getPackageList() { @@ -83,26 +83,34 @@ public class AppStatusManager { resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); - for (ResolveInfo packageInfo : resolveinfoList) { String pkg = packageInfo.activityInfo.packageName; if (hidedAppSet.contains(pkg)) { Log.e(TAG, "getPackageList: " + pkg); DailyAppBean appSelectBean = new DailyAppBean(packageInfo.activityInfo.loadLabel(pm).toString(), packageInfo.activityInfo.packageName, - packageInfo.activityInfo.name, - packageInfo.activityInfo.loadIcon(pm)); - int i = IconUtils.appClassNameList.indexOf(pkg); - if (i != -1) { - String val = IconUtils.appIconList.get(i); - int resID = mContext.getResources().getIdentifier(val, "drawable", "com.uiuios.aios"); - if (resID != 0) { - appSelectBean.setIcon(mContext.getResources().getDrawable(resID)); - } - } + packageInfo.activityInfo.name + ); + dailyAppBeanList.add(appSelectBean); } } return dailyAppBeanList; } + + public long getPackageListSize() { + PackageManager pm = mContext.getPackageManager(); + List dailyAppBeanList = new ArrayList<>(); + // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); + // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName + List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); + return resolveinfoList.stream().filter(new Predicate() { + @Override + public boolean test(ResolveInfo resolveInfo) { + return hidedAppSet.contains(resolveInfo.activityInfo.packageName); + } + }).count(); + } } diff --git a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java index a125a86..6156c25 100644 --- a/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java +++ b/app/src/main/java/com/uiuios/aios/manager/RemoteManager.java @@ -11,6 +11,7 @@ import android.util.Log; import com.tencent.bugly.crashreport.CrashReport; import com.tencent.mmkv.MMKV; +import com.uiuios.aios.BuildConfig; import com.uiuios.aios.config.CommonConfig; import com.uiuios.aios.disklrucache.CacheHelper; import com.uiuios.sn.IGetInfoInterface; @@ -118,7 +119,7 @@ public class RemoteManager { * @return 获取sn */ public String getSerial() { -// if (BuildConfig.DEBUG) return "MTK0002306120556370"; +// if (BuildConfig.DEBUG) return "MTK13220282310"; if (mIGetInfoInterface != null) { try { return mIGetInfoInterface.getSerial(); diff --git a/app/src/main/java/com/uiuios/aios/shortcut/ShortcutPkgInfo.java b/app/src/main/java/com/uiuios/aios/shortcut/ShortcutPkgInfo.java index 51a3874..aef962e 100644 --- a/app/src/main/java/com/uiuios/aios/shortcut/ShortcutPkgInfo.java +++ b/app/src/main/java/com/uiuios/aios/shortcut/ShortcutPkgInfo.java @@ -17,22 +17,20 @@ public class ShortcutPkgInfo extends DesktopIcon implements Serializable { } - public ShortcutPkgInfo(String id, String title, String packageName, ComponentName componentName, Drawable icon) { + public ShortcutPkgInfo(String id, String title, String packageName, ComponentName componentName) { mId = id; mTitle = title; mPackageName = packageName; mClass = componentName.getClassName(); mPackage = componentName.getPackageName(); - this.icon = icon; } - public ShortcutPkgInfo(String id, String title, String packageName, String aClass, String aPackage, Drawable icon) { + public ShortcutPkgInfo(String id, String title, String packageName, String aClass, String aPackage) { mId = id; mTitle = title; mPackageName = packageName; mClass = aClass; mPackage = aPackage; - this.icon = icon; } public String getId() { diff --git a/app/src/main/java/com/uiuios/aios/shortcut/ShortcutUtils.java b/app/src/main/java/com/uiuios/aios/shortcut/ShortcutUtils.java index 35008ec..bf2bf85 100644 --- a/app/src/main/java/com/uiuios/aios/shortcut/ShortcutUtils.java +++ b/app/src/main/java/com/uiuios/aios/shortcut/ShortcutUtils.java @@ -102,7 +102,7 @@ public class ShortcutUtils { shortcutPkgInfo.setPackageName(cursor.getString(2)); shortcutPkgInfo.setClass(cursor.getString(3)); shortcutPkgInfo.setPackage(cursor.getString(4)); - shortcutPkgInfo.setIcon(Bytes2Drawable(cursor.getBlob(5))); +// shortcutPkgInfo.setIcon(Bytes2Drawable(cursor.getBlob(5))); list.add(shortcutPkgInfo); } while (cursor.moveToNext()); } @@ -117,7 +117,7 @@ public class ShortcutUtils { values.put(ShortcutHelper.KEY_PACKAGENAME, shortcutPkgInfo.getPackageName()); values.put(ShortcutHelper.KEY_CLASS, shortcutPkgInfo.getClazz()); values.put(ShortcutHelper.KEY_PACKAGE, shortcutPkgInfo.getPackage()); - values.put(ShortcutHelper.KEY_ICON, drawableToBitmap(shortcutPkgInfo.getIcon())); + values.put(ShortcutHelper.KEY_ICON, drawableToBitmap(shortcutPkgInfo.getIcon(mContext))); values.put(ShortcutHelper.KEY_TIMESTAMP, System.currentTimeMillis()); return values; } diff --git a/app/src/main/java/com/uiuios/aios/utils/ActivationUtil.java b/app/src/main/java/com/uiuios/aios/utils/ActivationUtil.java new file mode 100644 index 0000000..2eee18e --- /dev/null +++ b/app/src/main/java/com/uiuios/aios/utils/ActivationUtil.java @@ -0,0 +1,91 @@ +package com.uiuios.aios.utils; + +import android.content.Context; +import android.provider.Settings; + +import com.uiuios.aios.config.CommonConfig; + +public class ActivationUtil { + + /*写入1为激活*/ + private static final int ACTIVATED_KEY = 1; + private static final int INACTIVATED_KEY = 0; + /*默认激活码类型*/ + private static final int DEFAULT_CODE_TYPE = -1; + /*默认过期时间*/ + private static final int DEFAULT_EXPIRE_TIME = -1; + + + /** + * 获取激活状态 + * + * @param context + * @return + */ + public static int getActivationStateCode(Context context) { + int activation = Settings.Global.getInt(context.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, INACTIVATED_KEY); + return activation; + } + + /** + * 是否激活 + * + * @param context + * @return + */ + public static boolean isActivation(Context context) { + if (context == null) return false; + return getActivationStateCode(context) == ACTIVATED_KEY; + } + + /** + * 设置激活状态 + * + * @param context + * @param code + */ + public static void setActivation(Context context, int code) { + Settings.Global.putInt(context.getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, code); + } + + /** + * 设置激活码类型 + * + * @param context + * @param code + */ + public static void setActivationCodeType(Context context, int code) { + Settings.Global.putInt(context.getContentResolver(), CommonConfig.UIUI_CODE_TYPE_KEY, code); + } + + /** + * 获取激活码类型 + * + * @param context + * @return + */ + public static int getActivationCodeType(Context context) { + return Settings.Global.getInt(context.getContentResolver(), CommonConfig.UIUI_CODE_TYPE_KEY, DEFAULT_CODE_TYPE); + } + + /** + * 设置过期时间 + * + * @param context + * @param expireTime + */ + public static void setActivationExpireTime(Context context, long expireTime) { + Settings.Global.putLong(context.getContentResolver(), CommonConfig.UIUI_EXPIRE_TIME_KEY, expireTime); + } + + /** + * 获取过期时间 + * + * @param context + * @return + */ + public static long getActivationExpireTime(Context context) { + return Settings.Global.getLong(context.getContentResolver(), CommonConfig.UIUI_EXPIRE_TIME_KEY, DEFAULT_EXPIRE_TIME); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java index c863c11..abe06f3 100644 --- a/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiuios/aios/utils/ApkUtils.java @@ -287,13 +287,13 @@ public class ApkUtils { desktopIcons.addAll(shortcutPkgInfos); DesktopIcon dailyIcon = new DesktopIcon(); - dailyIcon.setIcon(context.getDrawable(R.drawable.icon_daily_app)); +// dailyIcon.setIcon(context.getDrawable(R.drawable.icon_daily_app)); dailyIcon.setTitle("日常应用"); dailyIcon.setPackage("aios.daily.app"); desktopIcons.add(0, dailyIcon); DesktopIcon familyIcon = new DesktopIcon(); - familyIcon.setIcon(context.getDrawable(R.drawable.com_android_appstore)); +// familyIcon.setIcon(context.getDrawable(R.drawable.com_android_appstore)); familyIcon.setTitle("应用市场"); familyIcon.setPackage("aios.appstore"); desktopIcons.add(1, familyIcon); diff --git a/app/src/main/java/com/uiuios/aios/utils/Utils.java b/app/src/main/java/com/uiuios/aios/utils/Utils.java index 1ea8927..b3eebbc 100644 --- a/app/src/main/java/com/uiuios/aios/utils/Utils.java +++ b/app/src/main/java/com/uiuios/aios/utils/Utils.java @@ -16,10 +16,14 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; +import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Environment; import android.os.UserHandle; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -140,7 +144,7 @@ public class Utils { //爱华定制 intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.AoleReceiver")); // TODO: 2022/7/6 有问题 - setDefaultLauncher(context, "com.android.transfer", "com.android.transfer.MainActivity"); + setDefaultLauncher(context, "com.android.transfer", "com.android.transfer.OldMainActivity"); // SystemProperties.set("persist.sys.launcher.pkgname", pkg); // SystemProperties.set("persist.sys.launcher.classname", className); // } @@ -298,4 +302,48 @@ public class Utils { return result; } + /** + * 判断是否包含SIM卡 + * + * @return 状态 + */ + public static boolean hasSimCard(Context context) { + TelephonyManager telMgr = (TelephonyManager) + context.getSystemService(Context.TELEPHONY_SERVICE); + int simState = telMgr.getSimState(); + boolean result = true; + switch (simState) { + case TelephonyManager.SIM_STATE_ABSENT: + result = false; // 没有SIM卡 + break; + case TelephonyManager.SIM_STATE_UNKNOWN: + result = false; + break; + } + Log.d("try", result ? "有SIM卡" : "无SIM卡"); + return result; + } + + public static boolean isMultiSim(Context context){ + boolean result = false; + TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); + if(telecomManager != null){ + List phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts(); + result = phoneAccountHandleList.size() >= 2; + } + return result; + } + + public static void call(Context context, int id, String telNum){ + TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); + if(telecomManager != null){ + List phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + telNum)); + intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandleList.get(id)); + context.startActivity(intent); + } + } + } diff --git a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomPagerAdapter.java b/app/src/main/java/com/uiuios/aios/view/CustomPagerAdapter.java similarity index 94% rename from app/src/main/java/com/uiuios/aios/fragment/custom/CustomPagerAdapter.java rename to app/src/main/java/com/uiuios/aios/view/CustomPagerAdapter.java index 8237952..428024e 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/custom/CustomPagerAdapter.java +++ b/app/src/main/java/com/uiuios/aios/view/CustomPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.fragment.custom; +package com.uiuios.aios.view; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/com/uiuios/aios/fragment/ViewPager2Adapter.java b/app/src/main/java/com/uiuios/aios/view/ViewPager2Adapter.java similarity index 99% rename from app/src/main/java/com/uiuios/aios/fragment/ViewPager2Adapter.java rename to app/src/main/java/com/uiuios/aios/view/ViewPager2Adapter.java index 3e67885..149d0da 100644 --- a/app/src/main/java/com/uiuios/aios/fragment/ViewPager2Adapter.java +++ b/app/src/main/java/com/uiuios/aios/view/ViewPager2Adapter.java @@ -1,4 +1,4 @@ -package com.uiuios.aios.fragment; +package com.uiuios.aios.view; import android.util.SparseArray; diff --git a/app/src/main/res/drawable-hdpi/android_icon_sos.png b/app/src/main/res/drawable-hdpi/android_icon_sos.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7d41ff767c140206022d039827f70bf3e51699 GIT binary patch literal 17967 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 FV1lH-6^H-; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/bg_aero.png b/app/src/main/res/drawable-hdpi/bg_aero.png new file mode 100644 index 0000000000000000000000000000000000000000..ef06c02686c2863f3c06d18567d86f36d1a7a03d GIT binary patch literal 256632 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 z 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 xUR@EnRFg8 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 h}8Nu6DYwb`w%Ip&rBYBE}Am zl%&gjR|^&-&2M&+$6ntY?J1*Lotx2uXM?~fzt5}RSokDD?{+Oa?)#GA!)fAkxZY`u(7QTaG3 zL!vsf$+%4U<-DY(F{Cl9DC&Yc(8Z$iR|=Ie%*>$o!IFX?K_dPXGv4h0f$n7#@2BCI z2qQ&d)Jfiagc3WlCC^1pz5LC15xR+OMJ`sdfwl93iH#(VZrZ0O>=QWh^vHU%K9N4# zh>1+G0daVJ%cZbL9#P6di-=x>jwx9D=RY1xmrAMg$>?f|n6_xmDz65XF~MtoBE&+VKcUg~ zV2Lc5>N031bSkCTf155uV@1)_2xvC$a}GQi(aJ2o zqf=Xe<4|5FQDY`@58n0$z$gn^p(ak7ZHHlVn(6t^I)(Mb^LID}sfc@BA3lRe2k|gW z5|BGP2LoiqB~B@p-c|t9->b2fxUte8*ALNGe~07H!#aaV@&IYspP z_Eq7r8uWXFM16}Ep4nH$Jow|NoA>4y$Q=C`!NOJX?P8ZJxmG^XlaG?QjxoH|6HYS) z&ezlUlI|wM2zSMn!YPQ1?f8I(KXreQ#)7bAl z0%GQ$#dAZ+)fDKlYo)Ar8EY^pkVLd2da(vMgoeZ2gO+0Fr$PirIsx7a3A3?CaNm$RJc4{oF)~F(2ZHBQgoc3k8|xl4Uih z#e}ZTDd;z8x=3+W?6O9)*j+fKt?T@HBeQgsJ6aEed(5c{k5!NMF`V3lC}t>{>BV0s z6nPuHVEMh(rt6#wJXpLq;?A zp{c};0Hq)}i;(%Hp-?#U-?QOu6{`FOdONr|X{J!b!FyI|L+SRfv~W*5a^< zTdYAR)pi!+pUYXNv~s;}cNu?~3IGnuPUVcOAVD2-l`Z>iI1brK)N%KlOs6nulqk z`z}%$&0ioytfuZdNMvY%uWpKS^pVA{^vp8ut#H z@Zcm8UBxl6s~K?o+UhZl&_r5*eB|#Mflwe4Hs>b0`ex+#AZ2Q_}>I6>)a7GQ{e1^!b zw5J1Tf?qf(^Ct6AwTN~nncki^I9bJ4xdcMRzPH{B%qs@ZGS}V3q|UryUwUXDDA`O9 zoiXMvvRlJeu{8L;AiD#(io9yNixG5HOO(ag!a^MMO=%ycTc`9sWyT;JqYvNBP?T4{ zqiR>Sru0vGPZ! zHB&y|bJX#EpZq8l4&Mvj&|{ ztN~I#P7^~nH58dqU_h6Seaynm4S}-cNzv<=HM!Vem}$P&SiXgoC{pnXAk`hA*xQ7o zxK?53a~kH)^_j@aUy42inh=8BXnLXT3-o`jd5^f$4Hu||mO9q0CJ8=C z=1{a(N2W!!c0(m(RkKHSijZ%4WW#B>{yRJ;TsXzyf@tUhZCe=wGvVkh<_fblfT4(= z)I{*=1}w7%g)5geg*1_(QqEY%ey1}Y+%p;3M_A>SbUY01E=+jVm5{>+5mc&)-hVk>kodJ5bBG!skelf%apG#M(R+=Fa*WGI@o zc^-5hnGmfYl|4uZwOQ*dXkaR*%A%IKEa)>B)kY~5Y(fhQ>aSef_AeLb{eUj}${lQ( zT|cYcnj2o8&LF&Dj-sw=hWR-P4N4S>%{(ihKye*r%Lx?6_|-pR(5jnkKo2c`9cqR0 zCWiR=CV!a-NCTZLnyzYCgW)E~tJE0gf1(WlOLnH^mdMre%m#nY(O?8d?KO)j2t`%K z;MN+P^5(3&$1W3D(%E3Am5v#UvoT?LxL%xYx2 zuvG4N7OWHGH66`YXc+n4@HU5}G+2YaHThM&UEV`@mC(~%J+AC?>fAyX{~m4gLj40~ zo6vSvD{UjAO$hb4>tmDO3LI<^u}w%Ji$QzeU~m$)F1>@R?z@FVfpdFvO*nF(ppA4Z zaE-;+l`)(A&rqz}1mMkdJ{G*fMB+x5=k{pg+>5KV2DubZTkCXbarM#9py?$`&s;%~ zRg4ztKW+T>=PKT!>%Wg&wC$9!_dg|uFJ;@Y1FzF|Kfv?1jI}r9bF2S(9+b(SXvZaz z{HiTx}U)5h)vIo;fJ=^mJc{@aHK^O_! zJ>fI(71cT&Ct4fL$uw40CBF6;K>`mh(RM$(=aBpIGr7Y50+EO0+EqUA@3B#YPTHxX`4S*F4xnwRr!Rv0g)8zD`*m=7sg6091ZD8J<+<8 zkeOGwLFY`bGECfSbIw4BRduYvUoK`Y^5}2MFMP$2IL`|v9TBq5t29Zv+>mCUW}%cH z1=c!amF)WCsJw%Z^Mdo~r>|SPfygYoN)N!UGfxq@R9v1)3^ook{ z7?*dj4~yjc;z<`oSV4!pM#!k6v3XqQb4|qR{iRCfv=J5_HlgTqLR331WwOH*@y)_&qGm2{FQfLn}RKqaDXM* z0gh3pd{ib4TuT9^+CCg}!0W|kAIhMUHE2lpq#s$^-{a}Kn7OX#VaLFEwC9*r^Jr`9 z1wr=a>FXpklnG@rSA`um@7ObsO85w|?9e3s_um7w02I|B9cZi;<1pc~t-(^?4?n|i zN<$INT!@sy-Bkn22a$duL*OiMIM7en)h5)AzX@@Um6|@x+mkha1YQP-*~U%1SO|d2 z{*H^fa?K*IE<^X)rS#hz0?la`3tYHSV*1XquatLGKcI{-M87GWcxtk1j{}a%4BlWJ zx`ZFB@^iEm1IOpfiaLz7)yc*}2ppRSRH%iyl?m{eq&a4iwUimx-3X;Ah-yl&DKOnS z!@aZX82P6wY)P694vyJ3ELGla{gA&k$nv>3$K8>D`yc1kTj+fH!FLWHWe7u-O{It$ z-tT1-ijgB^59)2gR3+gq{nilS;WsWEq%(`(+SM>YL&U0i z3az2GVw-Rn8`$#+Yr}!O`Y$X;Xdj)~m^iZwME0s=(|7`(f_%p2VV`_GaR8Z6eYR9Z z#z`M%4|aD|``pUY6Fz&LiaywglifCoZN_Pp&AO~w@+Jn1O zFe+I%c4=gElICFC*_ZL1bf$teKob4kfFu}$L3#Abg11$buV1A9mO#x}TBi<0>n2Vhy!8vU1Fmf)7vHXAA(CN0!g77}}Un#osv9Nr# z^i8SOn11a4=j`VvDa+Us$((&+De2l)xMfOo6qj7XHC-4Mir2q|8MjfjZ zT(7NeR#S_o}Wj;dheVGbmzO$-f zxCg3~?EmkT>M7coH^)9OLW*i|1630B$%BI4t}=tL9Uur$yR3(74zmw4kP{cj<1*#oSQT} zh_0z9yH+z4;9p;_GPRdJE5*V^CM(w9KJ&1_6;409&YV5?#lS>8bRh-k2!Z8=q#W*T zwq%^KA9ZQXtCq;;8qFaPuh86PlldJa5t%Gl9_jDB1JiN|jXP{brgI=3epw8&1p)On zD~LK@!WW;dN&8aUS-b$6jVA<$@p(E7zMyqMQHMnUlYm8YpTI64C!?goTZ9vRhKc;y zgG*j^^%t6xoe&oqn?1e(qzO!$m*wG=>WGS3uiqECczaxXV@}NirIap|jLFj_taVTy zm7Y8^gtcoq8C3S(i7tQkn6LPKl!L|oZw-N)1&%Sg~c%0+8G;0K{-~G0KG3={99`+eKwGN zpU4Pt{zRfGX;Y@Gk9$ymSGYg_zBXYCml~_0EvZn0){h-13%X`0ut)H8@{cbd5SCB4 zW}}U&E##0x$ZsIP6>|Jagj0>bZFcV@!)I>c@y9*4kj8n?K*SbB!*-C+sV`M|FG2U2 z>;KRtFEMHMqZMpnxNc z&~EG|BNW#NGWewqXQiv!W-_Qma-jWsrZRE=7(gDR1YNfq`@;~et-aLI+AvVq8KTNx);6qvq7;x%|u(b<5K zF6=o!znjg1+)^`nLuPhIv=x204LwK8@FyDV9Sb@(6bB!p+|s7>utqEKinFE_yyRsu&+)E=q#`7>D#1?{BF)?%T&;1-}@ z&n~Qz-@m%u(0U8iTn4`j9%XM-JP(K4{00!y`&n6ohANByf9!pWlH)k8ta8Ht|I2xI zy2>_10mPHCd+w>2h~2KTB|bn9iASO_!52Nd$YvYDuPtD^CE}aOx||XXCxwQ*;Nxes z;|0YEKpvM&o4iTRPb!dzPS}vZTkr9qW>{Ux_Hu3Lk<_1zECP25JZmD6V{I3cwr~s) z!r2%=P)fAZ`}M>m*YRdUDsGkB6(w+u(twN;^<<)pLZLsQ!_ePFO{#~OToJf+H68++ zqw!pxg)(GJlzJ5fh)AQW?+xoYiV2YeJWGO^$v;CUNJ^rV%SQX*nCo@uZZ+}W{^6S> zcwB)ssa;Nk2MNnJqCwu-dt#SpomeCRh1mJi1IGQr%+DXG8k~zi4D0@hrR`&7TC8=O zm>42=dW2+&jnodtycsaoCsTmjhXw=d1j+UAnHH^xp~3Or4`-(OAe#SeGJs1Df$H;~ zrt8x~j1vd_^Nm2uxZ_qU`wX3%Y?9p%>buIJk4kBL&fA3@A6e6nZMa1`%2S(<&D(Lt zgib#cLJDCkZv2mdOkP^F)X>R}epxM+;D{H_#991ia#2s+V6#B*t4>2c$&>$i4yVDP z(~b#|5FBLCpsWpkY(otb9{!j;zrf_^JDNy}Hg`y!_+Z{RlCJ4L+^dOQX0vhtHm^t` zmESjGp4kUq+KF0YI=;Wv1PkRRS>8xhB>ghJZMpu0?kdDcpmaIr)8|jJfLGbD+Tre0 zNl2H)ulOH%(dDN$gD}+p+>_982;e!?b7|tM2~O8(^f8WBFrnu3IKdu2eOuFlT)d5~IEX_R-K+S?~DzJf#uuoNk~J5jgJmLSxZ{*>POJ5~4|CMXC?> zt~NfTD_Vf~1!K~O;@b4gz8cQ9efHEeb;o3`+hF528x7tfS+H%N*VgGKzN;0|&)I(-ew3(SWBtY)fIFw(7x@*e zEakWSxcA5k{B}6sSFdHuTq7SYcbLFZf;hcs&J^uPdnNA^qjr2z89TPkjAgm9=+3Ta zuzPbpr?lFdF-(SZr^i91w(JeiYr$?eEe(P#=Aq${(75-YL3WF{)Q9k^e*U-g_)@ZQ zty>k8|1K9NML+rQ`Je7H1!a&5=hn)f@9$5@!Zt^%kCSZ)#V;o#jkPc#XiK&Muxawt_lyjf-FYZ#}QG`VKm4kXM^N`XkAyVdOZ~S z7$o`)Rz-rW;4qd&|JBCqLQ{@?IR=fL=(`Uey}#yr_VACnGq%j4K~!&KZ$Ees8a%XX zBGoS2>(d-B(} z%oq#W6ui|ACS8ya->B0f*ct98nfkH^vRY7(oxTCa7c}_P1%AW^(hXKE>nORmRvley zbQGm3K@dl>Sb z^NUzd&TMbdfs8yOIGf%v|o0;d(}| zuD0T-YY2SFx zwf^&_$MLBjIy+8YZ@Pw@kWauuU#SDnnDDABP+A4X(nq&5M@DRW#$yYJNk%?#v~njY zc=EP5&^B_Mmi^g;31981riXvHV^>|);oN@&oQH(p2~bWK%Qa~?{YxE*W%ZcC^2rh0tip7)qY!m)fU%6P9}FU`Ai zS#XK+zq4>gU^p}`8+SJ{j^SxSw>>1+U-`D3PnZKf@iv68->Zz)ktZlEWRY1Pt4UQV z11slQHZd+<7AZxU!g5(YV0FH=DNoIdxsbu1goTAQ(*@jV9Xp_s=5rpOJ!)&m&}0?9rG=hMkwuYg$7lEzzjw`?0l>Q4U8Ukc<<2t z$)ZZ<3yLP=F}Ec4A5~Ce(VVab#P)Jxb2~1MYTBlg88$55AE}1n-(Gm~TH~y9cop9! z?hUVG{It=5wkOszP6k=U>qKDygLuMw(u&@Sw*)?Q4$|p`!zKN1FANGdI3kTAmztP@ zk)XE`&b2ihK;W@36TukpU4#*p_Meai^s%8x(5af6$-&%8UryHsN@rjfissy)LTbz! zOnc+5IjHO2mN*&(c@&dmd-lc;NOI7HHz$Jj!$=gwtjYh@BzIfmh7&yf|LLcronE-w zIqG68hNDoOa??^{%T?AF9_0FY)MoO@CKFgnC^S2JS0L`MJIzjmwQt?{(d25w?bJ37 zeu)qael!%zJkMzGrikkpNh8;1?i(*~UzN^DFFh0w19VUDXVpjjf-#mwqdEOp@!=oc z$O|kSLWMt#wqv8*Wa6fIM-7+0{_mrgbhL-**?!G}Rgdlldo#OCnrz7NU2Kvdy68O7 z@_fGC+OrziV{%xqwVZcX0Vi7*w*XOQ6(n^NkuNa1?M_jB{OisVjFVBR=9 zYW*#DIf==}m3`ZX^fg8KM{G64>Vb7$7LI;>x5G}c`ClJKpd)t_BJ9!3lvm13)OKNR zfXT2crU{WAX@Y#7$jaFl)s#Qv3R+hX@Rbk9J!H9ehq*irhjQ?~gZ=mqcplbe%~ zTigRwY;JCohdUe4!=2v4%;9r>{98gI&SIuo(l#2`?#Jjyvq-gu2haNqxulp;G`LS< zHsV{asyJst;V?t25VTX3P>0&PS!~#@z->&)x?3(@$Fi_XRvOXZj1zn>do+4>Ig8|R z3r9m}w*rINLqFr^t=Ds-AzY3`e(i8|diZMY7LUc=9mn@RuJ9V}93t)7=;+s73=n8r zKPg3);U=3Qi@_0oWp$s{U;0FkiT_^yD#SPx?Mt)nT)5A=PD|abEUJjg_YfZB@x@8< z&#^+$T{j+Eis3&VN(hJ>L{WQ96NBddAQAT`F$lJMC!r4SQabH^TeX*j*v=Dedma(9 zmi?-Vo1toy|&SR*F$q@+clZg!7pTyZI5w{$qkMuVuV~KZ^S%Mk# zkNi%$(QcE)ku`d_iG^BwaUi;MiZV5FR?nS-6ij%u!9pmGWc;zDuqknz`@Iv07256b ztKef8x7^6h`w|N0ksagxJfuDf!F+Yo5i!VcF`$nRH6G0D8fy;=r1M$Hpsr-ml>SPR z8N96+3P6c%C#5$xpY>x39#7sWR`Te<(80ZQ9Oy02%p>=OmCwE1{t`oH*Bi;cSDZsx z(G7U)K)$|^9PilGKHs~UM2csNUWZlOfqF!anN-Q6O1<(Wn9yo7=x9UO*&*JK3Dam1 za@(Di^16X^ls%P%i0;8_e{oBU03}9iHlFd#xZq}B_Q6JrJZa1)mKb?kSX2?gjHnKXwKCfFl{5kQcEi zrGrf8++w^N!(zoIrNrjb>D!P@Pg2%3N9QfO;+5t7$MBzP3N5>xDB^!N>Y??U**mlU z>7_kUgiCGV^19^rKR~+v}enbiIv$}+9-tQ(f7}M@uV$AzCfo@{{P6Gs| zbjjLo?@boma4o~%oi6+-QACF%-#jrk%<;oEE5dcS3@N(20k2{ZM}L7w{Pk#&Fy1cp z@v$spN@pkr7*A`;q!rjM-t7oEL#97rBZMApv>|-;Lvq^B*UzPCTQ40rLSHeRHNT&I z#d$qwgsUVtPM->_87R&`_ott@MqQUKawLq(L_<;EWDL#nwAIzbqUYdT)eb}BV#KBoDTr92lNhp9Kz-!D$V*xOEyB+#;1 zW{#FiKSMOJ$Z_#BUVl%QWz6emaC*;=ZwqkU|ISmTlvzR^$)COV^$+COgH@%kOxeXe zUJ182+k#68e9i*ZYJp(r5r?5qxaaiJ^p`QfUdF&CG3xX3q;MFi+SIkC_RxQ_j8f2{|vU8h*lVf!Xfb^L-f^uI5kQP_n{jU&1o> zUgu97d*iZqw4rZQM$Y<+plswn} zV%y^Mp~1kUm_N?>ZaP9Lk>g>HeMfW>(DFn-*3mbnxJ6)=3CBd-Thu=tCrhOfL`&Gu z069R$znOYMM`hrVD$|ocB6C)mMUNISXiF%>v;Pscm4+jM_0uow#%_YzeZ_=Rej5+x z6puOF<^}jPatGS?5#hu#*mr+olud~epMhX3Plv55KwN4gJ4_n%ZGb^+G59pFZ}&H} zp+_%-lg6C33yD8Ju_qL;M9wGcu0UH{H!Wx|d-i;jM1%aUM&m()bC&bugp9=fm*$U? zkp)KBt&45NGJ_pE2n*$T2gidQhp@2rw*bQEH!<&RFEzhG$9h6|$LV`e<(} z@FUAH;{&C*dosp11sM2F95tv>kV60huS{%iJW4(8Z^DG!wR!4e;KhU&wv6GMSmutp zd`{jpe0Udy@JiWWC9v9G4X&3lNU3oHL}c&B(~_!3Fy5urg+Laj9Kb?mNKVGRXb`z3 z!`-IMUW27V|M>IW3npZ{oOib`i9JeY*RypEI?y0dN{C^jEUsIS??}XKK_nbAZ}X7c zRBI4(zTz8!Vwa63@>0jz^PD&6o8opr7@yMjr|g*Z?zozaxNTl^V}`^9zM}ZQF-~|G zq@z|Klabcd3`BT2Cyc8e(}?rEts952liipwJrT#};3dIL&LsXd3fJzrmJ7by0)^bG zAN#N222~6%^;bCB!h=Nd0r#Up;tMk9PZc6azL1tWEDi9JmpgfzuryT>ubl9=pq;ve0jfeBZ#DvzmL~}(QAvR~Q%!OJzVTB@P za~BF!0e`!Ig|KvefmX0Oi3wE^a|a1s-0BXMU)o2u9`RLE?GxOEPf$GBs*WxYxKYGC zXfSiXMRM~!Hf@9LWaPo7+Do{ohUi*KrsuYyiP`tY1{=X-$r^L`Hcd1*H0Z;1N9n7R z;5Ol4ia;@s26d(6zBSmg2DPV5JlES`z;aaCJ-}MmLe^FkK?x;U_N>0Ibh{&!R3^x9m}_zJkjVI_{j3;4Zg zs{LR)31*;0r7>R@knL`WMuQs}Hs@`zs(Zxc>tU!a4QY)w8`~1O9^_9|@S{OwN6ro? z=!b0~TCVTuK5wKn^D7M)8z0hX_a2Rdx<~ zhLQ+K|NOEXM__C2X!=Mxb4PPc%^mG-_32>BtGTTa_&`5>gEBE&RYW8WVpMcxwCr{c zSm7GDW{KHmchsWp*BCIgULLnxeTCaOsNowg3sIvnAe>vF z6}9W2*&D^Ph+a-+(Xu9 zOqr6`f>4OTI5<`#NaG@dH+taeC~ZsRz$(rAszUwUf-pH<4Z@tS;!rUUE`Tf)K+9GP z3aW++5FheQC^C1Mm$ry>ne_eudWYrmI_+X;x1}m9T2m*D@(&37sT(BYk*#I$M#y>a z4j5;FSNS9t{nB{Z^|#-EvT9WgK?E?PKkOrZ?J3J-T42sI4ZTA=G58d|jTChNU-6IS4B0X_Pee_g@cu%7^0U z*m~UCn`jS245Y9B($5$cZWbI;3Ac^Tdy5voyq#ES8k%Z!; z2xMuNkMC{%;Jo*G*bi>5Ikc%`(c8xR`~|VFaD&y%Bqof0g)2DfXk6hTtf7fl{ZD-+ zxzxh*M!&wv(C@{e0dH2-?xa8{5IL6E2f-oq`;>=9DHjrfgXF=4JeF*zi%tA_{ut*& zyERkUg<`Su{(f-SU3EkbZ56qD;K0P zp96|4e-R1bx9yJcUp?pXkH%RyCRBtjgG4zOfwimz3tcGsQ!x2?{|IlR_r<2yU8HLy z6GwSL?&X#^7HP+^DrJ|_idXL%xj9f0G;;r~#k-%v^EL5hvoUa8yuC#7 z<-DZ{_nr*T{OR~@MxR(rM8DA*adDO7xfm&ZWA_&MmikfPXcI@4Wsj>dGIWOHGvdPB zU^_|8<(+q8`rQh&;EC~k{?RpGG=2WwJ%Ow%E@HnE7RrZ_fvi0y7FF*sA4ngCt7UxF ztV>|RBa*1;?tVUhHk3GeI2s7rvr6K^Gm4N9A2t3cF49Q1Vpe0PklNBuV0x3woAGiT z1hOp?uA<-Pk8w|Ls1O?xq!3>48?G9Dl)mtd23dK)#^P+-W)WykTPys@WSyxP!U5eh;~6J3G%6dGi9Y7DKtbD7if>Pb!$9~A~NK53GE|x!2)TJzdLOK&~U7~tmP*?a|gdjo|DR0Zllpr1`}sjUURJ(emoPO+pKXFW z6C3&+UN~eJ`L#yD{$1=eg@M!k4YnO;8Y9mHTd3dKzRpw2>z7-0EwW4Uq#z;f4vXRp)0y0jaVu!o^s6V~Xc@GmRa&+XJafc3 zgKI%IDr+3VW%cCxW56ZbK8I4nUiY*c_pOJO$L4&1833Gjlxx*!Q>`!-4B$BnoJXEW zX5FsIP_0-k+TI@YmVFs{2XB;a^lx)%U0t7)sVTFDKdNV)Cm!9d0hTmjbI#u<9S^H< zSJP7)?w{nc!euXh{nqgk3G)F^3Da(CBSsk_4HIjrfKi zeE3yfM=J{DJ60ch?AmWGcigMdkUA#cAzgnu(I=285Mc{+Fc z9YARf|6l&eQp&{8;1#J=ESf7sai3}DAneaPzNMNkyWhxwF1F8+N<6a3_?;~=YwVd~ zLKXX_0%_3$u@=q~gB7oV1ijZ2XJKG7*Yjx2&?CJr-Q z#-33B&Uz;g-}T^tI8v$}BUZEnZrjYhX?@%$H==>fT7+0;2 ztomvuB(-#X@V@o=%IC%MU>6_5QF3kD`^V|tYF(BN?+w>_c`F+1vM>MO;R017T|RYQ z(a9|kn$=1{p^0q{)I|mDnMugf@nT(Duq9LUcqWT(LxW5lf8{|)ty1u`vQXwTU^K%0 zy_`ppF4H=^8Gg}PY+IYStPWo-pSZY#+ zz1e-v$I^3K6YV49xzxS?mj8RQ>J&7Hy3lj$vE<)#K7Evu4560Hc7(%&@2{X*F!`cJ z<1V|{ggZm)b~Xx#F(HOu7SPMQmciX#>M%|45eIDi8xHa3&4Y=>2Km}Fg_GnQDkNxK zZUG;Bx<6qrCOjh0%YsIX5IRH(?ffk$Sm%^z#CXF5Z5fHRprGA06Q#&=3@|H6u5!&& z2;paX{T+J)hP^JLzNf7i%|Bnb%8d>B3Q%yhp7e#?j6N*s+mJ5E*o+2Ww@}S+;`g~u z0zkjvA!D+rzBfFr6W735Jhfdi=nVEM-vtp~%;6sV@xP#$|Lr=l z(5Yp1p~1MfWgC{@tyw7p8Hy)DsHt-77k;lzk-_QcA17|vTwX2t*A|Uj_Il$pM)R_A zp+a}dcxF0JS25wC=8oQAl%nO6%mv6o^Goba5d2c1Ipqk}T9$#)GqJxklt=Lu>gq;W z)yg7GuhF0KEjM)#kyHJ@fnR~5O|&k>gSPk{A1=0v$Gi2snhw=-vQ$in8h_+|iC9{h zj6CN97MP9In?N1g+e(mO44qzLenk(Iq1j-*0`zxV-C+fG3hTTr5j4o6hlNdJZaU2D zD~DXY@S*+TD=PxU9O$U~lN(0m33O=W2`S#l^KC1US&5dRXQ&NM$`3ZIcj6LgWq58- z)1Ejw$BtNQjEAjaeMd;=p0JU;bvMuj^}nLOS>?UD9k&_hLk90#p?<}EX4?i6|M=ht zY#tOm3TEaV@rDGMQ(Xp`7t9;%YflFH#zybklprBy_jBvIF|;VpgZYVlb8>`on=Cx@ zz}$nlcwvy$Y(GBKNNEKF!6G!T8Z%#6=U1@tEK@h#D~wp(UXee55Ycgb87Zk*y^2|$ zv0>e{F!vd>O`k57Ia2n5KUwIW4SV=n0Q&A+YN8u5WE*owg>5b8jxvJ*Gxq%n=1HP~ z`QrVfij4wM2j)Aqi91bhj4?a=4qjdgPc5ImmRL@uf@n1%8+O52ob9EpD2#TD1jUY& znk&HuMI3Dc*l5V2sf3$)PtogDjq>Z9NNScCh*uUaPlIHlGS@M{e}D5xew54Aq06OV zZ7Q{>slWO5HFMy~=on~U?7BmwutS(Ef;0^epYU-Oj57jS##qkMPWpt6_PCBqbJWwj zGI@c-B~t;^r1LElnM_e;15@Moh6=#fc<7075Te^F=P&zHJBgF$3Gb0ztj`EnWqBwLtQe0wbD~B%)acZ{w=Z4cbe_lLL5F+e{oTiQeD|prK+cW9R=;xu?UZ@a z&OO1;67Ztt02sWpuE#`bN70E16P8^tceLBG>@m4z`P`kX*nRl0aru~Oun`+mxe?oq zo-p43ethUr*b$PzrbvUG-)t|0!&5xD7rAF^V)z6?#UNzdy;Xo%ejFt|%#2~Z^+aCK zV1vWw#ZpJXJ463eQP89Cz?c*oOg@L7$UNpe?0kr?(#qw3FBJiENbP*M6>K0edz=;7 zsi2tOqnt*gc74((5sx-@Q0|Dl^$UdAIePOjuwgvs>_sf%UrA`dUQBqzB0^P6C^s8C zrg9oRu(gWQIjK-rWo)~k84p+XsU0LdK9e4*5W%K)#yFI$n8cq(>ij!9{;Z6Mjq}m> zHXE6&tv{0-ZOqBnoo3fgEYyvIxy7&^rGp)W`-wU@Wi-w$#o=fjFVb+bxz9>mR*>mr zg9_PWw}2u^Z`!ccxDB%?HB4m!^@0;-I$6|xM*Q1E@;7wlJg$Cm|upyH~Spf8C>pdRfx80e{ z5sfX-lxV|_!7CYWl}yp2lv&O4=cuB=S3{88OX?%RIo2|H9*2neH^TJt#mmY=(77bhXaz25hH9_iW5bh6_Vb88}zlp*@)*su5BwRW{K!D5x%4TkF%dBMbcy zvsrA|GJ$36&&!kF>c44cX6KVq;r*+GKW!@-yf6wE+dGuK7}q2X<|XxO(BRG8#Z@$T zlRnx22-$M4S8<$a5wL2FT zC>nxcaS|cjQOXS6lc(sAhppiolvLFQT3B!V{y+1x;Ag9|`1T>#xOKr?MhuhT zUKy6W#35k-|^oMb(y*R6eT z?W4Bl1z>a=&a;waoJUrZomAPyAwrjlj zVy%|%hvfQb4i(yFZC45_F?%M6y!qMOpRfxPhTdyo#D-!*RU|hV?>yv8$V>Nm{}! zVr$D|+BR1G*_&g74ekNTijRrMQd_!8vS@q-e>pjEVisMt)_9s(zO&leu25{ld%unp zCXopTu|5X22)C;Xt@fRC6G2$g%I3|Z+Po+KmVfXhNSprq>wl>H=i6X`Mw!BYwL`(~ zOsKPj|8%S8PyQ$xpPo(}XVb>+unyX4QV_E&f46C)TZMbpF5Ew-3n!qh_W_$$r9)rh zlLw$z-LCJEd+ry0!E?#4nnW@I1XmYCAxD&Y_r>#-it@Q~>Aj!pk=TL;<)uVAuv}#s zX8nXO(cpjL2a=4V@3_rInuclDTgU{Gj18Z$jb(bF-cS&@gT2n!tN0KA$0_(rPRQfS z+6wMI=Dv*?>b%yCh^}$GREam{b2yx?DVJerBLUwDJu@qe@FU&hF3bFRcq4)|ImU6_ zhGgO>Ru{RuwcZfMQU^2k6vCmkMLD@zPc?_uk|4Nt(o@wSAu}?;`hn06sE@!l^)j_6 zQPhst--pJbUnaPiuAbY4R8DskaptpaMOXhsPnW&Qk@(!Mu;V5u$oz89+>OY~&aVL3 zFnU;jW)qk`7MhcWMc%S+bGQTH1Yo)j89NTCwS$yz+6y6RBDZ-NQDpu(Q+ypuf5dUg zr2@yRMt2>i$YW>p#Ge*+_*q#`mT?Q|(P|RsR@b}XOb!ZCZOD7#6S{`(sL_n`dR%A* z7)eQhjz#d2b)X`2*UazL`zwzwK>NAA^axHlw*J?nvcZcnfRUF}jg9P2uoIbQ1iM-7GuTmUpU_Z*Ytyn$v!zGmrm` zxAa0mRGZ1U=Z?fuAvUkJKznDVY;fLvk(P!g6Ik$u+
<#qgmAV|7vpF)qb>`Stv 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 X2G=p1nXrDa00000NkvXXu0mjfoeVlr literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/dialer_call.png b/app/src/main/res/drawable-hdpi/dialer_call.png new file mode 100644 index 0000000000000000000000000000000000000000..6c914f5979847c81434ae6e6acdba23ca689ab71 GIT binary patch literal 1227 zcmV;+1T_1JP)Px(g-Jv~RCr$PosDtTFbv1-NuZNJCxK1^OhTE2b`r`Y<_VlTpLy@ak|jm4l)K&) z8Yhl^{!8*loSfn?Wr1v}Hc^=rK#Vnl01`lqS-@CzLLmXfm<5bgClnGuj9I`~bwVKl z#Fzz)RYyc2rIhz6CHVQ6Qu9uwbbEky7xiWvl}MySj2+SRm3F*0qN1 zD(gA}5P;;S!-xf<9YZ$7xQQiLAevcL>%QE$t+N1e(^13%;h2!3WTb8~Ei4dN+5__- z+Q);JRVpYTK%tbPo%*`Tu)w|)Aew>QO?I`p910MvIN}ZlRUsO2#7&yp2V=BC6yk_m z7$k*MAYyJSU)BR@r*M|;M|$|Wju(bexTkX6bO3KP0uqp_5{YapfKcUHRl?m#bR9p) zF=T@{xzPGnTX5A8WXZA`AQCCC%ei!N$FL_l@ovaHZ|T-`k%PLhO5pM?1N=0QnsG@i zzIHWr%jU8w5Qrrb{StR;eOVOJK;ce<;nJ?4umKV5EN)O-yh_at1YFnXtI^m#sf%=& z6^Qh}V|8CkD}^11uKc#Mh z0F!O7ixId(_<22IGXo7E((z=2LfTzuXPue)u0`TNgojqzz6{EE$Z2S`Btiv914XLS z*n-)e;3Cd;qJU$2y{v6*Im^mQI!z`HA zPCXZ;5|cm{gMxZj(kze$3iPh;eQkl-a<$5>17r~>s5Q!_71B0g=B>@O)B*Qd6G)>L zi8aKMfKZ?0IE_L!i`60Y)5I0*Tg9gX(t**Kft*nfdKaV90y#mzC%pxBY9O6jti={o z?AV@V2_Od5f_7EQ0WlQx$uQsj} zg;1brl?fnPmL9xM02wrt)@cDm%hH4Q2_S=p(mE}GXjyvjJ^^IVP+F%25G_j&-Y0+z p8cOT50HS5-!TSV|K|^Vs_6Lkn%XBKMY@h%D002ovPDHLkV1i}=E4%;z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/home_dialer_icon_circle.png b/app/src/main/res/drawable-hdpi/home_dialer_icon_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..3a343f45f8e2f848857ef89746e027ea79f7fd77 GIT binary patch literal 5400 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 delta 1377 zcmdlXbcbKDGr-TCmrII^fq{Y7)59eQNH>5m2OE$)Y?pX?qoOKPjHQd2tFwuPlbNNH ziJ_sZtA(kXp|i1@k%6Mv>iKmOL5>P}hB{Rhes@EBp z-pPxY3}6;m;!>ofP+Ss}nr4-P+X6>idME2KJJqvRB+q7GURZWuAX3t-EKD z*}Q)0iPy6Ao=aL&4qx87N~uPpb$X(fA-~G4ckG!9n0~C@rG9a0%i(t)jLyXPsEGX* zI-vgVhU@-^UQAa%PEB}{v}Yy9Y>o*YkNlr>wf}vreQ0gRgttKq^-KAe+_`+6KYzm) z-9(M43kw-*F8OPIUz@>guH>xDq;lywJ5R-0DUo&~`IOst*wpGTy=I^CCoFMkl)900 zN^1Rv9=ntIUpKckKDm&i(PoTxYZ7eCX#;CYk9| zc`|fuPv)*%6yln2>G##M^-P%>2PQsT*sr$c$)8S!1>Nk7I)~@qO1#h(z11;Z`h@}m z)19eIa(`bvepf3~$;vRdMCWOIxwHcVivz=3CIbd7ITk?%Mgay!hph|?D!G<01u!}Q zm9YeL-xv9KOXHrv;>ZSW@o>F;Cq6PUmVCT;bY@Mh+H;Nt9n-VV2{H&U)C&L!LNKcN z|BW4+ng9L#6ZV#0FYe8Qt@mgA?hiWoasJltwe0`T#f#66`Qy+~_2d7AAFC_x?7Ew_ zE_RQxsQsCVVg=_bRZg0Js-9!aeC6@-Zu^NG1-kqBbsHoZ82MVy>)oqodwxG=&vP>Y zLT-S{FNpmUSKP-iu{iVH_t(;vaal1eXKx>}{kOR(Zs(7uNnH#M+zho$DLTzjMp_J_ z4O|QMG692-fvF*iaoU>ZsA(Jx3>*t$8(3d2nAR$ua899qMKQydo#(X~avc(X0x2d9 z@dV9Wh7!Z`?GERsd<{4rd(N3LgL&7f|H6zlmNPc$WzBe+d!KDPi|{p9-pPNi-51+; z(qKjMkLn#aoEiVTebDi>bKXSGdH=+=xAe|rUG)C%;}6oVjC&-vx49oSoaC7&p33wj zw4u@9+`;^qKg(*5)lX4mPAqA@Ul5wQUA6w%Q4~ zr(flx^xJp$+!_K}=DAFF{J5W|!dUaW@aCu6{;9EWL^rQzaTi*7B4MWZwpXvcKkvvd z*1C8j?4KHI#MhpM$`je1FBD0Xa9xyg(6GnmX1Bsi?#+ki-u}-b!4T0bp{u!iF{u1x N@O1TaS?83{1OT1KF`@tf diff --git a/app/src/main/res/drawable-hdpi/home_icon_edit.png b/app/src/main/res/drawable-hdpi/home_icon_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..72e16549ce1d7664bc22347c2fb26abfeabbced6 GIT binary patch literal 2155 zcmcIm`8(8&7XJ=rFqSNn?Hy~m*_yJJ?R~7dLop^XwtQU?(^V!^NMt>7!j7eQsU+@;K+gw3Tc|A?1}{)))7o z7q4#Uvwa?}9lfEyEp$4En88b9Z%OZ6c@taipOvpYE2a<&LX6tC_qMm zVF0jvF1c0!GP3_a8spBw*J+n%Y~TFJ&314nADGZPj3}CwA2vYCyPZL(!u-Pi#q&~Q z_bi3YkG6i|6gQv9%lOvqB#r>NVUCK0rqi+K_qokNkjIXs(`=e6Ifl zA?Ai6oH&VPk8@Hn$AcA8Y-dK_h%-}Q83-*U#%r9U-CjB8bu3o_l!Mc)XrC5I5v!W- znSNyd7vW0{lV#co#zWytjn;Xaoo;F<<>=#G!cJ6a-1KkMce~Jevv=c4CZ1P!hOI9g zveIokiLrV+Ju5b5=YhiJd zF_bG%jura$RV8r7BpHVjur1o2kVI*^k zLy9|UT!8FJUQsgG)f~_==)Vcp5)iDjN_|qGT<$XZk8t?mm48BfPZ3fc{lWvai?+Og zt&z>3C5$Vi-{M|D%xC1$C;j+bOXnD4L+2G;9)aX z5it;xP*yGten^$4B+;*CgirXOs!i0FP@(N|?*kry2}zD#RVTGpL%jzuy$h~>y-8dh zM&JVdH<`(vsyrJ&fUc+<{9|=(77!f84a7$j&}VOd9_}?QwFCi=5i@MKwWDS7kRXpt z20Y-fn(IhfWwlqm&j2qaCo{OCSUN>P#jEV&cX!bB40Ycw0pGT|eI>UB%v)ge_FenM8i|6hByg z1Hff~*0~qh4rELu5}wzJXFEb!pSxBM?si3%O|fSW8xg~$s1>c(GvVMw>R4c{@ki!T zYZTfN5QX82uxBFf1ZCy&%qBq%n5bA%MKjejsne#XI6YM)A<@-g-J+JVJgj`0ZiN`m z3XD(D$yQ#wIvsm!efAQE*>jR!Wk>H;C<8w)$W2{H0RA1=%0#N z)?+QsvR=pA^EauqsQhe1*_(vuwVKHGC4?#uJJ6se{H7yqx;}p8V;x^TIkTrkv1L)+ ze8KM;w|iRtZ?<`vP6i$4vVLg2?0S_<%9?ZxUEfx`}&cjO%6~i9~7!%)~Y_i=paZ{wen=M9kMt$SyBRWmdFUCi`Z1~xa z4Y_{#?T*FVjg9Tdw4$cr?eeg*m%SBNWmKw&@g=Tt_T7moL(>kG2d*tZPW6SzoIQ?= zv%Hgw+4X?hm0zIu3AJaRbV-Hc&kIA|P1m$Ld)L!QW9R0M-`P3;_C{z&|2ZU3utvraiQ_KC1^05?aHG+g8zg=j&v zAx@kv(0emwv$Hm3%DEuK!~f-o3E=ZL531Re1cM+W zo5DWAzbA{VO;ney=5DW#`$y<{LIk>_bD^qGfSU99r!f@wGy3z0GjUNb>A)T0d*`>8 z+X^82Z8;Z9q|ClS*-PM1jmz~2aIv+);}GP3E*Y6E6*Cdad^qYW`W^tZtEbBgCouKj DfvfWF literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/sim_card.png b/app/src/main/res/drawable-hdpi/sim_card.png new file mode 100644 index 0000000000000000000000000000000000000000..b0364a6f0f96a7de338930a71492dac16f2295de GIT binary patch literal 2212 zcmaJ@X;c$w7L6K^Wl&ItU5HT!6|<8l83G29NQAJ2-Ib6ONe)yhCKVEB5g{tuAfN+k zBVwayV|yA}(+FXcaY3;GQ4|Rv;NXUW+6syoox~P~v^6Qu08 z4tOIF^U&gm7&wL#MCC&umS@CZRiMRZ<>55r9$gfKV)ybb^&$?8@+8D;6QJ*1j zA`SgVQ8AoQls_Z`P-H9#!^aZ{C<+Bj@FY_xgf%E4o}%I#y1QuVVNB$3Zo=KRG@(dAr-=YE>K~$oG>g7;?TA$L*FN7Y|cvwpmzC>VDqi8jrRa zH-Bke7hvJ6c~MilwnhZ^CQC^%E3Ra$2BC)Sb?-UI(u;SvM^$VgA~DGu1Z^x6*3WG3 ziqy=sMpq&$IHx04I8J_7lr)Y#n#k^$+(Ph{A>zAbk&ezfJOi{$-ma^uM@B)4R0O6J6_G zxLNM3Rl0TT8b4Bi+H_0TU*gbx(@l0^e9*ISA^DBFU1Hh9{nPU+_l@gYQtpeoO9q|1 zkKHSB);7^Fh#$jOFiWfUp8pp){MN`}M{NDRg4=c4!()5)M(4iyaAqv_)S+MaXI4MQ zxHLYQnlf8omJoci-zOt%tK&zuXrR|Ua@s4atMpubiF;knu_))!&cO}LsDaAHWjT>L z`!wma+w-R1hMV;0JjkvdqBut@mH}ZA2jpG-n^e=}|0s{RMVzUM;1e;CVzFBg$Mm7c!RerceCUOK92 zM$)&Xml3~rb;z2(=7}Z|nxPljAJWcGznjw975H%%$6R=@V$@>4cplGrBrb5?gC*@V z+0&$+^%6B^sES^$ZaIR8vA0!_(dB2kOUH_dc$Z$#lD9(2Ff zF38hNSPd*~Td6a*PD4k>IA*nKO`l%9@c35XqNxY3^LiBfq6%Gdyf%d>HGJ!G^#F3j z)!*s$#VtkGi#LV_hMrz*Yo%X0wEOM7fsR%k6!sw){mJfCS3Iq89%*Lt;Uu4Ns~)66 zD@y3XZth;^L0+oNjXWu@q^qKTZ?y0@c*i+uu==Cxi;&)5etUnuC10P`H?eT8&!O?N z6G0&xrgGlIE|8=gwK#XXs2abj?Py04c^dZ`czpM!SZW_$?q`$V;Gn-$M5zya2KU`I zlRW<2O8&I6T@-q_Z~oJgPFe>g1h= zHA&rCRc^wmJ8J_|t6Y4V!XDzBTKVQnm{^B#=(Xy_1iG2;nSEz@s+%f&1o@|IYh_ abU;-0##R + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialer_call_bg.xml b/app/src/main/res/drawable/dialer_call_bg.xml new file mode 100644 index 0000000..39dce6e --- /dev/null +++ b/app/src/main/res/drawable/dialer_call_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fragment_add_contact_background.xml b/app/src/main/res/drawable/fragment_add_contact_background.xml new file mode 100644 index 0000000..7a66681 --- /dev/null +++ b/app/src/main/res/drawable/fragment_add_contact_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/phone_navigation_backround.xml b/app/src/main/res/drawable/phone_navigation_backround.xml new file mode 100644 index 0000000..cdbf70e --- /dev/null +++ b/app/src/main/res/drawable/phone_navigation_backround.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/position_background.xml b/app/src/main/res/drawable/position_background.xml index 4ab9b85..e981267 100644 --- a/app/src/main/res/drawable/position_background.xml +++ b/app/src/main/res/drawable/position_background.xml @@ -11,8 +11,8 @@ android:topRightRadius="@dimen/dp_16" /> + android:bottom="@dimen/dp_6" + android:left="@dimen/dp_16" + android:right="@dimen/dp_16" + android:top="@dimen/dp_6" /> \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_contact.xml b/app/src/main/res/layout-land/activity_contact.xml index be00234..0374cd9 100644 --- a/app/src/main/res/layout-land/activity_contact.xml +++ b/app/src/main/res/layout-land/activity_contact.xml @@ -1,77 +1,88 @@ - + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + - + + + + + + app:layout_constraintHorizontal_bias="1.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_dailyapp.xml b/app/src/main/res/layout-land/activity_dailyapp.xml index 36f7f2b..3de638c 100644 --- a/app/src/main/res/layout-land/activity_dailyapp.xml +++ b/app/src/main/res/layout-land/activity_dailyapp.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/control_bg" - tools:context=".activity.DailyAppActivity"> + tools:context=".activity.dailyapp.DailyAppActivity"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_custom.xml b/app/src/main/res/layout-land/fragment_custom.xml index a0fbbb6..89dee63 100644 --- a/app/src/main/res/layout-land/fragment_custom.xml +++ b/app/src/main/res/layout-land/fragment_custom.xml @@ -1,690 +1,698 @@ - + tools:context=".fragment.custom.CustomFragment"> - + + + + + android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_margin="@dimen/sp_16"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> - + + + + + - + app:layout_constraintEnd_toStartOf="@+id/constraintLayout6" + app:layout_constraintTop_toTopOf="parent"> - + - + + - + + + + + + + + app:layout_constraintTop_toTopOf="parent"> + + + + + + - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> + android:orientation="vertical"> - + android:layout_weight="1" + android:orientation="horizontal"> - + - + + + + + + + + + + + + + + + + + + + - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + - + + - - - + android:layout_marginEnd="@dimen/dp_4" + android:layout_marginBottom="@dimen/dp_2" + android:layout_weight="2" + android:background="@drawable/custom_bg_sos"> - + - + - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="horizontal"> - + + + + + + + + - + + + + + + + + + + + + - - - - - - - + + + + + + + + + - - + + + + + + + + + + - - - + android:layout_marginTop="@dimen/dp_2" + android:layout_marginEnd="@dimen/dp_2" + android:layout_marginBottom="@dimen/dp_4" + android:layout_weight="1" + android:background="@drawable/custom_bg_clean" + tools:ignore="NestedWeights"> - + - + - + + + + + + + + + + + - + + - + - + - + - + - - + - + - + - - + - + - + - - + + + + + + + + + + + + + + + + + - - + - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_dialer.xml b/app/src/main/res/layout-land/fragment_dialer.xml new file mode 100644 index 0000000..60d023f --- /dev/null +++ b/app/src/main/res/layout-land/fragment_dialer.xml @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml new file mode 100644 index 0000000..c2d9740 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -0,0 +1,472 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_contact.xml b/app/src/main/res/layout-port/activity_contact.xml index be00234..96c900f 100644 --- a/app/src/main/res/layout-port/activity_contact.xml +++ b/app/src/main/res/layout-port/activity_contact.xml @@ -1,77 +1,89 @@ - + + + + + + android:layout_height="match_parent" + android:background="@drawable/control_bg"> - + app:layout_constraintTop_toTopOf="parent"> - + - + - + + + + + + app:layout_constraintHorizontal_bias="1.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_dailyapp.xml b/app/src/main/res/layout-port/activity_dailyapp.xml index fd733c7..9363681 100644 --- a/app/src/main/res/layout-port/activity_dailyapp.xml +++ b/app/src/main/res/layout-port/activity_dailyapp.xml @@ -5,18 +5,18 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/control_bg" - tools:context=".activity.DailyAppActivity"> + tools:context=".activity.dailyapp.DailyAppActivity"> diff --git a/app/src/main/res/layout-port/activity_phone.xml b/app/src/main/res/layout-port/activity_phone.xml new file mode 100644 index 0000000..004c00a --- /dev/null +++ b/app/src/main/res/layout-port/activity_phone.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_custom.xml b/app/src/main/res/layout-port/fragment_custom.xml index 325f08f..c32272b 100644 --- a/app/src/main/res/layout-port/fragment_custom.xml +++ b/app/src/main/res/layout-port/fragment_custom.xml @@ -1,779 +1,787 @@ - + tools:context=".fragment.custom.CustomFragment"> - + + + + + android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_margin="@dimen/dp_16"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> - + + + + + - + app:layout_constraintEnd_toStartOf="@+id/constraintLayout14" + app:layout_constraintTop_toTopOf="parent"> - + - + + - + + + + + + + + app:layout_constraintTop_toTopOf="parent"> + + + + + + - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout5"> + android:layout_height="match_parent" + android:orientation="vertical"> - + - + - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + app:layout_constraintTop_toBottomOf="@+id/textView4" /> + - + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintStart_toStartOf="@+id/textView" + app:layout_constraintTop_toBottomOf="@+id/textView" /> - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + - - - - - - - - - - - - + + - - - - - - - - - - - - - + - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_dialer.xml b/app/src/main/res/layout-port/fragment_dialer.xml new file mode 100644 index 0000000..c001b5c --- /dev/null +++ b/app/src/main/res/layout-port/fragment_dialer.xml @@ -0,0 +1,494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-port/fragment_home.xml b/app/src/main/res/layout-port/fragment_home.xml new file mode 100644 index 0000000..1ac1ecb --- /dev/null +++ b/app/src/main/res/layout-port/fragment_home.xml @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_contact.xml b/app/src/main/res/layout/activity_add_contact.xml index e813a93..8409bd8 100644 --- a/app/src/main/res/layout/activity_add_contact.xml +++ b/app/src/main/res/layout/activity_add_contact.xml @@ -33,7 +33,7 @@ android:layout_marginStart="@dimen/dp_16" android:text="新建联系人" android:textColor="@color/default_text_color" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_18" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/iv_cancel" app:layout_constraintTop_toTopOf="parent" /> @@ -67,8 +67,8 @@ @@ -186,15 +186,15 @@ android:layout_marginStart="@dimen/dp_24" android:text="设为紧急联系人" android:textColor="@color/default_text_color" - android:textSize="@dimen/sp_15" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + tools:context=".activity.addicon.AddIconActivity"> + + + + + + android:layout_height="match_parent"> - + + + + + + + + + - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_port.xml b/app/src/main/res/layout/activity_alarm_port.xml index 49ceab0..6fb9198 100644 --- a/app/src/main/res/layout/activity_alarm_port.xml +++ b/app/src/main/res/layout/activity_alarm_port.xml @@ -28,7 +28,7 @@ @@ -44,8 +44,8 @@ diff --git a/app/src/main/res/layout/activity_location.xml b/app/src/main/res/layout/activity_location.xml index 90cd141..3d59fce 100644 --- a/app/src/main/res/layout/activity_location.xml +++ b/app/src/main/res/layout/activity_location.xml @@ -10,7 +10,7 @@ @@ -44,7 +44,7 @@ @@ -96,6 +96,7 @@ android:id="@+id/rv_city" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginTop="@dimen/dp_8" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView22" /> @@ -125,7 +126,7 @@ android:layout_height="wrap_content" android:text="我的位置" android:textColor="@color/white" - android:textSize="@dimen/sp_9" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main_old.xml similarity index 96% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/activity_main_old.xml index da44c26..c4d82b5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main_old.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/control_background" - tools:context=".activity.main.MainActivity"> + tools:context=".activity.main.OldMainActivity"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_weather.xml b/app/src/main/res/layout/activity_weather.xml index 68ae0ef..7d4820b 100644 --- a/app/src/main/res/layout/activity_weather.xml +++ b/app/src/main/res/layout/activity_weather.xml @@ -24,13 +24,13 @@ @@ -76,7 +76,7 @@ android:scaleType="centerCrop" android:text="刷新" android:textColor="@color/white" - android:textSize="@dimen/sp_13" + android:textSize="@dimen/sp_18" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -114,7 +114,7 @@ android:layout_marginTop="@dimen/dp_4" android:maxLines="1" android:textColor="@color/gray" - android:textSize="@dimen/sp_14" + android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -122,6 +122,7 @@ @@ -133,7 +134,7 @@ android:layout_marginTop="@dimen/dp_16" android:maxLines="1" android:textColor="@color/white" - android:textSize="@dimen/sp_48" + android:textSize="@dimen/sp_54" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:setTemp="@{nowBaseBean.getTemp()}" @@ -148,7 +149,7 @@ android:maxLines="1" android:text="@{nowBaseBean.getText()}" android:textColor="@color/gray" - android:textSize="@dimen/sp_14" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="@+id/tv_temp" app:layout_constraintTop_toBottomOf="@id/tv_temp" @@ -161,7 +162,7 @@ android:layout_marginStart="@dimen/dp_16" android:maxLines="1" android:textColor="@color/gray" - android:textSize="@dimen/sp_14" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="@+id/tv_text_day" app:layout_constraintStart_toEndOf="@+id/tv_text_day" app:layout_constraintTop_toTopOf="@+id/tv_text_day" @@ -169,8 +170,8 @@ - + tools:context=".fragment.app.AppListFragment"> - + + + + + android:layout_height="match_parent"> - - - - - - - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contact.xml b/app/src/main/res/layout/fragment_contact.xml new file mode 100644 index 0000000..04e4cd1 --- /dev/null +++ b/app/src/main/res/layout/fragment_contact.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contact_home.xml b/app/src/main/res/layout/fragment_contact_home.xml new file mode 100644 index 0000000..abe0feb --- /dev/null +++ b/app/src/main/res/layout/fragment_contact_home.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml deleted file mode 100644 index 4ff441c..0000000 --- a/app/src/main/res/layout/fragment_home.xml +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_record.xml b/app/src/main/res/layout/fragment_record.xml new file mode 100644 index 0000000..40ec807 --- /dev/null +++ b/app/src/main/res/layout/fragment_record.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_actions.xml b/app/src/main/res/layout/item_actions.xml index 59d3023..82dd35e 100644 --- a/app/src/main/res/layout/item_actions.xml +++ b/app/src/main/res/layout/item_actions.xml @@ -51,8 +51,8 @@ @@ -96,7 +96,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_2" android:textColor="@color/white" - android:textSize="@dimen/sp_12" + android:textSize="@dimen/sp_16" app:layout_constraintEnd_toEndOf="@+id/iv" app:layout_constraintStart_toStartOf="@+id/iv" app:layout_constraintTop_toBottomOf="@+id/iv" /> diff --git a/app/src/main/res/layout/item_add_app.xml b/app/src/main/res/layout/item_add_app.xml index 9aa755f..1b33321 100644 --- a/app/src/main/res/layout/item_add_app.xml +++ b/app/src/main/res/layout/item_add_app.xml @@ -16,8 +16,8 @@ - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + app:layout_constraintVertical_bias="0.215" /> + app:layout_constraintEnd_toEndOf="@+id/iv_head" + app:layout_constraintStart_toStartOf="@+id/iv_head" + app:layout_constraintTop_toBottomOf="@+id/iv_head"> @@ -62,8 +73,9 @@ android:layout_marginTop="@dimen/dp_4" android:maxLines="1" android:singleLine="true" - android:textColor="@color/white" - android:textSize="@dimen/sp_12" + android:textColor="@color/contact_text_color" + android:textSize="@dimen/sp_16" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_name" tools:text="phone" /> @@ -72,11 +84,11 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_contact_old.xml b/app/src/main/res/layout/item_contact_old.xml new file mode 100644 index 0000000..0147bbb --- /dev/null +++ b/app/src/main/res/layout/item_contact_old.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_daily_app.xml b/app/src/main/res/layout/item_daily_app.xml index e513e9b..d4444b6 100644 --- a/app/src/main/res/layout/item_daily_app.xml +++ b/app/src/main/res/layout/item_daily_app.xml @@ -7,7 +7,7 @@ @@ -10,12 +10,12 @@ android:id="@+id/tv_district" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/dp_16" - android:layout_marginEnd="@dimen/dp_16" + android:layout_marginStart="@dimen/dp_8" + android:layout_marginEnd="@dimen/dp_8" android:maxLines="1" android:text="北京" android:textColor="@color/black" - android:textSize="@dimen/sp_11" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/item_home_app.xml b/app/src/main/res/layout/item_home_app.xml index e4ac7a0..162f783 100644 --- a/app/src/main/res/layout/item_home_app.xml +++ b/app/src/main/res/layout/item_home_app.xml @@ -16,8 +16,8 @@ + app:layout_constraintTop_toTopOf="parent" + tools:text="17:48" /> @@ -43,8 +43,8 @@ + app:layout_constraintTop_toTopOf="parent" + tools:text="15-22" /> diff --git a/app/src/main/res/layout/phone_activity_main.xml b/app/src/main/res/layout/phone_activity_main.xml index c1cae04..385115f 100644 --- a/app/src/main/res/layout/phone_activity_main.xml +++ b/app/src/main/res/layout/phone_activity_main.xml @@ -1,28 +1,195 @@ - + tools:context=".activity.main.MainActivity"> - + + + + + + android:layout_height="match_parent" + android:background="@drawable/control_background"> - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/phone_fragment_control.xml b/app/src/main/res/layout/phone_fragment_control.xml index de03f8e..19e4612 100644 --- a/app/src/main/res/layout/phone_fragment_control.xml +++ b/app/src/main/res/layout/phone_fragment_control.xml @@ -1,401 +1,408 @@ - + tools:context=".fragment.control.ControlFragment"> - + + + + + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:layout_margin="@dimen/dp_12" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="3" + android:orientation="horizontal"> - + android:background="@drawable/control_background_item_dis"> - + - + + + + + android:background="@drawable/control_background_item_dis"> + + + + + + - - + - - - + - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3e9a735..b8796dd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -68,4 +68,6 @@ #e6e6e6 #3D54D9 + #98999a + diff --git a/settings.gradle b/settings.gradle index 6979b42..02b1d4c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ include ':app', ':niceimageview', ':verification-view' -rootProject.name='AIOS系统' \ No newline at end of file +rootProject.name='AIOS系统Phone' \ No newline at end of file