From dc3d192e51bbc5686ffd3f0897fec24e1ee0900d Mon Sep 17 00:00:00 2001 From: Godfather <981964879@qq.com> Date: Tue, 4 Jan 2022 15:19:23 +0800 Subject: [PATCH] version:1.2 fix: add: --- app/build.gradle | 4 +- .../activity/LocalManagerActivity.java | 52 +---- .../appstore/adapter/LocalAppAdapter.java | 6 +- .../com/uiui/appstore/bean/BaseResponse.java | 9 +- .../appstore/fragment/FeaturedFragment.java | 205 ++++++++++-------- .../appstore/fragment/ManageFragment.java | 67 +----- .../com/uiui/appstore/utils/ApkUtils.java | 107 ++++++++- .../res/layout-land/fragment_featured.xml | 18 +- .../main/res/layout-land/fragment_manage.xml | 42 ++-- .../res/layout-port/fragment_featured.xml | 26 ++- .../main/res/layout-port/fragment_manage.xml | 46 ++-- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4812 -> 3988 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 4812 -> 3988 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4812 -> 3988 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4812 -> 3988 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4812 -> 3988 bytes 16 files changed, 317 insertions(+), 265 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f287d45..98759e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,8 +39,8 @@ android { productFlavors { beta { flavorDimensions "default" - versionCode 2 - versionName "1.1" + versionCode 3 + versionName "1.2" manifestPlaceholders = [ JPUSH_PKGNAME: "com.uiui.appstore", JPUSH_APPKEY : "c93d01f43046fa500d162817", //JPush 上注册的包名对应的 Appkey. diff --git a/app/src/main/java/com/uiui/appstore/activity/LocalManagerActivity.java b/app/src/main/java/com/uiui/appstore/activity/LocalManagerActivity.java index a9dc590..01c4419 100644 --- a/app/src/main/java/com/uiui/appstore/activity/LocalManagerActivity.java +++ b/app/src/main/java/com/uiui/appstore/activity/LocalManagerActivity.java @@ -10,6 +10,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.provider.Settings; +import android.util.Log; import android.view.View; import android.widget.ImageView; @@ -56,7 +57,7 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager }); mRefreshLayout.autoRefresh(); - adapter = new LocalAppAdapter(localAppList, this); + adapter = new LocalAppAdapter(this); adapter.setHasStableIds(true); mRvApp.setAdapter(adapter); mRvApp.setLayoutManager(new LinearLayoutManager(getApplicationContext())); @@ -65,61 +66,17 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager @Override protected void initData() { initDatas(); - } @Override protected void onResume() { super.onResume(); initDatas(); - } private void initDatas() { - localAppList.clear(); - Intent intent = new Intent(Intent.ACTION_MAIN, null); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - List resolveInfoList = getApplication().getPackageManager().queryIntentActivities(intent, 0); - String qch_force_app = Settings.System.getString(getContentResolver(), "qch_force_app"); - for (int i = 0; i < resolveInfoList.size(); i++) { - LocalApp bean = new LocalApp(); - bean.setAppName(resolveInfoList.get(i).loadLabel(getApplicationContext().getPackageManager()).toString()); - String packageName = resolveInfoList.get(i).activityInfo.packageName; - if (packageName.equals(getApplicationContext().getPackageName()) || packageName.equals("com.android.uiuios")) { - continue; - } - if (ApkUtils.canremove_systemapp.contains(packageName)) { - continue; - } - bean.setPackageName(packageName); - Drawable icon = resolveInfoList.get(i).loadIcon(getApplicationContext().getPackageManager()); - bean.setIcon(icon); - if (packageName.contains(qch_force_app)){ - bean.setCanUnintall(false); - }else { - bean.setCanUnintall(true); - } - try { - PackageInfo packageInfo = getApplicationContext().getPackageManager().getPackageInfo(packageName, 0); - String versionCode = getApplicationContext().getPackageManager() - .getPackageInfo(packageName, 0).versionName; - bean.setVersion(versionCode); - String appInstallDir = packageInfo.applicationInfo.publicSourceDir; - int size = Integer.valueOf((int) new File(appInstallDir).length()); - bean.setSize(size); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { - //第三方应用 - localAppList.add(bean); - //判断是否需要进行更新 - - } else { - //系统应用 - } - - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } + localAppList = ApkUtils.getLocalApp(LocalManagerActivity.this); + adapter.setLocalAppList(localAppList); adapter.notifyDataSetChanged(); mRefreshLayout.finishRefresh(); if (localAppList.size() == 0) { @@ -139,7 +96,6 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager @Override public void onRefresh() { mRefreshLayout.autoRefresh(); - } @Override diff --git a/app/src/main/java/com/uiui/appstore/adapter/LocalAppAdapter.java b/app/src/main/java/com/uiui/appstore/adapter/LocalAppAdapter.java index af06c87..8a0e7e5 100644 --- a/app/src/main/java/com/uiui/appstore/adapter/LocalAppAdapter.java +++ b/app/src/main/java/com/uiui/appstore/adapter/LocalAppAdapter.java @@ -33,10 +33,12 @@ public class LocalAppAdapter extends RecyclerView.Adapter localAppList; - public LocalAppAdapter(List localAppList, Context context) { + public LocalAppAdapter(Context context) { this.context = context; - this.localAppList = localAppList; + } + public void setLocalAppList(List appList) { + this.localAppList = appList; } @Override diff --git a/app/src/main/java/com/uiui/appstore/bean/BaseResponse.java b/app/src/main/java/com/uiui/appstore/bean/BaseResponse.java index 003b93e..4ad995f 100644 --- a/app/src/main/java/com/uiui/appstore/bean/BaseResponse.java +++ b/app/src/main/java/com/uiui/appstore/bean/BaseResponse.java @@ -2,6 +2,9 @@ package com.uiui.appstore.bean; import androidx.annotation.NonNull; +import com.google.gson.Gson; +import com.google.gson.JsonParser; + import java.io.Serializable; @@ -16,10 +19,6 @@ public class BaseResponse implements Serializable { @NonNull @Override public String toString() { - return "{\n" +// - "\tcode=" + code + "\n" +// - "\tmsg='" + msg + "\'\n" +// - "\tdata=" + data + "\n" +// - '}'; + return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString(); } } \ No newline at end of file diff --git a/app/src/main/java/com/uiui/appstore/fragment/FeaturedFragment.java b/app/src/main/java/com/uiui/appstore/fragment/FeaturedFragment.java index 8b2f827..d1dd79d 100644 --- a/app/src/main/java/com/uiui/appstore/fragment/FeaturedFragment.java +++ b/app/src/main/java/com/uiui/appstore/fragment/FeaturedFragment.java @@ -17,13 +17,19 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ImageView; +import android.widget.LinearLayout; +import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.transition.Transition; import com.uiui.appstore.BuildConfig; import com.uiui.appstore.R; import com.uiui.appstore.activity.HintActivity; @@ -94,7 +100,6 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager @Override public void onStop() { super.onStop(); - } @Override @@ -211,6 +216,106 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager isNotLoadBitmap = false; } + + @Override + public void loadData(Bundle savedInstanceState) { +// initData(); +// initAPPData(handler); + } + + synchronized private void initAPPData(final Handler handler) { +// OKGO.getAllAppInfo(handler); + getAllAppInfo(); +// OKGO.getBannerImg(handler); +// getBannerImg(); + getBanner(); + } + + private void getBanner() { + NetInterfaceManager.getInstance().getBannerObservable() + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getBanner", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse bannerBaseResponse) { + Log.e("getBanner", "onNext: " + bannerBaseResponse); + if (bannerBaseResponse.code == 200) { + String banner_img = bannerBaseResponse.data.getBanner_img(); + String vertical_img = bannerBaseResponse.data.getVertical_img(); + if (ScreenUtils.isPortrait()) { + setBannerResource(banner_img); + } else { + setBannerResource(vertical_img); + } + } else { + if (ScreenUtils.isPortrait()) { + iv_banner.setImageDrawable(getActivity().getDrawable(R.drawable.port_banner)); + } else { + iv_banner.setImageDrawable(getActivity().getDrawable(R.drawable.land_banner)); + } + } + } + + @Override + public void onError(Throwable e) { + Log.e("getBanner", "onError: " + e.getMessage()); + + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getBanner", "onComplete: "); + setImageViewSize(); +// int bannerWidth = iv_banner.getWidth(); +// int bannerHeight = iv_banner.getHeight(); +// Drawable drawable = iv_banner.getDrawable(); +// if (drawable != null) { +// int width = drawable.getMinimumWidth(); +// int height = drawable.getMinimumHeight(); +// Log.e(TAG, "getBanner: iv_banner: width = " + bannerWidth); +// Log.e(TAG, "getBanner: iv_banner: height = " + bannerHeight); +// Log.e(TAG, "getBanner: Drawable: width = " + width); +// Log.e(TAG, "getBanner: Drawable: height = " + height); +// Log.e(TAG, "getBanner: scale = " + (float) (1.0 * bannerWidth / width)); +// Log.e(TAG, "getBanner: " + (int) ((float) (1.0 * bannerWidth / width) * height)); +// int changeHeight = (int) ((double) (bannerWidth / width) * height); +// if (changeHeight != 0) { +// ViewGroup.LayoutParams params = iv_banner.getLayoutParams(); +// params.height = changeHeight; +// iv_banner.setLayoutParams(params); +//// ViewGroup.LayoutParams clParams = cl.getLayoutParams(); +//// clParams.height = changeHeight; +//// cl.setLayoutParams(clParams); +// Log.e(TAG, "getBanner: iv_banner: height = " + iv_banner.getHeight()); +// Log.e(TAG, "getBanner: cl: height = " + cl.getHeight()); +// } +// iv_banner.setVisibility(View.VISIBLE); +// } + } + }); + } + + private void setBannerResource(String url){ + Glide.with(iv_banner) + .load(url) + .transition(new DrawableTransitionOptions().dontTransition()) + .into(new CustomTarget() { + @Override + public void onResourceReady(Drawable resource, Transition transition) { + iv_banner.setImageDrawable(resource); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + } + private void setImageViewSize() { ViewGroup.LayoutParams ivParams = iv_banner.getLayoutParams(); ViewGroup.LayoutParams clParams = cl.getLayoutParams(); @@ -231,13 +336,13 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager Resources res = getActivity().getResources(); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; - if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { - //竖屏 - BitmapFactory.decodeResource(res, R.drawable.port_banner, opts); - } else { - //横屏 - BitmapFactory.decodeResource(res, R.drawable.land_banner, opts); - } +// if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { +// //竖屏 +// BitmapFactory.decodeResource(res, R.drawable.port_banner, opts); +// } else { +// //横屏 +// BitmapFactory.decodeResource(res, R.drawable.land_banner, opts); +// } opts.inSampleSize = 1; opts.inJustDecodeBounds = false; int w = opts.outWidth; @@ -251,84 +356,8 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager iv_banner.setLayoutParams(ivParams); clParams.height = imageViewheight; cl.setLayoutParams(clParams); - Log.e(TAG, "setImageViewSize: imageViewheight :" + imageViewheight); - } - - - @Override - public void loadData(Bundle savedInstanceState) { -// initData(); -// initAPPData(handler); - } - - synchronized private void initAPPData(final Handler handler) { -// OKGO.getAllAppInfo(handler); - getAllAppInfo(); -// OKGO.getBannerImg(handler); -// getBannerImg(); - getBanner(); - } - - private void getBanner() { - if (ScreenUtils.isPortrait()) { - iv_banner.setImageDrawable(getActivity().getDrawable(R.drawable.port_banner)); - } else { - iv_banner.setImageDrawable(getActivity().getDrawable(R.drawable.land_banner)); - } - NetInterfaceManager.getInstance().getBannerObservable() - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - Log.e("getBanner", "onSubscribe: "); - } - - @Override - public void onNext(BaseResponse bannerBaseResponse) { - if (bannerBaseResponse.code == 200) { - String banner_img = bannerBaseResponse.data.getBanner_img(); - String vertical_img = bannerBaseResponse.data.getVertical_img(); - if (ScreenUtils.isPortrait()) { - Glide.with(iv_banner).load(banner_img).into(iv_banner); - } else { - Glide.with(iv_banner).load(vertical_img).into(iv_banner); - } - } else { - - } - } - - @Override - public void onError(Throwable e) { - Log.e("getBanner", "onError: " + e.getMessage()); - - } - - @Override - public void onComplete() { - Log.e("getBanner", "onComplete: "); - - } - }); - int bannerWidth = iv_banner.getWidth(); - int bannerHeight = iv_banner.getHeight(); - Drawable drawable = iv_banner.getDrawable(); - if (drawable != null) { - int width = drawable.getMinimumWidth(); - int height = drawable.getMinimumHeight(); - Log.e(TAG, "getBanner: iv_banner: width = " + bannerWidth); - Log.e(TAG, "getBanner: iv_banner: height = " + bannerHeight); - Log.e(TAG, "getBanner: Drawable: width = " + width); - Log.e(TAG, "getBanner: Drawable: height = " + height); - Log.e(TAG, "getBanner: " + (float) (1.0 * bannerWidth / width)); - Log.e(TAG, "getBanner: " + (int) ((float) (1.0 * bannerWidth / width) * height)); - int changeHeight = (int) ((double) (bannerWidth / width) * height); - if (changeHeight != 0) { - iv_banner.getLayoutParams().height = changeHeight; - } - iv_banner.setVisibility(View.VISIBLE); - } - - + Log.e(TAG, "setImageViewSize: clheight :" + cl.getHeight()); + Log.e(TAG, "setImageViewSize: imageViewheight :" + iv_banner.getHeight()); } @Override @@ -348,11 +377,12 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager .subscribe(new Observer>>() { @Override public void onSubscribe(@NonNull Disposable d) { - + Log.e("getAllAppInfo", "onSubscribe: "); } @Override public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getAllAppInfo", "onNext: " + listBaseResponse); int code = listBaseResponse.code; if (code == 200) { List infos = listBaseResponse.data; @@ -382,6 +412,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager @Override public void onComplete() { + Log.e("getAllAppInfo", "onComplete: "); mRefreshLayout.finishRefresh(); } }); diff --git a/app/src/main/java/com/uiui/appstore/fragment/ManageFragment.java b/app/src/main/java/com/uiui/appstore/fragment/ManageFragment.java index a07a7ff..543ca4f 100644 --- a/app/src/main/java/com/uiui/appstore/fragment/ManageFragment.java +++ b/app/src/main/java/com/uiui/appstore/fragment/ManageFragment.java @@ -53,8 +53,8 @@ public class ManageFragment extends LazyLoadFragment { private UpdateAppAdapter adapter; private ConstraintLayout manage_cl_localapp, manage_cl_download; private Context mContext; - private TextView tv_pripolicy; - private TextView tv_useragreement; +// private TextView tv_pripolicy; +// private TextView tv_useragreement; @Override public int getLayoutId() { @@ -66,14 +66,14 @@ public class ManageFragment extends LazyLoadFragment { manage_tv_updateNum = view.findViewById(R.id.manage_tv_updateNum); manage_tv_appNum = view.findViewById(R.id.manage_tv_appNum); tv_version = view.findViewById(R.id.tv_version); - tv_pripolicy = view.findViewById(R.id.tv_pripolicy); - tv_useragreement = view.findViewById(R.id.tv_useragreement); - tv_pripolicy.setOnClickListener(v -> { - startActivity(new Intent(getActivity(), PrivacyPolicyActivity.class)); - }); - tv_useragreement.setOnClickListener(v -> { - startActivity(new Intent(getActivity(), UserAgreementActivity.class)); - }); +// tv_pripolicy = view.findViewById(R.id.tv_pripolicy); +// tv_useragreement = view.findViewById(R.id.tv_useragreement); +// tv_pripolicy.setOnClickListener(v -> { +// startActivity(new Intent(getActivity(), PrivacyPolicyActivity.class)); +// }); +// tv_useragreement.setOnClickListener(v -> { +// startActivity(new Intent(getActivity(), UserAgreementActivity.class)); +// }); tv_version.setText("版本 " + BuildConfig.VERSION_NAME); manage_cl_localapp = view.findViewById(R.id.manage_cl_localapp); manage_cl_localapp.setOnClickListener(new View.OnClickListener() { @@ -97,7 +97,6 @@ public class ManageFragment extends LazyLoadFragment { mRvLocal.setAdapter(adapter); mRvLocal.setLayoutManager(new LinearLayoutManager(mContext)); - } @Override @@ -115,63 +114,22 @@ public class ManageFragment extends LazyLoadFragment { super.onStart(); mContext = getActivity(); initAPPData(handler); - List localApps = getLocalApp(); + List localApps = ApkUtils.getLocalApp(getActivity()); if (localApps != null && localApps.size() > 0) { manage_tv_appNum.setText(localApps.size() + ""); } - } synchronized private void initAPPData(final Handler handler) { // OKGO.getAllAppInfo(handler); } - synchronized private List getLocalApp() { - List appList = new ArrayList<>(); - Intent intent = new Intent(Intent.ACTION_MAIN, null); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - List resolveInfoList = mContext.getPackageManager().queryIntentActivities(intent, 0); - - for (int i = 0; i < resolveInfoList.size(); i++) { - LocalApp bean = new LocalApp(); - bean.setAppName(resolveInfoList.get(i).loadLabel(mContext.getPackageManager()).toString()); - String packageName = resolveInfoList.get(i).activityInfo.packageName; - bean.setPackageName(packageName); - Drawable icon = resolveInfoList.get(i).loadIcon(mContext.getPackageManager()); - bean.setIcon(icon); - if (packageName.equals(mContext.getPackageName()) || packageName.equals("com.android.uiuios")) { - continue; - } - if (ApkUtils.canremove_systemapp.contains(packageName)) { - continue; - } - try { - PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(packageName, 0); - String versionCode = mContext.getPackageManager() - .getPackageInfo(packageName, 0).versionName; - bean.setVersion(versionCode); - bean.setVersionCode(packageInfo.versionCode); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { - //第三方应用 - //判断是否需要进行更新 -// isNeedUpdate(bean, i); - appList.add(bean); - } else { - //系统应用 - } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } - return appList; - } - synchronized private void updateDta(List list) { packageNameList.clear(); for (AppInfo appInfo : list) { packageNameList.add(appInfo.getApp_package()); } - localAppList = getLocalApp(); + localAppList = ApkUtils.getLocalApp(getActivity()); if (packageNameList != null && packageNameList.size() > 0) { if (localAppList != null && localAppList.size() > 0) { for (LocalApp app : localAppList) { @@ -232,5 +190,4 @@ public class ManageFragment extends LazyLoadFragment { } } }; - } diff --git a/app/src/main/java/com/uiui/appstore/utils/ApkUtils.java b/app/src/main/java/com/uiui/appstore/utils/ApkUtils.java index 1878ee6..a9023e5 100644 --- a/app/src/main/java/com/uiui/appstore/utils/ApkUtils.java +++ b/app/src/main/java/com/uiui/appstore/utils/ApkUtils.java @@ -7,9 +7,12 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Binder; import android.os.Build; +import android.provider.Settings; import android.util.Log; import android.view.View; import android.widget.Toast; @@ -19,6 +22,7 @@ import androidx.core.content.FileProvider; import com.uiui.appstore.BuildConfig; import com.uiui.appstore.R; +import com.uiui.appstore.bean.LocalApp; import com.uiui.appstore.receiver.InstallResultReceiver; import java.io.BufferedReader; @@ -32,6 +36,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Enumeration; +import java.util.HashSet; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -108,6 +113,7 @@ public class ApkUtils { } context.startActivity(intent); } + /** * 卸载一个app */ @@ -626,12 +632,101 @@ public class ApkUtils { appVersionCode = info.versionCode; } return versionCode > appVersionCode; - }else { + } else { return true; } } - public static List canremove_systemapp = new ArrayList() {{ + synchronized public static List getLocalApp(Context context) { + List appList = new ArrayList<>(); + Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + List resolveInfoList = context.getPackageManager().queryIntentActivities(intent, 0); + String qch_force_app = Settings.System.getString(context.getContentResolver(), "qch_force_app"); + for (int i = 0; i < resolveInfoList.size(); i++) { + LocalApp bean = new LocalApp(); + bean.setAppName(resolveInfoList.get(i).loadLabel(context.getPackageManager()).toString()); + String packageName = resolveInfoList.get(i).activityInfo.packageName; + if (ApkUtils.ownApp.contains(packageName)) { + continue; + } + if (ApkUtils.canremove_systemapp.contains(packageName)) { + continue; + } + bean.setPackageName(packageName); + Drawable icon = resolveInfoList.get(i).loadIcon(context.getPackageManager()); + bean.setIcon(icon); + if (packageName.contains(qch_force_app)) { + bean.setCanUnintall(false); + } else { + bean.setCanUnintall(true); + } + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, 0); + String versionCode = context.getPackageManager() + .getPackageInfo(packageName, 0).versionName; + bean.setVersion(versionCode); + String appInstallDir = packageInfo.applicationInfo.publicSourceDir; + int size = Integer.valueOf((int) new File(appInstallDir).length()); + bean.setSize(size); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { + //第三方应用 + appList.add(bean); + //判断是否需要进行更新 + + } else { + //系统应用 + } + + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + return appList; + } + + synchronized public static List getLocalApp2(Context context) { + List appList = new ArrayList<>(); + Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + List resolveInfoList = context.getPackageManager().queryIntentActivities(intent, 0); + + for (int i = 0; i < resolveInfoList.size(); i++) { + LocalApp bean = new LocalApp(); + bean.setAppName(resolveInfoList.get(i).loadLabel(context.getPackageManager()).toString()); + String packageName = resolveInfoList.get(i).activityInfo.packageName; + bean.setPackageName(packageName); + Drawable icon = resolveInfoList.get(i).loadIcon(context.getPackageManager()); + bean.setIcon(icon); + if (ApkUtils.ownApp.contains(packageName)) { + continue; + } + if (ApkUtils.canremove_systemapp.contains(packageName)) { + continue; + } + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, 0); + String versionCode = context.getPackageManager() + .getPackageInfo(packageName, 0).versionName; + bean.setVersion(versionCode); + bean.setVersionCode(packageInfo.versionCode); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { + //第三方应用 + //判断是否需要进行更新 +// isNeedUpdate(bean, i); + appList.add(bean); + } else { + //系统应用 + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + return appList; + } + + + public static HashSet canremove_systemapp = new HashSet() {{ //预置的可以卸载的系统应用,判断出来为第三方 this.add("com.android.quicksearchbox"); this.add("com.android.calendar"); @@ -641,5 +736,13 @@ public class ApkUtils { this.add("com.jiaoguanyi.sysc"); }}; + public static HashSet ownApp = new HashSet() {{ + this.add(BuildConfig.APPLICATION_ID); + this.add("com.android.uiuios"); + this.add("com.uiui.os"); + this.add("com.uiui.browser"); + this.add("com.uiui.sn"); + + }}; } diff --git a/app/src/main/res/layout-land/fragment_featured.xml b/app/src/main/res/layout-land/fragment_featured.xml index a59d643..dda77b5 100644 --- a/app/src/main/res/layout-land/fragment_featured.xml +++ b/app/src/main/res/layout-land/fragment_featured.xml @@ -18,17 +18,16 @@ + android:layout_height="wrap_content"> @@ -43,15 +42,14 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/iv_banner" /> - + app:layout_constraintTop_toBottomOf="@+id/banner_view"> - - + diff --git a/app/src/main/res/layout-land/fragment_manage.xml b/app/src/main/res/layout-land/fragment_manage.xml index 9492d48..fc2f262 100644 --- a/app/src/main/res/layout-land/fragment_manage.xml +++ b/app/src/main/res/layout-land/fragment_manage.xml @@ -165,28 +165,28 @@ - + + + + + + + + + + + - + + + + + + + + + + + android:layout_height="match_parent"> @@ -43,13 +42,21 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/iv_banner" /> - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/banner_view"> + + - - + diff --git a/app/src/main/res/layout-port/fragment_manage.xml b/app/src/main/res/layout-port/fragment_manage.xml index 98df251..cc8ff75 100644 --- a/app/src/main/res/layout-port/fragment_manage.xml +++ b/app/src/main/res/layout-port/fragment_manage.xml @@ -165,30 +165,30 @@ - + + + + + + + + + + + + + - + + + + + + + + + + e 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 BN_zkR delta 4164 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 P_;*YVt>Cr#?$Q4P@#XFE diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 2a5193f829d19b2f500c31a5e9e958484b0d820a..208166c2f5ff119e1fcca690fe94233bdf76ac6c 100644 GIT binary patch delta 3334 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 BN_zkR delta 4164 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 P_;*YVt>Cr#?$Q4P@#XFE diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 2a5193f829d19b2f500c31a5e9e958484b0d820a..208166c2f5ff119e1fcca690fe94233bdf76ac6c 100644 GIT binary patch delta 3334 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 BN_zkR delta 4164 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 P_;*YVt>Cr#?$Q4P@#XFE diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 2a5193f829d19b2f500c31a5e9e958484b0d820a..208166c2f5ff119e1fcca690fe94233bdf76ac6c 100644 GIT binary patch delta 3334 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 BN_zkR delta 4164 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 P_;*YVt>Cr#?$Q4P@#XFE diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 2a5193f829d19b2f500c31a5e9e958484b0d820a..208166c2f5ff119e1fcca690fe94233bdf76ac6c 100644 GIT binary patch delta 3334 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 BN_zkR delta 4164 zcmZ{icRbaP_s0<>4KrN3o0)ZSyEft4JL{5Myd{# zF9N}<=l<65GN1aQvJrv*W65<&NH=20-rG#p@r98W^*NlXTa7?V@JRAMG<^TWmdfhC z^5T_3OOmU9Z^M%d;hSFqA9c`MmtC+JZ0d9lfo`jd34Xb3*||yYm^tbg19~7MP|n8I z8EZq;ywq9BFCVG%m?}Yf*qcU!6rUfYj2Kov4h#o{!-)GVH-G63u0PxzV)w-N##+XHE=?6~(I-#BXJeR09d?#DN4d>Pk>OCbQxk+fbCs!Ta^>#EvmDiOPRGgD zxum`CBe8A5_*VyQ7b-jj*L>zu2%^Q)&dh;A?ntXC&ZSK;exU z)6bU|x(kd$>?(oIfJ4?WWs5`cS8M04j>{1{dNuMMe3q0Aq6u1!9{TwLXD*B0*N5Eg zS{<>`lH>a*@pk@z{&VZ-Pt9w!h<`XEI~kpxMW@e&uG~qB(Tl-b{r0OiEKF1>piwsp zf-2M}m_N92KfK50IY0~=jFF@yD{_=Opf#h~*^%qD>_uRJa(=4qmB`z-0%xxr&;5aqhh;qK>?=#eC*+xQjf9^f4^4fuMOg z?i)S;EU(17iyr=_lNW~O4@)(R_qwIOb*jg9eKliF-H7oC0l9i%8Lk&`H!2=}slXn; zg;fdFa$>KBphR6-0M?VmZT?W62N)~ELQpQgjnA{(Qm{2@HcD}@HAooojISfq$pGXV zFQI+bQ-r`WdvuS3q#{Yy4q~*>ezNpbmDvxNzoat!NQ!RY=jh2pxUOP^%+57g3iKZW z>~YHpW7qzDYzsJ$$<+-3VHRZc^2yz4hRrqPvMGV4+E`K^%11>WbF??r z#coCy8C=EMRQkwV9?(xQxs(;0n4E5A_w65^)HpgB*@gd_%AtiwdFf!zc^uY~l^(mO zoJmOtW|Ir}sf;#OuR(vcOYCM!+hP`7inJZmSE|gM=hiaC@)-k99D!gRv zBR1&+{On9SujMP`W8jpJ*BRz#7N|FPro{3c*66&h)Qj%zl_ZxQo;%PW{>%av_D#;* z?h%}mw>klFJs(3I?J56P@VZot235B@QI~dRVL;4&tPP znG)#fPx%|VmCQZDz_i}%d-?!TIJGS;0MUB_J+)<~Y3!XrzNq}G4)znB%2*UbH2@89JH$e z_Pac_@G|3Ck3k9ZdvSoQMmQwA1KVAJ!>HtoBnHM#=}ZvkCyDPDosR48SjmB5REP52`#{l`UjeMSva$Wda%m=O{F#ys zW{X_Sl-7raHRxt2lXydEpU3cX*>k=}UH;+R9{6IOiwv^TvBPbhy@7G4W@zG-^x0|L zT?z7j$+Yi|W@#L&XRu{Yn#g=Fh90qKs67|(5BdJ^n)(+wPa-@S7;zyzI7t(_!-^Y( z+!ePvUz!m3zN@HF(qY}fl)cl zrNJ*FXuYO4w^@@UbuxIrj9kyVs~U|^v(P8ytoMqg%UPB+;`hDtGU5?uMHENViYfD0 zRX}O2;c^&Mr?MIkR-uyas{yiZM&7|q;Z56eF!|fo&e<&>_(1++@pWjnrT2`=c%~%U z?$b-COx`eRu}|IF1qK(%Xp}+Q z%Mr00m#MRQ)Ke9^2{OK{KXWT__S6lCb3Vn9*IkJ-7srlexjIAc{aTiZx#fZmQVWi7qZh|w~+D6Gu^*0{n~S&^u2WC z4L@fZbd0KZJ8>Vy=lKi1w^r@yTvWt?X_9w$c^`+ilMiZ+l~;fFm6RX6zwH4`jLAH~ z=P2_{R3CU2Q8~+eXSP{gMBX@$hGwIsXp+!c)>be$1|}- z$(jlm(v7f4hjFz;*U=LhC5=vJ(@6)iUMM>miRhf`lECj@-`O9&hbs<=dfJX)5^>-35`0e_mh!FN1s-;t1y(f}cCF z%o|Xa*r6uc)l^K{3FnDNH0oSmU7P&93DVZNb%d*0nR=od{;b!C&yH?*Pvm`6amlZ)E-8|YUc{Sl&c*#3+w;u! z($5b;4Un2bwE5CT0mK@wDiHFg(o&mP8jz0oc307Jzj=bHx}caLtiyadZ@ds`{RUd! zzuU!~xJqep65F59wcdPfSr*7uHaTkIC}j~%uT;(8#seEHtQ{x*Jr~w+c@E1$9#K7BL%gwBF zO$xCjD1glyO0VoZ3LD1#zO-p*x*Qv<{IPc9_M_Je^{2zF9NG<9`HZ>c_cCTknbXU| z0%rH$1O^9swA%GBtL(dtnYB_W3dqxkzU;;zOBs*n*n(4@}cf05sx!zuko0L={!`daL&pF|ya})v~Ny zPnl@r@V$`5_4LSI4b5MnhreBPmL1HIr~=&i8eF6to)9GY^^&cYb)A~o?zAJSZ=lGO zwYu4yr6Ik`+FBvwjE3x*AUQtmzJEAxniCD3_-^fh?hicII`m@KuFi_=3t3=n7QYt< zNF48c*gMtwRg~PUsy!e#BXoGJz1dW;!#rT-9%`sgvIsM)JLC^QGnBBYLy|4SXRt8i z%R9+UA2+aWubxI0uiLV?)t@>a$}HU1otth}q-ctFEB;%nLs_q6Y_^jvwc!4d(VA(? zXcnxrW|kNp3Fnu=6aTF3!01hNlsf>6c_1WP)EjYA4SYg$Y)g1@JAb7gWjuWFQ$2t+ zyo`N>%MTEn=arbOcsC-Z7PUOVb-e~#P4E@wq!a(ZEPe`QmoP_`onCvqUuNU|6{JhG zv+C9^`b630$`0WbpRz<4?Q42e?FF<5blMcoU>E)90iSQ_lvk8sQ@1BoEW)H*O)JuM zHXFBh6GWPt4vjVSU9r6}@&(5nT)IBNl6A-HYxXYpC=SV@%=;1^(sNeihOba+R+4O} zk-bL@Qc)`o5(CM$G2^#bvE0h1fUYT49~3;^x6LbvH6v>Tj)1~X`P>=aBvsQgO#j|t P_;*YVt>Cr#?$Q4P@#XFE