Skip to content

Commit 1178b61

Browse files
authored
Merge pull request #8 from Text-Mining/add-legend-tags
Add legend tags fragment
2 parents 6258f7c + 1b7be62 commit 1178b61

File tree

12 files changed

+400
-14
lines changed

12 files changed

+400
-14
lines changed

.idea/checkstyle-idea.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package ir.textmining.app.model;
2+
3+
import android.graphics.Color;
4+
import android.view.View;
5+
6+
import androidx.annotation.NonNull;
7+
import androidx.appcompat.widget.AppCompatTextView;
8+
9+
import com.google.android.material.card.MaterialCardView;
10+
import com.google.gson.annotations.SerializedName;
11+
import com.mikepenz.fastadapter.FastAdapter;
12+
import com.mikepenz.fastadapter.items.AbstractItem;
13+
14+
import java.util.List;
15+
16+
import butterknife.BindView;
17+
import butterknife.ButterKnife;
18+
import ir.textmining.app.R;
19+
20+
public class TagsLegend extends AbstractItem<TagsLegend, TagsLegend.MyViewHolder> {
21+
22+
private Long id;
23+
24+
@SerializedName("PersianName")
25+
private String persianName;
26+
27+
@SerializedName("Description")
28+
private String description;
29+
30+
@SerializedName("Shortcut")
31+
private String shortcut;
32+
33+
@SerializedName("Color")
34+
private String color;
35+
36+
@SerializedName("Title")
37+
private String title;
38+
39+
public Long getId() {
40+
return id;
41+
}
42+
43+
public void setId(Long id) {
44+
this.id = id;
45+
}
46+
47+
public String getPersianName() {
48+
return persianName;
49+
}
50+
51+
public void setPersianName(String persianName) {
52+
this.persianName = persianName;
53+
}
54+
55+
public String getDescription() {
56+
return description;
57+
}
58+
59+
public void setDescription(String description) {
60+
this.description = description;
61+
}
62+
63+
public String getShortcut() {
64+
return shortcut;
65+
}
66+
67+
public void setShortcut(String shortcut) {
68+
this.shortcut = shortcut;
69+
}
70+
71+
public String getColor() {
72+
return color;
73+
}
74+
75+
public void setColor(String color) {
76+
this.color = color;
77+
}
78+
79+
public String getTitle() {
80+
return title;
81+
}
82+
83+
public void setTitle(String title) {
84+
this.title = title;
85+
}
86+
87+
@NonNull
88+
@Override
89+
public MyViewHolder getViewHolder(@NonNull View view) {
90+
return new MyViewHolder(view);
91+
}
92+
93+
@Override
94+
public int getType() {
95+
return R.id.fastadapter_item_adapter;
96+
}
97+
98+
@Override
99+
public int getLayoutRes() {
100+
return R.layout.item_tag_legend;
101+
}
102+
103+
104+
protected static class MyViewHolder extends FastAdapter.ViewHolder<TagsLegend> {
105+
View view;
106+
@BindView(R.id.title_text_view)
107+
AppCompatTextView titleTextView;
108+
@BindView(R.id.description_text_view)
109+
AppCompatTextView descriptionTextView;
110+
@BindView(R.id.card_view)
111+
MaterialCardView cardView;
112+
113+
MyViewHolder(View view) {
114+
super(view);
115+
ButterKnife.bind(this, view);
116+
this.view = view;
117+
}
118+
119+
@Override
120+
public void bindView(@NonNull TagsLegend item, @NonNull List<Object> payloads) {
121+
titleTextView.setText(String.format("%s", item.getPersianName()));
122+
cardView.setCardBackgroundColor(Color.parseColor(item.getColor()));
123+
descriptionTextView.setText(item.getDescription());
124+
if (item.getTitle().equals("O")) {
125+
titleTextView.setTextColor(Color.BLACK);
126+
descriptionTextView.setTextColor(Color.BLACK);
127+
} else {
128+
titleTextView.setTextColor(Color.WHITE);
129+
descriptionTextView.setTextColor(Color.WHITE);
130+
}
131+
}
132+
133+
@Override
134+
public void unbindView(@NonNull TagsLegend item) {
135+
titleTextView.setText(null);
136+
}
137+
138+
}
139+
}

app/src/main/java/ir/textmining/app/ui/activity/MainActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import ir.textmining.app.ui.fragment.AboutFragment;
4141
import ir.textmining.app.ui.fragment.SelectTagFragment;
4242
import ir.textmining.app.ui.fragment.SettingsFragment;
43+
import ir.textmining.app.ui.fragment.TagLegendFragment;
4344
import ir.textmining.app.util.AppUtil;
4445
import ir.textmining.app.util.Constant;
4546
import ir.textmining.app.util.MyApplication;
@@ -236,6 +237,11 @@ public void nextSentence() {
236237
getSentence();
237238
}
238239

240+
@OnClick(R.id.legend_button)
241+
public void showLegend() {
242+
AppUtil.showFragment(new TagLegendFragment(), getSupportFragmentManager());
243+
}
244+
239245
private void showSkeleton() {
240246
skeletonScreen = Skeleton.bind(chipGroup)
241247
.shimmer(true)
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package ir.textmining.app.ui.fragment;
2+
3+
import android.app.Dialog;
4+
import android.os.Bundle;
5+
import android.view.LayoutInflater;
6+
import android.view.View;
7+
import android.view.ViewGroup;
8+
import android.view.Window;
9+
import android.view.WindowManager;
10+
11+
import androidx.annotation.NonNull;
12+
import androidx.appcompat.widget.AppCompatTextView;
13+
import androidx.fragment.app.DialogFragment;
14+
import androidx.recyclerview.widget.DefaultItemAnimator;
15+
import androidx.recyclerview.widget.GridLayoutManager;
16+
import androidx.recyclerview.widget.RecyclerView;
17+
18+
import com.mikepenz.fastadapter.FastAdapter;
19+
import com.mikepenz.fastadapter.adapters.ItemAdapter;
20+
21+
import java.util.List;
22+
23+
import butterknife.BindView;
24+
import butterknife.ButterKnife;
25+
import butterknife.OnClick;
26+
import io.objectbox.Box;
27+
import io.objectbox.BoxStore;
28+
import ir.textmining.app.R;
29+
import ir.textmining.app.model.NerStandardTagsItem;
30+
import ir.textmining.app.model.TagsLegend;
31+
import ir.textmining.app.util.AppUtil;
32+
import ir.textmining.app.util.MyApplication;
33+
34+
public class TagLegendFragment extends DialogFragment {
35+
@BindView(R.id.title)
36+
AppCompatTextView title;
37+
@BindView(R.id.recyclerView)
38+
RecyclerView recyclerView;
39+
private Box<NerStandardTagsItem> tagsItemBox;
40+
private FastAdapter<TagsLegend> mFastAdapter;
41+
private ItemAdapter<TagsLegend> mItemAdapter;
42+
43+
44+
@Override
45+
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
46+
Bundle savedInstanceState) {
47+
View view = inflater.inflate(R.layout.fragment_tag_legend,
48+
container, false);
49+
ButterKnife.bind(this, view);
50+
initVariables();
51+
setUpRecyclerView();
52+
handleTagItems();
53+
return view;
54+
}
55+
56+
private void initVariables() {
57+
BoxStore boxStore = MyApplication.getBoxStore();
58+
tagsItemBox = boxStore.boxFor(NerStandardTagsItem.class);
59+
}
60+
61+
private void setUpRecyclerView() {
62+
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 1);
63+
recyclerView.setLayoutManager(mLayoutManager);
64+
recyclerView.setItemAnimator(new DefaultItemAnimator());
65+
mItemAdapter = new ItemAdapter<>();
66+
mFastAdapter = FastAdapter.with(mItemAdapter);
67+
recyclerView.setAdapter(mFastAdapter);
68+
}
69+
70+
private void handleTagItems() {
71+
List<NerStandardTagsItem> tagsItems = tagsItemBox.getAll();
72+
mItemAdapter.clear();
73+
mItemAdapter.add(AppUtil.convertToTagsLegend(tagsItems));
74+
}
75+
76+
@NonNull
77+
@Override
78+
public Dialog onCreateDialog(Bundle savedInstanceState) {
79+
Dialog dialog = super.onCreateDialog(savedInstanceState);
80+
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
81+
dialog.setCancelable(true);
82+
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
83+
lp.copyFrom(dialog.getWindow().getAttributes());
84+
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
85+
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
86+
dialog.getWindow().setAttributes(lp);
87+
return dialog;
88+
}
89+
90+
@OnClick(R.id.close_button)
91+
void close() {
92+
dismiss();
93+
if (getFragmentManager() != null) {
94+
getFragmentManager().popBackStack();
95+
}
96+
}
97+
}

app/src/main/java/ir/textmining/app/util/AppUtil.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515

1616
import com.blankj.utilcode.util.SnackbarUtils;
1717

18+
import java.util.ArrayList;
19+
import java.util.List;
20+
1821
import io.objectbox.Box;
1922
import ir.textmining.app.R;
2023
import ir.textmining.app.model.AuthInfo;
2124
import ir.textmining.app.model.NerStandardTagsItem;
2225
import ir.textmining.app.model.NerStandardTagsItem_;
26+
import ir.textmining.app.model.TagsLegend;
2327

2428
public class AppUtil {
2529

@@ -83,4 +87,19 @@ public void onClick(View v) {
8387
}
8488
}, 100);
8589
}
90+
91+
public static List<TagsLegend> convertToTagsLegend(List<NerStandardTagsItem> tagsItems) {
92+
List<TagsLegend> tagsLegends = new ArrayList<>();
93+
for (NerStandardTagsItem item : tagsItems) {
94+
TagsLegend tagsLegend = new TagsLegend();
95+
tagsLegend.setColor(item.getColor());
96+
tagsLegend.setDescription(item.getDescription());
97+
tagsLegend.setId(item.getId());
98+
tagsLegend.setPersianName(item.getPersianName());
99+
tagsLegend.setShortcut(item.getShortcut());
100+
tagsLegend.setTitle(item.getTitle());
101+
tagsLegends.add(tagsLegend);
102+
}
103+
return tagsLegends;
104+
}
86105
}

app/src/main/res/layout/content_main.xml

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@
1717
android:orientation="horizontal"
1818
android:padding="@dimen/spacing_large">
1919

20-
<androidx.appcompat.widget.AppCompatTextView
21-
android:layout_width="0dp"
22-
android:layout_height="wrap_content"
23-
android:layout_weight="1"
24-
android:text="@string/sentence_label"
25-
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
26-
android:textStyle="bold|italic" />
27-
2820
<com.google.android.material.button.MaterialButton
2921
android:id="@+id/next_sentence_button"
3022
style="@style/Widget.MaterialComponents.Button"
@@ -36,6 +28,21 @@
3628
app:cornerRadius="6dp"
3729
app:icon="@drawable/ic_navigate_next_black_24dp"
3830
app:iconTint="@android:color/white" />
31+
32+
<View
33+
android:layout_width="@dimen/spacing_large"
34+
android:layout_height="0dp" />
35+
36+
<com.google.android.material.button.MaterialButton
37+
android:id="@+id/legend_button"
38+
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
39+
android:layout_width="wrap_content"
40+
android:layout_height="wrap_content"
41+
android:layoutDirection="locale"
42+
android:text="@string/legend_label"
43+
android:textAllCaps="false"
44+
app:cornerRadius="6dp"
45+
app:icon="@drawable/ic_info_outline_black_24dp" />
3946
</LinearLayout>
4047

4148
<View
@@ -45,6 +52,15 @@
4552
android:layout_marginEnd="@dimen/spacing_xlarge"
4653
android:background="@color/grey_10" />
4754

55+
<androidx.appcompat.widget.AppCompatTextView
56+
android:layout_width="wrap_content"
57+
android:layout_height="wrap_content"
58+
android:paddingStart="@dimen/spacing_large"
59+
android:paddingEnd="@dimen/spacing_large"
60+
android:text="@string/sentence_label"
61+
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
62+
android:textStyle="bold|italic" />
63+
4864
<androidx.core.widget.NestedScrollView
4965
android:layout_width="match_parent"
5066
android:layout_height="match_parent"

0 commit comments

Comments
 (0)