/
GeneratorsAdapter.java
executable file
·134 lines (104 loc) · 5.25 KB
/
GeneratorsAdapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.audacious_software.passive_data_kit.activities.generators;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.audacious_software.passive_data_kit.Logger;
import com.audacious_software.passive_data_kit.activities.DataDisclosureDetailActivity;
import com.audacious_software.passive_data_kit.generators.Generator;
import com.audacious_software.passive_data_kit.generators.Generators;
import com.audacious_software.pdk.passivedatakit.R;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Pattern;
public class GeneratorsAdapter extends RecyclerView.Adapter<GeneratorViewHolder> {
private Context mContext = null;
private FrameLayout mDataView = null;
@Override
public GeneratorViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = Generator.fetchDisclosureView(parent);
return new GeneratorViewHolder(view);
}
@Override
public void onBindViewHolder(final GeneratorViewHolder holder, int position) {
final GeneratorsAdapter me = this;
List<Class<? extends Generator>> activeGenerators = Generators.getInstance(holder.itemView.getContext()).activeGenerators();
this.sortGenerators(this.mContext, activeGenerators);
Class<? extends Generator> generatorClass = activeGenerators.get(position);
try {
Method bindViewHolder = generatorClass.getDeclaredMethod("bindDisclosureViewHolder", GeneratorViewHolder.class);
bindViewHolder.invoke(null, holder);
} catch (Exception e) {
TextView generatorLabel = (TextView) holder.itemView.findViewById(R.id.label_generator);
String[] tokens = generatorClass.getName().split(Pattern.quote("."));
generatorLabel.setText(tokens[tokens.length - 1] + "*");
}
final Class<? extends Generator> finalClass = generatorClass;
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
me.mDataView.removeAllViews();
View dataView = LayoutInflater.from(holder.itemView.getContext()).inflate(R.layout.pdk_placeholder_disclosure_view, null);
try {
Method bindViewHolder = finalClass.getDeclaredMethod("getDisclosureDataView", GeneratorViewHolder.class);
dataView = (View) bindViewHolder.invoke(null, holder);
} catch (NoSuchMethodException e1) {
Logger.getInstance(holder.itemView.getContext()).logThrowable(e1);
} catch (InvocationTargetException e1) {
Logger.getInstance(holder.itemView.getContext()).logThrowable(e1);
} catch (IllegalAccessException e1) {
Logger.getInstance(holder.itemView.getContext()).logThrowable(e1);
}
me.mDataView.addView(dataView);
}
});
ImageView settingsButton = (ImageView) holder.itemView.findViewById(R.id.button_disclosure_item);
settingsButton.setVisibility(View.GONE);
try {
Method getDisclosureActions = finalClass.getDeclaredMethod("getDisclosureActions", Context.class);
final List<DataDisclosureDetailActivity.Action> actions = (List<DataDisclosureDetailActivity.Action>) getDisclosureActions.invoke(null, holder.itemView.getContext());
if (actions.size() > 0) {
settingsButton.setVisibility(View.VISIBLE);
}
} catch (Exception e) {
// Do nothing - leave invisible...
}
settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(holder.itemView.getContext(), DataDisclosureDetailActivity.class);
intent.putExtra(DataDisclosureDetailActivity.GENERATOR_CLASS_NAME, finalClass.getCanonicalName());
holder.itemView.getContext().startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return Generators.getInstance(null).activeGenerators().size();
}
private void sortGenerators(final Context context, List<Class<? extends Generator>> generators) {
Collections.sort(generators, new Comparator<Class<? extends Generator>>() {
@Override
public int compare(Class<? extends Generator> one, Class<? extends Generator> two) {
return one.getName().compareTo(two.getName());
}
});
}
public int getItemViewType (int position) {
return 0;
}
public void setContext(Context context) {
this.mContext = context;
}
public void setDataView(FrameLayout dataView) {
this.mDataView = dataView;
}
}