From aa3ceda9f1e0d7003f7d29ac3b9e829a63cb6cf5 Mon Sep 17 00:00:00 2001 From: fanhuitong <981964879@qq.com> Date: Fri, 4 Nov 2022 18:16:30 +0800 Subject: [PATCH] =?UTF-8?q?version:6.1=20fix:=20update:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E6=B2=A1=E6=9C=89=E6=BF=80=E6=B4=BB=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=A4=A9=E6=B0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 2 + .../uiui/aios/activity/main/MainActivity.java | 71 ++--- .../BaseFragmentPagerAdapter.java | 2 +- .../com/uiui/aios/dialog/CustomDialog.java | 251 ++++++++++++++++++ .../uiui/aios/fragment/AppListFragment.java | 75 +++++- .../aios/fragment/custom/CustomContact.java | 26 ++ .../fragment/{ => custom}/CustomFragment.java | 147 +++++----- .../{ => custom}/CustomPagerAdapter.java | 2 +- .../aios/fragment/custom/CustomPresenter.java | 162 +++++++++++ .../aios/network/NetInterfaceManager.java | 19 +- .../com/uiui/aios/network/URLAddress.java | 5 + .../aios/network/api/SnIsActivationApi.java | 15 ++ .../aios/network/api/UpdateAppIconApi.java | 20 ++ .../java/com/uiui/aios/utils/ApkUtils.java | 27 +- .../java/com/uiui/aios/view/MyGridLayout.java | 11 +- .../main/res/drawable-hdpi/com_uiui_sn.png | Bin 8030 -> 5137 bytes .../drawable-hdpi/home_activation_icon.png | Bin 0 -> 3931 bytes .../main/res/layout-land/fragment_custom.xml | 81 ++++-- .../main/res/layout-port/fragment_custom.xml | 107 ++++++-- app/src/main/res/layout/custom_dialog.xml | 122 +++++++++ build.gradle | 8 +- 22 files changed, 989 insertions(+), 168 deletions(-) rename app/src/main/java/com/uiui/aios/{fragment => base}/BaseFragmentPagerAdapter.java (99%) create mode 100644 app/src/main/java/com/uiui/aios/dialog/CustomDialog.java create mode 100644 app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java rename app/src/main/java/com/uiui/aios/fragment/{ => custom}/CustomFragment.java (90%) rename app/src/main/java/com/uiui/aios/fragment/{ => custom}/CustomPagerAdapter.java (94%) create mode 100644 app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java create mode 100644 app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java create mode 100644 app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java create mode 100644 app/src/main/res/drawable-hdpi/home_activation_icon.png create mode 100644 app/src/main/res/layout/custom_dialog.xml diff --git a/app/build.gradle b/app/build.gradle index c06ec3f..a1464c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.uiui.aios" minSdkVersion 24 targetSdkVersion 29 - versionCode 45 - versionName "5.4" + versionCode 51 + versionName "6.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4245787..6070f49 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,6 +22,8 @@ + + diff --git a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java b/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java index 1fc480a..a696cb3 100644 --- a/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java +++ b/app/src/main/java/com/uiui/aios/activity/main/MainActivity.java @@ -31,13 +31,13 @@ import com.google.gson.reflect.TypeToken; import com.uiui.aios.BuildConfig; import com.uiui.aios.R; import com.uiui.aios.base.BaseActivity; +import com.uiui.aios.base.BaseFragmentPagerAdapter; import com.uiui.aios.bean.AlarmItem; import com.uiui.aios.bean.DesktopIcon; import com.uiui.aios.dialog.PasswordDialog; import com.uiui.aios.fragment.AppListFragment; -import com.uiui.aios.fragment.BaseFragmentPagerAdapter; -import com.uiui.aios.fragment.CustomFragment; import com.uiui.aios.fragment.SecondFragment; +import com.uiui.aios.fragment.custom.CustomFragment; import com.uiui.aios.service.NotificationService; import com.uiui.aios.utils.ApkUtils; import com.uiui.aios.utils.AppUsedTimeUtils; @@ -150,31 +150,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { if (mFragments.size() > 1) { mViewPager.setCurrentItem(defaultCurrent); } - - mHomeWatcher = new HomeWatcher(this); - mHomeWatcher.setOnHomePressedListener(new HomeWatcher.OnHomePressedListener() { - @Override - public void onHomePressed() { - //按了HOME键 - Log.e(TAG, "onHomePressed: "); - int is_activation = Settings.Global.getInt(getContentResolver(), "uiui_activation", 0); - Log.e(TAG, "onHomePressed: is_activation = " + is_activation); - if (is_activation == 0) { - LauncherUtils.openLauncher3(MainActivity.this); - } else { - if (!LauncherUtils.isDefaultHome(MainActivity.this)) { - LauncherUtils.setDefaultDesktop(MainActivity.this, BuildConfig.APPLICATION_ID, this.getClass().getName()); - } - } - } - - @Override - public void onHomeLongPressed() { - Log.e(TAG, "onHomeLongPressed: "); - //长按HOME键 - } - }); - mHomeWatcher.startWatch(); } private void showPassword() { @@ -314,6 +289,10 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { return false; + } else if (KeyEvent.KEYCODE_HOME == keyCode) { + Log.e(TAG, "onKeyDown: keyCode = " + keyCode); + //写要执行的动作或者任务 + android.os.Process.killProcess(android.os.Process.myPid()); } return super.onKeyDown(keyCode, event); } @@ -357,7 +336,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { gotoNotificationAccessSetting(this); } int is_activation = Settings.Global.getInt(getContentResolver(), "uiui_activation", 0); - Log.e(TAG, "onHomePressed: is_activation = " + is_activation); + Log.e(TAG, "onResume: is_activation = " + is_activation); if (is_activation == 1) { LauncherUtils.setDefaultDesktop(MainActivity.this, BuildConfig.APPLICATION_ID, this.getClass().getName()); } else { @@ -366,6 +345,36 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { addData(); mMainPresenter.sendRunningInfo(); mMainPresenter.getAdminSnSetting(); + addHomeWatcher(); + } + + private void addHomeWatcher() { + if (mHomeWatcher == null) { + mHomeWatcher = new HomeWatcher(this); + } + mHomeWatcher.setOnHomePressedListener(new HomeWatcher.OnHomePressedListener() { + @Override + public void onHomePressed() { + //按了HOME键 + Log.e(TAG, "onHomePressed: "); + int is_activation = Settings.Global.getInt(getContentResolver(), "uiui_activation", 0); + Log.e(TAG, "onHomePressed: is_activation = " + is_activation); + if (is_activation == 0) { + LauncherUtils.openLauncher3(MainActivity.this); + } else { + if (!LauncherUtils.isDefaultHome(MainActivity.this)) { + LauncherUtils.setDefaultDesktop(MainActivity.this, BuildConfig.APPLICATION_ID, this.getClass().getName()); + } + } + } + + @Override + public void onHomeLongPressed() { + Log.e(TAG, "onHomeLongPressed: "); + //长按HOME键 + } + }); + mHomeWatcher.startWatch(); } private static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners"; @@ -421,6 +430,9 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { @Override protected void onPause() { super.onPause(); + if (mHomeWatcher != null) { + mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 + } } @Override @@ -436,9 +448,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { if (mNewAppReceiver != null) { unregisterReceiver(mNewAppReceiver); } - if (mHomeWatcher != null) { - mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 - } } private void registmNewAppReceiver() { diff --git a/app/src/main/java/com/uiui/aios/fragment/BaseFragmentPagerAdapter.java b/app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java similarity index 99% rename from app/src/main/java/com/uiui/aios/fragment/BaseFragmentPagerAdapter.java rename to app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java index f5f06ca..26c36d3 100644 --- a/app/src/main/java/com/uiui/aios/fragment/BaseFragmentPagerAdapter.java +++ b/app/src/main/java/com/uiui/aios/base/BaseFragmentPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.fragment; +package com.uiui.aios.base; import android.util.SparseArray; diff --git a/app/src/main/java/com/uiui/aios/dialog/CustomDialog.java b/app/src/main/java/com/uiui/aios/dialog/CustomDialog.java new file mode 100644 index 0000000..eeac082 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/dialog/CustomDialog.java @@ -0,0 +1,251 @@ +package com.uiui.aios.dialog; + + +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AlertDialog; + +import com.uiui.aios.R; + + +/** + * description:自定义dialog + */ + +public class CustomDialog extends AlertDialog { + /** + * 显示的图片 + */ + private ImageView imageIv; + + /** + * 显示的标题 + */ + private TextView titleTv; + + /** + * 显示的消息 + */ + private TextView messageTv; + + /** + * 确认和取消按钮 + */ + private TextView positiveBn; + private TextView negtiveBn; + + /** + * 按钮之间的分割线 + */ +// private View columnLineView; + + private Context mContext; + + public CustomDialog(Context context) { + super(context, R.style.CustomDialog); + this.mContext = context; + } + + /** + * 都是内容数据 + */ + private String message; + private String title; + private String positive, negtive; + private int imageResId = -1; + + /** + * 底部是否只有一个按钮 + */ + private boolean isSingle = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.custom_dialog); + //按空白处不能取消动画 + setCanceledOnTouchOutside(false); + //初始化界面控件 + initView(); + //初始化界面数据 + refreshView(); + //初始化界面控件的事件 + initEvent(); + } + + /** + * 初始化界面的确定和取消监听器 + */ + private void initEvent() { + //设置确定按钮被点击后,向外界提供监听 + positiveBn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onClickBottomListener != null) { + onClickBottomListener.onPositiveClick(); + } + } + }); + //设置取消按钮被点击后,向外界提供监听 + negtiveBn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onClickBottomListener != null) { + onClickBottomListener.onNegtiveClick(); + } + } + }); + } + + /** + * 初始化界面控件的显示数据 + */ + private void refreshView() { + //如果用户自定了title和message + if (!TextUtils.isEmpty(title)) { + titleTv.setText(title); + titleTv.setVisibility(View.VISIBLE); + } else { + titleTv.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(message)) { + messageTv.setText(message); + } + //如果设置按钮的文字 + if (!TextUtils.isEmpty(positive)) { + positiveBn.setText(positive); + } else { + positiveBn.setText("确定"); + } + if (!TextUtils.isEmpty(negtive)) { + negtiveBn.setText(negtive); + } else { + negtiveBn.setText("取消"); + } + + if (imageResId != -1) { + imageIv.setImageResource(imageResId); + imageIv.setVisibility(View.VISIBLE); + } else { + imageIv.setVisibility(View.GONE); + } + /** + * 只显示一个按钮的时候隐藏取消按钮,回掉只执行确定的事件 + */ +// if (isSingle) { +//// columnLineView.setVisibility(View.GONE); +// negtiveBn.setVisibility(View.GONE); +// } else { +// negtiveBn.setVisibility(View.VISIBLE); +//// columnLineView.setVisibility(View.VISIBLE); +// } + } + + @Override + public void show() { + super.show(); + refreshView(); + } + + /** + * 初始化界面控件 + */ + private void initView() { + negtiveBn = findViewById(R.id.negtive); + positiveBn = findViewById(R.id.positive); + titleTv = findViewById(R.id.title); + messageTv = findViewById(R.id.message); + imageIv = findViewById(R.id.image); +// columnLineView = findViewById(R.id.column_line); + } + + /** + * 设置确定取消按钮的回调 + */ + private OnClickBottomListener onClickBottomListener; + + public void setOnClickBottomListener(OnClickBottomListener onClickBottomListener) { + this.onClickBottomListener = onClickBottomListener; + } + + public interface OnClickBottomListener { + /** + * 点击确定按钮事件 + */ + void onPositiveClick(); + + /** + * 点击取消按钮事件 + */ + void onNegtiveClick(); + } + + public String getMessage() { + return message; + } + + public CustomDialog setMessage(String message) { + this.message = message; + return this; + } + + public String getTitle() { + return title; + } + + public CustomDialog setTitle(String title) { + this.title = title; + return this; + } + + public String getPositive() { + return positive; + } + + public CustomDialog setPositive(String positive) { + this.positive = positive; + return this; + } + + public String getNegtive() { + return negtive; + } + + public CustomDialog setNegtive(String negtive) { + this.negtive = negtive; + return this; + } + + public CustomDialog setNegtiveText(String negtive) { + negtiveBn.setText(negtive); + return this; + } + + public int getImageResId() { + return imageResId; + } + + public boolean isSingle() { + return isSingle; + } + + public CustomDialog setSingle(boolean single) { + isSingle = single; + return this; + } + + public CustomDialog setImageResId(int imageResId) { + this.imageResId = imageResId; + return this; + } + + @Override + public void dismiss() { + super.dismiss(); + } +} diff --git a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java b/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java index a8fcfe6..47be999 100644 --- a/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java +++ b/app/src/main/java/com/uiui/aios/fragment/AppListFragment.java @@ -14,14 +14,17 @@ import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; -import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import com.google.gson.JsonObject; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.aios.R; +import com.uiui.aios.base.BaseFragment; import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.bean.DesktopIcon; +import com.uiui.aios.dialog.CustomDialog; import com.uiui.aios.dialog.PasswordDialog; import com.uiui.aios.network.NetInterfaceManager; import com.uiui.aios.service.NotificationService; @@ -36,6 +39,7 @@ import com.uiui.aios.view.MyGridLayout; import java.util.ArrayList; import java.util.Arrays; +import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; @@ -44,7 +48,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 Fragment { +public class AppListFragment extends BaseFragment { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -178,7 +182,7 @@ public class AppListFragment extends Fragment { int is_activation = Settings.Global.getInt(mContext.getContentResolver(), "uiui_activation", 0); if (is_activation == 0) { LauncherUtils.openLauncher3(mContext); - }else { + } else { showPassword(); } break; @@ -190,9 +194,74 @@ public class AppListFragment extends Fragment { } } } + + @Override + public void onLongClick(View v, int index) { + DesktopIcon desktopIcon = mDesktopIcons.get(index); + String pkg = desktopIcon.getPackageName(); + Log.e(TAG, "onLongClick: " + pkg); + switch (pkg) { + case "aios.exit": + case "com.uiui.sn": + break; + default: + showHinDialog(pkg, desktopIcon.getLable()); + } + } }); } + private void updateAppDisableStatus(String pkg, String label) { + NetInterfaceManager.getInstance().getUpdateAppIconObservable(pkg, label, 0) + .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, FragmentEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("updateAppDisableStatus", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("updateAppDisableStatus", "onNext: " + baseResponse); + if (baseResponse.code == 200) { + ApkUtils.disableApp(mContext, pkg); + } else { + ToastUtil.show("隐藏失败,检查网络连接"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("updateAppDisableStatus", "onError: "); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("updateAppDisableStatus", "onComplete: "); + } + }); + } + + private void showHinDialog(String pkg, String label) { + CustomDialog customDialog = new CustomDialog(mContext); + customDialog.setTitle("隐藏应用"); + customDialog.setMessage("是否要隐藏:" + label); + customDialog.setOnClickBottomListener(new CustomDialog.OnClickBottomListener() { + @Override + public void onPositiveClick() { + updateAppDisableStatus(pkg, label); + customDialog.dismiss(); + } + + @Override + public void onNegtiveClick() { + customDialog.dismiss(); + } + }); + customDialog.show(); + } + private void showPassword() { PasswordDialog passwordDialog = new PasswordDialog(mContext); passwordDialog.setTitle("退出关怀系统"); diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java b/app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java new file mode 100644 index 0000000..2add150 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/fragment/custom/CustomContact.java @@ -0,0 +1,26 @@ +package com.uiui.aios.fragment.custom; + + +import com.uiui.aios.base.BasePresenter; +import com.uiui.aios.base.BaseView; +import com.uiui.aios.bean.AlarmClockData; +import com.uiui.aios.bean.SnInfo; +import com.uiui.aios.bean.UserAvatarInfo; + +import java.util.List; + +public class CustomContact { + public interface Presenter extends BasePresenter { + void getSnIsActivation(); + void getSnInfo(); + void getUserAvatarInfo(); + void getAlarmClock(); + } + + public interface CustomView extends BaseView { + void setSnIsActivation(boolean activation); + void setSnInfo(SnInfo snInfo); + void setUserAvatarInfo(UserAvatarInfo userAvatarInfo); + void setAlarmClock(List clockDataList); + } +} diff --git a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java b/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java similarity index 90% rename from app/src/main/java/com/uiui/aios/fragment/CustomFragment.java rename to app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java index b04f28a..df41dd2 100644 --- a/app/src/main/java/com/uiui/aios/fragment/CustomFragment.java +++ b/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java @@ -1,4 +1,4 @@ -package com.uiui.aios.fragment; +package com.uiui.aios.fragment.custom; import android.app.Activity; import android.app.ActivityManager; @@ -50,10 +50,9 @@ import com.uiui.aios.activity.contact.ContactActivity; import com.uiui.aios.activity.weather.WeatherActivity; import com.uiui.aios.adapter.NotificationAdapter; import com.uiui.aios.adapter.SOSNnmberAdapter; -import com.uiui.aios.alarm.AlarmUtils; +import com.uiui.aios.base.BaseFragment; import com.uiui.aios.bean.AlarmClockData; import com.uiui.aios.bean.AlarmItem; -import com.uiui.aios.bean.BaseResponse; import com.uiui.aios.bean.Contact; import com.uiui.aios.bean.HealthCode; import com.uiui.aios.bean.SnInfo; @@ -73,14 +72,10 @@ import com.uiui.aios.utils.Utils; import java.lang.reflect.Method; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import io.reactivex.rxjava3.annotations.NonNull; -import io.reactivex.rxjava3.core.Observer; -import io.reactivex.rxjava3.disposables.Disposable; /** @@ -88,12 +83,14 @@ import io.reactivex.rxjava3.disposables.Disposable; * Use the {@link CustomFragment#newInstance} factory method to * create an instance of this fragment. */ -public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkStatusChangedListener { +public class CustomFragment extends BaseFragment implements CustomContact.CustomView, NetworkUtils.OnNetworkStatusChangedListener { // @BindView(R.id.cl_alarm) // ConstraintLayout cl_alarm; @BindView(R.id.cl_weather) ConstraintLayout cl_weather; + @BindView(R.id.cl_activation) + ConstraintLayout cl_activation; @BindView(R.id.cl_clean) ConstraintLayout cl_shared_space; @BindView(R.id.cl_sos) @@ -157,6 +154,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt private Activity mContext; private ContentResolver mCRv; private CacheHelper mCacheHelper; + private CustomPresenter mCustomPresenter; // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -332,6 +330,9 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt // Inflate the layout for this fragment rootView = inflater.inflate(R.layout.fragment_custom, container, false); mContext = (Activity) rootView.getContext(); + mCustomPresenter = new CustomPresenter(mContext); + mCustomPresenter.attachView(this); + mCustomPresenter.setLifecycle(lifecycleSubject); mCacheHelper = new CacheHelper(mContext); mCRv = mContext.getContentResolver(); ButterKnife.bind(this, rootView); @@ -406,6 +407,12 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt startActivity(new Intent(mContext, WeatherActivity.class)); } }); + cl_activation.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + ApkUtils.openApp(mContext, "com.uiui.sn"); + } + }); cl_shared_space.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -513,51 +520,60 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt } private void initData() { - NetInterfaceManager.getInstance().getSnInfo(new NetInterfaceManager.SnInfoCallback() { - @Override - public void setSnInfo(SnInfo snInfo) { - if (snInfo != null) { - if (TextUtils.isEmpty(snInfo.getSn_name())) { -// tv_name.setText("未设置"); - } else { -// tv_name.setText(snInfo.getSn_name()); - } - } else { -// tv_name.setText("未设置"); - } - } - }); - NetInterfaceManager.getInstance().getUserAvatarInfoControl() - .subscribe(new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getUserAvatarInfoControl", "onSubscribe: "); - } + mCustomPresenter.getSnIsActivation(); - @Override - public void onNext(@NonNull BaseResponse userAvatarInfoBaseResponse) { - Log.e("getUserAvatarInfoControl", "onNext: " + userAvatarInfoBaseResponse); - if (userAvatarInfoBaseResponse.code == 200) { - if (!mContext.isDestroyed()) { -// Glide.with(iv_head).load(userAvatarInfoBaseResponse.data.getAvatar()).into(iv_head); - } - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getUserAvatarInfoControl", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("getUserAvatarInfoControl", "onComplete: "); - } - }); initAmap(); // getAlarmClock(); } + @Override + public void setSnIsActivation(boolean activation) { + if (activation) { + cl_weather.setVisibility(View.VISIBLE); + cl_activation.setVisibility(View.GONE); + } else { + cl_weather.setVisibility(View.GONE); + cl_activation.setVisibility(View.VISIBLE); + } + mCustomPresenter.getSnInfo(); + } + + @Override + public void setSnInfo(SnInfo snInfo) { + if (snInfo != null) { + if (TextUtils.isEmpty(snInfo.getSn_name())) { +// tv_name.setText("未设置"); + } else { +// tv_name.setText(snInfo.getSn_name()); + } + } else { +// tv_name.setText("未设置"); + } + mCustomPresenter.getUserAvatarInfo(); + } + + @Override + public void setUserAvatarInfo(UserAvatarInfo userAvatarInfo) { + if (userAvatarInfo != null && userAvatarInfo.getAvatar() != null) { + if (!mContext.isDestroyed()) { +// Glide.with(iv_head).load(userAvatarInfo.getAvatar()).into(iv_head); + } + } + mCustomPresenter.getAlarmClock(); + } + + @Override + public void setAlarmClock(List clockDataList) { + if (clockDataList != null && clockDataList.size() != 0) { + notificationAdapter.setDataList(clockDataList); + 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 onStart() { super.onStart(); @@ -574,6 +590,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt // setAlarm(); getAlarmClock(); setSosNumber(); + mCustomPresenter.getSnIsActivation(); } private void openScheme(String uri) { @@ -601,7 +618,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt return; } - NetInterfaceManager.getInstance().getSnInfo(new NetInterfaceManager.SnInfoCallback() { + NetInterfaceManager.getInstance().getSnInfo(lifecycleSubject, new NetInterfaceManager.SnInfoCallback() { @Override public void setSnInfo(SnInfo snInfo) { if (snInfo == null || TextUtils.isEmpty(snInfo.getMobile())) { @@ -686,33 +703,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt } 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() { - - } - }); } private void showNoData(String title, String msg) { @@ -825,7 +816,10 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt private void killBackgroundApp() { List pkgList = ApkUtils.queryFilterAppList(mContext); for (String pkg : pkgList) { - if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID)) continue; + if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID) + || "com.tencent.mm".equals(pkg)) { + continue; + } killBackgroundProcesses(pkg); } refreshMemory(); @@ -865,6 +859,7 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt @Override public void onDestroy() { super.onDestroy(); + mCustomPresenter.detachView(); NetworkUtils.unregisterNetworkStatusChangedListener(this); if (batteryReceiver != null) { mContext.unregisterReceiver(batteryReceiver); diff --git a/app/src/main/java/com/uiui/aios/fragment/CustomPagerAdapter.java b/app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java similarity index 94% rename from app/src/main/java/com/uiui/aios/fragment/CustomPagerAdapter.java rename to app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java index 173265c..1d64512 100644 --- a/app/src/main/java/com/uiui/aios/fragment/CustomPagerAdapter.java +++ b/app/src/main/java/com/uiui/aios/fragment/custom/CustomPagerAdapter.java @@ -1,4 +1,4 @@ -package com.uiui.aios.fragment; +package com.uiui.aios.fragment.custom; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java b/app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java new file mode 100644 index 0000000..ac5e732 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/fragment/custom/CustomPresenter.java @@ -0,0 +1,162 @@ +package com.uiui.aios.fragment.custom; + +import android.content.Context; +import android.provider.Settings; +import android.util.Log; + +import com.google.gson.JsonObject; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.FragmentEvent; +import com.uiui.aios.alarm.AlarmUtils; +import com.uiui.aios.bean.AlarmClockData; +import com.uiui.aios.bean.BaseResponse; +import com.uiui.aios.bean.SnInfo; +import com.uiui.aios.bean.UserAvatarInfo; +import com.uiui.aios.network.NetInterfaceManager; +import com.uiui.aios.utils.GsonUtils; + +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; +import io.reactivex.rxjava3.subjects.BehaviorSubject; + +public class CustomPresenter implements CustomContact.Presenter { + private static final String TAG = CustomPresenter.class.getSimpleName(); + private Context mContext; + private CustomContact.CustomView mView; + + public CustomPresenter(Context context) { + this.mContext = context; + } + + private BehaviorSubject lifecycle; + + void setLifecycle(BehaviorSubject lifecycle) { + this.lifecycle = lifecycle; + } + + public BehaviorSubject getLifecycle() { + return lifecycle; + } + + @Override + public void attachView(@NonNull CustomContact.CustomView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + + @Override + public void getSnIsActivation() { + NetInterfaceManager.getInstance() + .getSnIsActivationObservable() + .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getSnIsActivation", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("getSnIsActivation", "onNext: " + baseResponse); + if (baseResponse.code == 200) { + JsonObject jsonObject = GsonUtils.getJsonObject(baseResponse.data.toString()); + int is_activation = jsonObject.get("is_activation").getAsInt(); + Settings.Global.putInt(mContext.getContentResolver(), "uiui_activation", is_activation); + mView.setSnIsActivation(is_activation == 1); +// mView.setSnIsActivation(false); + } else { + mView.setSnIsActivation(false); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getSnIsActivation", "onError: " + e.getMessage()); + int is_activation = Settings.Global.getInt(mContext.getContentResolver(), "uiui_activation", 0); + mView.setSnIsActivation(is_activation == 1); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getSnIsActivation", "onComplete: "); + } + }); + } + + @Override + public void getSnInfo() { + NetInterfaceManager.getInstance().getSnInfo(getLifecycle(), new NetInterfaceManager.SnInfoCallback() { + @Override + public void setSnInfo(SnInfo snInfo) { + mView.setSnInfo(snInfo); + } + }); + } + + @Override + public void getUserAvatarInfo() { + NetInterfaceManager.getInstance() + .getUserAvatarInfoControl() + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), FragmentEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getUserAvatarInfoControl", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse userAvatarInfoBaseResponse) { + Log.e("getUserAvatarInfoControl", "onNext: " + userAvatarInfoBaseResponse); + mView.setUserAvatarInfo(userAvatarInfoBaseResponse.data); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getUserAvatarInfoControl", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getUserAvatarInfoControl", "onComplete: "); + } + }); + } + + @Override + public void getAlarmClock() { + NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { + AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock(); + if (alarmClockData != null) { + List data = new ArrayList<>(); + data.add(alarmClockData); + mView.setAlarmClock(data); + } else { + mView.setAlarmClock(null); + } + } + + @Override + public void setAlarmClockEmpty() { + mView.setAlarmClock(null); + } + + @Override + public void onError() { + + } + }); + } + +} diff --git a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java index 717f73b..e82121d 100644 --- a/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java +++ b/app/src/main/java/com/uiui/aios/network/NetInterfaceManager.java @@ -43,7 +43,9 @@ import com.uiui.aios.network.api.SNInfoApi; import com.uiui.aios.network.api.SOSRecordApi; import com.uiui.aios.network.api.SendScreenshotApi; import com.uiui.aios.network.api.Setting; +import com.uiui.aios.network.api.SnIsActivationApi; import com.uiui.aios.network.api.UpdateAlarmClockApi; +import com.uiui.aios.network.api.UpdateAppIconApi; import com.uiui.aios.network.api.UpdateDesktopApi; import com.uiui.aios.network.api.UserInfoControl; import com.uiui.aios.network.interceptor.RepeatRequestInterceptor; @@ -255,6 +257,20 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable getSnIsActivationObservable() { + return mRetrofit.create(SnIsActivationApi.class) + .getSnIsActivation(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable getUpdateAppIconObservable(String pkg, String label, int type) { + return mRetrofit.create(UpdateAppIconApi.class) + .appIconUpdate(Utils.getSerial(), pkg, type, label) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public interface onCompleteCallback { void onComplete(); @@ -776,8 +792,9 @@ public class NetInterfaceManager { void setSnInfo(SnInfo snInfo); } - public void getSnInfo(SnInfoCallback callback) { + public void getSnInfo(BehaviorSubject lifecycle, SnInfoCallback callback) { getsnInfoControl() + .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) .subscribe(new Observer>() { @Override public void onSubscribe(@NonNull Disposable d) { diff --git a/app/src/main/java/com/uiui/aios/network/URLAddress.java b/app/src/main/java/com/uiui/aios/network/URLAddress.java index f21b4b6..f801e58 100644 --- a/app/src/main/java/com/uiui/aios/network/URLAddress.java +++ b/app/src/main/java/com/uiui/aios/network/URLAddress.java @@ -2,6 +2,9 @@ package com.uiui.aios.network; public class URLAddress { public static final String ROOT_URL = "https://led.zuoyepad.com/android/"; + + /*获取设备是否激活*/ + public static final String GET_SN_IS_ACTIVATION = "sn/getSnIsActivation"; /*设备信息接口*/ public static final String SNINFO = "sn/getSnInfo"; /*获取用户头像和信息*/ @@ -42,6 +45,8 @@ public class URLAddress { public static final String GET_MAIL_LIST = "Control/getMailList"; /*获取负二屏开关*/ public static final String GET_ADMIN_SN_SETTING = "getAdminSnSetting"; + /*更新app隐藏或者显示状态*/ + public static final String APP_ICON_UPDATE = "Control/appIconUpdate"; diff --git a/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java b/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java new file mode 100644 index 0000000..3790547 --- /dev/null +++ b/app/src/main/java/com/uiui/aios/network/api/SnIsActivationApi.java @@ -0,0 +1,15 @@ +package com.uiui.aios.network.api; + +import com.uiui.aios.bean.BaseResponse; +import com.uiui.aios.network.URLAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface SnIsActivationApi { + @GET(URLAddress.GET_SN_IS_ACTIVATION) + Observable getSnIsActivation( + @Query("sn") String sn + ); +} diff --git a/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java b/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java new file mode 100644 index 0000000..53ed84d --- /dev/null +++ b/app/src/main/java/com/uiui/aios/network/api/UpdateAppIconApi.java @@ -0,0 +1,20 @@ +package com.uiui.aios.network.api; + +import com.uiui.aios.bean.BaseResponse; +import com.uiui.aios.network.URLAddress; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface UpdateAppIconApi { + @FormUrlEncoded + @POST(URLAddress.APP_ICON_UPDATE) + Observable appIconUpdate( + @Field("sn") String sn, + @Field("app_package") String app_package, + @Field("type") int type,//类型 1显示 0隐藏 + @Field("app_name") String app_name + ); +} diff --git a/app/src/main/java/com/uiui/aios/utils/ApkUtils.java b/app/src/main/java/com/uiui/aios/utils/ApkUtils.java index d81dd33..eba008f 100644 --- a/app/src/main/java/com/uiui/aios/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/aios/utils/ApkUtils.java @@ -48,16 +48,17 @@ public class ApkUtils { this.add("org.chromium.browser"); this.add("com.sprd.sprdnote"); this.add("com.android.deskclock"); - this.add("com.alldocube.store"); this.add("com.android.email"); this.add("com.android.calendar"); this.add("com.android.uiuios"); this.add("com.uiui.os"); this.add("com.uiui.health"); - this.add("com.tencent.android.qqdownloader"); this.add("com.uiui.appstore"); +// this.add("com.tencent.android.qqdownloader"); +// this.add("com.alldocube.store"); }}; private static HashSet showPackageName = new HashSet() {{ + this.add("com.uiui.sn"); this.add("com.android.dialer"); this.add("com.android.gallery3d"); this.add("com.android.settings"); @@ -66,10 +67,18 @@ public class ApkUtils { this.add("com.mediatek.camera"); this.add("com.android.mms"); this.add("com.uiui.city"); - this.add("com.alldocube.store"); this.add("com.android.fmradio"); this.add("com.android.documentsui"); this.add("com.android.calculator2"); + this.add("cn.wps.moffice_eng"); + this.add("com.baidu.searchbox.lite"); + this.add("com.ss.android.article.video"); + this.add("com.ss.android.ugc.aweme"); + this.add("com.smile.gifmaker"); + this.add("com.kuaikan.comic"); + this.add("com.jxw.launcher"); + this.add("com.tencent.android.qqdownloader"); + this.add("com.alldocube.store"); }}; private static HashSet allHintPackage = new HashSet() {{ this.add("com.android.uiuios"); @@ -177,6 +186,7 @@ public class ApkUtils { } if (Settings.Global.getInt(context.getContentResolver(), "is_activity", 0) == 0) { applicationInfos.removeIf(applicationInfo -> "com.uiui.city".equals(applicationInfo.packageName)); +// applicationInfos.removeIf(applicationInfo -> "com.uiui.sn".equals(applicationInfo.packageName)); } applicationInfos.sort(new Comparator() { @@ -220,11 +230,20 @@ public class ApkUtils { return desktopIcons; } - private static boolean appIsDisable(Context context, String pkg) { + public static boolean appIsDisable(Context context, String pkg) { PackageManager pm = context.getPackageManager(); return pm.getApplicationEnabledSetting(pkg) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED; } + public static boolean disableApp(Context context, String pkg) { + PackageManager pm = context.getPackageManager(); + try { + pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + return true; + } catch (Exception e) { + return false; + } + } /** * 获取第三方应用 diff --git a/app/src/main/java/com/uiui/aios/view/MyGridLayout.java b/app/src/main/java/com/uiui/aios/view/MyGridLayout.java index bff1a0d..f4a62a4 100644 --- a/app/src/main/java/com/uiui/aios/view/MyGridLayout.java +++ b/app/src/main/java/com/uiui/aios/view/MyGridLayout.java @@ -7,7 +7,6 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; - import com.uiui.aios.R; import com.uiui.aios.bean.DesktopIcon; @@ -143,6 +142,8 @@ public class MyGridLayout extends ViewGroup { public interface OnItemClickListener { void onItemClick(View v, int index); + + void onLongClick(View v, int index); } private ArrayList applicationInfos; @@ -164,12 +165,18 @@ public class MyGridLayout extends ViewGroup { final int index = i; View view = getChildAt(i); view.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { click.onItemClick(v, index); } }); + view.setOnLongClickListener(new OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + click.onLongClick(view, index); + return false; + } + }); if (applicationInfos.get(index) == null) { view.setClickable(false); } else { diff --git a/app/src/main/res/drawable-hdpi/com_uiui_sn.png b/app/src/main/res/drawable-hdpi/com_uiui_sn.png index ed8e03751acc2e43ed5a2e8b31e4a67c69f232e9..d4d1d100280f22fd73661ae517a4365bc5b46c78 100644 GIT binary patch delta 4492 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 aKG_}n;!SSY(>%hx delta 7408 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 diff --git a/app/src/main/res/drawable-hdpi/home_activation_icon.png b/app/src/main/res/drawable-hdpi/home_activation_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..62b618361c88666d5800513a2e892d2d7fe25e37 GIT binary patch literal 3931 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout-land/fragment_custom.xml b/app/src/main/res/layout-land/fragment_custom.xml index 6bf77c8..17495d3 100644 --- a/app/src/main/res/layout-land/fragment_custom.xml +++ b/app/src/main/res/layout-land/fragment_custom.xml @@ -25,7 +25,8 @@ android:layout_marginEnd="4dp" android:layout_marginBottom="4dp" android:layout_weight="3" - android:background="@drawable/custom_bg_weather"> + android:background="@drawable/custom_bg_weather" + android:visibility="visible"> @@ -92,6 +93,56 @@ app:layout_constraintTop_toTopOf="@+id/tv_location" /> + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + android:background="@drawable/custom_bg_weather" + android:visibility="visible"> @@ -93,6 +94,56 @@ app:layout_constraintTop_toBottomOf="@+id/tv_temp" /> + + + + + + + + + + + @@ -149,15 +200,15 @@ - - - - - - - - - + + + + + + + + + @@ -195,10 +246,10 @@ @@ -255,25 +306,25 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8d26a1d..af488a4 100644 --- a/build.gradle +++ b/build.gradle @@ -4,10 +4,10 @@ buildscript { repositories { google() - jcenter() - maven { url "https://jitpack.io" } mavenCentral() + maven { url "https://jitpack.io" } maven { url 'http://developer.huawei.com/repo/' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } } dependencies { classpath 'com.android.tools.build:gradle:3.6.4' @@ -21,10 +21,10 @@ buildscript { allprojects { repositories { google() - jcenter() - maven { url "https://jitpack.io" } mavenCentral() + maven { url "https://jitpack.io" } maven { url 'http://developer.huawei.com/repo/' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } } gradle.projectsEvaluated { tasks.withType(JavaCompile) {