diff --git a/app/build.gradle b/app/build.gradle index c1d2e19..08234f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.xxpatx.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 1017 - versionName "1.1.6" + versionCode 1019 + versionName "1.1.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b9e79cb..9ab7812 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -154,6 +154,10 @@ android:name=".activity.setting.SettingActivity" android:launchMode="singleTask" android:screenOrientation="portrait" /> + { private static final String TAG = "AlarmEditActivity"; - private LoadingDialog mLoadingDialog; - private PopupWindow mMenuPopupWindow; - private TimePickerView pvTime; - private String mPictrueFilePath; + + private String mPictrueFilePath = ""; private Date mDate; /*类型 1一次性 2每天 3周一到周五 4周六周日*/ private int mDayType = 1; - private int mClockType = 1; - private int mId; + private AlarmClockData mAlarmClockData; @@ -137,60 +134,19 @@ public class AlarmEditActivity extends BaseMvvmActivity clockDataHashMap = AlarmUtils.getInstance().getOldDataMap(); - AlarmClockData alarmClockData = clockDataHashMap.get(mId); - if (alarmClockData == null || !alarmClockData.isIs_local()) { - NetInterfaceManager.getInstance().getAlarmClockByIdObservable(mId) - .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY)) - .subscribe(new Observer>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - Log.e("getAlarmClockById", "onSubscribe: "); - } - - @Override - public void onNext(@NonNull BaseResponse alarmClockDatabaseResponse) { - Log.e("getAlarmClockById", "onNext: " + alarmClockDatabaseResponse); - if (alarmClockDatabaseResponse.code == 200) { - AlarmClockData alarmClockData = alarmClockDatabaseResponse.data; - mAlarmClockData = alarmClockData; - setAlarmClockInfo(alarmClockData); - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getAlarmClockById", "onError: " + e.getMessage()); - HashMap oldData = AlarmUtils.getInstance().getOldDataMap(); - mAlarmClockData = oldData.get(mId); - setAlarmClockInfo(mAlarmClockData); - onComplete(); - } - - @Override - public void onComplete() { - Log.e("getAlarmClockById", "onComplete: "); - } - }); - } else { - mAlarmClockData = alarmClockData; - setAlarmClockInfo(mAlarmClockData); - } + mViewDataBinding.setAlarmClockData(mAlarmClockData); + setAlarmClockInfo(); } - private void setAlarmClockInfo(AlarmClockData alarmClockData) { - if (alarmClockData == null) { - Toaster.show("闹钟信息为空"); - return; - } - Log.e(TAG, "setAlarmClockInfo: " + alarmClockData); - mDayType = alarmClockData.getType(); + private void setAlarmClockInfo() { + Log.e(TAG, "setAlarmClockInfo: " + mAlarmClockData); + mDayType = mAlarmClockData.getType(); switch (mDayType) { default: case AlarmUtils.ONCE: @@ -210,35 +166,22 @@ public class AlarmEditActivity extends BaseMvvmActivity params = new HashMap<>(); params.put("sn", Utils.getSerial()); - params.put("id", String.valueOf(mId)); + params.put("id", String.valueOf(mAlarmClockData.getId())); params.put("type", String.valueOf(mDayType)); params.put("time", timeStamp); params.put("title", mViewDataBinding.etActivation.getText().toString()); - params.put("remind_type", "0"); - params.put("is_onoff", "1"); - params.put("class", String.valueOf(mClockType)); - - - mLoadingDialog = new LoadingDialog(this); - mLoadingDialog.setLoadingText("正在上传") - .setSuccessText("编辑成功") - .setFailedText("编辑失败") - .setInterceptBack(true) - .setLoadSpeed(LoadingDialog.Speed.SPEED_ONE) - .closeSuccessAnim() - .show(); + params.put("remind_type", String.valueOf(mAlarmClockData.getRemind_type())); + params.put("is_onoff", String.valueOf(mAlarmClockData.getIs_onoff())); + params.put("class", String.valueOf(mAlarmClockData.getClazz())); if (mAlarmClockData.isIs_local()) { Toaster.show("编辑成功"); - mLoadingDialog.loadSuccess(); - mLoadingDialog.close(); mAlarmClockData.setEdited(false); AlarmUtils.getInstance().updateAlarmClock(mAlarmClockData); finish(); @@ -332,14 +263,11 @@ public class AlarmEditActivity extends BaseMvvmActivity>() { @Override public void onChanged(List alarmClockData) { setAlarmClock(alarmClockData); } }); - - mViewModel.getAlarmClock(mType); + mViewModel.getAlarmClock(); } @Override protected void onResume() { + Log.e(TAG, "onResume: "); super.onResume(); + mViewModel.getAlarmClock(); } + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + Log.e(TAG, "onDestroy: "); + super.onDestroy(); + unregisterReceivers(); + } private void showDialog(AlarmClockData alarmClockData) { DeleteDialog dialog = new DeleteDialog(this); @@ -154,7 +175,7 @@ public class AlarmListActivity extends BaseMvvmActivity alarmClockData) { - List localAddAlarm = AlarmUtils.getInstance().getLocalAddAlarm(); - Log.e(TAG, "setAlarmClock: localAddAlarm size = " + localAddAlarm); - if (alarmClockData != null) { - localAddAlarm.addAll(alarmClockData); - } - if (localAddAlarm.size() == 0) { + if (alarmClockData == null || alarmClockData.size() == 0) { mAlarmAdapter.setAlarmClockData(null); // swipeRefreshLayout.setRefreshing(false); mViewDataBinding.clNodata.setVisibility(View.VISIBLE); mViewDataBinding.rvData.setVisibility(View.GONE); // Toaster.show("没有数据"); } else { - mAlarmAdapter.setAlarmClockData(localAddAlarm); + mAlarmAdapter.setAlarmClockData(alarmClockData); // swipeRefreshLayout.setRefreshing(false); mViewDataBinding.clNodata.setVisibility(View.GONE); mViewDataBinding.rvData.setVisibility(View.VISIBLE); @@ -228,4 +244,33 @@ public class AlarmListActivity extends BaseMvvmActivity alarmClockList) { - if (alarmClockList.size() == 0) { - setAlarmClockEmpty(); - } else { - - } + mAlarmClockData.setValue(alarmClockList); } @Override - public void setAlarmClockEmpty() { - - } - - @Override - public void onError() { - + public void onError(String msg) { + Toaster.show(msg); } }); } diff --git a/app/src/main/java/com/xxpatx/os/activity/dock/DockActivity.java b/app/src/main/java/com/xxpatx/os/activity/dock/DockActivity.java new file mode 100644 index 0000000..e61c205 --- /dev/null +++ b/app/src/main/java/com/xxpatx/os/activity/dock/DockActivity.java @@ -0,0 +1,111 @@ +package com.xxpatx.os.activity.dock; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +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.DockAppSelectedAdapter; +import com.xxpatx.os.base.mvvm.BaseMvvmActivity; +import com.xxpatx.os.bean.DockApp; +import com.xxpatx.os.config.CommonConfig; +import com.xxpatx.os.databinding.ActivityDockBinding; +import com.xxpatx.os.view.GridSpaceItemDecoration; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class DockActivity extends BaseMvvmActivity { + private static final String TAG = "DockActivity"; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + public static final String DOCK_APP_KEY = "DockAppPackageKey"; + + + private DockAppSelectedAdapter mDockAppSelectedAdapter; + + public static final List DEFAULT_DOCK_APP = new ArrayList() { + private static final long serialVersionUID = -7406071324804131303L; + + { + this.add(new DockApp("xxpatx.os.dialer")); + this.add(new DockApp("com.tencent.mm")); + this.add(new DockApp("com.ss.android.ugc.aweme")); + this.add(new DockApp("com.mediatek.camera")); + } + }; + + public static final List INCLUDE_SYSTEM_APP =new ArrayList(){{ + this.add("com.mediatek.camera"); + }}; + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewModel.setVDBinding(mViewDataBinding); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + mDockAppSelectedAdapter = new DockAppSelectedAdapter(); +// if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { +// mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); +// mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(3, 20, 20)); +// } else { + mViewDataBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); + mViewDataBinding.recyclerView.addItemDecoration(new GridSpaceItemDecoration(2, 10, 10)); +// } + mViewDataBinding.recyclerView.setAdapter(mDockAppSelectedAdapter); + mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + } + + @Override + protected void initData() { + mViewModel.getAppSelectBeanListData().observe(this, new Observer>() { + @Override + public void onChanged(List dockApps) { + mDockAppSelectedAdapter.setDockAppList(dockApps); + } + }); +// mDockAppSelectedAdapter.setSelectedPkgList(DEFAULT_DOCK_APP); + String jsonString = mMMKV.decodeString(DockActivity.DOCK_APP_KEY); + Log.e(TAG, "setDockApp: " + jsonString); + if (!TextUtils.isEmpty(jsonString)) { + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + try { + List dockApps = gson.fromJson(jsonString, type); + mDockAppSelectedAdapter.setSelectedPkgList(dockApps); + } catch (Exception e) { + Log.e(TAG, "setDockApp: " + e.getMessage()); + mMMKV.encode(DockActivity.DOCK_APP_KEY, ""); + } + } + mViewModel.getPackageList(); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_dock; + } + + public class BtnClick { + + } +} diff --git a/app/src/main/java/com/xxpatx/os/activity/dock/DockViewModel.java b/app/src/main/java/com/xxpatx/os/activity/dock/DockViewModel.java new file mode 100644 index 0000000..462b19f --- /dev/null +++ b/app/src/main/java/com/xxpatx/os/activity/dock/DockViewModel.java @@ -0,0 +1,69 @@ +package com.xxpatx.os.activity.dock; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; + +import com.xxpatx.os.base.mvvm.BaseViewModel; +import com.xxpatx.os.bean.DockApp; +import com.xxpatx.os.databinding.ActivityDockBinding; +import com.xxpatx.os.utils.ApkUtils; + +import java.util.ArrayList; +import java.util.List; + +public class DockViewModel extends BaseViewModel { + private static final String TAG = "DockViewModel"; + + @Override + public ActivityDockBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + private MutableLiveData> mAppSelectBeanListData = new MutableLiveData<>(); + + public MutableLiveData> getAppSelectBeanListData() { + return mAppSelectBeanListData; + } + + public void getPackageList() { + PackageManager pm = getCtx().getPackageManager(); + List dockAppList = new ArrayList<>(); + dockAppList.add(new DockApp("电话", "xxpatx.os.dialer", "")); + // 创建一个类别为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); + + for (ResolveInfo resolveInfo : resolveinfoList) { + String pkgName = resolveInfo.activityInfo.packageName; + if (ApkUtils.excludePackageName.contains(pkgName)) { + continue; + } + if (ApkUtils.isSystemApp(getCtx(), pkgName)) { + if (DockActivity.INCLUDE_SYSTEM_APP.contains(pkgName)) { + + } else { + continue; + } + } + + Log.e(TAG, "getPackageList: " + pkgName); + DockApp dockApp = new DockApp(resolveInfo.activityInfo.loadLabel(pm).toString(), + pkgName, resolveInfo.activityInfo.name); + dockAppList.add(dockApp); + } + mAppSelectBeanListData.setValue(dockAppList); + } + +} diff --git a/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java b/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java index 3112142..ebce9e9 100644 --- a/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/main/MainActivity.java @@ -27,8 +27,12 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; import com.blankj.utilcode.util.NetworkUtils; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; @@ -38,12 +42,16 @@ import com.tencent.mmkv.MMKV; import com.xxpatx.os.BuildConfig; import com.xxpatx.os.R; import com.xxpatx.os.activity.activation.ActivationActivity; +import com.xxpatx.os.activity.dock.DockActivity; import com.xxpatx.os.activity.phone.PhoneActivity; import com.xxpatx.os.activity.update.UpdateActivity; +import com.xxpatx.os.adapter.DockAppAdapter; +import com.xxpatx.os.adapter.DockAppGridAdapter; import com.xxpatx.os.base.BaseFragmentPagerAdapter; import com.xxpatx.os.base.mvvm.BaseMvvmActivity; import com.xxpatx.os.bean.AppInfo; import com.xxpatx.os.bean.DesktopIcon; +import com.xxpatx.os.bean.DockApp; import com.xxpatx.os.bean.MapBean; import com.xxpatx.os.config.CommonConfig; import com.xxpatx.os.databinding.ActivityMainBinding; @@ -63,6 +71,7 @@ import com.xxpatx.os.view.ScaleCircleNavigator; import net.lucode.hackware.magicindicator.ViewPagerHelper; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -92,6 +101,9 @@ public class MainActivity extends BaseMvvmActivity 1) { mViewDataBinding.viewPager.setCurrentItem(defaultCurrent); } + NotificationService.setListener(this); updateIconBg(); @@ -462,7 +475,48 @@ public class MainActivity extends BaseMvvmActivity mAppSelectBeans; - private int unselectedStatus = -1; - private int selecedPosition = unselectedStatus; - private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + // private int unselectedStatus = -1; +// private int selecedPosition = unselectedStatus; + private List mPkgList = new ArrayList<>(); + + public void setPkgList(List pkgList) { + this.mPkgList = pkgList; + Log.e(TAG, "setPkgList: " + mPkgList); + } public void setAppSelectBeans(List appSelectBeanList) { this.mAppSelectBeans = appSelectBeanList; @@ -46,23 +55,59 @@ public class AppSelectedAdapter extends RecyclerView.Adapter= 4) { + Toaster.show("最多选择4个"); + } else { + mPkgList.add(appSelectBean.getPackageName()); + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + holder.root.setBackground(mContext.getDrawable(R.drawable.app_select_background)); + } } else { + mPkgList.remove(appSelectBean.getPackageName()); holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); - selecedPosition = -1; - Settings.Global.putString(mContext.getContentResolver(),QuickAppActivity.QUICK_APP_KEY, ""); - Log.e(TAG, "setQuickApp: empty"); + holder.root.setBackground(mContext.getDrawable(R.drawable.app_unselect_background)); + } + if (mPkgList.size() == 0) { + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, ""); + } else { + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, String.join(",", mPkgList)); + } + notifyDataSetChanged(); + } + }); + + + holder.root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.e(TAG, "setQuickApp: " + appSelectBean.getPackageName()); + if (!mPkgList.contains(appSelectBean.getPackageName())) { + if (mPkgList.size() >= 4) { + Toaster.show("最多选择4个"); + } else { + mPkgList.add(appSelectBean.getPackageName()); + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + } + } else { + mPkgList.remove(appSelectBean.getPackageName()); + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); + } + if (mPkgList.size() == 0) { + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, ""); + } else { + mMMKV.encode(QuickAppActivity.QUICK_APP_KEY, String.join(",", mPkgList)); } notifyDataSetChanged(); } @@ -77,9 +122,11 @@ public class AppSelectedAdapter extends RecyclerView.Adapter { + private static final String TAG = "DockAppAdapter"; + + private Context mContext; + private List mDockApps; + + public void setDockApps(List dockAppList) { + this.mDockApps = dockAppList; + notifyDataSetChanged(); + } + + @NonNull + @Override + public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_dock_app, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Holder holder, int position) { + DockApp dockApp = mDockApps.get(position); + holder.iv_icon.setImageDrawable(ApkUtils.getAppDrawable(mContext, dockApp.getPackageName())); + 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()); + } + }); + int size = NotificationService.getNotificationLength(dockApp.getPackageName()); + if (size == 0) { + holder.bg.setVisibility(View.GONE); + } else if (size < 99) { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText(String.valueOf(size)); + } else { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText("99+"); + } + + } + + @Override + public int getItemCount() { + return mDockApps == null ? 0 : mDockApps.size(); + } + + static class Holder extends RecyclerView.ViewHolder { + ConstraintLayout root; + ImageView iv_icon; + TextView tv_name; + TextView bg; + + Holder(@NonNull View itemView) { + super(itemView); + root = itemView.findViewById(R.id.root); + iv_icon = itemView.findViewById(R.id.iv_icon); + tv_name = itemView.findViewById(R.id.tv_name); + bg = itemView.findViewById(R.id.bg); + } + } +} diff --git a/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java new file mode 100644 index 0000000..9779d05 --- /dev/null +++ b/app/src/main/java/com/xxpatx/os/adapter/DockAppGridAdapter.java @@ -0,0 +1,114 @@ +package com.xxpatx.os.adapter; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.xxpatx.os.R; +import com.xxpatx.os.activity.phone.PhoneActivity; +import com.xxpatx.os.bean.DockApp; +import com.xxpatx.os.service.NotificationService; +import com.xxpatx.os.utils.ApkUtils; + +import java.util.List; + +public class DockAppGridAdapter extends BaseAdapter { + + private Context mContext; + private List mDockApps; + + public DockAppGridAdapter(Context context) { + mContext = context; + } + + public void setDockApps(List dockAppList) { + this.mDockApps = dockAppList; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mDockApps == null ? 0 : mDockApps.size(); + } + + @Override + public Object getItem(int position) { + return mDockApps.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + + if (convertView == null) { + LayoutInflater inflater = LayoutInflater.from(mContext); + convertView = inflater.inflate(R.layout.item_dock_app, parent, false); + holder = new ViewHolder(); + holder.root = convertView.findViewById(R.id.root); + holder.iv_icon = convertView.findViewById(R.id.iv_icon); + holder.tv_name = convertView.findViewById(R.id.tv_name); + holder.bg = convertView.findViewById(R.id.bg); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + DockApp dockApp = mDockApps.get(position); + String pkg = dockApp.getPackageName(); + 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; + default: + 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) { + switch (pkg) { + case "xxpatx.os.dialer": + mContext.startActivity(new Intent(mContext, PhoneActivity.class)); + break; + default: + ApkUtils.openPackage(mContext, pkg, dockApp.getClassName()); + } + } + }); + int size = NotificationService.getNotificationLength(pkg); + if (size == 0) { + holder.bg.setVisibility(View.GONE); + } else if (size < 99) { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText(String.valueOf(size)); + } else { + holder.bg.setVisibility(View.VISIBLE); + holder.bg.setText("99+"); + } + + return convertView; + } + + static class ViewHolder { + ConstraintLayout root; + ImageView iv_icon; + TextView tv_name; + TextView bg; + } +} diff --git a/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java b/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java new file mode 100644 index 0000000..c2b0845 --- /dev/null +++ b/app/src/main/java/com/xxpatx/os/adapter/DockAppSelectedAdapter.java @@ -0,0 +1,134 @@ +package com.xxpatx.os.adapter; + +import android.content.Context; +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.hjq.toast.Toaster; +import com.tencent.mmkv.MMKV; +import com.xxpatx.os.R; +import com.xxpatx.os.activity.dock.DockActivity; +import com.xxpatx.os.bean.DockApp; +import com.xxpatx.os.config.CommonConfig; +import com.xxpatx.os.gson.GsonUtils; +import com.xxpatx.os.utils.ApkUtils; + +import java.util.ArrayList; +import java.util.List; + +public class DockAppSelectedAdapter extends RecyclerView.Adapter { + private static final String TAG = "AppSelectedAdapter"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + + private Context mContext; + private List mDockAppList; + private List mSelectedPkgList = new ArrayList<>(); + + public void setSelectedPkgList(List selectedPkgList) { + this.mSelectedPkgList = selectedPkgList; + Log.e(TAG, "setPkgList: " + mSelectedPkgList); + notifyDataSetChanged(); + } + + public void setDockAppList(List dockAppList) { + this.mDockAppList = dockAppList; + notifyDataSetChanged(); + } + + @NonNull + @Override + public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_dock_app_select, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Holder holder, int position) { + DockApp dockApp = mDockAppList.get(position); + String pkg = dockApp.getPackageName(); + 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; + default: + holder.iv_icon.setImageDrawable(ApkUtils.getAppDrawable(mContext, dockApp.getPackageName())); + } + holder.tv_name.setText(dockApp.getAppName()); + if (mSelectedPkgList.contains(dockApp)) { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + holder.root.setBackground(mContext.getDrawable(R.drawable.app_select_background)); + } else { + holder.iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); + holder.root.setBackground(mContext.getDrawable(R.drawable.app_unselect_background)); + } + + holder.iv_select.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + holder.selectApp(dockApp); + } + }); + holder.root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + holder.selectApp(dockApp); + } + }); + } + + + @Override + public int getItemCount() { + return mDockAppList == null ? 0 : mDockAppList.size(); + } + + class Holder extends RecyclerView.ViewHolder { + ImageView iv_select, iv_icon; + TextView tv_name; + ConstraintLayout root; + + Holder(@NonNull View itemView) { + super(itemView); + root = itemView.findViewById(R.id.root); + iv_select = itemView.findViewById(R.id.iv_select); + iv_icon = itemView.findViewById(R.id.iv_icon); + tv_name = itemView.findViewById(R.id.tv_name); + } + + + public void selectApp(DockApp dockApp) { + Log.e(TAG, "selectApp: " + dockApp.getPackageName()); + if (!mSelectedPkgList.contains(dockApp)) { + if (mSelectedPkgList.size() >= 5) { + Toaster.show("最多选择5个"); + } else { + mSelectedPkgList.add(dockApp); + iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_selected)); + root.setBackground(mContext.getDrawable(R.drawable.app_select_background)); + } + } else { + mSelectedPkgList.remove(dockApp); + iv_select.setImageDrawable(mContext.getDrawable(R.drawable.icon_unselected)); + root.setBackground(mContext.getDrawable(R.drawable.app_unselect_background)); + } + if (mSelectedPkgList.size() == 0) { + mMMKV.encode(DockActivity.DOCK_APP_KEY, ""); + } else { + mMMKV.encode(DockActivity.DOCK_APP_KEY, GsonUtils.toJSONString(mSelectedPkgList)); + } + notifyDataSetChanged(); + } + } +} diff --git a/app/src/main/java/com/xxpatx/os/alarm/AlarmAdapter.java b/app/src/main/java/com/xxpatx/os/alarm/AlarmAdapter.java index 67cd77d..9db5922 100644 --- a/app/src/main/java/com/xxpatx/os/alarm/AlarmAdapter.java +++ b/app/src/main/java/com/xxpatx/os/alarm/AlarmAdapter.java @@ -242,7 +242,7 @@ public class AlarmAdapter extends RecyclerView.Adapter { @Override public void onClick(View view) { Intent intent = new Intent(mContext, AlarmEditActivity.class); - intent.putExtra("id", alarmClockData.getId()); + intent.putExtra("AlarmClockData", alarmClockData); mContext.startActivity(intent); } }); diff --git a/app/src/main/java/com/xxpatx/os/alarm/AlarmClockData.java b/app/src/main/java/com/xxpatx/os/alarm/AlarmClockData.java index c0c795c..25be17a 100644 --- a/app/src/main/java/com/xxpatx/os/alarm/AlarmClockData.java +++ b/app/src/main/java/com/xxpatx/os/alarm/AlarmClockData.java @@ -28,10 +28,10 @@ public class AlarmClockData implements Serializable { String voice_md5; String file;//图片或视频文件地址 String file_md5; - int remind_type; + int remind_type; //提醒方式 1仅震动 int is_onoff;//0关闭 1开启 @SerializedName("class") - int clazz; + int clazz;//分类 1吃药 2接送 3预约 boolean finished = false; boolean is_local = false; diff --git a/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java b/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java index a46a39e..7c3b003 100644 --- a/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java +++ b/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java @@ -331,33 +331,7 @@ public class AlarmUtils { * @return 获取单个闹钟 */ public AlarmClockData getDatabaseSingleAlarm(AlarmClockData data) { - List list = new ArrayList<>(); - String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where id =" + data.getId(); - Cursor cursor = mDatabase.rawQuery(selectQuery, null); - if (cursor.moveToFirst()) { - do { - AlarmClockData alarmClockData = new AlarmClockData(); - alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID))); - alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE))); - alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME))); - alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE))); - alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE))); - alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5))); - alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE))); - alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5))); - alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE))); - alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF))); - alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ))); - - alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1); - alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1); - alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1); - alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1); - list.add(alarmClockData); - } while (cursor.moveToNext()); - } - cursor.close(); - return list.size() == 0 ? null : list.get(0); + return getDatabaseSingleAlarm(data.getId()); } public AlarmClockData getDatabaseSingleAlarm(int id) { diff --git a/app/src/main/java/com/xxpatx/os/bean/DockApp.java b/app/src/main/java/com/xxpatx/os/bean/DockApp.java new file mode 100644 index 0000000..1b16c0a --- /dev/null +++ b/app/src/main/java/com/xxpatx/os/bean/DockApp.java @@ -0,0 +1,76 @@ +package com.xxpatx.os.bean; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.Gson; +import com.google.gson.JsonParser; + +import java.io.Serializable; +import java.util.Objects; + +public class DockApp implements Serializable { + private static final long serialVersionUID = 820554935375905745L; + + String appName; + String packageName; + String className; + + public DockApp(String appName, String packageName, String className) { + this.appName = appName; + this.packageName = packageName; + this.className = className; + } + + public DockApp(String packageName, String className) { + this.packageName = packageName; + this.className = className; + } + + public DockApp(String packageName) { + this.packageName = packageName; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + @NonNull + @Override + public String toString() { + return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof DockApp) { + DockApp d = (DockApp) obj; + return +// Objects.equals(appName, d.appName);&& + Objects.equals(packageName, d.packageName); +// && Objects.equals(className, d.className); + } else { + return false; + } + } +} diff --git a/app/src/main/java/com/xxpatx/os/config/CommonConfig.java b/app/src/main/java/com/xxpatx/os/config/CommonConfig.java index a84f256..d310f9f 100644 --- a/app/src/main/java/com/xxpatx/os/config/CommonConfig.java +++ b/app/src/main/java/com/xxpatx/os/config/CommonConfig.java @@ -90,6 +90,12 @@ public class CommonConfig { /*禁用闹钟修改*/ public static final String DISABLE_CLOCK_MODIFY = "disable_clock_modify_key"; + public final static String ACTION_STATUS_BAR_STATE = "xiaoxintong_statusBar_state"; + /*显示状态栏*/ + public final static String ACTION_SHOW_STATUS_BAR = "xiaoxintong_show_statusBar"; + /*隐藏状态栏*/ + public final static String ACTION_HIDE_STATUS_BAR = "xiaoxintong_hide_statusBar"; + public static final String AMAP_LOCATION_MAP_BEAN = "AMapLocation_MapBean_key"; public static final String AMAP_LOCATION_DISTRICT = "AMapLocationMapBean_key"; diff --git a/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java b/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java index 1c875e5..e1c7f18 100644 --- a/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java +++ b/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java @@ -8,8 +8,6 @@ public class ContactCacheHelper extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "ContactDatabase.db"; - // public static final String DATABASE_FILE_NAME = Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_NAME; - public static final String DATABASE_FILE_NAME = DATABASE_NAME; public static final String TABLE_ALARM = "ContactTable"; diff --git a/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java b/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java index bd8fd60..7bb15fd 100644 --- a/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java +++ b/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java @@ -7,6 +7,7 @@ import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import android.util.Log; +import com.xxpatx.os.BuildConfig; import com.xxpatx.os.bean.Contact; import java.io.File; @@ -25,12 +26,15 @@ public class ContactCacheUtils { public ContactCacheUtils(Context context) { this.mContext = context.getApplicationContext(); // this.mContactHelper = new ContactCacheHelper(context, ContactCacheHelper.DATABASE_NAME, null, ContactCacheHelper.DATABASE_VERSION); -// this.mContactHelper = new ContactCacheHelper(context, -// context.getExternalCacheDir() + File.separator + ContactCacheHelper.DATABASE_NAME, -// null, ContactCacheHelper.DATABASE_VERSION); - this.mContactHelper = new ContactCacheHelper(context, - Environment.getExternalStorageDirectory() + File.separator + ContactCacheHelper.DATABASE_NAME, - null, ContactCacheHelper.DATABASE_VERSION); + if (BuildConfig.DEBUG) { + this.mContactHelper = new ContactCacheHelper(context, + Environment.getExternalStorageDirectory() + File.separator + ContactCacheHelper.DATABASE_NAME, + null, ContactCacheHelper.DATABASE_VERSION); + } else { + this.mContactHelper = new ContactCacheHelper(context, + context.getExternalCacheDir() + File.separator + ContactCacheHelper.DATABASE_NAME, + null, ContactCacheHelper.DATABASE_VERSION); + } this.mDatabase = mContactHelper.getWritableDatabase(); } diff --git a/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java b/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java index 799838b..4fc3bc3 100644 --- a/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/xxpatx/os/fragment/home/HomeFragment.java @@ -350,7 +350,6 @@ public class HomeFragment extends BaseMvvmFragment()); - } - - @Override - public void onError() { + public void onError(String msg) { } }); diff --git a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java index cca9980..868dcd8 100644 --- a/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java +++ b/app/src/main/java/com/xxpatx/os/network/NetInterfaceManager.java @@ -61,20 +61,21 @@ import com.xxpatx.os.network.api.uiui.GoodsListApi; import com.xxpatx.os.network.api.uiui.GoodsTypeApi; import com.xxpatx.os.network.api.uiui.GoodsTypeListApi; import com.xxpatx.os.network.api.uiui.HealthCodeApi; -import com.xxpatx.os.network.api.uiui.SnIsActivationApi; -import com.xxpatx.os.network.api.uiui.contact.MailListAddApi; -import com.xxpatx.os.network.api.uiui.contact.MailListDeleteApi; import com.xxpatx.os.network.api.uiui.RegionListApi; import com.xxpatx.os.network.api.uiui.RegionListCall; import com.xxpatx.os.network.api.uiui.ServeApi; +import com.xxpatx.os.network.api.uiui.SnIsActivationApi; import com.xxpatx.os.network.api.uiui.UpdateAppIconApi; import com.xxpatx.os.network.api.uiui.UserInfoControl; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockAddApi; -import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockApi; +import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockGetApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockDeleteApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockEditApi; import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockQueryApi; +import com.xxpatx.os.network.api.uiui.alarmclock.AlarmClockUpdateApi; import com.xxpatx.os.network.api.uiui.app.RunNewApp; +import com.xxpatx.os.network.api.uiui.contact.MailListAddApi; +import com.xxpatx.os.network.api.uiui.contact.MailListDeleteApi; import com.xxpatx.os.network.api.uiui.contact.MailListEditApi; import com.xxpatx.os.network.api.uiui.desktop.GetDesktopApi; import com.xxpatx.os.network.api.uiui.desktop.UpdateDesktopApi; @@ -90,7 +91,6 @@ import com.xxpatx.os.network.api.uiui.sn.SettingApi; import com.xxpatx.os.network.api.uiui.sn.SnInfoApi; import com.xxpatx.os.network.api.uiui.sn.SosRecordApi; import com.xxpatx.os.network.api.uiui.sn.UpdateAddressApi; -import com.xxpatx.os.network.api.uiui.sn.UpdateAlarmClockApi; import com.xxpatx.os.network.interceptor.RepeatRequestInterceptor; import com.xxpatx.os.utils.Utils; @@ -362,7 +362,7 @@ public class NetInterfaceManager { } public Observable getUpdateAlarmObservable(int id) { - return mRetrofit.create(UpdateAlarmClockApi.class) + return mRetrofit.create(AlarmClockUpdateApi.class) .updateAlarm(Utils.getSerial(), id) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); @@ -466,7 +466,7 @@ public class NetInterfaceManager { public Observable>> getAlarmClockObservable() { return mRetrofit - .create(AlarmClockApi.class) + .create(AlarmClockGetApi.class) .getAlarmClock(Utils.getSerial(), 0) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); @@ -474,7 +474,7 @@ public class NetInterfaceManager { public Observable>> getAlarmClockObservable(int type) { return mRetrofit - .create(AlarmClockApi.class) + .create(AlarmClockGetApi.class) .getAlarmClock(Utils.getSerial(), type) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); @@ -1020,41 +1020,9 @@ public class NetInterfaceManager { public interface AlarmClockCallback { void setAlarmClock(List alarmClockList); - void setAlarmClockEmpty(); - - void onError(); + void onError(String msg); } - public void getAlarmClock(boolean refresh, BehaviorSubject lifecycle, AlarmClockCallback callback) { -// ConnectMode connectMode = ConnectMode.DEFAULT; -// if (refresh) { -// connectMode = ConnectMode.DEFAULT; -// } -// if (ConnectManager.getInstance().isNeedConnect(UrlAddress.GET_ALARM_CLOCK, connectMode)) { - getAlarmClock(lifecycle, callback); -// } else { -// getAlarmClockCache(lifecycle, callback); -// } - } - -// public void getAlarmClockCache(BehaviorSubject lifecycle, AlarmClockCallback callback) { -// String jsonString = mCacheHelper.getAsString(UrlAddress.GET_ALARM_CLOCK); -// //为 "" 是已经请求成功的 -// if (jsonString == null) { -// getAlarmClock(lifecycle, callback); -// } else { -// Gson gson = new Gson(); -// Type type = new TypeToken>() { -// }.getType(); -// List list = gson.fromJson(jsonString, type); -// if (list == null || list.size() == 0) { -// callback.setAlarmClockEmpty(); -// } else { -// callback.setAlarmClock(list); -// } -// } -// } - public void getAlarmClockFragment(BehaviorSubject lifecycle, AlarmClockCallback callback) { getAlarmClockObservable() .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY)) @@ -1092,31 +1060,30 @@ public class NetInterfaceManager { if (alarmClockData != null && alarmClockData.size() != 0) { AlarmUtils.getInstance().setAlarmClockData(alarmClockData); mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, GsonUtils.toJSONString(alarmClockData)); -// if (callback != null) { -// callback.setAlarmClock(alarmClockData); -// } } else { AlarmUtils.getInstance().deleteAllAlarmClock(); AlarmUtils.getInstance().setAlarmClockData(null); mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, ""); -// if (callback != null) { -// callback.setAlarmClockEmpty(); -// } + if (callback != null) { + callback.onError(listBaseResponse.msg); + } } } else { AlarmUtils.getInstance().deleteAllAlarmClock(); AlarmUtils.getInstance().setAlarmClockData(null); mMMKV.encode(UrlAddress.GET_ALARM_CLOCK, ""); -// if (callback != null) { -// callback.setAlarmClockEmpty(); -// } + if (callback != null) { + callback.onError(listBaseResponse.msg); + } } } @Override public void onError(@NonNull Throwable e) { Log.e("getAlarmClockObserver", "onError: " + e.getMessage()); - if (callback != null) callback.onError(); + if (callback != null) { + callback.onError("请检查网络连接"); + } onComplete(); } @@ -1124,8 +1091,10 @@ public class NetInterfaceManager { public void onComplete() { Log.e("getAlarmClockObserver", "onComplete: "); List list = AlarmUtils.getInstance().getOldData(); + Log.e("getAlarmClockObserver", "onComplete: list = " + list); + if (list == null || list.size() == 0) { - if (callback != null) callback.setAlarmClockEmpty(); + if (callback != null) callback.setAlarmClock(null); } else { List filter = list.stream().filter(alarmClockData -> !alarmClockData.isDeleted()).collect(Collectors.toList()); if (callback != null) callback.setAlarmClock(filter); diff --git a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java index f454cd1..e6c9378 100644 --- a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java +++ b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java @@ -23,8 +23,6 @@ public class UrlAddress { */ /*获取设备是否激活*/ public static final String GET_SN_IS_ACTIVATION = "sn/getSnIsActivation"; - /*爱心提醒通知成功接口*/ - public static final String UPDATE_ALARM_CLOCK = "updateAlarmClock"; /*上传截屏图片*/ public static final String SEND_SCREENSHOT = "sn/uploadScreenshot"; /*获取系统设置其它管控*/ @@ -106,16 +104,18 @@ public class UrlAddress { /** * 闹钟 */ + /*获取闹钟*/ + public static final String GET_ALARM_CLOCK = "getAlarmClock"; + /*爱心提醒通知成功*/ + public static final String ALARM_CLOCK_UPDATE = "updateAlarmClock"; + /*编号查询闹钟*/ + public static final String ALARM_CLOCK_BY_ID = "AlarmClock/alarmClockById"; /*添加闹钟*/ public static final String ALARM_CLOCK_ADD = "AlarmClock/alarmClockAdd"; /*编辑闹钟*/ public static final String ALARM_CLOCK_EDIT = "AlarmClock/alarmClockEdit"; - /*编号查询闹钟*/ - public static final String ALARM_CLOCK_BY_ID = "AlarmClock/alarmClockById"; /*删除闹钟*/ public static final String ALARM_CLOCK_DELETE = "AlarmClock/alarmClockDelete"; - /*获取闹钟*/ - public static final String GET_ALARM_CLOCK = "getAlarmClock"; /** * 商品购买 diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockGetApi.java similarity index 93% rename from app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockApi.java rename to app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockGetApi.java index 5d9a9c2..ac34a37 100644 --- a/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockApi.java +++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockGetApi.java @@ -10,7 +10,7 @@ import io.reactivex.rxjava3.core.Observable; import retrofit2.http.GET; import retrofit2.http.Query; -public interface AlarmClockApi { +public interface AlarmClockGetApi { @GET(UrlAddress.GET_ALARM_CLOCK) Observable>> getAlarmClock( @Query("sn") String sn, diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/sn/UpdateAlarmClockApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockUpdateApi.java similarity index 73% rename from app/src/main/java/com/xxpatx/os/network/api/uiui/sn/UpdateAlarmClockApi.java rename to app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockUpdateApi.java index 44674b4..f631eba 100644 --- a/app/src/main/java/com/xxpatx/os/network/api/uiui/sn/UpdateAlarmClockApi.java +++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/alarmclock/AlarmClockUpdateApi.java @@ -1,4 +1,4 @@ -package com.xxpatx.os.network.api.uiui.sn; +package com.xxpatx.os.network.api.uiui.alarmclock; import com.xxpatx.os.bean.BaseResponse; import com.xxpatx.os.network.UrlAddress; @@ -8,9 +8,9 @@ import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; -public interface UpdateAlarmClockApi { +public interface AlarmClockUpdateApi { @FormUrlEncoded - @POST(UrlAddress.UPDATE_ALARM_CLOCK) + @POST(UrlAddress.ALARM_CLOCK_UPDATE) Observable updateAlarm( @Field("sn") String sn, @Field("id") int id diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainSContact.java b/app/src/main/java/com/xxpatx/os/service/main/MainSContact.java index 00dc1c5..67f5e76 100644 --- a/app/src/main/java/com/xxpatx/os/service/main/MainSContact.java +++ b/app/src/main/java/com/xxpatx/os/service/main/MainSContact.java @@ -8,16 +8,18 @@ import java.util.List; public class MainSContact { public interface Presenter extends BasePresenter { - void addAlarmClock(); - void deleteAlarmClock(); - //设置所有信息 void getAlarmClock(); + void addAlarmClock(); + void editAlarmClock(); + void updateAlarmClock(); + void deleteAlarmClock(); } public interface MainSView extends BaseView { - void addAlarmClockFinish(); - void deleteAlarmClockFinish(); - //获取所有信息 void setAlarmClock(List dataList); + void addAlarmClockFinish(); + void editAlarmClockFinish(); + void updateAlarmClockFinish(); + void deleteAlarmClockFinish(); } } diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java b/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java index 486b890..8a00ee6 100644 --- a/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java +++ b/app/src/main/java/com/xxpatx/os/service/main/MainSPresenter.java @@ -4,6 +4,7 @@ import android.content.Context; import android.text.TextUtils; import android.util.Log; +import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; @@ -39,10 +40,10 @@ import okhttp3.RequestBody; public class MainSPresenter implements MainSContact.Presenter { private static final String TAG = "MainSPresenter"; - private static final int OK = 200; + MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private MainSContact.MainSView mView; private Context mContext; - MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); private BehaviorSubject lifecycle; @@ -69,6 +70,23 @@ public class MainSPresenter implements MainSContact.Presenter { this.mView = null; } + @Override + public void getAlarmClock() { + NetInterfaceManager.getInstance().getAlarmClock(getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { + @Override + public void setAlarmClock(List alarmClockList) { + Log.e(TAG, "setAlarmClock: " + alarmClockList); + } + + @Override + public void onError(String msg) { + Toaster.show(msg); + } + + }); + + } + private int addFinishStatu; @Override @@ -195,6 +213,16 @@ public class MainSPresenter implements MainSContact.Presenter { return NetInterfaceManager.getInstance().getAlarmClockAddObservable(params, body); } + @Override + public void editAlarmClock() { + + } + + @Override + public void updateAlarmClock() { + + } + private int deleteFinishStatu; @Override @@ -282,24 +310,4 @@ public class MainSPresenter implements MainSContact.Presenter { return NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId()); } - @Override - public void getAlarmClock() { - NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() { - @Override - public void setAlarmClock(List alarmClockList) { - Log.e(TAG, "setAlarmClock: " + alarmClockList); - } - - @Override - public void setAlarmClockEmpty() { - Log.e(TAG, "setAlarmClock: "); - } - - @Override - public void onError() { - Log.e(TAG, "setAlarmClock: "); - } - }); - - } } diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainService.java b/app/src/main/java/com/xxpatx/os/service/main/MainService.java index 1962194..b8eccb7 100644 --- a/app/src/main/java/com/xxpatx/os/service/main/MainService.java +++ b/app/src/main/java/com/xxpatx/os/service/main/MainService.java @@ -65,8 +65,7 @@ import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -public class MainService extends BaseRxService - implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { +public class MainService extends BaseRxService implements MainSContact.MainSView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = "MainService"; private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); @@ -97,26 +96,46 @@ public class MainService extends BaseRxService } } - private uploadAlarmClockReceiver mUploadAlarmClockReceiver; + private OperateAlarmClockReceiver mOperateAlarmClockReceiver; - private void registerRefreshReceiver() { - if (mUploadAlarmClockReceiver == null) { - mUploadAlarmClockReceiver = new uploadAlarmClockReceiver(); + private void registerOperateAlarmClockReceiver() { + if (mOperateAlarmClockReceiver == null) { + mOperateAlarmClockReceiver = new OperateAlarmClockReceiver(); } IntentFilter filter = new IntentFilter(); - filter.addAction(uploadAlarmClockReceiver.UPLOAD_ALARM_RECEIVER_ACTION); - registerReceiver(mUploadAlarmClockReceiver, filter); + filter.addAction(ALARM_RECEIVER_ACTION_ADD); + filter.addAction(ALARM_RECEIVER_ACTION_EDIT); + filter.addAction(ALARM_RECEIVER_ACTION_UPDATE); + filter.addAction(ALARM_RECEIVER_ACTION_DELETE); + registerReceiver(mOperateAlarmClockReceiver, filter); } - public class uploadAlarmClockReceiver extends BroadcastReceiver { - public static final String UPLOAD_ALARM_RECEIVER_ACTION = "Receiver_Upload_AlarmClock_Action"; + public static final String ALARM_RECEIVER_ACTION_ADD = "Receiver_AlarmClock_Action_Add"; + public static final String ALARM_RECEIVER_ACTION_EDIT = "Receiver_AlarmClock_Action_Edit"; + public static final String ALARM_RECEIVER_ACTION_UPDATE = "Receiver_AlarmClock_Action_Update"; + public static final String ALARM_RECEIVER_ACTION_DELETE = "Receiver_AlarmClock_Action_Delete"; + + public class OperateAlarmClockReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - Log.e("uploadAlarmClockReceiver", "onReceive: " + action); - if (!TextUtils.isEmpty(action)) { - mPresenter.addAlarmClock(); + Log.e("OperateAlarmClockReceiver", "onReceive: " + action); + if (TextUtils.isEmpty(action)) return; + switch (action) { + case ALARM_RECEIVER_ACTION_ADD: + mPresenter.addAlarmClock(); + break; + case ALARM_RECEIVER_ACTION_EDIT: + mPresenter.editAlarmClock(); + break; + case ALARM_RECEIVER_ACTION_UPDATE: + mPresenter.updateAlarmClock(); + break; + case ALARM_RECEIVER_ACTION_DELETE: + mPresenter.deleteAlarmClock(); + break; + default: } } } @@ -149,7 +168,7 @@ public class MainService extends BaseRxService registerAlarmReceiver(); registerTimeReceiver(); registerLockScreenReceiver(); - registerRefreshReceiver(); + registerOperateAlarmClockReceiver(); registerScreenLockReceiver(); registerSmsReceiver(); } @@ -160,6 +179,31 @@ public class MainService extends BaseRxService return START_STICKY; } + @Override + public void setAlarmClock(List dataList) { + + } + + @Override + public void addAlarmClockFinish() { + mPresenter.deleteAlarmClock(); + } + + @Override + public void editAlarmClockFinish() { + + } + + @Override + public void updateAlarmClockFinish() { + + } + + @Override + public void deleteAlarmClockFinish() { + mPresenter.getAlarmClock(); + } + @Override public void onDestroy() { super.onDestroy(); @@ -174,8 +218,8 @@ public class MainService extends BaseRxService if (lockScreenReceiver != null) { unregisterReceiver(lockScreenReceiver); } - if (mUploadAlarmClockReceiver != null) { - unregisterReceiver(mUploadAlarmClockReceiver); + if (mOperateAlarmClockReceiver != null) { + unregisterReceiver(mOperateAlarmClockReceiver); } if (mWindowReceiver != null) { unregisterReceiver(mWindowReceiver); @@ -185,21 +229,6 @@ public class MainService extends BaseRxService } } - @Override - public void addAlarmClockFinish() { - mPresenter.deleteAlarmClock(); - } - - @Override - public void deleteAlarmClockFinish() { - mPresenter.getAlarmClock(); - } - - @Override - public void setAlarmClock(List dataList) { - - } - public boolean isScreenOn() { PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); // true为打开,false为关闭 diff --git a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java index 67ea71b..6eb2ca1 100644 --- a/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java +++ b/app/src/main/java/com/xxpatx/os/utils/ApkUtils.java @@ -23,6 +23,7 @@ import com.arialyy.aria.core.Aria; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.xxpatx.os.BuildConfig; +import com.xxpatx.os.R; import com.xxpatx.os.activity.quickapp.QuickAppActivity; import com.xxpatx.os.bean.AppInfo; import com.xxpatx.os.bean.DesktopIcon; @@ -508,9 +509,13 @@ public class ApkUtils { } public static Drawable getAppDrawable(Context context, String pkg) { - if (context == null || TextUtils.isEmpty(pkg)) { + if (context == null) { return null; } + Drawable appIcon = context.getDrawable(R.mipmap.ic_launcher); + if (TextUtils.isEmpty(pkg)) { + return appIcon; + } PackageManager packageManager = context.getPackageManager(); ApplicationInfo applicationInfo = null; try { @@ -521,7 +526,7 @@ public class ApkUtils { if (applicationInfo != null) { return applicationInfo.loadIcon(packageManager); } else { - return null; + return appIcon; } } diff --git a/app/src/main/res/drawable/app_select_background.xml b/app/src/main/res/drawable/app_select_background.xml index ddd205e..dc178ba 100644 --- a/app/src/main/res/drawable/app_select_background.xml +++ b/app/src/main/res/drawable/app_select_background.xml @@ -1,7 +1,12 @@ - + + + + android:left="8dp" + android:right="8dp" + android:top="8dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/app_unselect_background.xml b/app/src/main/res/drawable/app_unselect_background.xml new file mode 100644 index 0000000..b790f5f --- /dev/null +++ b/app/src/main/res/drawable/app_unselect_background.xml @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_edit.xml b/app/src/main/res/layout/activity_alarm_edit.xml index 028d11e..83cd1b2 100644 --- a/app/src/main/res/layout/activity_alarm_edit.xml +++ b/app/src/main/res/layout/activity_alarm_edit.xml @@ -111,70 +111,6 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 877d120..5ac5181 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -44,12 +44,34 @@ + + + + + + @@ -244,6 +248,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_dock_app_select.xml b/app/src/main/res/layout/item_dock_app_select.xml new file mode 100644 index 0000000..c1114e1 --- /dev/null +++ b/app/src/main/res/layout/item_dock_app_select.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file