Browse Source

feat: 🔧 project

master
niushuai233 1 year ago
parent
commit
83f232274a
  1. 7
      app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java
  2. 50
      app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java
  3. 58
      app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java
  4. 103
      app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java
  5. 45
      app/src/main/java/cc/niushuai/dididone/util/XLog.java
  6. 15
      app/src/main/res/layout/fragment_project.xml
  7. 30
      app/src/main/res/layout/project_grid_item.xml

7
app/src/main/java/cc/niushuai/dididone/biz/dao/ProjectDao.java

@ -26,9 +26,12 @@ public interface ProjectDao {
@Insert @Insert
Completable insertAll(Project... projects); Completable insertAll(Project... projects);
@Query("update t_project set deleted = 1 where id = :id")
void deleteById(Long id);
@Delete @Delete
void delete(Project project); void physicsDelete(Project project);
@Query("delete from t_project where id = :id") @Query("delete from t_project where id = :id")
void deleteById(Long id); void physicsDeleteById(Long id);
} }

50
app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectIcon.java

@ -0,0 +1,50 @@
package cc.niushuai.dididone.biz.vo;
import cc.niushuai.dididone.util.Snowflake;
public class ProjectIcon {
private Long id = Snowflake.next_id();
private String projectName;
private String icon;
private String color;
public ProjectIcon(Long id, String projectName, String icon, String color) {
this.id = id;
this.projectName = projectName;
this.icon = icon;
this.color = color;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}

58
app/src/main/java/cc/niushuai/dididone/ui/setting/project/GridViewAdapter4Project.java

@ -0,0 +1,58 @@
package cc.niushuai.dididone.ui.setting.project;
import android.content.Context;
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 com.mikepenz.iconics.IconicsDrawable;
import java.util.List;
import cc.niushuai.dididone.R;
import cc.niushuai.dididone.biz.vo.ProjectIcon;
public class GridViewAdapter4Project extends BaseAdapter {
private Context context;
protected List<ProjectIcon> projectIconList;
public GridViewAdapter4Project(Context context, List<ProjectIcon> projectIconList) {
this.context = context;
this.projectIconList = projectIconList;
}
@Override
public int getCount() {
return projectIconList.size();
}
@Override
public ProjectIcon getItem(int position) {
return projectIconList.get(position);
}
@Override
public long getItemId(int position) {
return getItem(position).getId();
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ProjectIcon iconData = projectIconList.get(position);
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.project_grid_item, parent, false);
}
ImageView icon = view.findViewById(R.id.grid_project_item_icon);
icon.setImageDrawable(new IconicsDrawable(context).icon(iconData.getIcon()).color(Integer.parseInt(iconData.getColor())).sizeDp(50));
TextView txt = view.findViewById(R.id.grid_project_item_txt);
txt.setText(iconData.getProjectName());
return view;
}
}

103
app/src/main/java/cc/niushuai/dididone/ui/setting/project/ProjectFragment.java

@ -1,20 +1,35 @@
package cc.niushuai.dididone.ui.setting.project; package cc.niushuai.dididone.ui.setting.project;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.ionicons_typeface_library.Ionicons;
import java.util.ArrayList;
import java.util.List;
import cc.niushuai.dididone.biz.roomx.DBManager;
import cc.niushuai.dididone.biz.vo.ProjectIcon;
import cc.niushuai.dididone.databinding.FragmentProjectBinding; import cc.niushuai.dididone.databinding.FragmentProjectBinding;
import cc.niushuai.dididone.ui.base.InitAndSetListener; import cc.niushuai.dididone.ui.base.InitAndSetListener;
import cc.niushuai.dididone.util.Toasts;
import cc.niushuai.dididone.util.XLog;
import cn.hutool.core.util.StrUtil;
public class ProjectFragment extends Fragment implements InitAndSetListener { public class ProjectFragment extends Fragment implements InitAndSetListener {
private FragmentProjectBinding binding; private FragmentProjectBinding binding;
private GridViewAdapter4Project gridViewAdapter4Project;
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -34,6 +49,25 @@ public class ProjectFragment extends Fragment implements InitAndSetListener {
@Override @Override
public void init() { public void init() {
initProjectGrid();
}
private void initProjectGrid() {
gridViewAdapter4Project = new GridViewAdapter4Project(getContext(), getDataList());
binding.gridProject.setAdapter(gridViewAdapter4Project);
}
private List<ProjectIcon> getDataList() {
ArrayList<ProjectIcon> list = new ArrayList<>();
// 最后一个要添加 + 符号
list.add(defaultAddProject());
return list;
}
private ProjectIcon defaultAddProject() {
return new ProjectIcon(0L, "添加", "faw_plus", String.valueOf(Color.BLACK));
} }
/** /**
@ -42,5 +76,74 @@ public class ProjectFragment extends Fragment implements InitAndSetListener {
@Override @Override
public void setListeners() { public void setListeners() {
// 添加点击事件
this.addGridItemClickListener();
}
private void addGridItemClickListener() {
binding.gridProject.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (id == 0) {
addProjectClick();
return;
}
// 其他的被点击
ProjectIcon item = gridViewAdapter4Project.getItem(position);
Toasts.shortShow(getContext(), item.getProjectName());
}
});
// 长按事件 用于删除
binding.gridProject.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (id == 0) {
// 添加被点击 跳过
return false;
}
ProjectIcon item = gridViewAdapter4Project.getItem(position);
AlertDialog alertDialog = new AlertDialog.Builder(getContext())
.setTitle(StrUtil.format("确定要删除 [{}]", item.getProjectName()))
.setIcon(new IconicsDrawable(getContext()).icon(Ionicons.Icon.ion_android_warning).color(Color.RED))
.setPositiveButton("确定", (dialog, which) -> {
// 删除
deleteProject(item);
// 更新视图
gridViewAdapter4Project.projectIconList.remove(position);
gridViewAdapter4Project.notifyDataSetChanged();
})
.setNegativeButton("取消", ((dialog, which) -> dialog.dismiss()))
.create();
alertDialog.show();
return true;
}
});
}
/**
* 删除该项内容
*
* @param item
*/
private void deleteProject(ProjectIcon item) {
// 删除
DBManager.INSTANCE.projectDao().deleteById(item.getId());
XLog.d("删除项{}, id: {}", item.getProjectName(), item.getId());
}
/**
* 添加 被点击
*/
private void addProjectClick() {
} }
} }

45
app/src/main/java/cc/niushuai/dididone/util/XLog.java

@ -0,0 +1,45 @@
package cc.niushuai.dididone.util;
import android.util.Log;
import cn.hutool.core.util.StrUtil;
public class XLog {
private static final String LOG_TAG = "DaringDone";
private XLog() {
}
private static void log(int priority, String message, Object... args) {
message = StrUtil.format(message, args);
if (args.length > 0 && args[args.length - 1] instanceof Throwable) {
Throwable throwable = (Throwable) args[args.length - 1];
String stacktraceStr = Log.getStackTraceString(throwable);
message += '\n' + stacktraceStr;
}
Log.println(priority, LOG_TAG, message);
}
public static void v(String message, Object... args) {
log(Log.VERBOSE, message, args);
}
public static void d(String message, Object... args) {
log(Log.DEBUG, message, args);
}
public static void i(String message, Object... args) {
log(Log.INFO, message, args);
}
public static void w(String message, Object... args) {
log(Log.WARN, message, args);
}
public static void e(String message, Object... args) {
log(Log.ERROR, message, args);
}
}

15
app/src/main/res/layout/fragment_project.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -9,12 +9,17 @@
android:padding="10dp" android:padding="10dp"
tools:context=".ui.setting.project.ProjectFragment"> tools:context=".ui.setting.project.ProjectFragment">
<TextView <GridView
android:id="@+id/grid_project"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
android:text="hello project" android:numColumns="3"
/> android:padding="5dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
></GridView>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

30
app/src/main/res/layout/project_grid_item.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<ImageView
android:id="@+id/grid_project_item_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="15dp"
android:layout_centerHorizontal="true"
android:src="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/grid_project_item_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/grid_project_item_icon"
android:layout_marginTop="15dp"
android:layout_marginBottom="10dp"
android:textAlignment="center"
android:text="文字区域"
android:textColor="#000000"
android:textSize="20dp"
/>
</RelativeLayout>
Loading…
Cancel
Save