Skip to content

Commit 92289ac

Browse files
author
David Graeff
committed
Add poll to buy fragment. Improve navigation drawer. fix crash while creating a group for a device.
1 parent 2d03df3 commit 92289ac

23 files changed

+459
-180
lines changed

app/app.iml

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
<orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" />
101101
<orderEntry type="sourceFolder" forTests="false" />
102102
<orderEntry type="library" exported="" name="appcompat-v7-22.0.0" level="project" />
103+
<orderEntry type="library" exported="" name="gson-2.3.1" level="project" />
103104
<orderEntry type="library" exported="" name="recyclerview-v7-22.2.0" level="project" />
104105
<orderEntry type="library" exported="" name="recyclerview-animators-1.2.0" level="project" />
105106
<orderEntry type="library" exported="" name="material-1.1.0" level="project" />

app/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ android {
1616
defaultConfig {
1717
minSdkVersion 17
1818
targetSdkVersion 22
19-
versionCode 125
20-
versionName "8.5"
19+
versionCode 126
20+
versionName "8.6"
2121
applicationId appID
2222
testApplicationId "oly.netpowerctrl.tests"
2323
testInstrumentationRunner "android.test.InstrumentationTestRunner"
@@ -102,6 +102,7 @@ dependencies {
102102
exclude group: 'com.google.android'
103103
exclude group: 'com.android.support'
104104
}
105+
compile 'com.google.code.gson:gson:2.3.1'
105106
compile('com.wefika:flowlayout:0.3.4') {
106107
exclude group: 'com.google.android'
107108
exclude group: 'com.android.support'

app/src/main/java/oly/netpowerctrl/data/AutomaticSetup.java

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.os.Message;
66
import android.support.annotation.NonNull;
77
import android.support.annotation.Nullable;
8+
import android.util.Log;
89
import android.view.View;
910
import android.widget.Button;
1011
import android.widget.TextView;
@@ -189,6 +190,10 @@ public boolean updated(@NonNull CredentialsCollection o, @Nullable Credentials o
189190
}
190191

191192
private void updateStatusTextWithUnconfiguredNumber() {
193+
if (find_device_status == null) {
194+
Log.e("AutomaticSetup", "Binding to textfield lost");
195+
return;
196+
}
192197
int n = dataService != null ? dataService.credentials.countNotConfigured() : 0;
193198
if (n == 0) {
194199
find_device_status.setText(App.getAppString(R.string.automatic_not_found_unconfigured_devices));

app/src/main/java/oly/netpowerctrl/executables/Executable.java

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class Executable implements Comparable, IOInterface {
3434
public int max_value = 0;
3535
public int current_value = 0;
3636
// The device this port belongs to.
37+
@Nullable
3738
public String deviceUID;
3839
// Type of this executable
3940
public ExecutableType ui_type = ExecutableType.TypeUnknown;
@@ -316,6 +317,7 @@ public ReachabilityStates reachableState() {
316317

317318
public void addToGroup(String groupUID) {
318319
group_uids.add(groupUID);
320+
setHasChanged();
319321
}
320322

321323
public boolean needCredentials() {

app/src/main/java/oly/netpowerctrl/executables/ExecutableCollection.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public void remove(Executable executable) {
106106
public void remove(Credentials credentials) {
107107
for (Iterator<Executable> iterator = items.values().iterator(); iterator.hasNext(); ) {
108108
Executable executable = iterator.next();
109-
if (executable.deviceUID.equals(credentials.deviceUID)) {
109+
if (executable.needCredentials() && executable.deviceUID.equals(credentials.deviceUID)) {
110110
iterator.remove();
111111
storage.remove(executable);
112112
dataService.favourites.setFavourite(executable.getUid(), false);
@@ -171,7 +171,8 @@ public List<Executable> filterExecutables(PredicateExecutable p) {
171171
public List<Executable> filterExecutables(Credentials credentials) {
172172
List<Executable> list = new ArrayList<>();
173173
for (Executable executable : items.values()) {
174-
if (executable.deviceUID.equals(credentials.deviceUID)) list.add(executable);
174+
if (executable.needCredentials() && executable.deviceUID.equals(credentials.deviceUID))
175+
list.add(executable);
175176
}
176177

177178
return list;

app/src/main/java/oly/netpowerctrl/groups/GroupAdapter.java

+33-32
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import android.view.LayoutInflater;
66
import android.view.View;
77
import android.view.ViewGroup;
8-
import android.widget.TextView;
8+
9+
import com.rey.material.widget.Button;
910

1011
import java.util.ArrayList;
1112
import java.util.List;
@@ -23,14 +24,11 @@
2324
*/
2425
public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.ViewHolder> implements onCollectionUpdated<GroupCollection, Group>, onServiceReady {
2526
private final boolean showAllEntry;
27+
protected EmptyListener emptyListener;
2628
private GroupCollection groupCollection;
2729
private int selectedItemPosition = -1;
2830
private int lastSelectedItemPosition = -1;
2931
private List<Group> items = new ArrayList<>();
30-
private EmptyListener emptyListener = new EmptyListener() {
31-
public void onEmptyListener(boolean empty) {
32-
}
33-
};
3432

3533
public GroupAdapter(boolean showAllEntry, EmptyListener emptyListener) {
3634
this.emptyListener = emptyListener;
@@ -63,12 +61,12 @@ public void onBindViewHolder(ViewHolder viewHolder, int position) {
6361
viewHolder.textView.setText(items.get(position).name);
6462

6563
if (lastSelectedItemPosition == position) {
66-
viewHolder.layout_item.setActivated(false);
64+
viewHolder.textView.setPressed(false);
6765
lastSelectedItemPosition = -1;
6866
}
6967

7068
if (selectedItemPosition == position) {
71-
viewHolder.layout_item.setActivated(true);
69+
viewHolder.textView.setPressed(true);
7270
}
7371
}
7472

@@ -84,41 +82,42 @@ public void onDestroy() {
8482

8583
private void resetItems() {
8684
items.clear();
87-
if (groupCollection.getItems().size() > 0) {
88-
if (showAllEntry)
89-
items.add(new Group("", App.getAppString(R.string.groups_all)));
90-
for (Group group : groupCollection.getItems().values()) {
91-
items.add(group);
92-
}
85+
if (showAllEntry)
86+
items.add(new Group("", App.getAppString(R.string.groups_all)));
87+
for (Group group : groupCollection.getItems().values()) {
88+
items.add(group);
9389
}
9490
notifyDataSetChanged();
9591
emptyListener.onEmptyListener(items.isEmpty());
9692
}
9793

94+
protected void _notifyItemInserted(int pos) {
95+
notifyItemInserted(pos);
96+
}
97+
98+
protected void _notifyItemRemoved(int pos) {
99+
notifyItemRemoved(pos);
100+
}
101+
102+
protected void _notifyItemChanged(int pos) {
103+
notifyItemChanged(pos);
104+
}
105+
98106
@Override
99107
public boolean updated(@NonNull GroupCollection groupCollection, Group group, @NonNull ObserverUpdateActions action) {
100108
switch (action) {
101109
case AddAction:
102110
boolean empty = items.isEmpty();
103-
if (showAllEntry && items.size() == 0) { // Add "show all" if nothing inside so far
104-
items.add(new Group("", App.getAppString(R.string.groups_all)));
105-
notifyItemInserted(0);
106-
}
107111
items.add(group);
108-
notifyItemInserted(items.size() - 1);
112+
_notifyItemInserted(items.size() - 1);
109113
if (empty)
110114
emptyListener.onEmptyListener(false);
111115
break;
112116
case RemoveAction:
113117
for (int i = 0; i < items.size(); ++i)
114118
if (items.get(i).getUid().equals(group.getUid())) {
115119
items.remove(i);
116-
notifyItemRemoved(i);
117-
if (showAllEntry && items.size() == 1) { // remove "show all"
118-
items.remove(0);
119-
notifyItemRemoved(0);
120-
emptyListener.onEmptyListener(true);
121-
}
120+
_notifyItemRemoved(i);
122121
break;
123122
}
124123
break;
@@ -129,7 +128,7 @@ public boolean updated(@NonNull GroupCollection groupCollection, Group group, @N
129128
case UpdateAction:
130129
for (int i = 0; i < items.size(); ++i)
131130
if (items.get(i).getUid().equals(group.getUid())) {
132-
notifyItemChanged(i);
131+
_notifyItemChanged(i);
133132
break;
134133
}
135134
}
@@ -152,7 +151,7 @@ public void onServiceFinished(DataService service) {
152151
public void setSelectedItem(String groupUID) {
153152
lastSelectedItemPosition = selectedItemPosition;
154153
if (lastSelectedItemPosition != -1)
155-
notifyItemChanged(lastSelectedItemPosition);
154+
_notifyItemChanged(lastSelectedItemPosition);
156155

157156
int pos = 0;
158157
for (int i = 0; i < items.size(); ++i)
@@ -163,17 +162,19 @@ public void setSelectedItem(String groupUID) {
163162

164163
selectedItemPosition = pos;
165164
if (pos == -1) return;
166-
notifyItemChanged(pos);
165+
_notifyItemChanged(pos);
167166
}
168167

169-
static class ViewHolder extends RecyclerView.ViewHolder {
170-
TextView textView;
171-
View layout_item;
168+
protected static class ViewHolder extends RecyclerView.ViewHolder {
169+
//TextView textView;
170+
//View layout_item;
171+
public Button textView;
172172

173173
public ViewHolder(View itemView) {
174174
super(itemView);
175-
layout_item = itemView.findViewById(R.id.list_item);
176-
textView = (TextView) itemView.findViewById(R.id.title);
175+
//layout_item = itemView.findViewById(R.id.list_item);
176+
//textView = (TextView) itemView.findViewById(R.id.title);
177+
textView = (Button) itemView.findViewById(R.id.title);
177178
}
178179
}
179180
}

app/src/main/java/oly/netpowerctrl/groups/GroupListFragment.java

+29-49
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import oly.netpowerctrl.main.BuyFragment;
1919
import oly.netpowerctrl.main.FeedbackFragment;
2020
import oly.netpowerctrl.main.MainActivity;
21+
import oly.netpowerctrl.main.NavigationAdapter;
2122
import oly.netpowerctrl.preferences.PreferencesFragment;
2223
import oly.netpowerctrl.preferences.SharedPrefs;
23-
import oly.netpowerctrl.ui.EmptyListener;
2424
import oly.netpowerctrl.ui.FragmentUtils;
2525
import oly.netpowerctrl.ui.LineDividerDecoration;
2626
import oly.netpowerctrl.ui.RecyclerItemClickListener;
@@ -30,10 +30,9 @@
3030
/**
3131
* Try to setup all found devices, The dialog shows a short log about the actions.
3232
*/
33-
public class GroupListFragment extends Fragment implements onServiceReady, EmptyListener {
33+
public class GroupListFragment extends Fragment implements onServiceReady {
3434
private DataService dataService = null;
35-
private GroupAdapter groupAdapter = new GroupAdapter(true, this);
36-
private View group_help;
35+
private NavigationAdapter groupAdapter = new NavigationAdapter();
3736

3837
public GroupListFragment() {
3938
}
@@ -60,14 +59,37 @@ public void onServiceFinished(DataService service) {
6059
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
6160
View root = inflater.inflate(R.layout.fragment_group_list, container, false);
6261

63-
group_help = root.findViewById(R.id.group_help);
64-
6562
RecyclerView group_list = (RecyclerView) root.findViewById(R.id.group_list);
6663
group_list.setItemAnimator(new DefaultItemAnimator());
6764
group_list.setLayoutManager(new LinearLayoutManager(getActivity()));
6865
group_list.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
6966
@Override
7067
public boolean onItemClick(View view, int position, boolean isLongClick) {
68+
switch (position) {
69+
case 0: {
70+
FragmentUtils.changeToFragment(getActivity(), IOConnectionsFragment.class.getName());
71+
((MainActivity) getActivity()).closeGroupMenu();
72+
return true;
73+
}
74+
case 1: {
75+
FragmentUtils.changeToFragment(getActivity(), PreferencesFragment.class.getName());
76+
((MainActivity) getActivity()).closeGroupMenu();
77+
return true;
78+
}
79+
case 2: {
80+
FragmentUtils.changeToFragment(getActivity(), BuyFragment.class.getName());
81+
((MainActivity) getActivity()).closeGroupMenu();
82+
return true;
83+
}
84+
case 3: {
85+
FragmentUtils.changeToFragment(getActivity(), FeedbackFragment.class.getName());
86+
((MainActivity) getActivity()).closeGroupMenu();
87+
return true;
88+
}
89+
default:
90+
position -= groupAdapter.offset;
91+
}
92+
7193
Group group = groupAdapter.getGroup(position);
7294

7395
ExecutablesFragment executablesFragment = (ExecutablesFragment) getFragmentManager().findFragmentByTag("outlets");
@@ -91,7 +113,7 @@ public boolean onItemClick(View view, int position, boolean isLongClick) {
91113
group_list.addItemDecoration(new LineDividerDecoration(getActivity(), LineDividerDecoration.VERTICAL_LIST) {
92114
@Override
93115
public boolean dividerForPosition(int position) {
94-
return true;
116+
return position == groupAdapter.offset - 1;
95117
}
96118
});
97119
group_list.setAdapter(groupAdapter);
@@ -112,52 +134,10 @@ public void onGroupCreated(Group group) {
112134
});
113135
}
114136
});
115-
116-
button = root.findViewById(R.id.btnDevices);
117-
button.setOnClickListener(new View.OnClickListener() {
118-
@Override
119-
public void onClick(View view) {
120-
FragmentUtils.changeToFragment(getActivity(), IOConnectionsFragment.class.getName());
121-
((MainActivity) getActivity()).closeGroupMenu();
122-
}
123-
});
124-
125-
button = root.findViewById(R.id.btnPreferences);
126-
button.setOnClickListener(new View.OnClickListener() {
127-
@Override
128-
public void onClick(View view) {
129-
FragmentUtils.changeToFragment(getActivity(), PreferencesFragment.class.getName());
130-
((MainActivity) getActivity()).closeGroupMenu();
131-
}
132-
});
133-
134-
button = root.findViewById(R.id.btnBuy);
135-
button.setOnClickListener(new View.OnClickListener() {
136-
@Override
137-
public void onClick(View view) {
138-
FragmentUtils.changeToFragment(getActivity(), BuyFragment.class.getName());
139-
((MainActivity) getActivity()).closeGroupMenu();
140-
}
141-
});
142-
143-
button = root.findViewById(R.id.btnFeedback);
144-
button.setOnClickListener(new View.OnClickListener() {
145-
@Override
146-
public void onClick(View view) {
147-
FragmentUtils.changeToFragment(getActivity(), FeedbackFragment.class.getName());
148-
((MainActivity) getActivity()).closeGroupMenu();
149-
}
150-
});
151-
152137
return root;
153138
}
154139

155140
public GroupAdapter getAdapter() {
156141
return groupAdapter;
157142
}
158-
159-
@Override
160-
public void onEmptyListener(boolean empty) {
161-
group_help.setVisibility(groupAdapter.getItemCount() > 0 ? View.GONE : View.VISIBLE);
162-
}
163143
}

0 commit comments

Comments
 (0)