diff --git a/app/build.gradle b/app/build.gradle index ff32c32..6efe154 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.xxpatx.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 1073 - versionName "1.7.3" + versionCode 1074 + versionName "1.7.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/xxpatx/os/activity/settings/dock/DockActivity.java b/app/src/main/java/com/xxpatx/os/activity/settings/dock/DockActivity.java index d7b9b3e..f50c279 100644 --- a/app/src/main/java/com/xxpatx/os/activity/settings/dock/DockActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/settings/dock/DockActivity.java @@ -11,6 +11,7 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.tencent.mmkv.MMKV; import com.xxpatx.os.R; +import com.xxpatx.os.adapter.DockAppAdapter; import com.xxpatx.os.adapter.DockAppSelectedAdapter; import com.xxpatx.os.base.mvvm.BaseMvvmActivity; import com.xxpatx.os.bean.DockApp; @@ -29,10 +30,10 @@ public class DockActivity extends BaseMvvmActivity INCLUDE_SYSTEM_APP =new ArrayList(){{ + public static final List INCLUDE_SYSTEM_APP = new ArrayList() {{ this.add("com.android.mms");//信息 this.add("com.mediatek.camera"); }}; @@ -47,7 +48,25 @@ public class DockActivity extends BaseMvvmActivity dockApps) { + mDockAppSelectedAdapter.notifyDataSetChanged(); + } + }); + mViewDataBinding.rvSelect.setLayoutManager(new GridLayoutManager(this, 4)); + mViewDataBinding.rvSelect.addItemDecoration(new GridSpaceItemDecoration(4, 10, 10)); + mViewDataBinding.rvSelect.setAdapter(mDockAppAdapter); + + mDockAppSelectedAdapter.setAppSelectedCallback(new DockAppSelectedAdapter.AppSelectedCallback() { + @Override + public void onAppSelected(List dockApps) { + mDockAppAdapter.setDockApps(dockApps); + } + }); // if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); // mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 20, 20)); @@ -82,6 +101,7 @@ public class DockActivity extends BaseMvvmActivity dockApps = gson.fromJson(jsonString, type); mDockAppSelectedAdapter.setSelectedPkgList(dockApps); + mDockAppAdapter.setDockApps(dockApps); } catch (Exception e) { Log.e(TAG, "setDockApp: " + e.getMessage()); mMMKV.encode(DockActivity.DOCK_APP_KEY, ""); diff --git a/app/src/main/java/com/xxpatx/os/adapter/DockAppAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/DockAppAdapter.java index f38395b..3a3ec50 100644 --- a/app/src/main/java/com/xxpatx/os/adapter/DockAppAdapter.java +++ b/app/src/main/java/com/xxpatx/os/adapter/DockAppAdapter.java @@ -1,6 +1,9 @@ package com.xxpatx.os.adapter; import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,10 +14,12 @@ import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; +import com.xxpatx.os.BuildConfig; import com.xxpatx.os.R; import com.xxpatx.os.bean.DockApp; import com.xxpatx.os.service.NotificationService; import com.xxpatx.os.utils.ApkUtils; +import com.xxpatx.os.utils.IconUtils; import java.util.List; @@ -29,6 +34,16 @@ public class DockAppAdapter extends RecyclerView.Adapter notifyDataSetChanged(); } + private AppSelectedCallback mAppSelectedCallback; + + public void setAppSelectedCallback(AppSelectedCallback appSelectedCallback) { + mAppSelectedCallback = appSelectedCallback; + } + + public interface AppSelectedCallback { + void onAppSelected(List dockApps); + } + @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -39,15 +54,21 @@ public class DockAppAdapter extends RecyclerView.Adapter @Override public void onBindViewHolder(@NonNull Holder holder, int position) { DockApp dockApp = mDockApps.get(position); - holder.iv_icon.setImageDrawable(ApkUtils.getAppDrawable(mContext, dockApp.getPackageName())); + String pkg = dockApp.getPackageName(); + holder.iv_icon.setImageDrawable(ApkUtils.getAppDrawable(mContext, pkg)); holder.tv_name.setText(dockApp.getAppName()); holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - ApkUtils.openPackage(mContext, dockApp.getPackageName(), dockApp.getClassName()); +// ApkUtils.openPackage(mContext, pkg, dockApp.getClassName()); + mDockApps.remove(position); + notifyDataSetChanged(); + if (mAppSelectedCallback != null) { + mAppSelectedCallback.onAppSelected(mDockApps); + } } }); - int size = NotificationService.getNotificationLength(dockApp.getPackageName()); + int size = NotificationService.getNotificationLength(pkg); if (size == 0) { holder.bg.setVisibility(View.GONE); } else if (size < 99) { @@ -57,7 +78,19 @@ public class DockAppAdapter extends RecyclerView.Adapter holder.bg.setVisibility(View.VISIBLE); holder.bg.setText("99+"); } - + switch (pkg) { + case "xxpatx.os.dialer": + holder.iv_icon.setImageDrawable(mContext.getDrawable(R.drawable.home_icon_dialer)); + break; + case "com.mediatek.camera": + holder.iv_icon.setImageDrawable(mContext.getDrawable(R.drawable.com_android_camera)); + break; + case "com.android.mms": + holder.iv_icon.setImageDrawable(mContext.getDrawable(R.drawable.com_android_mms_ui)); + break; + default: + holder.iv_icon.setImageDrawable(getIcon(pkg)); + } } @Override @@ -65,6 +98,29 @@ public class DockAppAdapter extends RecyclerView.Adapter return mDockApps == null ? 0 : mDockApps.size(); } + public Drawable getIcon(String packageName) { + PackageManager pm = mContext.getPackageManager(); + ApplicationInfo info = null; + try { + info = pm.getApplicationInfo(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (info == null) { + return null; + } else { + int i = IconUtils.appClassNameList.indexOf(packageName); + if (i != -1) { + String val = IconUtils.appIconList.get(i); + int resID = mContext.getResources().getIdentifier(val, "drawable", BuildConfig.APPLICATION_ID); + if (resID != 0) { + return mContext.getResources().getDrawable(resID); + } + } + return info.loadIcon(pm); + } + } + static class Holder extends RecyclerView.ViewHolder { ConstraintLayout root; ImageView iv_icon; diff --git a/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java index cac9ab2..9f922a0 100644 --- a/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java +++ b/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java @@ -2,7 +2,10 @@ package com.xxpatx.os.adapter; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.database.Cursor; +import android.graphics.drawable.Drawable; import android.provider.CallLog; import android.util.Log; import android.view.LayoutInflater; @@ -14,12 +17,14 @@ import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; +import com.xxpatx.os.BuildConfig; import com.xxpatx.os.R; import com.xxpatx.os.activity.phone.PhoneActivity; import com.xxpatx.os.bean.DockApp; import com.xxpatx.os.manager.SpeechManager; import com.xxpatx.os.service.NotificationService; import com.xxpatx.os.utils.ApkUtils; +import com.xxpatx.os.utils.IconUtils; import java.util.List; @@ -84,7 +89,7 @@ public class DockAppGridAdapter extends BaseAdapter { holder.iv_icon.setImageDrawable(mContext.getDrawable(R.drawable.com_android_mms_ui)); break; default: - holder.iv_icon.setImageDrawable(ApkUtils.getAppDrawable(mContext, pkg)); + holder.iv_icon.setImageDrawable(getIcon(pkg)); } holder.tv_name.setText(dockApp.getAppName()); holder.root.setOnClickListener(new View.OnClickListener() { @@ -124,6 +129,29 @@ public class DockAppGridAdapter extends BaseAdapter { return convertView; } + public Drawable getIcon(String packageName) { + PackageManager pm = mContext.getPackageManager(); + ApplicationInfo info = null; + try { + info = pm.getApplicationInfo(packageName, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (info == null) { + return null; + } else { + int i = IconUtils.appClassNameList.indexOf(packageName); + if (i != -1) { + String val = IconUtils.appIconList.get(i); + int resID = mContext.getResources().getIdentifier(val, "drawable", BuildConfig.APPLICATION_ID); + if (resID != 0) { + return mContext.getResources().getDrawable(resID); + } + } + return info.loadIcon(pm); + } + } + private int readMissCall() { int result = 0; Cursor cursor = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, diff --git a/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java index d08c83c..7b961e4 100644 --- a/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java +++ b/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java @@ -48,6 +48,16 @@ public class DockAppSelectedAdapter extends RecyclerView.Adapter dockApps); + } + @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -70,7 +80,7 @@ public class DockAppSelectedAdapter extends RecyclerView.Adapter + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_dock.xml b/app/src/main/res/layout/activity_dock.xml index b8d5760..9a4a536 100644 --- a/app/src/main/res/layout/activity_dock.xml +++ b/app/src/main/res/layout/activity_dock.xml @@ -16,7 +16,7 @@ android:layout_height="match_parent"> @@ -57,6 +57,18 @@ tools:text="@string/app_size" /> + + + app:layout_constraintTop_toBottomOf="@+id/rv_select" /> \ No newline at end of file