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 ed8e037..d4d1d10 100644
Binary files a/app/src/main/res/drawable-hdpi/com_uiui_sn.png and b/app/src/main/res/drawable-hdpi/com_uiui_sn.png differ
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 0000000..62b6183
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_activation_icon.png differ
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) {