diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2b147fb..d213d62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,7 +47,9 @@ - + + + diff --git a/app/src/main/java/com/appstore/uiui/MyApplication.java b/app/src/main/java/com/appstore/uiui/MyApplication.java index db1ea2c..feb48e8 100644 --- a/app/src/main/java/com/appstore/uiui/MyApplication.java +++ b/app/src/main/java/com/appstore/uiui/MyApplication.java @@ -12,8 +12,10 @@ import android.util.Log; import androidx.annotation.NonNull; import com.appstore.uiui.jpush.Logger; +import com.appstore.uiui.network.OKGOPost; import com.appstore.uiui.utils.ApkUtils; import com.appstore.uiui.utils.LogUtils; +import com.appstore.uiui.utils.SPUtils; import com.appstore.uiui.utils.ToastUtil; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.FileCallback; @@ -329,9 +331,9 @@ public class MyApplication extends Application { PackageManager pm = getPackageManager(); //后台为0可能传过来null if (is_lock == 1) { - pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); - } else { pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + } else { + pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); } } catch (JSONException e) { e.printStackTrace(); @@ -379,12 +381,17 @@ public class MyApplication extends Application { } synchronized private void unintallApk(String json) { + String sn_id = (String) SPUtils.get(getApplicationContext(), "sn_id", "-1"); try { JSONObject object = new JSONObject(json); String packageName = object.getString("package"); ToastUtil.debugShow("收到应用卸载消息:包名" + packageName); - if (!packageName.equals("") && !packageName.equals(getAppContext().getPackageName())) { - ApkUtils.deleteApkInSilence(packageName); + if (!packageName.equals("") && !packageName.equals(getApplicationContext().getPackageName())) { + if (!ApkUtils.isAvailable(getApplicationContext(), packageName)) { + OKGOPost.setAppuninstallInfo(sn_id, packageName); + } else { + ApkUtils.deleteApkInSilence(packageName); + } } } catch (JSONException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/appstore/uiui/activity/DownloadManagerActivity.java b/app/src/main/java/com/appstore/uiui/activity/DownloadManagerActivity.java index 8436dc6..0702afb 100644 --- a/app/src/main/java/com/appstore/uiui/activity/DownloadManagerActivity.java +++ b/app/src/main/java/com/appstore/uiui/activity/DownloadManagerActivity.java @@ -1,18 +1,28 @@ package com.appstore.uiui.activity; +import android.os.Handler; +import android.os.Message; import android.view.View; import android.widget.Adapter; +import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.appstore.uiui.R; +import com.appstore.uiui.adapter.AppAdapter; import com.appstore.uiui.adapter.DownloadManagerAdapter; import com.appstore.uiui.base.BaseActivity; +import com.appstore.uiui.bean.AppInfo; +import com.appstore.uiui.utils.ApkUtils; import com.appstore.uiui.utils.ToastUtil; +import com.lzy.okgo.model.Progress; import com.lzy.okserver.OkDownload; +import com.lzy.okserver.download.DownloadListener; import com.lzy.okserver.task.XExecutor; +import java.io.File; + public class DownloadManagerActivity extends BaseActivity implements XExecutor.OnAllTaskEndListener { private RecyclerView recyclerView; private DownloadManagerAdapter adapter; @@ -31,8 +41,8 @@ public class DownloadManagerActivity extends BaseActivity implements XExecutor.O @Override protected void initData() { okDownload = OkDownload.getInstance(); - adapter = new DownloadManagerAdapter(this); - adapter.updateData(DownloadManagerAdapter.TYPE_ALL); + adapter = new DownloadManagerAdapter(this, handler); + adapter.updateData(DownloadManagerAdapter.TYPE_ING); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); okDownload.addOnAllTaskEndListener(this); @@ -47,6 +57,8 @@ public class DownloadManagerActivity extends BaseActivity implements XExecutor.O @Override public void onAllTaskEnd() { ToastUtil.show("所有任务已完成"); + adapter.notifyDataSetChanged(); + } @Override @@ -65,4 +77,17 @@ public class DownloadManagerActivity extends BaseActivity implements XExecutor.O public void finish(View view) { this.finish(); } + + private Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + if (msg.what == 100) { + adapter.updateData(DownloadManagerAdapter.TYPE_ING); + adapter.notifyDataSetChanged(); + } + } + }; + + } diff --git a/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java b/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java index 5fb58cb..7daa4c7 100644 --- a/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java +++ b/app/src/main/java/com/appstore/uiui/activity/LocalManagerActivity.java @@ -82,6 +82,9 @@ public class LocalManagerActivity extends BaseActivity implements RefreshManager 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; + } bean.setPackageName(packageName); Drawable icon = resolveInfoList.get(i).loadIcon(getApplicationContext().getPackageManager()); bean.setIcon(icon); diff --git a/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java b/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java index 12f27b9..bf5c0f0 100644 --- a/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java +++ b/app/src/main/java/com/appstore/uiui/adapter/AppAdapter.java @@ -1,7 +1,9 @@ package com.appstore.uiui.adapter; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.telecom.Call; import android.view.LayoutInflater; import android.view.View; @@ -18,7 +20,9 @@ import com.appstore.uiui.R; import com.appstore.uiui.activity.DetailsActivity; import com.appstore.uiui.bean.AppInfo; import com.appstore.uiui.listener.LogDownloadListener; +import com.appstore.uiui.network.OKGOPost; import com.appstore.uiui.utils.ApkUtils; +import com.appstore.uiui.utils.LogUtils; import com.appstore.uiui.utils.ToastUtil; import com.bumptech.glide.Glide; import com.lzy.okgo.OkGo; @@ -45,6 +49,7 @@ public class AppAdapter extends RecyclerView.Adapter { private boolean isNotLoadBitmap = false; + //order代表是否显示所在的位置,1.2.3. public AppAdapter(List appInfoList, boolean isShowOrder, Context context) { this.mContext = context; @@ -60,6 +65,7 @@ public class AppAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(Holder holder, final int position) { + final AppInfo appInfo = mAppInfoList.get(position); final DownloadTask downloadTask = OkDownload.getInstance().getTask(appInfo.getApp_url()); holder.setTag(appInfo.getApp_url()); @@ -81,6 +87,7 @@ public class AppAdapter extends RecyclerView.Adapter { } else { holder.tvName.setText(appInfo.getApp_name()); } + holder.tvSize.setText(appInfo.getApp_size() + "M"); holder.ratingBar.setRating((float) appInfo.getApp_score()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override @@ -95,11 +102,17 @@ public class AppAdapter extends RecyclerView.Adapter { if (appInfo.isInstall()) { if (appInfo.isUpdate()) { holder.btnDownLoad.setText("更新"); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.green)); + holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_style_none)); } else { holder.btnDownLoad.setText("打开"); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.black)); + holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_style_open)); } } else { holder.btnDownLoad.setText("下载"); + holder.btnDownLoad.setTextColor(mContext.getColor(R.color.green)); + holder.btnDownLoad.setBackground(mContext.getDrawable(R.drawable.btn_style_none)); if (downloadTask != null) { holder.refresh(downloadTask.progress); } @@ -141,11 +154,10 @@ public class AppAdapter extends RecyclerView.Adapter { public class Holder extends RecyclerView.ViewHolder { ImageView ivIcon; - TextView tvCompany, tvName; + TextView tvCompany, tvName, tvSize; Button btnDownLoad; RatingBar ratingBar; // TextView tvInstalled; - CardView cardView; private DownloadTask task; private String tag; @@ -155,10 +167,10 @@ public class AppAdapter extends RecyclerView.Adapter { ivIcon = itemView.findViewById(R.id.app_iv_icon); tvCompany = itemView.findViewById(R.id.app_tv_company); tvName = itemView.findViewById(R.id.app_tv_name); + tvSize = itemView.findViewById(R.id.app_tv_size); btnDownLoad = itemView.findViewById(R.id.app_btn_download); ratingBar = itemView.findViewById(R.id.app_rating_bar); // tvInstalled = itemView.findViewById(R.id.app_tv_installed); - cardView = itemView.findViewById(R.id.app_card_view); } public void bind() { @@ -180,7 +192,7 @@ public class AppAdapter extends RecyclerView.Adapter { btnDownLoad.setText("等待"); break; case Progress.FINISH: - btnDownLoad.setText("完成"); + btnDownLoad.setText("安装中"); break; case Progress.LOADING: btnDownLoad.setText((int) (progress.fraction * 100) + "%"); @@ -202,6 +214,7 @@ public class AppAdapter extends RecyclerView.Adapter { } } + public void setNotLoadBitmap(boolean isNotLoadBitmap) { this.isNotLoadBitmap = isNotLoadBitmap; notifyDataSetChanged(); diff --git a/app/src/main/java/com/appstore/uiui/adapter/DownloadManagerAdapter.java b/app/src/main/java/com/appstore/uiui/adapter/DownloadManagerAdapter.java index c6c799a..691716e 100644 --- a/app/src/main/java/com/appstore/uiui/adapter/DownloadManagerAdapter.java +++ b/app/src/main/java/com/appstore/uiui/adapter/DownloadManagerAdapter.java @@ -1,6 +1,7 @@ package com.appstore.uiui.adapter; import android.content.Context; +import android.os.Handler; import android.text.format.Formatter; import android.view.LayoutInflater; import android.view.View; @@ -40,10 +41,12 @@ public class DownloadManagerAdapter extends RecyclerView.Adapter" + appInfo.getNewVersionName()); holder.btnDownLoad.setText("更新"); + holder.btnDownLoad.setTextColor(context.getColor(R.color.green)); + holder.btnDownLoad.setBackground(context.getDrawable(R.drawable.btn_style_none)); holder.btnDownLoad.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -96,7 +98,6 @@ public class UpdateAppAdapter extends RecyclerView.Adapter appInfoList;// - private List newAppInfoList; + private List newAppInfoList=new ArrayList<>(); private AppAdapter adapter; private boolean isNotLoadBitmap; + private installReceiver myReceiver; @Override public int getLayoutId() { return R.layout.fragment_featured; } + @Override + public void onStop() { + super.onStop(); + if (myReceiver != null) { + try { + getActivity().getApplication().unregisterReceiver(myReceiver); + } catch (Exception e) { + LogUtils.e("onStop", e.getMessage()); + } + } + } + + @Override + public void onStart() { + super.onStart(); + adapter.setData(checkUpdateOrInstalled(newAppInfoList)); + adapter.notifyDataSetChanged(); + if (myReceiver == null) { + myReceiver = new installReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction("com.appstore.uiui.PACKAGE_ADDED"); + filter.addAction("com.appstore.uiui.PACKAGE_REPLACED"); + filter.addAction("com.appstore.uiui.PACKAGE_REMOVED"); + filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + getActivity().getApplication().registerReceiver(myReceiver, filter); + } + } + @Override public void initViews(View view) { mRvResult = view.findViewById(R.id.featured_rv_result); @@ -62,7 +95,7 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager isNotLoadBitmap = false; - newAppInfoList = new ArrayList<>(); + adapter = new AppAdapter(newAppInfoList, false, getContext()); adapter.setHasStableIds(true); mRvResult.setAdapter(adapter); @@ -126,4 +159,17 @@ public class FeaturedFragment extends LazyLoadFragment implements RefreshManager return list; } + public class installReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + //接收安装广播 + if (action.equals("com.appstore.uiui.PACKAGE_ADDED") || action.equals("com.appstore.uiui.PACKAGE_REMOVED") || action.equals("com.appstore.uiui.PACKAGE_REPLACED")) { + adapter.setData(checkUpdateOrInstalled(newAppInfoList)); + adapter.notifyDataSetChanged(); + } + + } + } + } diff --git a/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java b/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java index 0663961..c6473dd 100644 --- a/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java +++ b/app/src/main/java/com/appstore/uiui/fragment/ManageFragment.java @@ -161,7 +161,7 @@ public class ManageFragment extends LazyLoadFragment { applist = (List) msg.obj; updateDta(applist); updateNum = updateAppInfoList.size(); - manage_tv_updateNum.setText(updateNum + "个应用可以升级"); + manage_tv_updateNum.setText(updateNum + ""); adapter.notifyDataSetChanged(); break; } diff --git a/app/src/main/java/com/appstore/uiui/receiver/AppManagerReceiver.java b/app/src/main/java/com/appstore/uiui/receiver/AppManagerReceiver.java index 5ea817d..26d6aa6 100644 --- a/app/src/main/java/com/appstore/uiui/receiver/AppManagerReceiver.java +++ b/app/src/main/java/com/appstore/uiui/receiver/AppManagerReceiver.java @@ -25,12 +25,19 @@ public class AppManagerReceiver extends BroadcastReceiver { action = intent.getAction(); //接收安装广播 if (action.equals(Intent.ACTION_PACKAGE_ADDED) || action.equals(Intent.ACTION_PACKAGE_REPLACED)) { + if (action.equals(Intent.ACTION_PACKAGE_ADDED)){ + Intent intents = new Intent("com.appstore.uiui.PACKAGE_ADDED"); + context.sendBroadcast(intents); + }else { + Intent intents = new Intent("com.appstore.uiui.PACKAGE_REPLACED"); + context.sendBroadcast(intents); + } String packageName = intent.getDataString().replace("package:", ""); String name = ApkUtils.getApplicationName(context, packageName); ToastUtil.show(name + ":安装成功"); LogUtils.e(TAG, "安装了:" + packageName + "包名的程序"); // ToastTool.show("安装成功"); - if (!packageName.equals(context.getPackageName())) { + if (!packageName.equals(context.getPackageName())&&!packageName.equals("com.android.uiuios")) { if (member_id == -1 || sn_id.equals("-1")) { OKGOPost.getUserInfo(context); } else { @@ -43,7 +50,9 @@ public class AppManagerReceiver extends BroadcastReceiver { if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) { String packageName = intent.getDataString().replace("package:", ""); LogUtils.e(TAG, "卸载了:" + packageName + "包名的程序"); - if (!packageName.equals(context.getPackageName())) { + Intent intents = new Intent("com.appstore.uiui.PACKAGE_REMOVED"); + context.sendBroadcast(intents); + if (!packageName.equals(context.getPackageName())&&!packageName.equals("com.android.uiuios")) { if (member_id == -1 || sn_id.equals("-1")) { OKGOPost.getUserInfo(context); } else { diff --git a/app/src/main/res/drawable/btn_style_none.xml b/app/src/main/res/drawable/btn_style_none.xml new file mode 100644 index 0000000..cdfdf43 --- /dev/null +++ b/app/src/main/res/drawable/btn_style_none.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_style_open.xml b/app/src/main/res/drawable/btn_style_open.xml new file mode 100644 index 0000000..4c32f27 --- /dev/null +++ b/app/src/main/res/drawable/btn_style_open.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_kind_detail.png b/app/src/main/res/drawable/ic_kind_detail.png index 3d1afef..4b6ed7d 100644 Binary files a/app/src/main/res/drawable/ic_kind_detail.png and b/app/src/main/res/drawable/ic_kind_detail.png differ diff --git a/app/src/main/res/layout/fragment_manage.xml b/app/src/main/res/layout/fragment_manage.xml index f522508..ec5c9b6 100644 --- a/app/src/main/res/layout/fragment_manage.xml +++ b/app/src/main/res/layout/fragment_manage.xml @@ -28,34 +28,36 @@ android:background="@drawable/ic_kind_detail" /> + + + + android:text="0" + android:textSize="10sp" + /> - - - diff --git a/app/src/main/res/layout/item_app.xml b/app/src/main/res/layout/item_app.xml index 4edd9ef..b783c70 100644 --- a/app/src/main/res/layout/item_app.xml +++ b/app/src/main/res/layout/item_app.xml @@ -27,7 +27,7 @@ @@ -52,6 +52,15 @@ android:textSize="12sp" /> + - +