From f03f8df38dda7e7b8ecf5183f958402d82686c07 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Tue, 24 Sep 2024 10:30:27 +0800 Subject: [PATCH] =?UTF-8?q?version:1.2.4=20fix:=20update:=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=98=BE=E7=A4=BA=E6=9C=AA=E8=AF=BB=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E5=92=8C=E6=9C=AA=E6=8E=A5=E6=9D=A5=E7=94=B5=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=89=8B=E7=94=B5=E7=AD=92=E5=92=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 19 ++- .../xxpatx/os/activity/APPListActivity.java | 3 +- .../os/activity/FlashlightActivity.java | 124 ++++++++++++++ .../com/xxpatx/os/activity/ImeiActivity.java | 55 ++++++ .../xxpatx/os/activity/NetworkActivity.java | 125 ++++++++++++++ .../activity/alarm/add/AlarmAddActivity.java | 2 +- .../alarm/edit/AlarmEditActivity.java | 7 +- .../alarm/list/AlarmListActivity.java | 9 +- .../activity/contact/AddContactActivity.java | 13 +- .../contact/AddWechatContactActivity.java | 2 +- .../activity/contact/EditContactActivity.java | 2 +- .../os/activity/location/LocationAcivity.java | 2 +- .../xxpatx/os/activity/main/MainActivity.java | 159 +++++++++++++++++- .../os/activity/phone/PhoneActivity.java | 30 ++++ .../selectnumber/SelectNumberActivity.java | 34 +++- .../os/activity/setting/SettingActivity.java | 10 +- .../xxpatx/os/adapter/CallRecordAdapter.java | 48 +++--- .../xxpatx/os/adapter/DailyAppAdapter.java | 15 +- .../xxpatx/os/adapter/DockAppGridAdapter.java | 29 +++- .../com/xxpatx/os/adapter/PhoneAdapter.java | 3 +- .../java/com/xxpatx/os/bean/RecordsInfo.java | 9 + .../com/xxpatx/os/bean/SystemSettings.java | 126 +++++++++++++- .../com/xxpatx/os/config/CommonConfig.java | 22 ++- .../os/{view => custom}/CustomContent.java | 2 +- .../CustomContentCallbacks.java | 2 +- .../os/{base => custom}/GlideEngine.java | 2 +- .../os/{view => custom}/ImageViewAdapter.java | 2 +- .../RecyclerItemDecoration.java | 2 +- .../RecyclerViewSpacesItemDecoration.java | 2 +- .../{view => custom}/ViewPager2Adapter.java | 2 +- .../os/fragment/app/AppListFragment.java | 8 +- .../xxpatx/os/fragment/home/HomeFragment.java | 63 ++----- .../fragment/phone/dialer/DialerFragment.java | 43 ++++- .../phone/record/RecordViewModel.java | 5 +- .../fragment/settings/SettingsFragment.java | 8 +- .../xxpatx/os/manager/AppStatusManager.java | 2 +- .../os/network/NetInterfaceManager.java | 15 +- .../xxpatx/os/service/main/MainService.java | 14 +- .../java/com/xxpatx/os/utils/ApkUtils.java | 43 ++++- .../main/java/com/xxpatx/os/utils/Utils.java | 28 ++- .../drawable-hdpi/icon_flash_light_close.png | Bin 0 -> 15355 bytes .../drawable-hdpi/icon_flash_light_open.png | Bin 0 -> 11498 bytes app/src/main/res/drawable-hdpi/sim_card_1.png | Bin 736 -> 1023 bytes app/src/main/res/drawable-hdpi/sim_card_2.png | Bin 969 -> 1088 bytes app/src/main/res/drawable/imei_button_bg.xml | 13 ++ .../main/res/drawable/select_number_bg.xml | 13 ++ .../main/res/layout/activity_flashlight.xml | 92 ++++++++++ app/src/main/res/layout/activity_imei.xml | 108 ++++++++++++ app/src/main/res/layout/activity_network.xml | 92 ++++++++++ .../res/layout/activity_select_number.xml | 64 ++++++- app/src/main/res/layout/item_call_record.xml | 6 +- app/src/main/res/layout/item_dock_app.xml | 7 +- app/src/main/res/layout/item_phone.xml | 22 ++- app/src/main/res/values/styles.xml | 21 +++ 55 files changed, 1327 insertions(+), 206 deletions(-) create mode 100644 app/src/main/java/com/xxpatx/os/activity/FlashlightActivity.java create mode 100644 app/src/main/java/com/xxpatx/os/activity/ImeiActivity.java create mode 100644 app/src/main/java/com/xxpatx/os/activity/NetworkActivity.java rename app/src/main/java/com/xxpatx/os/{view => custom}/CustomContent.java (98%) rename app/src/main/java/com/xxpatx/os/{view => custom}/CustomContentCallbacks.java (95%) rename app/src/main/java/com/xxpatx/os/{base => custom}/GlideEngine.java (99%) rename app/src/main/java/com/xxpatx/os/{view => custom}/ImageViewAdapter.java (98%) rename app/src/main/java/com/xxpatx/os/{view => custom}/RecyclerItemDecoration.java (97%) rename app/src/main/java/com/xxpatx/os/{view => custom}/RecyclerViewSpacesItemDecoration.java (97%) rename app/src/main/java/com/xxpatx/os/{view => custom}/ViewPager2Adapter.java (99%) create mode 100644 app/src/main/res/drawable-hdpi/icon_flash_light_close.png create mode 100644 app/src/main/res/drawable-hdpi/icon_flash_light_open.png create mode 100644 app/src/main/res/drawable/imei_button_bg.xml create mode 100644 app/src/main/res/drawable/select_number_bg.xml create mode 100644 app/src/main/res/layout/activity_flashlight.xml create mode 100644 app/src/main/res/layout/activity_imei.xml create mode 100644 app/src/main/res/layout/activity_network.xml diff --git a/app/build.gradle b/app/build.gradle index 65803d8..b2db606 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.xxpatx.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 1022 - versionName "1.2.1" + versionCode 1025 + versionName "1.2.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 599cd28..2131752 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -217,11 +217,26 @@ android:name=".activity.alarm.edit.AlarmEditActivity" android:launchMode="singleTask" android:screenOrientation="portrait" /> + + + android:screenOrientation="portrait" + android:theme="@style/activity_styles_full" /> + { private static final String TAG = "AddContactActivity"; @@ -114,7 +105,7 @@ public class AddContactActivity extends BaseMvvmActivity implements NetworkUtils.OnNetworkStatusChangedListener, NotificationService.NotificationListener { @@ -119,6 +122,7 @@ public class MainActivity extends BaseMvvmActivity 0) { + Date date = new Date(System.currentTimeMillis()); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String date_today = simpleDateFormat.format(date); + for (cs.moveToFirst(); (!cs.isAfterLast()) && i < num; cs.moveToNext(), i++) { + String callName = cs.getString(0); //名称 + String callNumber = cs.getString(1); //号码 + //如果名字为空,在通讯录查询一次有没有对应联系人 + if (callName == null || callName.equals("")) { + String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME}; + //设置查询条件 + String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + "='" + callNumber + "'"; + Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + cols, selection, null, null); + int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME); + if (cursor.getCount() > 0) { + cursor.moveToFirst(); + callName = cursor.getString(nameFieldColumnIndex); + } + cursor.close(); + } + //通话类型 + int callType = Integer.parseInt(cs.getString(2)); + String callTypeStr = ""; + switch (callType) { + case CallLog.Calls.INCOMING_TYPE: + callTypeStr = "CALLIN"; + break; + case CallLog.Calls.OUTGOING_TYPE: + callTypeStr = "CALLOUT"; + break; + case CallLog.Calls.MISSED_TYPE: + callTypeStr = "CAllMISS"; + break; + default: + //其他类型的,例如新增号码等记录不算进通话记录里,直接跳过 + Log.i("ssss", "" + callType); + i--; + continue; + } + //拨打时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date callDate = new Date(Long.parseLong(cs.getString(3))); + String callDateStr = sdf.format(callDate); + if (callDateStr.equals(date_today)) { //判断是否为今天 + sdf = new SimpleDateFormat("HH:mm"); + callDateStr = sdf.format(callDate); + } else if (date_today.contains(callDateStr.substring(0, 7))) { //判断是否为当月 + sdf = new SimpleDateFormat("dd"); + int callDay = Integer.valueOf(sdf.format(callDate)); + + int day = Integer.valueOf(sdf.format(date)); + if (day - callDay == 1) { + callDateStr = "昨天"; + } else { + sdf = new SimpleDateFormat("MM-dd"); + callDateStr = sdf.format(callDate); + } + } else if (date_today.contains(callDateStr.substring(0, 4))) { //判断是否为当年 + sdf = new SimpleDateFormat("MM-dd"); + callDateStr = sdf.format(callDate); + } + + //通话时长 + int callDuration = Integer.parseInt(cs.getString(4)); + int min = callDuration / 60; + int sec = callDuration % 60; + String callDurationStr = ""; + if (sec > 0) { + if (min > 0) { + callDurationStr = min + "分" + sec + "秒"; + } else { + callDurationStr = sec + "秒"; + } + } + + /** + * callName 名字 + * callNumber 号码 + * callTypeStr 通话类型 + * callDateStr 通话日期 + * callDurationStr 通话时长 + * 请在此处执行相关UI或存储操作,之后会查询下一条通话记录 + */ + Log.i("Msg", "callName" + callName); + Log.i("Msg", "callNumber" + callNumber); + Log.i("Msg", "callTypeStr" + callTypeStr); + Log.i("Msg", "callDateStr" + callDateStr); + Log.i("Msg", "callDurationStr" + callDurationStr); + } + } + } + @Override public void initData() { mViewModel.getDesktopIconData().observe(this, new Observer>() { @@ -716,6 +836,7 @@ public class MainActivity extends BaseMvvmActivity subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList(); - List stringList =new ArrayList<>(); + List stringList = new ArrayList<>(); for (SubscriptionInfo subscriptionInfo : subscriptionInfos) { Log.e(TAG, "initData: id = " + subscriptionInfo.getSubscriptionId()); Log.e(TAG, "initData: mCardString = " + subscriptionInfo.getCardString()); @@ -98,4 +112,14 @@ public class SelectNumberActivity extends BaseMvvmActivity call(phone)); + holder.cl_info.setOnClickListener(view -> call(phone)); + holder.iv_remove.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - String queryString = "number=" + recordsInfo.getNumber(); try { - mContext.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null); + mContext.getContentResolver().delete(CallLog.Calls.CONTENT_URI, CallLog.Calls._ID + "=?", new String[]{String.valueOf(recordsInfo.getId())}); mRecordsInfoList.remove(position); notifyDataSetChanged(); } catch (Exception e) { @@ -120,6 +103,24 @@ public class CallRecordAdapter extends RecyclerView.Adapter { private static final String TAG = "DailyAppAdapter"; @@ -95,6 +91,11 @@ public class DailyAppAdapter extends RecyclerView.Adapter mDockApps; @@ -91,7 +95,16 @@ public class DockAppGridAdapter extends BaseAdapter { } } }); - int size = NotificationService.getNotificationLength(pkg); + int size; + switch (pkg) { + case "com.android.dialer": + case "xxpatx.os.dialer": + size = readMissCall(); + Log.e(TAG, "getView: readMissCall = " + size); + break; + default: + size = NotificationService.getNotificationLength(pkg); + } if (size == 0) { holder.bg.setVisibility(View.GONE); } else if (size < 99) { @@ -105,6 +118,20 @@ public class DockAppGridAdapter extends BaseAdapter { return convertView; } + private int readMissCall() { + int result = 0; + Cursor cursor = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, + new String[]{CallLog.Calls._ID, CallLog.Calls.TYPE, CallLog.Calls.IS_READ}, + " " + CallLog.Calls.TYPE + "=? and " + CallLog.Calls.IS_READ + "=?", + new String[]{String.valueOf(CallLog.Calls.MISSED_TYPE), "0"}, + CallLog.Calls.DEFAULT_SORT_ORDER); + if (cursor != null) { + result = cursor.getCount(); + cursor.close(); + } + return result; + } + static class ViewHolder { ConstraintLayout root; ImageView iv_icon; diff --git a/app/src/main/java/com/xxpatx/os/adapter/PhoneAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/PhoneAdapter.java index fd9c9ab..f39384e 100644 --- a/app/src/main/java/com/xxpatx/os/adapter/PhoneAdapter.java +++ b/app/src/main/java/com/xxpatx/os/adapter/PhoneAdapter.java @@ -90,14 +90,13 @@ public class PhoneAdapter extends RecyclerView.Adapter { public class Holder extends RecyclerView.ViewHolder { ConstraintLayout root; - TextView tv_sim, tv_number; + TextView tv_number; ImageView iv_card; public Holder(@NonNull View itemView) { super(itemView); root = itemView.findViewById(R.id.root); iv_card = itemView.findViewById(R.id.iv_card); - tv_sim = itemView.findViewById(R.id.tv_sim); tv_number = itemView.findViewById(R.id.tv_number); } } diff --git a/app/src/main/java/com/xxpatx/os/bean/RecordsInfo.java b/app/src/main/java/com/xxpatx/os/bean/RecordsInfo.java index 7ccf349..1a3cde7 100644 --- a/app/src/main/java/com/xxpatx/os/bean/RecordsInfo.java +++ b/app/src/main/java/com/xxpatx/os/bean/RecordsInfo.java @@ -10,12 +10,21 @@ import java.io.Serializable; public class RecordsInfo implements Serializable { private static final long serialVersionUID = -8677336093725878416L; + String id; String name; String number; long date; int duration; int type; + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getName() { return name; } diff --git a/app/src/main/java/com/xxpatx/os/bean/SystemSettings.java b/app/src/main/java/com/xxpatx/os/bean/SystemSettings.java index 793fbba..3af586e 100644 --- a/app/src/main/java/com/xxpatx/os/bean/SystemSettings.java +++ b/app/src/main/java/com/xxpatx/os/bean/SystemSettings.java @@ -5,7 +5,6 @@ import com.google.gson.Gson; import com.google.gson.JsonParser; import java.io.Serializable; -import java.util.List; public class SystemSettings implements Serializable { @@ -37,7 +36,7 @@ public class SystemSettings implements Serializable { int qch_restore; int setting_browserInput; int dev_mode; - List setting_sos; + String setting_sos; String setting_volume; String setting_luminance; String setting_typeface; @@ -55,11 +54,22 @@ public class SystemSettings implements Serializable { int setting_location; int setting_charge; int setting_other_appInstaller; - int is_health; int is_shopping; int is_info; - + int is_quickapp;//快捷应用开关 0关1开 + String quickapp; //快捷应用包名 + int is_seek;//查找模式开关 0关1开 + int is_lose;//丢失模式开关 0关1开 + String lose_str; //丢失模式描述文字 + int last_screen; + int hover_home; + int sos_ctrl; + int alarm_clock_ctrl; + int app_lock_ctrl; + int exit_ctrl; + int connect_page_ctrl; + int connect_edit_ctrl; public int getQch_restore() { return qch_restore; @@ -262,11 +272,11 @@ public class SystemSettings implements Serializable { this.setting_hotspot = setting_hotspot; } - public List getSetting_sos() { + public String getSetting_sos() { return setting_sos; } - public void setSetting_sos(List setting_sos) { + public void setSetting_sos(String setting_sos) { this.setting_sos = setting_sos; } @@ -422,6 +432,110 @@ public class SystemSettings implements Serializable { this.is_info = is_info; } + public int getIs_quickapp() { + return is_quickapp; + } + + public void setIs_quickapp(int is_quickapp) { + this.is_quickapp = is_quickapp; + } + + public String getQuickapp() { + return quickapp; + } + + public void setQuickapp(String quickapp) { + this.quickapp = quickapp; + } + + public int getIs_seek() { + return is_seek; + } + + public void setIs_seek(int is_seek) { + this.is_seek = is_seek; + } + + public int getIs_lose() { + return is_lose; + } + + public void setIs_lose(int is_lose) { + this.is_lose = is_lose; + } + + public String getLose_str() { + return lose_str; + } + + public void setLose_str(String lose_str) { + this.lose_str = lose_str; + } + + public int getLast_screen() { + return last_screen; + } + + public void setLast_screen(int last_screen) { + this.last_screen = last_screen; + } + + public int getHover_home() { + return hover_home; + } + + public void setHover_home(int hover_home) { + this.hover_home = hover_home; + } + + public int getSos_ctrl() { + return sos_ctrl; + } + + public void setSos_ctrl(int sos_ctrl) { + this.sos_ctrl = sos_ctrl; + } + + public int getAlarm_clock_ctrl() { + return alarm_clock_ctrl; + } + + public void setAlarm_clock_ctrl(int alarm_clock_ctrl) { + this.alarm_clock_ctrl = alarm_clock_ctrl; + } + + public int getApp_lock_ctrl() { + return app_lock_ctrl; + } + + public void setApp_lock_ctrl(int app_lock_ctrl) { + this.app_lock_ctrl = app_lock_ctrl; + } + + public int getExit_ctrl() { + return exit_ctrl; + } + + public void setExit_ctrl(int exit_ctrl) { + this.exit_ctrl = exit_ctrl; + } + + public int getConnect_page_ctrl() { + return connect_page_ctrl; + } + + public void setConnect_page_ctrl(int connect_page_ctrl) { + this.connect_page_ctrl = connect_page_ctrl; + } + + public int getConnect_edit_ctrl() { + return connect_edit_ctrl; + } + + public void setConnect_edit_ctrl(int connect_edit_ctrl) { + this.connect_edit_ctrl = connect_edit_ctrl; + } + @Override public String toString() { return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString(); diff --git a/app/src/main/java/com/xxpatx/os/config/CommonConfig.java b/app/src/main/java/com/xxpatx/os/config/CommonConfig.java index fed9507..f55d8e3 100644 --- a/app/src/main/java/com/xxpatx/os/config/CommonConfig.java +++ b/app/src/main/java/com/xxpatx/os/config/CommonConfig.java @@ -81,9 +81,11 @@ public class CommonConfig { public static final String VOICE_BROADCAST = "voice_broadcast_key"; /*微信语音自动接听*/ public static final String WECHAT_CALL_AUTO_ACCEPT = "wechat_call_auto_accept"; + + /*本地设置的*/ /*悬浮窗*/ - public static final String FLOAT_WINDOW = "FloatWindowEnable"; - public static final boolean FLOAT_WINDOW_STATU = false; +// public static final String FLOAT_WINDOW = "FloatWindowEnable"; +// public static final boolean FLOAT_WINDOW_STATU = false; /*禁用音量键*/ public static final String DISABLE_VOLUME_KEY = "disable_volume_key"; /*修改联系人禁用*/ @@ -91,6 +93,20 @@ public class CommonConfig { /*禁用闹钟修改*/ public static final String DISABLE_CLOCK_MODIFY = "disable_clock_modify_key"; + + /*后台设置的*/ + /*主页按钮开关*/ + public static final String HOVER_HOME = "hover_home"; + /*默认状态*/ + public static final int HOVER_HOME_STATUS = 0; + /*禁用SOS*/ + public static final String DISABLE_SOS = "sos_ctrl"; + /*禁用闹钟修改*/ + public static final String ALARM_CLOCK_CTRL = "alarm_clock_ctrl"; + /*应用锁定开关*/ + public static final String APP_LOCK_CTRL = "app_lock_ctrl"; + + public final static String ACTION_STATUS_BAR_STATE = "xiaoxintong_statusBar_state"; /*显示状态栏*/ public final static String ACTION_SHOW_STATUS_BAR = "xiaoxintong_show_statusBar"; @@ -100,4 +116,6 @@ public class CommonConfig { public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key"; public static final String AMAP_LOCATION_DISTRICT = "AMapLocationMapBean_key"; + + } diff --git a/app/src/main/java/com/xxpatx/os/view/CustomContent.java b/app/src/main/java/com/xxpatx/os/custom/CustomContent.java similarity index 98% rename from app/src/main/java/com/xxpatx/os/view/CustomContent.java rename to app/src/main/java/com/xxpatx/os/custom/CustomContent.java index 4ac65fb..ff1b5f3 100644 --- a/app/src/main/java/com/xxpatx/os/view/CustomContent.java +++ b/app/src/main/java/com/xxpatx/os/custom/CustomContent.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/xxpatx/os/view/CustomContentCallbacks.java b/app/src/main/java/com/xxpatx/os/custom/CustomContentCallbacks.java similarity index 95% rename from app/src/main/java/com/xxpatx/os/view/CustomContentCallbacks.java rename to app/src/main/java/com/xxpatx/os/custom/CustomContentCallbacks.java index 6e5ef0d..1b255d7 100644 --- a/app/src/main/java/com/xxpatx/os/view/CustomContentCallbacks.java +++ b/app/src/main/java/com/xxpatx/os/custom/CustomContentCallbacks.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; // add by codemx.cn ---- 20190712 ---plus- start diff --git a/app/src/main/java/com/xxpatx/os/base/GlideEngine.java b/app/src/main/java/com/xxpatx/os/custom/GlideEngine.java similarity index 99% rename from app/src/main/java/com/xxpatx/os/base/GlideEngine.java rename to app/src/main/java/com/xxpatx/os/custom/GlideEngine.java index 1b33bd1..c2a7659 100644 --- a/app/src/main/java/com/xxpatx/os/base/GlideEngine.java +++ b/app/src/main/java/com/xxpatx/os/custom/GlideEngine.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.base; +package com.xxpatx.os.custom; import android.content.Context; import android.widget.ImageView; diff --git a/app/src/main/java/com/xxpatx/os/view/ImageViewAdapter.java b/app/src/main/java/com/xxpatx/os/custom/ImageViewAdapter.java similarity index 98% rename from app/src/main/java/com/xxpatx/os/view/ImageViewAdapter.java rename to app/src/main/java/com/xxpatx/os/custom/ImageViewAdapter.java index 4be3188..084b36e 100644 --- a/app/src/main/java/com/xxpatx/os/view/ImageViewAdapter.java +++ b/app/src/main/java/com/xxpatx/os/custom/ImageViewAdapter.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; import android.content.Context; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/xxpatx/os/view/RecyclerItemDecoration.java b/app/src/main/java/com/xxpatx/os/custom/RecyclerItemDecoration.java similarity index 97% rename from app/src/main/java/com/xxpatx/os/view/RecyclerItemDecoration.java rename to app/src/main/java/com/xxpatx/os/custom/RecyclerItemDecoration.java index 53719f4..02dc523 100644 --- a/app/src/main/java/com/xxpatx/os/view/RecyclerItemDecoration.java +++ b/app/src/main/java/com/xxpatx/os/custom/RecyclerItemDecoration.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; import android.graphics.Rect; import android.view.View; diff --git a/app/src/main/java/com/xxpatx/os/view/RecyclerViewSpacesItemDecoration.java b/app/src/main/java/com/xxpatx/os/custom/RecyclerViewSpacesItemDecoration.java similarity index 97% rename from app/src/main/java/com/xxpatx/os/view/RecyclerViewSpacesItemDecoration.java rename to app/src/main/java/com/xxpatx/os/custom/RecyclerViewSpacesItemDecoration.java index 0face91..725607f 100644 --- a/app/src/main/java/com/xxpatx/os/view/RecyclerViewSpacesItemDecoration.java +++ b/app/src/main/java/com/xxpatx/os/custom/RecyclerViewSpacesItemDecoration.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; import android.graphics.Rect; import android.view.View; diff --git a/app/src/main/java/com/xxpatx/os/view/ViewPager2Adapter.java b/app/src/main/java/com/xxpatx/os/custom/ViewPager2Adapter.java similarity index 99% rename from app/src/main/java/com/xxpatx/os/view/ViewPager2Adapter.java rename to app/src/main/java/com/xxpatx/os/custom/ViewPager2Adapter.java index a025894..cd539c0 100644 --- a/app/src/main/java/com/xxpatx/os/view/ViewPager2Adapter.java +++ b/app/src/main/java/com/xxpatx/os/custom/ViewPager2Adapter.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.view; +package com.xxpatx.os.custom; import android.util.SparseArray; diff --git a/app/src/main/java/com/xxpatx/os/fragment/app/AppListFragment.java b/app/src/main/java/com/xxpatx/os/fragment/app/AppListFragment.java index 13250c8..1402e06 100644 --- a/app/src/main/java/com/xxpatx/os/fragment/app/AppListFragment.java +++ b/app/src/main/java/com/xxpatx/os/fragment/app/AppListFragment.java @@ -27,8 +27,8 @@ import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.FragmentEvent; import com.xxpatx.os.BuildConfig; import com.xxpatx.os.R; -import com.xxpatx.os.activity.screenlock.ScreenLockActivity; import com.xxpatx.os.activity.dailyapp.DailyAppActivity; +import com.xxpatx.os.activity.screenlock.ScreenLockActivity; import com.xxpatx.os.activity.service.ServiceActivity; import com.xxpatx.os.base.BaseFragment; import com.xxpatx.os.bean.BaseResponse; @@ -48,7 +48,6 @@ import com.xxpatx.os.utils.IconUtils; import com.xxpatx.os.view.MyGridLayout; import java.util.ArrayList; -import java.util.Arrays; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; @@ -403,6 +402,11 @@ public class AppListFragment extends BaseFragment { } private void showHideDialog(DesktopIcon desktopIcon) { + int appLockCtrl = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.APP_LOCK_CTRL, 0); + if (appLockCtrl == 0) { + Toaster.showLong("已禁止桌面编辑"); + return; + } String label = desktopIcon.getTitle(); String pkg = desktopIcon.getPackage(); DailyAppDialog dailyAppDialog = new DailyAppDialog(mContext); diff --git a/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java b/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java index 4fc3bc3..80d6cb7 100644 --- a/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java @@ -4,7 +4,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraManager; import android.os.Bundle; import android.os.Handler; @@ -26,20 +25,19 @@ import com.qweather.sdk.bean.weather.WeatherNowBean; import com.tencent.mmkv.MMKV; import com.xxpatx.os.BuildConfig; import com.xxpatx.os.R; +import com.xxpatx.os.activity.FlashlightActivity; +import com.xxpatx.os.activity.NetworkActivity; import com.xxpatx.os.activity.contact.AddWechatContactActivity; -import com.xxpatx.os.activity.emergency.EmergencyActivity; import com.xxpatx.os.activity.setting.SettingActivity; import com.xxpatx.os.activity.weather.WeatherActivity; import com.xxpatx.os.alarm.AlarmClockData; import com.xxpatx.os.alarm.AlarmUtils; import com.xxpatx.os.base.mvvm.fragment.BaseMvvmFragment; -import com.xxpatx.os.bean.Contact; import com.xxpatx.os.bean.DesktopIcon; import com.xxpatx.os.bean.MapBean; import com.xxpatx.os.config.CommonConfig; import com.xxpatx.os.databinding.FragmentHomeBinding; import com.xxpatx.os.dialog.SingleDialog; -import com.xxpatx.os.network.NetInterfaceManager; import com.xxpatx.os.push.PushManager; import com.xxpatx.os.utils.ApkUtils; import com.xxpatx.os.utils.DayUtils; @@ -378,37 +376,6 @@ public class HomeFragment extends BaseMvvmFragment contactList) { - - } - - @Override - public void setEmergencyContact(List emergencyContact) { - if (emergencyContact == null || emergencyContact.size() == 0) { - showNoData("温馨提示", "请在小程序上面设置紧急联系人"); - } else { - Intent intent = new Intent(mContext, EmergencyActivity.class); -// intent.putExtra("setting_sos", phone); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - - @Override - public void setEmpty() { - showNoData("温馨提示", "请在小程序上面设置紧急联系人"); - } - - @Override - public void onComplete() { - - } - }); - } - private void showNoData(String title, String msg) { SingleDialog dialog = new SingleDialog(mContext); dialog.setTitle(title) @@ -501,24 +468,26 @@ public class HomeFragment extends BaseMvvmFragment list = new ArrayList<>(); while (cursor.moveToNext()) { + String id = cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID)); 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)); @@ -86,6 +88,7 @@ public class RecordViewModel extends BaseViewModel defaultHiedApp = new HashSet() {{ this.add("om.android.fmradio");//收音机 - this.add("com.android.mms");//信息 +// this.add("com.android.mms");//信息 this.add("com.android.gallery3d"); this.add("com.android.documentsui"); this.add("com.android.calculator2"); diff --git a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java index 868dcd8..8610665 100644 --- a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java +++ b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java @@ -68,9 +68,9 @@ import com.xxpatx.os.network.api.uiui.SnIsActivationApi; import com.xxpatx.os.network.api.uiui.UpdateAppIconApi; import com.xxpatx.os.network.api.uiui.UserInfoControl; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockAddApi; -import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockGetApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockDeleteApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockEditApi; +import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockGetApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockQueryApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockUpdateApi; import com.xxpatx.os.network.api.uiui.app.RunNewApp; @@ -1203,18 +1203,7 @@ public class NetInterfaceManager { mMMKV.encode("is_health", systemSettings.getIs_health()); mMMKV.encode("is_shopping", systemSettings.getIs_shopping()); mMMKV.encode("is_info", systemSettings.getIs_info()); - List setting_sos = systemSettings.getSetting_sos(); - if (setting_sos == null || setting_sos.size() == 0) { - mCacheHelper.put(UrlAddress.GET_SETTINGS, ""); - if (callback != null) callback.setEmpty(); - } else { - List emergencyContact = setting_sos.stream().filter(contact -> contact.getIs_urgent() == 1).collect(Collectors.toList()); - mCacheHelper.put(UrlAddress.GET_SETTINGS, GsonUtils.toJSONString(setting_sos)); - if (callback != null) { - callback.setContact(setting_sos); - callback.setEmergencyContact(emergencyContact); - } - } + String s = systemSettings.getSetting_sos(); } else { mCacheHelper.put(UrlAddress.GET_SETTINGS, ""); if (callback != null) callback.setEmpty(); diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainService.java b/app/src/main/java/com/xxpatx/os/service/main/MainService.java index e656fd0..043a781 100644 --- a/app/src/main/java/com/xxpatx/os/service/main/MainService.java +++ b/app/src/main/java/com/xxpatx/os/service/main/MainService.java @@ -153,12 +153,12 @@ public class MainService extends BaseRxService implements MainSContact.MainSView // ApkUtils.UninstallAPP(this, "com.joytv.live"); // ApkUtils.UninstallAPP(this, "com.tencent.android.qqdownloader"); - mFloatWindowEnable = mMMKV.decodeBool(CommonConfig.FLOAT_WINDOW, CommonConfig.FLOAT_WINDOW_STATU); + mFloatWindowEnable = Settings.Global.getInt(getContentResolver(), CommonConfig.HOVER_HOME, CommonConfig.HOVER_HOME_STATUS) == 1; mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); showPopupWindow(); - Aria.init(this); Aria.download(this).register(); + mPresenter = new MainSPresenter(this); mPresenter.attachView(this); mPresenter.setLifecycle(lifecycleSubject); @@ -532,8 +532,8 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } } - public static final String ACTION_FLOAT_WINDOW_ON = "com.tt.float.window.on"; - public static final String ACTION_FLOAT_WINDOW_OFF = "com.tt.float.window.off"; + public static final String ACTION_FLOAT_WINDOW_ON = "com.xxpatx.os.float.window.on"; + public static final String ACTION_FLOAT_WINDOW_OFF = "com.xxpatx.os.float.window.off"; private WindowReceiver mWindowReceiver; @@ -557,12 +557,12 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } switch (action) { case ACTION_FLOAT_WINDOW_ON: - mMMKV.encode(CommonConfig.FLOAT_WINDOW, true); +// Settings.Global.putInt(getContentResolver(), CommonConfig.HOVER_HOME, 1); mFloatWindowEnable = true; showPopupWindow(); break; case ACTION_FLOAT_WINDOW_OFF: - mMMKV.encode(CommonConfig.FLOAT_WINDOW, false); +// Settings.Global.putInt(getContentResolver(), CommonConfig.HOVER_HOME, 0); mFloatWindowEnable = false; if (mWindowManager != null && mBallView != null) { if (mBallView.isAttachedToWindow()) { @@ -638,7 +638,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView } private void killBackgroundApp() { - List pkgList = ApkUtils.queryFilterAppList(this); + List pkgList = ApkUtils.getRuningPackageList(this); for (String pkg : pkgList) { if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID) || "com.xxpatx.sn".equals(pkg) diff --git a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java index f23fd84..cf4809b 100644 --- a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java +++ b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java @@ -1,5 +1,6 @@ package com.xxpatx.os.utils; +import android.app.ActivityManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; @@ -51,6 +52,8 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; @@ -386,12 +389,12 @@ public class ApkUtils { resolveInfos.add(resolveInfo); } } else { -// if ("com.xxpatx.sn".equals(pkg)) { -// resolveInfos.add(resolveInfo); -// } else { - Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); - AppStatusManager.getInstance().addHidedApp(pkg); -// } + if ("com.android.mms".equals(pkg)) { + resolveInfos.add(resolveInfo); + } else { + Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); + AppStatusManager.getInstance().addHidedApp(pkg); + } } } else { if (allPackages.contains(pkg) && !excludePackageName.contains(pkg)) { @@ -492,6 +495,34 @@ public class ApkUtils { return applicationInfos; } + public static List getRuningPackageList(Context context) { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List runningAppProcesses = activityManager.getRunningAppProcesses(); + Set map = runningAppProcesses.stream().map(new Function() { + @Override + public String apply(ActivityManager.RunningAppProcessInfo runningAppProcessInfo) { + String processName = runningAppProcessInfo.processName; + String[] split = processName.split(":"); + return split[0]; + } + }).collect(Collectors.toSet()); + map.remove("system"); + map.remove("android"); + map.remove("com.android.networkstack.process"); + map.remove("android.process.media"); + map.remove("com.android.dreams.basic"); + map.remove("com.android.musicfx"); + map.remove("say.whatever"); + Set filter = map.stream().filter(new Predicate() { + @Override + public boolean test(String s) { + return !ApkUtils.isSystemApp(context, s); + } + }).collect(Collectors.toSet()); + Log.e(TAG, "getRuningPackageList: " + filter); + return new ArrayList<>(filter); + } + public static PackageInfo getPackageInfo(Context context, String pkg) { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = null; diff --git a/app/src/main/java/com/xxpatx/os/utils/Utils.java b/app/src/main/java/com/xxpatx/os/utils/Utils.java index 1dc1f67..a554fe4 100644 --- a/app/src/main/java/com/xxpatx/os/utils/Utils.java +++ b/app/src/main/java/com/xxpatx/os/utils/Utils.java @@ -324,19 +324,19 @@ public class Utils { return result; } - public static boolean isMultiSim(Context context){ + public static boolean isMultiSim(Context context) { boolean result = false; TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); - if(telecomManager != null){ + if (telecomManager != null) { List phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts(); result = phoneAccountHandleList.size() >= 2; } return result; } - public static void call(Context context, int id, String telNum){ + public static void call(Context context, int id, String telNum) { TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); - if(telecomManager != null){ + if (telecomManager != null) { List phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts(); Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); @@ -346,4 +346,24 @@ public class Utils { } } + @SuppressLint("HardwareIds") + public static String getIMEI(Context context, int slotIndex) { + String imei; + TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + imei = tm.getImei(slotIndex); + } else { + imei = tm.getDeviceId(slotIndex); + } + if (TextUtils.isEmpty(imei)) { + return "暂无数据"; + } + return imei; + } + + public static String getEmid(Context context) { + TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + String meid = telephonyManager.getDeviceId(); + return meid; + } } diff --git a/app/src/main/res/drawable-hdpi/icon_flash_light_close.png b/app/src/main/res/drawable-hdpi/icon_flash_light_close.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f32fb34f7f61dabb552f138353e0d4333f8554 GIT binary patch literal 15355 zcmaL8bzGEB_cwmQ(h3L&NTYldkQAhA6#?n)?%suE>0ApXMN+9%L{y}Or9)J@l$4b2 z?)=T(_xJujzdxS);RP>t=elO*%*>f{-se4MUg&74P*N~cKoCT!`tX4s1QG1w|Hw!{ zNyp%16!^!4Rx&~BBc0IxwkSvFo&(a(kyF*v*4a_d(bgf*yUkG+f?zjX4NTA`ni|sf zNKZjq{5ygHo?f6f1j#A{c-h*!JEA%59GzVeayK?=8g6j9I>_BH7Sj~g^ip(maeWws za?}sfGO!PFx0iCbp&-vG8z2oD@N`7mat3&MAbg|)pv|#aP+Z9xq6{pkqAzFi?()1U$oo}AnCt{;OX_h%_4mMXPUr-2?f}C3EdGC z#t-Q~FKTN3zhCwA{NJ~I(0Y#lN8bNy!#)OqUXDU~jy_0Vls#BDCoX(fUebyvM_V)! zWq?F_{AU(*T##s_j|lgHQ<;ehn_;r-Y9nwrw82p_a9!roE!f!qzyf}pFb zgYHS}?ZJQiU$q5a{#WrG5kT8fK&@5kxW^$#5~=#&o%6C zOcOodPw`rGQ|wbl7n+|#!ZYq4 z5rQ)fim{V?t&U$Gp<<16DiDFybJs3}dJgMYXWUb^_B1-~hHZS^qK_bda%B+?e^{){ zBJk72`CO*mB|%x(Ts4bkGcPv9_A5Fk^Jv3DkRSq1`sIF5`^_HLn=wUwR7J5*j(Nwm ztgv%lOAwLtmCGpinj}QY!q;nR`ux8VwMGAskH@iCm+?}OR90F&AAGGSR{;7bakBnft? z{{}Id98AH=HG2=+{B_poI9WORJ!_+q*!rf$ty+4LWUj znH3;6H{r}05#Cn6W}Y1EZX5xR?0F=64_BH*NLFbuUU6lWv-dA$Re6}$J*u=@!{K^k zQKXo-8!wv>Lp)gtFsFZdhA;B3$&wPXJ>@Ade}|g1Beg-GE}g54$LUjCS(N1ZNroDE zoU!B_;oHh`XvH-=G8YTy?q$>1XG;y7E#--cMnNezJ6aL?>w&9MNsr-?kGpFS1IfXS z=2zz+kD0Hi_~(~$Th>>f_jvK5UGv!wnbFv72tmC&JAV4DQ7=F@JB1nt(=sGU23u3{sWy!Vnh)n(TVN zSYcGPQ1}>*6ARRuFu>7*Le0!yp5-V7Yf=nCJvsR#Fz{L~WaA^%URTZ9GeC|Wtum{^ z$q+-_32P?d?=BNnvsK1e1=52q-tIHk`OfFlEvDS8dEd5!+7~39LYKBw%Ni?ag4NAW zXhKRXGbr*xQ`Ae<1$viLxOxTtv8pl-voE;@Nv8AP=i=+g)uA99U;TXhKy*h(jR0ay z${XwH56`(uRBbw-yFM@pL8<#W2nBr-!f^xN{x#|G!gp68oquGKgZYfUJ%>|ESCyYL z&RN|hfppNNhn>=M_4L$)ay$-kRT}E{ntsrxRw+u`-M&y7!|qku6s4igr@{+0a>wx; zd=(e>yWR^^W{7bu9P{ZSfa>;J0N#a>zZ#>7rQ1e#5wg=u%};JC+b^? z>{4#>Kb-`eE_N{oQ?I~E9f)@#Z-9c2?_v+^?q|Xemi4dOQbF@%dkj(D8bs2JRM7Cd zoFA6@gyZ(QQRXs`jghkxtCB7SVV&^b_BujV{L6;F0*a{et`Z$Tt-RV%MHpe2BtB7Q z30hacQI)!zvE~A#`&@LQrcESjGxEyZL{El*4nbqkZRU-?*NLQ;SBzeZKoO3H;u9U@ zXwv+AbIo%BC}M8l?!<5K{qtw@8y6%{qd0Bsfgj=cJ+Objms3L(zgq+1fgyo^kRHPZ zj6slJS2;@(ERR!0p#O$%jc&;`0%+K@a?6TC6+4>PA=&h$hYH$fw69%|ar(=|O?9|#=0m{t;?|H%*_r(bhHwU#)aVAu^l(g!Uqb7hJ>L;oo}rq=7?FlA$Wt4 z6grm^g1?=Pjp6JSfRo7gPro6CEFK6rHs3?}UE0-amz!jTBEDH59Y`>U`yx|sU)Y%% zLyfslSzg^^J9L~p^MsDiHvY(&*B42BArhi*aG=l{sKU0IyJl5Y+xRE6Mo z1|&+Kz^UJf_H>!bl0Z|7{3StHYv)L9Lns0pEhh35PW`CEx8{}m6=;g<6|eD?MGSo| z>(>?mh||U)Ea)zVU6OX5#=;+hIHHT)BKx8+R{A(K3m*tl_~hb1iCI@E)tD@|a0lOO zj7&XTP56kbJ^Z;@`bCu}p(&&wmk)p0z~^MbxNsgj`ieszW zZ>(gRT<@LpQ{i&#sT(DL=6l+d+X-0sysB-UDPl;z?~3F{sqlB>iah(Uj( zRhZDSim?{iC`JGkerxO1-#A zgV@I3RZ@ZajE)X(xL}sgj)&%%A!zu40R4AYkEYAJ4}J`OgrE~IrjhxNaG?To`ffR> z(dqLwriCj_bQDtin(m2z5WCIbd}EQ@fhcyKJf$Z!V_iDg#^*%p%@ zZG9pJOTmY9$nu1pxpm)xBCM**VU}6ENpq)!5bL`bMC$0BUejrMXzDIOM?IWax(=*( z9h!v*{~I{Z1KD2wR)*B875S zIzthHPP1Q}U*0vLZ#)93lr}b}EN&*)yOarou3$ZOjj<}c`=G*}P}w4ITC&ti6Mj38 zA?3r~+1VMxYg{Di(`EaaINkh{d8sL^?vvfRl*jUH zTjJjwa>$>q6JKJGHCSZPfA}zLyxMnY zGH@YNUB-8LH`K+&MLzj4)X>yD_U8yRVr#~?KiWN57x&| zl*XIK9u9Q-FZRA&tneJwYHw}jnOmBC5gjcv{7xylhdp$+Z_ee8?*JIYpLdV+29w9F>aqIl{!m z#OUmJ&-h@m&t9wf8D-+9TOM}NeYNxXy6eCAikbp3nYCL#Su~~n*JVq1Yz5I9W#6&) z9v`Aubw5$lr*Eq91iSN3p z?i7FRj$O!u2M<0-w5V!o#)j{YICJ=@jsJ{gIWR#W3XRPlSox3p=5JIjWMx-T{Jmn# zBUE9ycdOTNg7uPfBTZq$`SC0jn{@5mnzuM&EMTYqlRmOIxbBvAR>({oo6K^s&t+4l zLgZwiI$h2Jenh^H?9YN z9xYMkQi%)M1VZG32^lGMq^7(kJjGQgDXDXl%O1wCn4G*}^cu#W6STL?UG2LfJ~BGv zF|!nxEvLBDLJt z65Hly9d&Zut0QF`BVSz;J&jD0&ZfDwvregz@%mu@b*ZYVPNH&~nxc|Revt3-%*|Oy zH7-A+<~YwD9v(J8#w8>t(|?Np%_ku-#DJTKq+}U9-~8Kb9N=>~wIg}FA^gJC!q%&D zTY2ypKpP@<^}26;4w_pn?7<#UxR#MJXYFs%LiGWW11no2&e;Q}z)p?^1!tHesvPS( zd8Q~HH>>_+IBNFxCd{l_h&bLEJQ@Og&vK z>nTlVo|->^rzZH*e-xb(57?Yyx^w3acdgX3u^^5+cHilY*!Bc*fAsbAYT1o<4rk&U znu69Ev;T4DI%8TKLy%Iu)ZJi{@jHzN;?)Ho49xtDEgSpjZ$0joD#KPCr{JYT5dP{* zU1v5Xj984Md%s^_yP$IUbAJ87zNF7WcWA3xa2|(3n5-R;Ogk_*-*VjxY#;{`W7;Xp zd4@TTcl@f1+M$>oxs%m0WUF581S=OGA74=aN8Rx++oIH9qc$ZaT`f|W^yqd(T z9~2mz(c0R&dtLFF##}o=NMfB5IeHLG%k|MOek+4rD@wY*e*J2XWtA#TG!5@w$O>M6 zvAetbYl1z`z9sHA9W8AfY7VMzv(kpu#UT3n>3J;jv@*jUYG_!jta;ZT&8Lfl&HT}= zA{z-Q3=H!FA#O}k z=YQObmN$KZFpS%F}%p43Pp;3E}s{Cludl%Y*Ol=S^&1m$+T%$SWlLmHF&N`QFG3&`l7Ae&1i3MeZu^RJhi&eODzCojUyxjh<%+s*dLKE);V6;hF zZwWaCcELz42RHz6$tT#kMMSpyi*1{&Uc|+9JRMlQD^0cc{}zi=dY!Q6kv>EL*! zNJ7DH)#Qt*_2fc!`1t`Hw^owe!GXP<-7m8WkE(~H*{=Hp3L%GHNA!F~V{_5=1BI5s zK6ZA~PNG?fZ^Yc!SH`M#4o+7vPgj3=Dtg1}V*9#CHP*mp;7HHNu*g(v)Td+-w~+Vz z^HtS=kO8HK(-zuSxKuO8u9*gdY?yBvUhgPoWLTX01OVa(y(~C@;BPVAs3HI>)h%>k z2m^y)h$zY}|6?$ahQo$stIeZ$%X=dV#MYBa|=nb(C4=3jxC~ zFjpfJr)Pd^f6kmYr<$Ta{bR$suvY7bpq7gf27>K^*$?f5$LA_Xls!;U$^JkQaq|c5 zB6L2BszQAt1XL^p5rT1CS;YS>5Ld^fM8B1fD0>naxu8Sb_{z=zldw(<%Up7cfGMe{ zIO`HOma19t^s4JJLJ)uM_osw)M7{)2<1waN0O0B`H=p6BWV1_y@H}F#Rd%=a5vKc*2n3l_rfN|GA>52pDPhE4G(}`Zk|v}eD24Glrh5lO4_^e9JMlu=Y_SJP`a)3SuW#h&#=q@JygqMk z1IikTj(+~UHHRWXjxf_1%!kQonH1;&^7y654c4gm9=7Hqn68xh8~^@>SIo(G;kwVv z8a=GS&-Uh{8HMU2)vgLkNmW%#ge%C)pW|M>yrNvq`0oBw3Q}M^r7&uZ-{YS0iaTLU zi@NPw?CL1_EX>r@)C@mECRQJx1YY~MSOL%QGjw)`C(e8w$YIWdpD{MtOj;m(Je>ON zWl$*7!!(C~tEv+JkF9z!2^_lNmon|2ULPL3oGE;mENxIw{8bjL24n-%Fn#P=?mmR@ z1VG(i|HaPQcnxm)i)mTV@wACxDj&{&V?s#j!2<{VkxP7rpZi@uLwrQiC!Ebmw7^h5 z%%NQfK0jJ;KUy{cu|VNWOML3$NZG>e+m}oRIdEe>pI|luEaD!OO{py>z%ySc8xp8@ zI3~&1)Cm^>$J)df8rYdB<8M`l7_aX5C}?9UMY}kLBIS1grdi_nZ}D|x!~iSF`zRkD#lbJ8zuP%l2IY2BNU2zP?j;kf?DqyfqcZs(yisSYASNa@!O_y)-X4`D z8@OFyz*IcH5K72a{PO7~#)-L}nee>+A=kb!}o9LE3~X`K|_# zDtb4nC58!)v?MyyX8_c72sklg5V9I`1(4g=%Lv*z=$%WEVfhN(5^-pKxqou7(a=6R z1EP$%E?Ic_VNPs%YO4^1NAQw%O3Xj)AxIZ&9GvO-( z`9o0v_J%F4mEdu#y1avzAEbZG)!aiQ-P1=v_p)lTsQ%b(X4E%XewxsvB6=KWf{!eA~pySEx zqYb?G@kGY+a)?+3&L!soe@5RiLfAQ~*n?$)PH{c~ zTwRUQ{fSZgyxiO$duyXOiJspC`fWVd7MJ>AWLXJZDih^?Yi8N2D8ErpT$k%`vF&zM z!v#=<9#oZu6*9Fp_+b6P8RjjYGo^4WnvhKx^GQE%LKrzw8yVvLC5oPJJ#4*dfx&9= zLd^BoEIgV)fZ=HROe@&-kr%KGVtq?6OttUcp z#<^ex_R^FTvV1^Fx7aK zkF#sH_!VJpax`be&lo13(f6u}$ALA$X7|M02Tygw;c0VScfj6~tHYzFkZa3^Ah4B> z8r=XmC)0dAB7P3AJHP@gGyz70vyE}3EL*q2V?+^PdKT-Xg?UCjJk|lr!_1xEakO0C zwsw%073B6EL{x$^6wvAVBixv_4r8M~6^A_Q-qd62eQQubu3ol~YHRmzb7cHyv+~c{ z=Uo#aJ6#RF>tlg$gskn|+}w!I?m6{yXNREZjR~iWxdpG{tzwA7?+=<=mNkBCTap6z!3JG!1X50RB@-N4 zR40swleP8q2puY~AR0UjegW)CEL49u9f>&(L{$ELc7_L&BXg*uTJAa!f9D77E^cj~Y&3)m7*kD^ zmy!IewhH+B)CX2iB1R~vsa$dZ48iDFl@CXITic6W;j-&26We@hSN9RO`r zFBERH7qMLXtxg<7H-1~6Z^{FNBY(y8^R(9f#?wp@1CPJ10M^OM<3n~Rpx8Va1{eIb)Z=T^{D1;`Z2502i$uld!hv^{g%k+y zi+ndGLd%&}IDOg}`As%oDl|lXc{EfXdSVK~-}4)H?>hM z$?TK)b}pfu8m{IeeTGNdtDEJ3U^yKIVa8cKLzTx@5uh--B9@&L<-iLVBeJA?oV3p- zXqJ06z<^$j0@YCJkvka6sI08iC{&x`FBSZ;q)uEdLMRs%)Z|)$oV0QR%V{}SWF20% zJ%h!G-Zn0*wFfk*kfrZ{VM~DlH`^kmH2`+?rC;+K8jL+WJlsz9*CxZJUvL|tSlACA zYZ%HPGrE2do{@|fVx7FAfYz%layGaF4rZ;iwDbmSORk{)>N1|$0-EcD_4r2nd?Qcc z)I(cM?M)yM?zEHsQeuo3JMBZ#JJ5fb{M!-iH? zR;}j9y1gMOpLw*Jsw(;L_($5CYOEVWMU#M++z7{M3i)hI)ZNSuJ6;MqH#^?H4}P|p z@46I&L1v}>2JwYMp^IcEYMd&Vc~Nlu&u2(hk%({&c&362K=1iZ0M;fMb6St*r={Kc zKfdtGaLxp9C0X#ta)J`M$l}@ zDCJL+pgh>sf2xhoBi2=K5pAC=PdJ3F3>GY0=8zB33J3_u%5;|vJ3VYzqE=T0=<_c@ zp?BeWNs$Ja$4M|s!mg^Qj-)LFjVt7Z zCM#Tj&vyXWcF}r6tQfoFX96NqkQ6}aMppL9yyoKkpaFRXV(!uRxw*-g23LCPwmShw zUoU6V7|}x(wX@_yCl3ImAmC|U)`Z>5meU75GwGJ*n~;GjpM@e?JdOFxhNcERsxt;J z`e1Gk+BF4S;ar(hSM^TKMtu!0pwmUtij;!pdK4~B8-VV;{Pvo63>=FTW{Ehe_27~4 z-R6}9CbDw3f#Y*z_{k`vWi@)lX29@d>e}Q|MP4O_J!g~+kOQ1O4vyN};6!4q+;g;o zq$y0Uudk1L*7Qi>;;5%+DLGgWIH>KXj8==KfYBOFelb}6JSL{|;lqcAg-X#3?!Y(~ zt7cDHbTeo;y+ADephSD8BXU1-JyJTDzcC5?_PjMP;%rS}RKd!Cr>+kIfX``Z;)uLk zXA5jWZsWTBKko6Q?wiv$<-cTBg9&e_Tl$bb_!XGoh9@!_*xrSOEE4IRKANl2jrl$4 z5*vd6McwTI5sY}VdsKY<e0guZ>>wf~Ub$8sy8n5t_ zV0>p;1r{{_FlL5ZCBYjka3A_+)hmmT&;P*k++36r%waJyj_fZ`2SQC1dlp*sKi!{zDrF6FNOGI_Ww9%tjX9_{MT z_20dJ%H1XG``#&O;}4U>Y}qYJN=ilm1UqxtUmdA4`|7ggZDNwPH2-{MWe)a@m0(Jj zB>0aaBTD`5o9b^I0DxT$1!p4KWIx@IrR}4d660S#0tC!q_{HST<1$;V(F#w#lcMmm zm382|EAa8{<^7dU2A_T*&i*1JI_9PybDXM9Br*hVlSZSWcQ}2YHW+-=xt`-bRCqx? zd(e;kUZt5Xeuf6&vvwSl=sfJ(*qGZ;VWzbA^!L{r4HscOc)If?wOvz)+%ar1@`)5- zUgF0vYz=HlYQ z_6+j@&v^zSiJ-W$2&i%vT|P}z9rL`wTw1)J@w^leg@^0oHQKEJV{ID0T$$DlsykeE=Y^8&6OD;Qb{`FrrY4oAcKxFnD?*UpYez2ZL4I9nkTNA_F zoShYZe&h#;mi5*AnYIGoak`6Ya~xua9Cgy()kPV2vW8<3w5Z$^91qss9Xj}g=PUzv z<|%Wh$)Lc7NK#rYDDbEJEy!{T+O~4bq8@fe%3yw1L~xQ#vp9WXgQzlzM+2| z3^{akzAHT)gda*r+r!|9>>3)l6GTosS;SuT+P*Qi!&9eft^2e0X8zI60{5asx9yLk z8h~Jz!0cQ80XzAo$jc}<=^+5Ca{&7@Vvs_McbA3}?Aq4aEWpa2F@EAFgnv7-AD3l6 zHSLEpmJXt1%bzuXsAlgEaG70M=SOnkTW_0G2Q++6@X5?4PQnL%Mx#p` zAYDMWwDmG>{I5R)>X_+=T3T^oK*2An-3C58 z;n^0W1`eyuP)(P^ST* zb^+IgKu5T^$FP@Ds-R`cSC_tNiQ7cheHg2tzu%q?g#)V)p5P@k>@zepwhc5)^PL*m zm64Q#m3Qa4(8aSJ#N5|mA-nAB3 z(iQYZ$V)0;hU@pS9{mNaHL?s6y^dc`EI+%bw-8$G^^foqTLgQ3yO}qZGg=mP%oxqm zx*cnRg%LEf+^*c8xsFgat1 z4_**7#c~qsK^cIJ9`EOXpzKXI`uj+jrFgAm8=xv1`M6^>D9y0Zav7u$^e8>Io@{r# zy-ov=cs$i1Wkf;GP#YA0+KbW>>0e>H5nBFhv?zlbyqWs8o?;iKjA#1-1Qi4C9E@>b z1P?C!y{$maSC;K6Grjk_4&OnL7nJSyER<;xH9FF17{qS(gt+4INuq~V#88OTNNQR^++W4%iU0H#~_mbE(~gX zdiJ??_?Fm9jG%*;1^dEfD57kZSAmlAz!;l7=qa>72?|z0DuoC}FzjzF0dytJW7iqm z@$wXwAp=3@UhpGtH~){>*0ObgZzX*B;+$%itD0?|6{Lc!7vpm{&_PQ;1kOt^n#EFE z_1g=y(3H-n+faJyQeL%Os2*EeTjxmCD==oe2w7OnQ(b&3gLsEU1uyYwI zu8MHB6eg6L$~J=_GAwp1mWuKhHD9*Hw$uUyrMDU1tEOZ70#6MLTur5diqq?qe@flz z?b-e1BXt0tw;JAK z8zJ-s8J*x7M~N;`$K5Ri2{KB#Or{J5PGo4N>4q08;5gCFGS7OXn$J z7yBaj)pQ(CP%to6qH0EmtV!L%n-KgZtKqG5AH)DWm3U)rFqnPlD#Y2i9do%|;^Y!# z`NMmT?$rer#vnuJ#MIOwdP66gKG}Q&ihxVG<#xYMCbUHOhvZ$`qk=XYEVz8O3$`CA z3K-ci*&f1%n4rdvuaWIG!Iy6g3xRYW( z0PoScWnDrF4i#8pVnAx6O9P?-wMGDi%o=l<^Yivk|40>B{Z&aq09mQ&-x_Ba;Kd03 zrWm~ap_Bk(&ARzkT#{z{lbh%e7lcg{=VKXLqbzT0dwJ%1;H60jMY+U_Y_TtBT}GGa z;$|$;A&8nyqO_S|_3EN?7RJFRmJkxWZa(61+2~`J)=U21EvIOZUgx31VE$*o6(hL6 zRFUaU4|&my#(pVI)=AIeH#Jar>dpXp#a(s$ty#ayyjVIuj;qd`{zD91(_$KViEQBz z?ElFvsE-?nQgVi%b$%01hsOd>|C|!FCq3Dyj3a2=s@E6K{=>Q)k;nt%s6Yw8BJ4d4 z#aW3KzQY+6mMT)+nITr^q6C5p#${~cZI(ffxj!UOi=sLQ9edU-THpE7?Jk zDbvs3dV3P(NaVtIs~ydR5t)uG8+)&{j^8S>1-x@inqeN_uAC=m^xKX(2x##f zq+jl(6XYW=b+m#~qfJQyzjX!=1TCKfc$e@zi-5P7YHOja@_U&kUQS&Z zd{V4N=l(>7^af=nPR#F%$pO?-nrEThgAVXbICB{ms zr=1*~_L85CZ?sed$=3Lzb=~D+V9gjW#Mrx};2?8DHG(PD27trA{>IDe`+a3l2lpz8 z(5p7F+EZ`+sU5g*^2ou=oGs_6E>)v93VotfMOs%vB7>n~d9J(eykf{hJaz3P>101h z8Z5o70zKLtJLWS?Fr4V&c^fxG4YIb`#1%HGEkBL%bt!>1#6^;WwW?yQ7P>OQ#fw%^ z-@ppNOTUYGC~YjaJuJWtin49ib|7EX>`~A=keW~ZmNmi=e~)84%s`f#yO$h&Rp$@c zeg_Y+O;7{Nz3x9NoW0(+ZIbw-(H3Hvi)A;&T*!? zvdF_wMJ!ZPRiepvC7`t6)2eP*gdRAtYoam{ZN>F+fvY&-ugtf6>3fC=!e2ViD6IIs z1kY8lty5C3Tf(Grq1yc#npqVdVlp(5`WKp2k$AZz6vW;E?vc!va%wQof%`3G&j$-W zAjHuBzC6Qwu>D2Gw*$)xrpBl=#zSnpP|t%9cJ-gSO}6SaT@ObvI}G}Li{%|;fhoyP z>Dtm)Hr#cL9C^|{>-eeqY8Zp5$$)8~-(?D!EW*7w0C z-FI8dc*wyOuETdRSv5o<#NXHm$hH)fBhuOwii%J2*QGs-7?V$> zSw4xqlE+Pjzg0!<6F3<5y6+tic@#WoqJc%gbW4MkNZN+E)HwKN&JSKh*Nn&ZGyi@v zB>9$s8X-7=Yw(&2o3QG0>GbvgkO;a-T$mn7A_7%B?UKcr=rEQ7zA7ZaKol2h)`d{v5E6)zc zuzOd~bV@02&NDTn+K0&fE~N;OqnqN7r%3yLK`spa)M7K4PQ2}bzmBV_r1hZizRjcm E59QHrZvX%Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_flash_light_open.png b/app/src/main/res/drawable-hdpi/icon_flash_light_open.png new file mode 100644 index 0000000000000000000000000000000000000000..3f1166e1c6fb2249b4178d7d78f826757cd3e6a7 GIT binary patch literal 11498 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 SG22HUUoo~Ysxr9w*Z%=qYHyVQ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/sim_card_1.png b/app/src/main/res/drawable-hdpi/sim_card_1.png index eca6ad8989de1365be1ea8f470234eee12266226..f44a5220f650f3ec125c33d91611f37e75ccaaf2 100644 GIT binary patch literal 1023 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 diff --git a/app/src/main/res/drawable/imei_button_bg.xml b/app/src/main/res/drawable/imei_button_bg.xml new file mode 100644 index 0000000..1881cf0 --- /dev/null +++ b/app/src/main/res/drawable/imei_button_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_number_bg.xml b/app/src/main/res/drawable/select_number_bg.xml new file mode 100644 index 0000000..62baef8 --- /dev/null +++ b/app/src/main/res/drawable/select_number_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_flashlight.xml b/app/src/main/res/layout/activity_flashlight.xml new file mode 100644 index 0000000..6b1463b --- /dev/null +++ b/app/src/main/res/layout/activity_flashlight.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_imei.xml b/app/src/main/res/layout/activity_imei.xml new file mode 100644 index 0000000..8d945bd --- /dev/null +++ b/app/src/main/res/layout/activity_imei.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_network.xml b/app/src/main/res/layout/activity_network.xml new file mode 100644 index 0000000..6e08dfb --- /dev/null +++ b/app/src/main/res/layout/activity_network.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_select_number.xml b/app/src/main/res/layout/activity_select_number.xml index e3fc401..7a1bf8b 100644 --- a/app/src/main/res/layout/activity_select_number.xml +++ b/app/src/main/res/layout/activity_select_number.xml @@ -6,21 +6,73 @@ + + android:layout_height="match_parent" + android:onClick="@{click::exit}"> - + app:layout_constraintStart_toStartOf="parent"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_call_record.xml b/app/src/main/res/layout/item_call_record.xml index afd17bc..64ee993 100644 --- a/app/src/main/res/layout/item_call_record.xml +++ b/app/src/main/res/layout/item_call_record.xml @@ -39,7 +39,7 @@ app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/item_dock_app.xml b/app/src/main/res/layout/item_dock_app.xml index 8139acc..b6b6bea 100644 --- a/app/src/main/res/layout/item_dock_app.xml +++ b/app/src/main/res/layout/item_dock_app.xml @@ -15,7 +15,7 @@ @@ -36,8 +37,8 @@ android:id="@+id/bg" android:layout_width="wrap_content" android:layout_height="24dp" - android:layout_marginStart="56dp" - android:layout_marginBottom="56dp" + android:layout_marginStart="52dp" + android:layout_marginBottom="52dp" android:background="@drawable/badge_bg" android:gravity="center" android:minWidth="24dp" diff --git a/app/src/main/res/layout/item_phone.xml b/app/src/main/res/layout/item_phone.xml index 59aaa33..2923fd8 100644 --- a/app/src/main/res/layout/item_phone.xml +++ b/app/src/main/res/layout/item_phone.xml @@ -22,16 +22,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> - + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ea44673..d1734ea 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -48,6 +48,27 @@ true + +