From 14860a6dd16660f9fd7d22654d79f7d28c04afea Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Thu, 8 Jun 2023 10:07:46 +0800 Subject: [PATCH] =?UTF-8?q?version:1.4.3=20fix:=20update:=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B7=BB=E5=8A=A0=E5=BA=94=E7=94=A8=EF=BC=8C=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=9B=B4=E6=96=B0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 16 +- .../uiui/zyos/activity/AddIconActivity.java | 81 ++++++ .../com/uiui/zyos/activity/ExitActivity.java | 4 +- .../uiui/zyos/activity/PasswordActivity.java | 181 +++++++++++++ .../zyos/activity/more/MoreAppActivity.java | 9 +- .../zyos/activity/more/MorePresenter.java | 11 +- .../com/uiui/zyos/adapter/AddAppAdapter.java | 123 +++++++++ .../com/uiui/zyos/adapter/AppAdapter.java | 26 +- .../com/uiui/zyos/base/BaseApplication.java | 2 + .../uiui/zyos/fragment/user/UserFragment.java | 1 + .../zyos/fragment/user/UserPresenter.java | 12 +- .../com/uiui/zyos/manager/AppManager.java | 255 ++++++++++++++++++ .../java/com/uiui/zyos/utils/ApkUtils.java | 6 +- app/src/main/res/drawable-hdpi/icon_add.png | Bin 0 -> 2036 bytes .../main/res/drawable-hdpi/icon_selected.png | Bin 0 -> 2014 bytes .../main/res/drawable-hdpi/icon_unselect.png | Bin 0 -> 1916 bytes app/src/main/res/layout/activity_add_icon.xml | 66 +++++ .../{layout-land => layout}/activity_exit.xml | 0 .../activity_passwd.xml} | 2 +- app/src/main/res/layout/item_add_app.xml | 56 ++++ 21 files changed, 829 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/uiui/zyos/activity/AddIconActivity.java create mode 100644 app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java create mode 100644 app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java create mode 100644 app/src/main/java/com/uiui/zyos/manager/AppManager.java create mode 100644 app/src/main/res/drawable-hdpi/icon_add.png create mode 100644 app/src/main/res/drawable-hdpi/icon_selected.png create mode 100644 app/src/main/res/drawable-hdpi/icon_unselect.png create mode 100644 app/src/main/res/layout/activity_add_icon.xml rename app/src/main/res/{layout-land => layout}/activity_exit.xml (100%) rename app/src/main/res/{layout-port/activity_exit.xml => layout/activity_passwd.xml} (99%) create mode 100644 app/src/main/res/layout/item_add_app.xml diff --git a/app/build.gradle b/app/build.gradle index 57383ac..85e80b6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { minSdkVersion 24 targetSdkVersion 29 - versionCode 31 - versionName "1.3.9" + versionCode 35 + versionName "1.4.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5fe1da..59db435 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -90,12 +90,23 @@ android:excludeFromRecents="true" android:screenOrientation="portrait" android:theme="@style/activity_styles" /> + + + android:launchMode="singleTask" + android:screenOrientation="userLandscape" /> - - + stringIntegerHashMap = new HashMap<>(); + WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getRealMetrics(dm); + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 1));//top间距 + stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距 + stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距 + stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距 + recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); + mAddAppAdapter = new AddAppAdapter(); + recyclerView.setAdapter(mAddAppAdapter); + } + + @Override + public void initData() { + ArrayList desktopIcons = AppManager.getInstance().getAllAppList(); + mAddAppAdapter.setDesktopIcons(desktopIcons); + Set appList = AppManager.getInstance().getFilterAppset(); + mAddAppAdapter.setPackageSet(appList); + + tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size())); + + } + + +} diff --git a/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java b/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java index fcd655e..fc78a13 100644 --- a/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/ExitActivity.java @@ -142,7 +142,7 @@ public class ExitActivity extends BaseActivity { return; } Log.e(TAG, "inputComplete: " + content); - String password = Settings.Global.getString(getContentResolver(), CommonConfig.DEFAULT_PASSWORD); + String password = Settings.Global.getString(getContentResolver(), CommonConfig.LOCK_SCREEN_PASSWORD); if ((!TextUtils.isEmpty(content) && !TextUtils.isEmpty(password))) { if (password.equals(content)) { exitDesktop(); @@ -187,7 +187,7 @@ public class ExitActivity extends BaseActivity { String oldText = codeView.getEditText().getText().toString(); Log.e(TAG, "add: " + oldText); codeView.getEditText().setText(text); - soundPool.play(soundId, 1, 1, 0, 0, 1); +// soundPool.play(soundId, 1, 1, 0, 0, 1); } private void exitDesktop() { diff --git a/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java b/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java new file mode 100644 index 0000000..cf84160 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/activity/PasswordActivity.java @@ -0,0 +1,181 @@ +package com.uiui.zyos.activity; + +import android.content.Context; +import android.content.Intent; +import android.media.AudioAttributes; +import android.media.SoundPool; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; + +import com.tuo.customview.VerificationCodeView; +import com.uiui.zyos.R; +import com.uiui.zyos.base.BaseActivity; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.manager.RemoteManager; +import com.uiui.zyos.utils.ApkUtils; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class PasswordActivity extends BaseActivity { + + private static final String TAG = PasswordActivity.class.getSimpleName(); + + @BindView(R.id.bt_0) + TextView bt0; + @BindView(R.id.bt_1) + TextView bt1; + @BindView(R.id.bt_2) + TextView bt2; + @BindView(R.id.bt_3) + TextView bt3; + @BindView(R.id.bt_4) + TextView bt4; + @BindView(R.id.bt_5) + TextView bt5; + @BindView(R.id.bt_6) + TextView bt6; + @BindView(R.id.bt_7) + TextView bt7; + @BindView(R.id.bt_8) + TextView bt8; + @BindView(R.id.bt_9) + TextView bt9; + @BindView(R.id.bt_del) + TextView bt_del; + @BindView(R.id.bt_confirm) + TextView bt_confirm; + + @BindView(R.id.textView) + TextView textView; + @BindView(R.id.tv_hint) + TextView tv_hint; + @BindView(R.id.ll_keyboard) + LinearLayout ll_keyboard; + @BindView(R.id.icv) + VerificationCodeView codeView; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + } + + @Override + public int getLayoutId() { + return R.layout.activity_passwd; + } + + @Override + public void initView() { + ButterKnife.bind(this); + InputMethodManager imm = (InputMethodManager) PasswordActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(codeView.getWindowToken(), 0); + codeView.getEditText().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + ll_keyboard.setVisibility(View.VISIBLE); + } + }); + codeView.setInputCompleteListener(new VerificationCodeView.InputCompleteListener() { + @Override + public void inputComplete() { + checkPasswd(); + } + + @Override + public void deleteContent() { + + } + }); + + bt_del.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + tv_hint.setText(""); + codeView.clearInputContent(); + } + }); + bt_confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + checkPasswd(); + } + }); + + bt0.setOnClickListener(view1 -> add(codeView, "0")); + bt1.setOnClickListener(view1 -> add(codeView, "1")); + bt2.setOnClickListener(view1 -> add(codeView, "2")); + bt3.setOnClickListener(view1 -> add(codeView, "3")); + bt4.setOnClickListener(view1 -> add(codeView, "4")); + bt5.setOnClickListener(view1 -> add(codeView, "5")); + bt6.setOnClickListener(view1 -> add(codeView, "6")); + bt7.setOnClickListener(view1 -> add(codeView, "7")); + bt8.setOnClickListener(view1 -> add(codeView, "8")); + bt9.setOnClickListener(view1 -> add(codeView, "9")); + } + + private void checkPasswd() { + String content = codeView.getInputContent(); + if (TextUtils.isEmpty(content) || content.length() != 6) { + return; + } + Log.e(TAG, "inputComplete: " + content); + String password = Settings.Global.getString(getContentResolver(), CommonConfig.LOCK_SCREEN_PASSWORD); + if ((!TextUtils.isEmpty(content) && !TextUtils.isEmpty(password))) { + if (password.equals(content)) { + startActivity(new Intent(PasswordActivity.this, AddIconActivity.class)); + finish(); + } else { + setEmpty(); + tv_hint.setText("密码错误"); + } + } else if (CommonConfig.DEFAULT_PASSWORD.equals(content)) { + startActivity(new Intent(PasswordActivity.this, AddIconActivity.class)); + finish(); + } else { + setEmpty(); + tv_hint.setText("密码错误"); + } + } + + private void setEmpty() { + Handler.getMain().postDelayed(new Runnable() { + @Override + public void run() { + codeView.clearInputContent(); + tv_hint.setText(""); + } + }, 1000); + } + + @Override + public void initData() { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void add(VerificationCodeView codeView, String text) { + Log.e(TAG, "add: text = " + text); + String oldText = codeView.getEditText().getText().toString(); + Log.e(TAG, "add: " + oldText); + codeView.getEditText().setText(text); + } + + +} diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java index c11ae8a..7d30b54 100644 --- a/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java +++ b/app/src/main/java/com/uiui/zyos/activity/more/MoreAppActivity.java @@ -72,7 +72,6 @@ public class MoreAppActivity extends BaseActivity implements MoreContact.MoreVie recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap)); mAppAdapter = new AppAdapter(); recyclerView.setAdapter(mAppAdapter); - } @Override @@ -81,6 +80,12 @@ public class MoreAppActivity extends BaseActivity implements MoreContact.MoreVie mPresenter.getInstalledApp(); } + @Override + protected void onResume() { + super.onResume(); + mPresenter.getInstalledApp(); + } + @Override protected void onDestroy() { super.onDestroy(); @@ -92,7 +97,7 @@ public class MoreAppActivity extends BaseActivity implements MoreContact.MoreVie @Override public void setDesktopIcons(List desktopIcons) { mAppAdapter.setDesktopIcons(desktopIcons); - tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size())); + tv_appsize.setText(String.format(getString(R.string.app_size), desktopIcons.size() - 1)); } private AppChangedReceiver mAppChangedReceiver; diff --git a/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java b/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java index 955103f..40f5e5b 100644 --- a/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java +++ b/app/src/main/java/com/uiui/zyos/activity/more/MorePresenter.java @@ -6,8 +6,9 @@ import android.util.Log; import androidx.annotation.NonNull; import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.zyos.R; import com.uiui.zyos.bean.DesktopIcon; -import com.uiui.zyos.utils.ApkUtils; +import com.uiui.zyos.manager.AppManager; import java.util.ArrayList; @@ -16,6 +17,7 @@ import io.reactivex.rxjava3.subjects.BehaviorSubject; public class MorePresenter implements MoreContact.Presenter { private static final String TAG = MorePresenter.class.getSimpleName(); + private Context mContext; private MoreContact.MoreView mView; @@ -46,7 +48,12 @@ public class MorePresenter implements MoreContact.Presenter { @Override public void getInstalledApp() { - ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(mContext); + ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); + DesktopIcon desktopIcon = new DesktopIcon(); + desktopIcon.setLable("添加应用"); + desktopIcon.setPackageName("com.zyos.add"); + desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add)); + desktopIcons.add(desktopIcons.size(), desktopIcon); mView.setDesktopIcons(desktopIcons); } } diff --git a/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java new file mode 100644 index 0000000..f569ed7 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/adapter/AddAppAdapter.java @@ -0,0 +1,123 @@ +package com.uiui.zyos.adapter; + +import android.content.Context; +import android.content.Intent; +import android.provider.Settings; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.uiui.zyos.R; +import com.uiui.zyos.activity.PasswordActivity; +import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.manager.AppManager; +import com.uiui.zyos.utils.ApkUtils; +import com.uiui.zyos.utils.BitmapUtils; +import com.uiui.zyos.utils.IconUtils; +import com.uiui.zyos.utils.OpenApkUtils; +import com.uiui.zyos.utils.ToastUtil; + +import java.util.List; +import java.util.Set; + +public class AddAppAdapter extends RecyclerView.Adapter { + private static final String TAG = AddAppAdapter.class.getSimpleName(); + + private Context mContext; + + private List desktopIcons; + + private Set packageSet; + + @NonNull + @Override + public AppHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + return new AppHolder(LayoutInflater.from(mContext).inflate(R.layout.item_add_app, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull AppHolder holder, int position) { + DesktopIcon desktopIcon = desktopIcons.get(position); + String lable = desktopIcon.getLable(); + holder.tv_appname.setText(lable); + holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); + String pkg = desktopIcon.getPackageName(); + + if (packageSet != null) { + if (packageSet.contains(pkg)) { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + } else { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselect)); + } + } + + Log.e(TAG, "getView: " + pkg); + int i = IconUtils.appClassNameList.indexOf(pkg); + if (i != -1) { + String val = IconUtils.appIconList.get(i); + int resID = mContext.getResources().getIdentifier(val, "drawable", "com.uiui.zyos"); + if (resID == 0) { + Log.e(TAG, "getView: not found src : " + pkg); + holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + } else { + holder.iv_icon.setImageDrawable(mContext.getResources().getDrawable(resID)); + } + } else { + if (AppManager.ADD_NAME.equals(pkg)) { + holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); + } else { + holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + } + } + holder.root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (packageSet.contains(pkg)) { + packageSet.remove(pkg); + AppManager.getInstance().removePakcage(pkg); + } else { + packageSet.add(pkg); + AppManager.getInstance().addPakcage(pkg); + } + notifyDataSetChanged(); + } + }); + } + + @Override + public int getItemCount() { + return desktopIcons == null ? 0 : desktopIcons.size(); + } + + public void setDesktopIcons(List desktopIcons) { + this.desktopIcons = desktopIcons; + notifyDataSetChanged(); + } + + public void setPackageSet(Set packageSet) { + this.packageSet = packageSet; + } + + class AppHolder extends RecyclerView.ViewHolder { + ConstraintLayout root; + TextView tv_appname; + ImageView iv_icon, iv_select; + + public AppHolder(@NonNull View itemView) { + super(itemView); + root = itemView.findViewById(R.id.root); + tv_appname = itemView.findViewById(R.id.tv_appname); + iv_icon = itemView.findViewById(R.id.iv_icon); + iv_select = itemView.findViewById(R.id.iv_select); + } + } +} diff --git a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java index ac6f42c..861c6d2 100644 --- a/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java +++ b/app/src/main/java/com/uiui/zyos/adapter/AppAdapter.java @@ -1,6 +1,7 @@ package com.uiui.zyos.adapter; import android.content.Context; +import android.content.Intent; import android.graphics.drawable.Drawable; import android.provider.Settings; import android.util.Log; @@ -15,8 +16,10 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.uiui.zyos.R; +import com.uiui.zyos.activity.PasswordActivity; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.utils.ApkUtils; import com.uiui.zyos.utils.AppUsedTimeUtils; import com.uiui.zyos.utils.BitmapUtils; @@ -60,19 +63,28 @@ public class AppAdapter extends RecyclerView.Adapter { holder.iv_icon.setImageDrawable(mContext.getResources().getDrawable(resID)); } } else { - holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + if (AppManager.ADD_NAME.equals(pkg)) { + holder.iv_icon.setImageDrawable(desktopIcon.getIcon()); + } else { + holder.iv_icon.setImageBitmap(BitmapUtils.getIconBitmap(mContext, desktopIcon.getIcon())); + } } holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - int setting_other_appInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1); - if (setting_other_appInstaller == 0 - && !ApkUtils.isSystemApp(mContext, desktopIcon.getPackageName() - )) { - ToastUtil.show("已禁止应用打开"); + if (AppManager.ADD_NAME.equals(pkg)) { + mContext.startActivity(new Intent(mContext, PasswordActivity.class)); } else { - OpenApkUtils.getInstance().openApp(desktopIcon.getPackageName(), desktopIcon.getClassName()); + int setting_other_appInstaller = Settings.Global.getInt(mContext.getContentResolver(), CommonConfig.SETTING_OTHER_APPINSTALLER_KEY, 1); + if (setting_other_appInstaller == 0 + && !ApkUtils.isSystemApp(mContext, desktopIcon.getPackageName() + )) { + ToastUtil.show("已禁止应用打开"); + } else { + OpenApkUtils.getInstance().openApp(desktopIcon.getPackageName(), desktopIcon.getClassName()); + } } + } }); } diff --git a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java index 1719730..46a431b 100644 --- a/app/src/main/java/com/uiui/zyos/base/BaseApplication.java +++ b/app/src/main/java/com/uiui/zyos/base/BaseApplication.java @@ -17,6 +17,7 @@ import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; import com.uiui.zyos.BuildConfig; import com.uiui.zyos.alarm.AlarmUtils; +import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.manager.ConnectManager; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.network.NetInterfaceManager; @@ -49,6 +50,7 @@ public class BaseApplication extends Application { if (SystemUtils.isMainProcessName(this, android.os.Process.myPid())) { String rootDir = MMKV.initialize(this); Log.e(TAG, "mmkv root: " + rootDir); + AppManager.init(this); Aria.init(this); Aria.get(this).getDownloadConfig().setMaxTaskNum(1); Aria.get(this).getDownloadConfig().setConvertSpeed(true); diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java index 010712b..565d73e 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserFragment.java @@ -357,6 +357,7 @@ public class UserFragment extends BaseFragment implements UserContact.UserView { super.onResume(); Log.e(TAG, "onResume: "); setButtonVisibility(); + mPresenter.getInstalledApp(); } @Override diff --git a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java b/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java index 9e4c9fb..0103343 100644 --- a/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java +++ b/app/src/main/java/com/uiui/zyos/fragment/user/UserPresenter.java @@ -9,25 +9,24 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.trello.rxlifecycle4.android.FragmentEvent; import com.uiui.zyos.BuildConfig; +import com.uiui.zyos.R; import com.uiui.zyos.bean.AppUsed; import com.uiui.zyos.bean.BaseResponse; import com.uiui.zyos.bean.DesktopIcon; import com.uiui.zyos.bean.SnInfo; import com.uiui.zyos.config.CommonConfig; import com.uiui.zyos.disklrucache.CacheHelper; +import com.uiui.zyos.manager.AppManager; import com.uiui.zyos.manager.RemoteManager; import com.uiui.zyos.network.NetInterfaceManager; import com.uiui.zyos.network.UrlAddress; -import com.uiui.zyos.utils.ApkUtils; import com.uiui.zyos.utils.CXAESUtil; import com.uiui.zyos.utils.Utils; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.function.Function; import java.util.function.Predicate; -import java.util.function.ToLongFunction; import java.util.stream.Collectors; import io.reactivex.rxjava3.annotations.NonNull; @@ -107,7 +106,12 @@ public class UserPresenter implements UserContact.Presenter { @Override public void getInstalledApp() { - ArrayList desktopIcons = ApkUtils.queryFilterAppInfo(mContext); + ArrayList desktopIcons = AppManager.getInstance().getFilterAppList(); + DesktopIcon desktopIcon = new DesktopIcon(); + desktopIcon.setLable("添加应用"); + desktopIcon.setPackageName("com.zyos.add"); + desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add)); + desktopIcons.add(desktopIcons.size(), desktopIcon); mView.setInstalledApp(desktopIcons); } diff --git a/app/src/main/java/com/uiui/zyos/manager/AppManager.java b/app/src/main/java/com/uiui/zyos/manager/AppManager.java new file mode 100644 index 0000000..3162204 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/manager/AppManager.java @@ -0,0 +1,255 @@ +package com.uiui.zyos.manager; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; + +import com.tencent.mmkv.MMKV; +import com.uiui.zyos.bean.DesktopIcon; +import com.uiui.zyos.config.CommonConfig; +import com.uiui.zyos.utils.ApkUtils; + +import java.text.Collator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class AppManager { + private static final String TAG = AppManager.class.getSimpleName(); + + public static final String ADD_NAME = "com.zyos.add"; + private static final String SHOW_PACKAGE_KEY = "SHOW_PACKAGE_KEY"; + + @SuppressLint("StaticFieldLeak") + private static AppManager sInstance; + private Context mContext; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private Set showPackages; + + public static void init(Context context) { + if (context == null) { + throw new RuntimeException("context is NULL"); + } + if (sInstance == null) { + Log.e(TAG, "init: "); + sInstance = new AppManager(context); + } + } + + public AppManager(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + this.mContext = context; + this.showPackages = mMMKV.decodeStringSet(SHOW_PACKAGE_KEY, new HashSet<>()); + this.showPackages.removeIf(TextUtils::isEmpty); + } + + public static AppManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init AppManager first"); + } + return sInstance; + } + + public void addPakcage(String packageName) { + this.showPackages.add(packageName); + mMMKV.encode(SHOW_PACKAGE_KEY, showPackages); + } + + public void removePakcage(String packageName) { + this.showPackages.remove(packageName); + mMMKV.encode(SHOW_PACKAGE_KEY, showPackages); + } + + public Set getFilterAppset() { + PackageManager pm = mContext.getPackageManager(); + // 查询所有已经安装的应用程序 + List resolveInfos = new ArrayList<>(); + // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName + List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); + Set allowPackages = resolveinfoList.stream().map(resolveInfo -> resolveInfo.activityInfo.packageName).collect(Collectors.toSet()); + + List adminApp = RemoteManager.getInstance().getAdminApp(); + Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); + for (ResolveInfo resolveInfo : resolveinfoList) { + String pkg = resolveInfo.activityInfo.packageName; + if (ApkUtils.appIsDisable(mContext, pkg)) { + Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + continue; + } + if (showPackages.contains(pkg)) { + resolveInfos.add(resolveInfo); + } else { + //通过flag排除系统应用,会将电话、短信也排除掉 + if (ApkUtils.isSystemApp(mContext, pkg)) { + if (ApkUtils.showPackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } else { + if (allowPackages.contains(pkg) && !ApkUtils.excludePackageName.contains(pkg)) { + if (adminApp.contains(pkg)) { + resolveInfos.add(resolveInfo); + } else if (ApkUtils.showPackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } + } + } + } + if (Settings.Global.getInt(mContext.getContentResolver(), "is_activity", 0) == 0) { + resolveInfos.removeIf(resolveInfo -> "com.uiui.city".equals(resolveInfo.activityInfo.packageName)); + } + Set desktopIcons = resolveInfos.stream().map(resolveInfo -> resolveInfo.activityInfo.packageName).collect(Collectors.toSet()); + return desktopIcons; + } + + + public ArrayList getFilterAppList() { + PackageManager pm = mContext.getPackageManager(); + // 查询所有已经安装的应用程序 + List resolveInfos = new ArrayList<>(); + // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName + List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); + Set allowPackages = resolveinfoList.stream().map(resolveInfo -> resolveInfo.activityInfo.packageName).collect(Collectors.toSet()); + + + List adminApp = RemoteManager.getInstance().getAdminApp(); + Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); + for (ResolveInfo resolveInfo : resolveinfoList) { + String pkg = resolveInfo.activityInfo.packageName; + if (ApkUtils.appIsDisable(mContext, pkg)) { + Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + continue; + } + if (showPackages.contains(pkg)) { + resolveInfos.add(resolveInfo); + } else { + //通过flag排除系统应用,会将电话、短信也排除掉 + if (ApkUtils.isSystemApp(mContext, pkg)) { + if (ApkUtils.showPackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } else { + if (allowPackages.contains(pkg) && !ApkUtils.excludePackageName.contains(pkg)) { + if (adminApp.contains(pkg)) { + resolveInfos.add(resolveInfo); + } else if (ApkUtils.showPackageName.contains(pkg)) { + resolveInfos.add(resolveInfo); + } + } + } + } + } + if (Settings.Global.getInt(mContext.getContentResolver(), "is_activity", 0) == 0) { + resolveInfos.removeIf(resolveInfo -> "com.uiui.city".equals(resolveInfo.activityInfo.packageName)); + } + resolveInfos.sort(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + return Collator.getInstance(Locale.CHINESE).compare(o1.loadLabel(pm).toString(), o2.loadLabel(pm).toString()); + } + }); + resolveInfos.sort(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + try { + if ((pm.getApplicationInfo(o1.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM) <= (pm.getApplicationInfo(o2.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM)) { + return 1; + } else { + return -1; + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return 0; + } + } + }); + ArrayList desktopIcons = new ArrayList<>(); + for (ResolveInfo applicationInfo : resolveInfos) { + if (!ApkUtils.excludeClassName.contains(applicationInfo.activityInfo.name)) { + desktopIcons.add(DesktopIcon.creatDesktopIcon(mContext, applicationInfo)); + } + } + return desktopIcons; + } + + public ArrayList getAllAppList() { + PackageManager pm = mContext.getPackageManager(); + // 查询所有已经安装的应用程序 + List resolveInfos = new ArrayList<>(); + // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent + Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); + resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName + List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); + Set allowPackages = resolveinfoList.stream().map(resolveInfo -> resolveInfo.activityInfo.packageName).collect(Collectors.toSet()); + + + List adminApp = RemoteManager.getInstance().getAdminApp(); + Log.i(TAG, "queryFilterAppInfo: adminapp = " + adminApp); + for (ResolveInfo resolveInfo : resolveinfoList) { + String pkg = resolveInfo.activityInfo.packageName; + if (ApkUtils.appIsDisable(mContext, pkg)) { + Log.e(TAG, "queryFilterAppInfo: disable = " + pkg); + continue; + } + if (ApkUtils.excludePackageName.contains(pkg)) { + continue; + } + + resolveInfos.add(resolveInfo); + } + if (Settings.Global.getInt(mContext.getContentResolver(), "is_activity", 0) == 0) { + resolveInfos.removeIf(resolveInfo -> "com.uiui.city".equals(resolveInfo.activityInfo.packageName)); + } + resolveInfos.sort(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + return Collator.getInstance(Locale.CHINESE).compare(o1.loadLabel(pm).toString(), o2.loadLabel(pm).toString()); + } + }); + resolveInfos.sort(new Comparator() { + @Override + public int compare(ResolveInfo o1, ResolveInfo o2) { + try { + if ((pm.getApplicationInfo(o1.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM) <= (pm.getApplicationInfo(o2.activityInfo.packageName, 0).flags & ApplicationInfo.FLAG_SYSTEM)) { + return 1; + } else { + return -1; + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return 0; + } + } + }); + ArrayList desktopIcons = new ArrayList<>(); + for (ResolveInfo applicationInfo : resolveInfos) { + desktopIcons.add(DesktopIcon.creatDesktopIcon(mContext, applicationInfo)); + } + return desktopIcons; + } + +} diff --git a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java index 4b41537..4d5b712 100644 --- a/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/zyos/utils/ApkUtils.java @@ -45,7 +45,7 @@ import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; public class ApkUtils { - private static HashSet excludePackageName = new HashSet() {{ + public static final HashSet excludePackageName = new HashSet() {{ this.add(BuildConfig.APPLICATION_ID); this.add("com.uiui.zy"); this.add("com.uiui.zyos"); @@ -88,11 +88,11 @@ public class ApkUtils { this.add("com.huawei.gamebox"); }}; - private static HashSet excludeClassName = new HashSet() {{ + public static final HashSet excludeClassName = new HashSet() {{ this.add("com.android.dialer.app.calllog.CallLogActivity"); }}; - private static HashSet showPackageName = new HashSet() {{ + public static final HashSet showPackageName = new HashSet() {{ this.add("com.android.dialer"); // this.add("com.android.gallery3d"); // this.add("com.android.settings"); diff --git a/app/src/main/res/drawable-hdpi/icon_add.png b/app/src/main/res/drawable-hdpi/icon_add.png new file mode 100644 index 0000000000000000000000000000000000000000..6966add56d0831ab8786d5fb51509ba35e61edd8 GIT binary patch literal 2036 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_add_icon.xml b/app/src/main/res/layout/activity_add_icon.xml new file mode 100644 index 0000000..bca8947 --- /dev/null +++ b/app/src/main/res/layout/activity_add_icon.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_exit.xml b/app/src/main/res/layout/activity_exit.xml similarity index 100% rename from app/src/main/res/layout-land/activity_exit.xml rename to app/src/main/res/layout/activity_exit.xml diff --git a/app/src/main/res/layout-port/activity_exit.xml b/app/src/main/res/layout/activity_passwd.xml similarity index 99% rename from app/src/main/res/layout-port/activity_exit.xml rename to app/src/main/res/layout/activity_passwd.xml index 402718e..350f725 100644 --- a/app/src/main/res/layout-port/activity_exit.xml +++ b/app/src/main/res/layout/activity_passwd.xml @@ -67,7 +67,7 @@ android:gravity="center" android:maxLines="2" android:minLines="2" - android:text="退出系统" + android:text="输入密码后添加应用到桌面" android:textColor="@color/white" android:textSize="@dimen/sp_14" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/item_add_app.xml b/app/src/main/res/layout/item_add_app.xml new file mode 100644 index 0000000..f895776 --- /dev/null +++ b/app/src/main/res/layout/item_add_app.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file