Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.40 KB | None | 0 0
  1. public class HostBean implements Parcelable {
  2.  
  3. public static final String EXTRA = ActivityMain.PKG + ".extra";
  4. public static final String EXTRA_POSITION = ActivityMain.PKG + ".extra_position";
  5. public static final String EXTRA_HOST = ActivityMain.PKG + ".extra_host";
  6. public static final String EXTRA_TIMEOUT = ActivityMain.PKG + ".network.extra_timeout";
  7. public static final String EXTRA_HOSTNAME = ActivityMain.PKG + ".extra_hostname";
  8. public static final String EXTRA_BANNERS = ActivityMain.PKG + ".extra_banners";
  9. public static final String EXTRA_PORTSO = ActivityMain.PKG + ".extra_ports_o";
  10. public static final String EXTRA_PORTSC = ActivityMain.PKG + ".extra_ports_c";
  11. public static final String EXTRA_SERVICES = ActivityMain.PKG + ".extra_services";
  12. public static final int TYPE_GATEWAY = 0;
  13. public static final int TYPE_COMPUTER = 1;
  14.  
  15. public int deviceType = TYPE_COMPUTER;
  16. public int isAlive = 1;
  17. public int position = 0;
  18. public int responseTime = 0; // ms
  19. public String ipAddress = null;
  20. public String hostname = null;
  21. public String hostsection = null;
  22. public String hardwareAddress = NetInfo.NOMAC;
  23. public String nicVendor = "Unknown";
  24. public String os = "Unknown";
  25. public HashMap<Integer, String> services = null;
  26. public HashMap<Integer, String> banners = null;
  27. public ArrayList<Integer> portsOpen = null;
  28. public ArrayList<Integer> portsClosed = null;
  29.  
  30. public HostBean() {
  31. // New object
  32. }
  33.  
  34. public HostBean(Parcel in) {
  35. // Object from parcel
  36. readFromParcel(in);
  37. }
  38.  
  39. public int describeContents() {
  40. return 0;
  41. }
  42.  
  43. public void writeToParcel(Parcel dest, int flags) {
  44. dest.writeInt(deviceType);
  45. dest.writeInt(isAlive);
  46. dest.writeString(ipAddress);
  47. dest.writeString(hostname);
  48. dest.writeString( hostsection );
  49. dest.writeString(hardwareAddress);
  50. dest.writeString(nicVendor);
  51. dest.writeString(os);
  52. dest.writeInt(responseTime);
  53. dest.writeInt(position);
  54. dest.writeMap(services);
  55. dest.writeMap(banners);
  56. dest.writeList(portsOpen);
  57. dest.writeList(portsClosed);
  58. }
  59.  
  60. private void readFromParcel(Parcel in) {
  61. deviceType = in.readInt();
  62. isAlive = in.readInt();
  63. ipAddress = in.readString();
  64. hostname = in.readString();
  65. hardwareAddress = in.readString();
  66. nicVendor = in.readString();
  67. os = in.readString();
  68. hostsection=in.readString();
  69. responseTime = in.readInt();
  70. position = in.readInt();
  71. services = in.readHashMap(null);
  72. banners = in.readHashMap(null);
  73. portsOpen = in.readArrayList(Integer.class.getClassLoader());
  74. portsClosed = in.readArrayList(Integer.class.getClassLoader());
  75. }
  76.  
  77. @SuppressWarnings("unchecked")
  78. public static final Creator CREATOR = new Creator() {
  79. public HostBean createFromParcel(Parcel in) {
  80. return new HostBean(in);
  81. }
  82.  
  83. public HostBean[] newArray(int size) {
  84. return new HostBean[size];
  85. }
  86. };
  87. }
  88.  
  89. public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.SimpleViewHolder> {
  90.  
  91. private final Context mContext;
  92. private ArrayList<HostBean> mData;
  93. final HostBean host = new HostBean();
  94. public void add(HostBean s,int position) {
  95. position = position == -1 ? getItemCount() : position;
  96. host.hostsection=s;
  97. mData.add(position,s);
  98. notifyItemInserted(position);
  99. }
  100.  
  101. public void remove(int position){
  102. if (position < getItemCount() ) {
  103. mData.remove(position);
  104. notifyItemRemoved(position);
  105. }
  106. }
  107.  
  108. public static class SimpleViewHolder extends RecyclerView.ViewHolder {
  109. public final TextView mac;
  110. public final TextView vendor;
  111. public final TextView ip;
  112.  
  113. public SimpleViewHolder(View view) {
  114. super(view);
  115. ip = (TextView) view.findViewById(R.id.ip);
  116. mac = (TextView) view.findViewById(R.id.mac);
  117. vendor = (TextView) view.findViewById(R.id.vendor);
  118. }
  119. }
  120.  
  121. public SimpleAdapter(Context context, List<HostBean> data) {
  122. mContext = context;
  123. if (data != null)
  124. mData = new ArrayList<HostBean>();
  125. }
  126.  
  127. public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  128. final View view = LayoutInflater.from(mContext).inflate(R.layout.list_host, parent, false);
  129. return new SimpleViewHolder(view);
  130. }
  131.  
  132. @Override
  133. public void onBindViewHolder(SimpleViewHolder holder, final int position) {
  134. holder.ip.setText( (CharSequence) mData.get(position) );
  135. holder.mac.setText( "" );
  136. holder.vendor.setText( "" );
  137. }
  138.  
  139. @Override
  140. public int getItemCount() {
  141. return mData.size();
  142. }
  143. }
  144.  
  145. public class SimpleSectionedRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  146.  
  147. private final Context mContext;
  148. private static final int SECTION_TYPE = 0;
  149.  
  150. private boolean mValid = true;
  151. private int mSectionResourceId;
  152. private int mTextResourceId;
  153. private LayoutInflater mLayoutInflater;
  154. private RecyclerView.Adapter mBaseAdapter;
  155. private SparseArray<Section> mSections = new SparseArray<Section>();
  156.  
  157.  
  158. public SimpleSectionedRecyclerViewAdapter(Context context, int sectionResourceId, int textResourceId,
  159. RecyclerView.Adapter baseAdapter) {
  160.  
  161. mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  162. mSectionResourceId = sectionResourceId;
  163. mTextResourceId = textResourceId;
  164. mBaseAdapter = baseAdapter;
  165. mContext = context;
  166.  
  167. mBaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
  168. @Override
  169. public void onChanged() {
  170. mValid = mBaseAdapter.getItemCount()>0;
  171. notifyDataSetChanged();
  172. }
  173.  
  174. @Override
  175. public void onItemRangeChanged(int positionStart, int itemCount) {
  176. mValid = mBaseAdapter.getItemCount()>0;
  177. notifyItemRangeChanged(positionStart, itemCount);
  178. }
  179.  
  180. @Override
  181. public void onItemRangeInserted(int positionStart, int itemCount) {
  182. mValid = mBaseAdapter.getItemCount()>0;
  183. notifyItemRangeInserted(positionStart, itemCount);
  184. }
  185.  
  186. @Override
  187. public void onItemRangeRemoved(int positionStart, int itemCount) {
  188. mValid = mBaseAdapter.getItemCount()>0;
  189. notifyItemRangeRemoved(positionStart, itemCount);
  190. }
  191. });
  192. }
  193.  
  194.  
  195. public static class SectionViewHolder extends RecyclerView.ViewHolder {
  196.  
  197. public TextView title;
  198.  
  199. public SectionViewHolder(View view, int mTextResourceid) {
  200. super(view);
  201. title = (TextView) view.findViewById(mTextResourceid);
  202. }
  203. }
  204.  
  205. @Override
  206. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int typeView) {
  207. if (typeView == SECTION_TYPE) {
  208. final View view = LayoutInflater.from(mContext).inflate(mSectionResourceId, parent, false);
  209. return new SectionViewHolder(view,mTextResourceId);
  210. }else{
  211. return mBaseAdapter.onCreateViewHolder(parent, typeView -1);
  212. }
  213. }
  214.  
  215. @Override
  216. public void onBindViewHolder(RecyclerView.ViewHolder sectionViewHolder, int position) {
  217. if (isSectionHeaderPosition(position)) {
  218. ((SectionViewHolder)sectionViewHolder).title.setText(mSections.get(position).title);
  219. }else{
  220. mBaseAdapter.onBindViewHolder(sectionViewHolder,sectionedPositionToPosition(position));
  221. }
  222.  
  223. }
  224.  
  225. @Override
  226. public int getItemViewType(int position) {
  227. return isSectionHeaderPosition(position)
  228. ? SECTION_TYPE
  229. : mBaseAdapter.getItemViewType(sectionedPositionToPosition(position)) +1 ;
  230. }
  231.  
  232.  
  233. public static class Section {
  234. int firstPosition;
  235. int sectionedPosition;
  236. CharSequence title;
  237.  
  238. public Section(int firstPosition, CharSequence title) {
  239. this.firstPosition = firstPosition;
  240. this.title = title;
  241. }
  242.  
  243. public CharSequence getTitle() {
  244. return title;
  245. }
  246. }
  247.  
  248.  
  249. public void setSections(Section[] sections) {
  250. mSections.clear();
  251.  
  252. Arrays.sort(sections, new Comparator<Section>() {
  253. @Override
  254. public int compare(Section o, Section o1) {
  255. return (o.firstPosition == o1.firstPosition)
  256. ? 0
  257. : ((o.firstPosition < o1.firstPosition) ? -1 : 1);
  258. }
  259. });
  260.  
  261. int offset = 0; // offset positions for the headers we're adding
  262. for (Section section : sections) {
  263. section.sectionedPosition = section.firstPosition + offset;
  264. mSections.append(section.sectionedPosition, section);
  265. ++offset;
  266. }
  267.  
  268. notifyDataSetChanged();
  269. }
  270.  
  271. public int positionToSectionedPosition(int position) {
  272. int offset = 0;
  273. for (int i = 0; i < mSections.size(); i++) {
  274. if (mSections.valueAt(i).firstPosition > position) {
  275. break;
  276. }
  277. ++offset;
  278. }
  279. return position + offset;
  280. }
  281.  
  282. public int sectionedPositionToPosition(int sectionedPosition) {
  283. if (isSectionHeaderPosition(sectionedPosition)) {
  284. return RecyclerView.NO_POSITION;
  285. }
  286.  
  287. int offset = 0;
  288. for (int i = 0; i < mSections.size(); i++) {
  289. if (mSections.valueAt(i).sectionedPosition > sectionedPosition) {
  290. break;
  291. }
  292. --offset;
  293. }
  294. return sectionedPosition + offset;
  295. }
  296.  
  297. public boolean isSectionHeaderPosition(int position) {
  298. return mSections.get(position) != null;
  299. }
  300.  
  301.  
  302. @Override
  303. public long getItemId(int position) {
  304. return isSectionHeaderPosition(position)
  305. ? Integer.MAX_VALUE - mSections.indexOfKey(position)
  306. : mBaseAdapter.getItemId(sectionedPositionToPosition(position));
  307. }
  308.  
  309. @Override
  310. public int getItemCount() {
  311. return (mValid ? mBaseAdapter.getItemCount() + mSections.size() : 0);
  312. }
  313.  
  314. }
  315.  
  316. hosts = new ArrayList<HostBean>();
  317.  
  318. RecyclerView list =findViewById(R.id.output);
  319. list.setHasFixedSize( true );
  320. list.setLayoutManager( new LinearLayoutManager( this ) );
  321. list.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
  322. SimpleAdapter mAdapter = new SimpleAdapter(this,hosts);
  323.  
  324. List<SimpleSectionedRecyclerViewAdapter.Section> sections =
  325. new ArrayList<SimpleSectionedRecyclerViewAdapter.Section>();
  326.  
  327. //Sections
  328. sections.add(new SimpleSectionedRecyclerViewAdapter.Section(0,"Know Devices"));
  329. sections.add(new SimpleSectionedRecyclerViewAdapter.Section(5,"Unknown Devices"));
  330. SimpleSectionedRecyclerViewAdapter.Section[] dummy = new SimpleSectionedRecyclerViewAdapter.Section[sections.size()];
  331. SimpleSectionedRecyclerViewAdapter mSectionedAdapter = new
  332. SimpleSectionedRecyclerViewAdapter(this,R.layout.section,R.id.section_text,mAdapter);
  333. mSectionedAdapter.setSections(sections.toArray(dummy));
  334. list.setAdapter( mSectionedAdapter );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement