version:1.7.1

fix:
update:更换图标,添加应用页面
This commit is contained in:
2024-01-06 16:07:30 +08:00
parent 4673381d36
commit a232b6919d
85 changed files with 7470 additions and 525 deletions

View File

@@ -10,7 +10,6 @@ import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -26,13 +25,9 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.arialyy.aria.core.Aria;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import com.uiui.zyos.BuildConfig;
import com.uiui.zyos.R;

View File

@@ -83,8 +83,9 @@ public class BaseApplication extends Application {
Aria.init(this);
// Aria.get(this).getDownloadConfig().setMaxTaskNum(1);
// Aria.get(this).getDownloadConfig().setConvertSpeed(true);
aliyunPushInit();
CrashReport.initCrashReport(getApplicationContext(), "d1cd982951", false);
aliyunPushInit();
}
public void aliyunPushInit() {

View File

@@ -3,7 +3,12 @@ package com.uiui.zyos.bean;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.os.Parcel;
import android.os.Parcelable;
@@ -99,7 +104,18 @@ public class DesktopIcon implements Serializable, Parcelable {
DesktopIcon desktopIcon = new DesktopIcon();
desktopIcon.setPackageName(resolveInfo.activityInfo.packageName);
desktopIcon.setClassName(resolveInfo.activityInfo.name);
desktopIcon.setIcon(resolveInfo.loadIcon(pm));
Drawable drawable = resolveInfo.loadIcon(pm);
if (drawable instanceof VectorDrawable) {
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
Drawable d = new BitmapDrawable(context.getResources(), bitmap);
desktopIcon.setIcon(d);
} else {
desktopIcon.setIcon(drawable);
}
desktopIcon.setLable(resolveInfo.loadLabel(pm).toString());
desktopIcon.setPosition(0);
return desktopIcon;

View File

@@ -0,0 +1,17 @@
package com.uiui.zyos.fragment.app;
import com.uiui.zyos.base.BasePresenter;
import com.uiui.zyos.base.BaseView;
import com.uiui.zyos.bean.DesktopIcon;
import java.util.ArrayList;
public class AppContact {
public interface AppPresenter extends BasePresenter<AppView> {
void getInstalledApp();
}
public interface AppView extends BaseView {
void setInstalledApp( ArrayList<DesktopIcon> desktopIcons);
}
}

View File

@@ -0,0 +1,260 @@
package com.uiui.zyos.fragment.app;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.uiui.zyos.R;
import com.uiui.zyos.activity.more.MoreAppActivity;
import com.uiui.zyos.adapter.AppAdapter;
import com.uiui.zyos.base.BaseFragment;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.view.RecyclerViewSpacesItemDecoration;
import java.util.ArrayList;
import java.util.HashMap;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* A simple {@link Fragment} subclass.
* Use the {@link AppFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class AppFragment extends BaseFragment implements AppContact.AppView {
private static final String TAG = AppFragment.class.getSimpleName();
@BindView(R.id.rv_app)
RecyclerView rv_app;
@BindView(R.id.iv_nodata)
ImageView iv_nodata;
private AppPresenter mPresenter;
private View rootView;
private FragmentActivity mContext;
private AppAdapter mAppAdapter;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public AppFragment() {
// Required empty public constructor
Log.e(TAG, "AppFragment: ");
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment AppFragment.
*/
// TODO: Rename and change types and number of parameters
public static AppFragment newInstance(String param1, String param2) {
AppFragment fragment = new AppFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
Log.e(TAG, "onCreate: ");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.e(TAG, "onCreateView: ");
if (null != rootView) {
ViewGroup parent = (ViewGroup) rootView.getParent();
if (null != parent) {
parent.removeView(rootView);
}
} else { // 如ongoing果rootView为空 ,就实例化该视图
rootView = inflater.inflate(R.layout.fragment_app, container, false);
mContext = (FragmentActivity) rootView.getContext();
mPresenter = new AppPresenter(mContext);
mPresenter.attachView(this);
mPresenter.setLifecycle(lifecycleSubject);
ButterKnife.bind(this, rootView);
initView();
}
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
rootView = null;
}
@Override
public void fetchData() {
Log.e(TAG, "fetchData: ");
initData();
}
private void initView() {
rv_app.setLayoutManager(new GridLayoutManager(mContext, 6));
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) mContext.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));//右间距
rv_app.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mAppAdapter = new AppAdapter();
rv_app.setAdapter(mAppAdapter);
registerOwnReceiver();
}
private void initData() {
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.e(TAG, "setUserVisibleHint: " + isVisibleToUser);
if (isVisibleToUser && isViewInitiated) {
mPresenter.getInstalledApp();
}
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ");
mPresenter.getInstalledApp();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e(TAG, "onDestroy: ");
unregisterOwnReceiver();
}
private void registerOwnReceiver() {
registerUpdateDesktopReceiver();
registerAppChangedReceiver();
}
private void unregisterOwnReceiver() {
if (updateDesktopReceiver != null) {
mContext.unregisterReceiver(updateDesktopReceiver);
}
if (mAppChangedReceiver != null) {
mContext.unregisterReceiver(mAppChangedReceiver);
}
}
private UpdateDesktopReceiver updateDesktopReceiver;
public static final String UPDATE_DESKTOP_ICON_ACTION = "UPDATE_DESKTOP_ICON";
private void registerUpdateDesktopReceiver() {
if (updateDesktopReceiver == null) {
updateDesktopReceiver = new UpdateDesktopReceiver();
}
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(UPDATE_DESKTOP_ICON_ACTION);
mContext.registerReceiver(updateDesktopReceiver, filter);
}
class UpdateDesktopReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e("UpdateDesktopReceiver", "onReceive: " + action);
if (TextUtils.isEmpty(action)) {
return;
}
if (UPDATE_DESKTOP_ICON_ACTION.equals(action)) {
mPresenter.getInstalledApp();
}
}
}
private AppChangedReceiver mAppChangedReceiver;
private void registerAppChangedReceiver() {
if (mAppChangedReceiver == null) {
mAppChangedReceiver = new AppChangedReceiver();
}
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
mContext.registerReceiver(mAppChangedReceiver, filter);
}
class AppChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e("AppChangedReceiver", "onReceive: " + action);
if (TextUtils.isEmpty(action)) {
return;
}
mPresenter.getInstalledApp();
}
}
@Override
public void setInstalledApp(ArrayList<DesktopIcon> desktopIcons) {
Log.e(TAG, "setInstalledApp: " + desktopIcons);
if (desktopIcons == null || desktopIcons.size() == 0) {
iv_nodata.setVisibility(View.VISIBLE);
rv_app.setVisibility(View.INVISIBLE);
} else {
iv_nodata.setVisibility(View.GONE);
rv_app.setVisibility(View.VISIBLE);
mAppAdapter.setDesktopIcons(desktopIcons);
}
}
}

View File

@@ -0,0 +1,61 @@
package com.uiui.zyos.fragment.app;
import android.content.Context;
import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiui.zyos.R;
import com.uiui.zyos.bean.DesktopIcon;
import com.uiui.zyos.manager.AppManager;
import java.util.ArrayList;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class AppPresenter implements AppContact.AppPresenter {
private static final String TAG = AppPresenter.class.getSimpleName();
private Context mContext;
private AppContact.AppView mView;
public AppPresenter(Context context) {
this.mContext = context;
}
private BehaviorSubject<FragmentEvent> lifecycle;
void setLifecycle(BehaviorSubject<FragmentEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<FragmentEvent> getLifecycle() {
return lifecycle;
}
@Override
public void attachView(@NonNull AppContact.AppView view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
}
@Override
public void getInstalledApp() {
ArrayList<DesktopIcon> desktopIcons = AppManager.getInstance().getFilterAppList();
DesktopIcon updateDesktopIcon = new DesktopIcon();
updateDesktopIcon.setLable("应用更新");
updateDesktopIcon.setPackageName(AppManager.UPDATE_NAME);
updateDesktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_update));
desktopIcons.add(desktopIcons.size(), updateDesktopIcon);
DesktopIcon desktopIcon = new DesktopIcon();
desktopIcon.setLable("添加应用");
desktopIcon.setPackageName(AppManager.ADD_NAME);
desktopIcon.setIcon(mContext.getDrawable(R.drawable.icon_add));
desktopIcons.add(desktopIcons.size(), desktopIcon);
mView.setInstalledApp(desktopIcons);
}
}

View File

@@ -16,6 +16,7 @@ import com.flyco.tablayout.SlidingTabLayout;
import com.uiui.zyos.R;
import com.uiui.zyos.base.BaseFragment;
import com.uiui.zyos.base.viewpager.BaseFragmentPagerAdapter;
import com.uiui.zyos.fragment.app.AppFragment;
import com.uiui.zyos.fragment.ar.ARStudyFragment;
import com.uiui.zyos.fragment.biology.BiologyFragment;
import com.uiui.zyos.fragment.chemical.ChemicalFragment;
@@ -47,11 +48,11 @@ public class SubjectFragment extends BaseFragment {
private String[] title = new String[]{
// "AR自主学",
"精准学", "语文", "数学", "英语", "物理", "化学", "生物", "综合",};
"精准学", "语文", "数学", "英语", "物理", "化学", "生物", "综合", "应用"};
private View rootView;
private FragmentActivity mContext;
// private ARStudyFragment mARStudyFragment;
// private ARStudyFragment mARStudyFragment;
private PrecisionFragment mPrecisionFragment;
private ChineseFragment mChineseFragment;
private MathFragment mMathFragment;
@@ -60,6 +61,7 @@ public class SubjectFragment extends BaseFragment {
private ChemicalFragment mChemicalFragment;
private BiologyFragment mBiologyFragment;
private ComplexFragment mComplexFragment;
private AppFragment mAppFragment;
private List<Fragment> mFragments;
private FragmentManager mFragmentManager;
@@ -119,6 +121,7 @@ public class SubjectFragment extends BaseFragment {
mChemicalFragment = new ChemicalFragment();
mBiologyFragment = new BiologyFragment();
mComplexFragment = new ComplexFragment();
mAppFragment = new AppFragment();
// mFragments.add(mARStudyFragment);
mFragments.add(mPrecisionFragment);
mFragments.add(mChineseFragment);
@@ -128,6 +131,7 @@ public class SubjectFragment extends BaseFragment {
mFragments.add(mChemicalFragment);
mFragments.add(mBiologyFragment);
mFragments.add(mComplexFragment);
mFragments.add(mAppFragment);
Log.e(TAG, "SubjectFragment: end = " + (System.currentTimeMillis() - time));
}

View File

@@ -85,16 +85,14 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
TextView tv_applet;
@BindView(R.id.tv_duration)
TextView tv_duration;
// @BindView(R.id.cl_activation)
// ConstraintLayout cl_activation;
@BindView(R.id.tv_date1)
TextView tv_date1;
@BindView(R.id.iv_applet_qrcode)
NiceImageView iv_applet_qrcode;
@BindView(R.id.iv_device_qrcode)
NiceImageView iv_device_qrcode;
// @BindView(R.id.cl_app)
// ConstraintLayout cl_app;
@BindView(R.id.cl_app)
ConstraintLayout cl_app;
@BindView(R.id.tv_date2)
TextView tv_date2;
@BindView(R.id.cl_more)
@@ -106,7 +104,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
@BindView(R.id.tv_activation)
TextView tv_activation;
private AppAdapter mAppAdapter;
private UserPresenter mPresenter;
@@ -231,8 +228,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
if (logined == 1) {
cl_nodata.setVisibility(View.GONE);
cl_usedata.setVisibility(View.VISIBLE);
// cl_activation.setVisibility(View.GONE);
// cl_app.setVisibility(View.VISIBLE);
}
setButtonVisibility();
tv_exit.setOnClickListener(new View.OnClickListener() {
@@ -395,8 +390,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
cl_nodata.setVisibility(View.GONE);
cl_usedata.setVisibility(View.VISIBLE);
// cl_activation.setVisibility(View.GONE);
// cl_app.setVisibility(View.VISIBLE);
break;
case 300: //设备没有绑定
case 400://没有授权的设备
@@ -406,8 +399,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
tv_grade.setText(getString(R.string.notset));
cl_nodata.setVisibility(View.VISIBLE);
cl_usedata.setVisibility(View.GONE);
// cl_activation.setVisibility(View.VISIBLE);
// cl_app.setVisibility(View.GONE);
break;
// ToastUtil.show(getString(R.string.device_unauthorized));
// Log.e(TAG, "setSnInfo: " + getString(R.string.device_unauthorized));
@@ -415,8 +406,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
// tv_grade.setText(getString(R.string.device_unauthorized));
// cl_nodata.setVisibility(View.GONE);
// cl_usedata.setVisibility(View.GONE);
// cl_activation.setVisibility(View.GONE);
// cl_app.setVisibility(View.GONE);
// break;
default:
}
@@ -425,7 +414,6 @@ public class UserFragment extends BaseFragment implements UserContact.UserView {
mPresenter.getStudyStat();
mPresenter.getQrCode();
// cl_app.setVisibility(View.VISIBLE);
}
@Override

View File

@@ -247,8 +247,8 @@ public class AppManager {
}
});
ArrayList<DesktopIcon> desktopIcons = new ArrayList<>();
for (ResolveInfo applicationInfo : resolveInfos) {
desktopIcons.add(DesktopIcon.creatDesktopIcon(mContext, applicationInfo));
for (ResolveInfo resolveInfo : resolveInfos) {
desktopIcons.add(DesktopIcon.creatDesktopIcon(mContext, resolveInfo));
}
return desktopIcons;
}

View File

@@ -141,6 +141,7 @@ public class RemoteManager {
Log.e(TAG, "aliyunPushInit: empty");
return;
}
PushServiceFactory.init(mContext);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.register(mContext, new CommonCallback() {
@Override