Skip to content

Commit 972b9f6

Browse files
committed
more settings screen
1 parent 6999f1d commit 972b9f6

12 files changed

Lines changed: 159 additions & 187 deletions

File tree

app/src/main/assets/instruction.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
- Tap on item to remove
22
- Long tap on item to add an item in front of it
3-
- Generated items are random length of number, the length is appended at end
3+
- String in brackets: (line count: character count per line,:total character count)

app/src/main/java/com/xiaofeng/androidlibs/DemoAdapter.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,30 @@
55
import android.view.View;
66
import android.view.ViewGroup;
77

8-
import java.util.ArrayList;
8+
import java.util.LinkedList;
99
import java.util.List;
1010

1111
/**
1212
* Adapter for Demo item
1313
*/
1414
public class DemoAdapter extends RecyclerView.Adapter<DemoViewHolder> {
1515
List<String> items;
16+
private int maxLinesPerItem;
17+
private boolean showMeta = false;
18+
public DemoAdapter() {
19+
this.items = new LinkedList<>();
20+
maxLinesPerItem = 1;
21+
}
1622

17-
public DemoAdapter(List<String> items) {
18-
this.items = new ArrayList<>(items.size());
23+
public DemoAdapter(int maxLinesPerItem, List<String> items) {
24+
this();
1925
this.items.addAll(items);
26+
this.maxLinesPerItem = maxLinesPerItem;
2027
}
2128

2229
@Override
2330
public DemoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
24-
return new DemoViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_tag, parent, false));
31+
return new DemoViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_tag, parent, false)).setShowMeta(showMeta);
2532
}
2633

2734
@Override
@@ -41,7 +48,7 @@ public void onClick(View v) {
4148
@Override
4249
public boolean onLongClick(View v) {
4350
int adapterPosition = holder.getAdapterPosition();
44-
List<String> newItems = DemoUtil.generate(1, 3, 14, 1, true);
51+
List<String> newItems = DemoUtil.generate(1, 3, 14, maxLinesPerItem, true);
4552
items.addAll(adapterPosition, newItems);
4653
notifyItemRangeInserted(adapterPosition, newItems.size());
4754
return true;
@@ -53,4 +60,18 @@ public boolean onLongClick(View v) {
5360
public int getItemCount() {
5461
return items.size();
5562
}
63+
64+
public void newItems(int maxLinesPerItem, List<String> newItems) {
65+
this.maxLinesPerItem = maxLinesPerItem;
66+
items.clear();
67+
items.addAll(newItems);
68+
}
69+
70+
public int getMaxLinesPerItem() {
71+
return maxLinesPerItem;
72+
}
73+
74+
public void setShowMeta(boolean showMeta) {
75+
this.showMeta = showMeta;
76+
}
5677
}

app/src/main/java/com/xiaofeng/androidlibs/DemoUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
public class DemoUtil {
1111
private static final Random random = new Random();
1212
private static final String STRING_BASE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
13-
public static List<String> generate(int total, int minLen, int maxLen, int maxLines, boolean randomOrder) {
13+
public static List<String> generate(int total, int minLen, int maxLen, int maxLinesPerItem, boolean randomOrder) {
1414
ArrayList<String> result = new ArrayList<>(total);
1515
StringBuilder sb = new StringBuilder();
1616
for (int i = 0; i < total; i ++) {
1717
sb.setLength(0);
18-
int lineCount = random.nextInt(maxLines) + 1;
18+
int lineCount = random.nextInt(maxLinesPerItem) + 1;
1919
List<String> lines = generate(lineCount, minLen, maxLen, randomOrder);
2020
boolean firstLine = true;
2121
for (String line : lines) {

app/src/main/java/com/xiaofeng/androidlibs/DemoViewHolder.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
import android.view.View;
55
import android.widget.TextView;
66

7-
/**
8-
* Created by xiaofeng on 1/5/16.
9-
*/
107
public class DemoViewHolder extends RecyclerView.ViewHolder {
8+
boolean showMeta = false;
119
TextView tagText, tagSize;
1210
public DemoViewHolder(View itemView) {
1311
super(itemView);
@@ -17,6 +15,33 @@ public DemoViewHolder(View itemView) {
1715

1816
public void setTagText(String tag) {
1917
tagText.setText(tag);
20-
tagSize.setText("(" + tag.length() + ")");
18+
if (showMeta) {
19+
String[] lines = tag.split("\n");
20+
StringBuilder sb = new StringBuilder();
21+
sb.append("(").append(lines.length).append(":");
22+
int length = 0;
23+
boolean first = true;
24+
for (String line : lines) {
25+
if (first) {
26+
first = false;
27+
} else {
28+
sb.append(",");
29+
}
30+
sb.append(line.length());
31+
length += line.length();
32+
}
33+
sb.append(":").append(length).append(")");
34+
tagSize.setText(sb.toString());
35+
}
36+
}
37+
38+
public DemoViewHolder setShowMeta(boolean showMeta) {
39+
this.showMeta = showMeta;
40+
if (showMeta) {
41+
tagSize.setVisibility(View.VISIBLE);
42+
} else {
43+
tagSize.setVisibility(View.GONE);
44+
}
45+
return this;
2146
}
2247
}

app/src/main/java/com/xiaofeng/androidlibs/GeneralPreferenceFragment.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.os.Bundle;
5+
import android.preference.EditTextPreference;
56
import android.preference.ListPreference;
67
import android.preference.Preference;
78
import android.preference.PreferenceFragment;
@@ -28,16 +29,20 @@ public SummaryMapInfo(String summaryTemplate, String[] values, String[] entries)
2829
this.entries = entries;
2930
}
3031
}
31-
private final Map<String, SummaryMapInfo> keySummaryInfoMap = new HashMap<String, SummaryMapInfo>();
32+
private final Map<String, SummaryMapInfo> keySummaryInfoMap = new HashMap<>();
3233

3334
private Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
3435
@Override
3536
public boolean onPreferenceChange(Preference preference, Object value) {
36-
if (preference instanceof ListPreference && keySummaryInfoMap.containsKey(preference.getKey())) {
37+
if (keySummaryInfoMap.containsKey(preference.getKey())) {
3738
SummaryMapInfo summaryMapInfo = keySummaryInfoMap.get(preference.getKey());
38-
int index = ArrayUtil.indexOf(summaryMapInfo.values, value.toString());
39-
if (index != ArrayUtil.NOT_FOUND) {
40-
preference.setSummary(String.format(summaryMapInfo.summaryTemplate, summaryMapInfo.entries[index]));
39+
if (preference instanceof ListPreference) {
40+
int index = ArrayUtil.indexOf(summaryMapInfo.values, value.toString());
41+
if (index != ArrayUtil.NOT_FOUND) {
42+
preference.setSummary(String.format(summaryMapInfo.summaryTemplate, summaryMapInfo.entries[index]));
43+
}
44+
} else if (preference instanceof EditTextPreference) {
45+
preference.setSummary(String.format(summaryMapInfo.summaryTemplate, value));
4146
}
4247
}
4348
return true;
@@ -53,15 +58,17 @@ public void onCreate(Bundle savedInstanceState) {
5358
@Override
5459
public void onAttach(Context context) {
5560
super.onAttach(context);
56-
keySummaryInfoMap.put(getString(R.string.pref_key_items_per_line), new SummaryMapInfo(getString(R.string.pref_summary_items_per_line_template), getResources().getStringArray(R.array.pref_items_per_line_values), getResources().getStringArray(R.array.pref_items_per_line_entries)));
61+
keySummaryInfoMap.put(getString(R.string.pref_key_max_items_per_line), new SummaryMapInfo(getString(R.string.pref_max_items_per_line_summary_template), getResources().getStringArray(R.array.pref_max_items_per_line_values), getResources().getStringArray(R.array.pref_max_items_per_line_entries)));
5762
keySummaryInfoMap.put(getString(R.string.pref_key_alignment), new SummaryMapInfo(getString(R.string.pref_alignment_summary_template), getResources().getStringArray(R.array.pref_alignment_values), getResources().getStringArray(R.array.pref_alignment_entries)));
63+
keySummaryInfoMap.put(getString(R.string.pref_key_max_lines_per_item), new SummaryMapInfo(getString(R.string.pref_max_lines_per_item_summary_template), null, null));
5864
}
5965

6066
@Override
6167
public void onActivityCreated(Bundle savedInstanceState) {
6268
super.onActivityCreated(savedInstanceState);
6369
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_key_alignment)));
64-
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_key_items_per_line)));
70+
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_key_max_items_per_line)));
71+
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_key_max_lines_per_item)));
6572
}
6673

6774
/**
Lines changed: 48 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package com.xiaofeng.androidlibs;
22

33
import android.content.Intent;
4+
import android.content.SharedPreferences;
45
import android.graphics.Rect;
56
import android.os.Bundle;
7+
import android.os.Handler;
8+
import android.os.Looper;
9+
import android.preference.PreferenceManager;
610
import android.support.v7.app.AppCompatActivity;
711
import android.support.v7.widget.RecyclerView;
812
import android.support.v7.widget.Toolbar;
913
import android.view.Menu;
1014
import android.view.MenuItem;
1115
import android.view.View;
12-
import android.widget.AdapterView;
13-
import android.widget.ArrayAdapter;
14-
import android.widget.Spinner;
1516

1617
import com.xiaofeng.flowlayoutmanager.Alignment;
1718
import com.xiaofeng.flowlayoutmanager.FlowLayoutManager;
@@ -21,10 +22,9 @@
2122
public class MainActivity extends AppCompatActivity {
2223

2324
RecyclerView recyclerView;
24-
Spinner itemPerLineSpinner, alignmentSpinner;
25-
ArrayAdapter<CharSequence> itemsPerLineAdapter, alignmentAdapter;
2625
FlowLayoutManager flowLayoutManager;
2726
MarkdownView markdownView;
27+
private static final int REQ_CODE_SETTINGS = 101;
2828
@Override
2929
protected void onCreate(Bundle savedInstanceState) {
3030
super.onCreate(savedInstanceState);
@@ -35,42 +35,11 @@ protected void onCreate(Bundle savedInstanceState) {
3535
}
3636

3737
private void init() {
38-
itemPerLineSpinner = (Spinner)findViewById(R.id.spinner_items_per_line);
39-
itemsPerLineAdapter = ArrayAdapter.createFromResource(this, R.array.item_per_line_options, android.R.layout.simple_spinner_dropdown_item);
40-
itemPerLineSpinner.setAdapter(itemsPerLineAdapter);
41-
itemPerLineSpinner.setSelection(itemsPerLineAdapter.getPosition(getText(R.string.line_option_no)));
42-
itemPerLineSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
43-
@Override
44-
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
45-
updateListBySpinners();
46-
47-
}
48-
49-
@Override
50-
public void onNothingSelected(AdapterView<?> parent) {
51-
52-
}
53-
});
54-
55-
alignmentSpinner = (Spinner)findViewById(R.id.spinner_alignment);
56-
alignmentAdapter = ArrayAdapter.createFromResource(this, R.array.alignment_options, android.R.layout.simple_spinner_dropdown_item);
57-
alignmentSpinner.setAdapter(alignmentAdapter);
58-
alignmentSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
59-
@Override
60-
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
61-
updateListBySpinners();
62-
}
63-
64-
@Override
65-
public void onNothingSelected(AdapterView<?> parent) {
66-
67-
}
68-
});
6938
recyclerView = (RecyclerView) findViewById(R.id.list);
7039
flowLayoutManager = new FlowLayoutManager().singleItemPerLine();
7140
flowLayoutManager.setAutoMeasureEnabled(true);
7241
recyclerView.setLayoutManager(flowLayoutManager);
73-
recyclerView.setAdapter(new DemoAdapter(DemoUtil.generate(2000, 3, 13, 1, false)));
42+
recyclerView.setAdapter(new DemoAdapter(1, DemoUtil.generate(2000, 3, 13, 1, false)));
7443
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
7544
@Override
7645
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
@@ -81,27 +50,7 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
8150

8251
markdownView = (MarkdownView)findViewById(R.id.instruction_mdown);
8352
markdownView.loadMarkdownFile("file:///android_asset/instruction.md");
84-
}
85-
86-
private void updateListBySpinners() {
87-
CharSequence itemsPerLine = itemsPerLineAdapter.getItem(itemPerLineSpinner.getSelectedItemPosition());
88-
CharSequence alignment = alignmentAdapter.getItem(alignmentSpinner.getSelectedItemPosition());
89-
if (itemsPerLine.equals(getText(R.string.line_option_one))) {
90-
flowLayoutManager.maxItemsPerLine(1);
91-
} else if (itemsPerLine.equals(getText(R.string.line_option_two))) {
92-
flowLayoutManager.maxItemsPerLine(2);
93-
} else if (itemsPerLine.equals(getText(R.string.line_option_three))) {
94-
flowLayoutManager.maxItemsPerLine(3);
95-
} else if (itemsPerLine.equals(getText(R.string.line_option_no))) {
96-
flowLayoutManager.removeItemPerLineLimit();
97-
}
98-
99-
if (alignment.equals(getText(R.string.alignment_left))) {
100-
flowLayoutManager.setAlignment(Alignment.LEFT);
101-
} else if (alignment.equals(getText(R.string.alignment_right))) {
102-
flowLayoutManager.setAlignment(Alignment.RIGHT);
103-
}
104-
recyclerView.getAdapter().notifyItemRangeChanged(0, recyclerView.getAdapter().getItemCount());
53+
loadSettingsFromSharedPref();
10554
}
10655

10756
@Override
@@ -113,9 +62,49 @@ public boolean onCreateOptionsMenu(Menu menu) {
11362
@Override
11463
public boolean onOptionsItemSelected(MenuItem item) {
11564
if (item.getItemId() == R.id.action_settings) {
116-
startActivity(new Intent(this, SettingsActivity.class));
65+
startActivityForResult(new Intent(this, SettingsActivity.class), REQ_CODE_SETTINGS);
11766
return true;
11867
}
11968
return super.onOptionsItemSelected(item);
12069
}
70+
71+
private void loadSettingsFromSharedPref() {
72+
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
73+
String itemsPerLineString = sharedPreferences.getString(getResources().getString(R.string.pref_key_max_items_per_line), getString(R.string.pref_max_items_per_line_default));
74+
int itemsPerLine = Integer.valueOf(itemsPerLineString);
75+
76+
String alignmentString = sharedPreferences.getString(getResources().getString(R.string.pref_key_alignment), getString(R.string.pref_alignment_default));
77+
int alignmentInt = Integer.valueOf(alignmentString);
78+
Alignment[] alignments = Alignment.values();
79+
Alignment selectedAlignment = Alignment.LEFT;
80+
for (Alignment alignment : alignments) {
81+
if (alignment.ordinal() == alignmentInt) {
82+
selectedAlignment = alignment;
83+
break;
84+
}
85+
}
86+
// boolean showMeta = sharedPreferences.getBoolean(getString(R.string.pref_key_show_meta), false);
87+
88+
flowLayoutManager.maxItemsPerLine(itemsPerLine);
89+
flowLayoutManager.setAlignment(selectedAlignment);
90+
DemoAdapter demoAdapter = (DemoAdapter)recyclerView.getAdapter();
91+
// demoAdapter.setShowMeta(showMeta);
92+
String maxLinesPerItemString = sharedPreferences.getString(getString(R.string.pref_key_max_lines_per_item), getString(R.string.pref_max_lines_per_item_default));
93+
int maxLinesPerItem = Integer.valueOf(maxLinesPerItemString);
94+
demoAdapter.newItems(maxLinesPerItem, DemoUtil.generate(demoAdapter.getItemCount(), 3, 13, maxLinesPerItem, false));
95+
recyclerView.getAdapter().notifyItemRangeChanged(0, recyclerView.getAdapter().getItemCount());
96+
}
97+
98+
@Override
99+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
100+
super.onActivityResult(requestCode, resultCode, data);
101+
if (requestCode == REQ_CODE_SETTINGS) {
102+
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
103+
@Override
104+
public void run() {
105+
loadSettingsFromSharedPref();
106+
}
107+
}, 1000);
108+
}
109+
}
121110
}

0 commit comments

Comments
 (0)