items, ItemFragment.OnListFragmentInteractionListener listener) {
+ mValues = items;
+ mListener = listener;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.fragment_item, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(final ViewHolder holder, int position) {
+ holder.mItem = mValues.get(position);
+ holder.Nazwa.setText(mValues.get(position).Nazwa);
+ holder.Status.setText(mValues.get(position).Status);
+ holder.Error.setText(mValues.get(position).Error);
+ holder.State.setText(mValues.get(position).State);
+ holder.Temperatura.setText(mValues.get(position).Temperatura);
+ holder.mView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (null != mListener) {
+ // Notify the active callbacks interface (the activity, if the
+ // fragment is attached to one) that an item has been selected.
+ mListener.onListFragmentInteraction(holder.mItem);
+ }
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mValues.size();
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ public final View mView;
+ public final TextView Nazwa;
+ public final TextView Status;
+ public final TextView Error;
+ public final TextView State;
+ public final TextView Temperatura;
+
+ public DummyContent.DummyItem mItem;
+
+ public ViewHolder(View view) {
+ super(view);
+ mView = view;
+ Nazwa = (TextView) view.findViewById(R.id.idNazwa);
+ Status = (TextView) view.findViewById(R.id.idStatus);
+ Error = (TextView) view.findViewById(R.id.idError);
+ State = (TextView) view.findViewById(R.id.idState);
+ Temperatura = (TextView) view.findViewById(R.id.idTemperatura);
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " '" + Nazwa.getText() + "'";
+ }
+ }
+}
\ No newline at end of file
Index: app/src/main/java/com/kfb/kfbv1/SplashActivity.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/SplashActivity.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/SplashActivity.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,29 @@
+package com.kfb.kfbv1;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+
+
+import java.lang.reflect.Method;
+
+public class SplashActivity extends AppCompatActivity {
+
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ startActivity(new Intent(SplashActivity.this, MainActivity.class));
+ try {
+
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ finish();
+ }
+
+}
\ No newline at end of file
Index: app/src/main/java/com/kfb/kfbv1/dummy/DummyContent.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/dummy/DummyContent.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/dummy/DummyContent.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,85 @@
+package com.kfb.kfbv1.dummy;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Helper class for providing sample content for user interfaces created by
+ * Android template wizards.
+ *
+ * TODO: Replace all uses of this class before publishing your app.
+ */
+public class DummyContent {
+
+ /**
+ * An array of sample (dummy) items.
+ */
+ public static final List ITEMS = new ArrayList();
+
+ /**
+ * A map of sample (dummy) items, by ID.
+ */
+ public static final Map ITEM_MAP = new HashMap();
+
+ private static final int COUNT = 4;
+
+ static {
+ // Add some sample items.
+ for (int i = 1; i <= COUNT; i++) {
+ addItem(createDummyItem(i));
+ }
+ }
+
+ private static void addItem(DummyItem item) {
+ ITEMS.add(item);
+ ITEM_MAP.put(item.id, item);
+ }
+
+ private static DummyItem createDummyItem(int position) {
+ return new DummyItem(String.valueOf(position), "Test1","ON","ERROR","Empty","1","1","1","23.3");
+ }
+
+ private static String makeDetails(int position) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Details about Item: ").append(position);
+ for (int i = 0; i < position; i++) {
+ builder.append("\nMore details information here.");
+ }
+ return builder.toString();
+ }
+
+ /**
+ * A dummy item representing a piece of content.
+ */
+ public static class DummyItem {
+ public final String id;
+ public final String Nazwa;
+ public final String Status;
+ public String Error;
+ public String State;
+ public final String s1;
+ public final String s2;
+ public final String s3;
+ public String Temperatura;
+
+ public DummyItem(String id, String aNazwa,String aStatus,String aError,String aState,String aS1,String aS2,String aS3,String aTemperatura) {
+ this.id = id;
+ this.Nazwa = aNazwa;
+ this.State = aState;
+ this.Status = aStatus;
+ this.Error = aError;
+ this.s1 =aS1;
+ this.s2= aS2;
+ this.s3 = aS3;
+ this.Temperatura = aTemperatura;
+ }
+
+ @Override
+ public String toString() {
+ return Nazwa;
+ }
+ }
+}
+
Index: app/src/main/java/com/kfb/kfbv1/hotspot/ClientScanResult.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/hotspot/ClientScanResult.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/hotspot/ClientScanResult.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,48 @@
+package com.kfb.kfbv1.hotspot;
+
+public class ClientScanResult {
+ private String IpAddr;
+ private String HWAddr;
+ private String Device;
+ private boolean isReachable;
+
+ public ClientScanResult(String ipAddr, String hWAddr, String device, boolean isReachable) {
+ super();
+ this.IpAddr = ipAddr;
+ this.HWAddr = hWAddr;
+ this.Device = device;
+ this.isReachable = isReachable;
+ }
+
+ public String getIpAddr() {
+ return IpAddr;
+ }
+
+ public void setIpAddr(String ipAddr) {
+ IpAddr = ipAddr;
+ }
+
+ public String getHWAddr() {
+ return HWAddr;
+ }
+
+ public void setHWAddr(String hWAddr) {
+ HWAddr = hWAddr;
+ }
+
+ public String getDevice() {
+ return Device;
+ }
+
+ public void setDevice(String device) {
+ Device = device;
+ }
+
+ public boolean isReachable() {
+ return isReachable;
+ }
+
+ public void setReachable(boolean isReachable) {
+ this.isReachable = isReachable;
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/hotspot/FinishScanListener.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/hotspot/FinishScanListener.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/hotspot/FinishScanListener.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,11 @@
+package com.kfb.kfbv1.hotspot;
+
+import java.util.ArrayList;
+
+public interface FinishScanListener {
+ /**
+ * Interface called when the scan method finishes. Network operations should not execute on UI thread
+ * @param clients
+ */
+ public void onFinishScan(ArrayList clients);
+}
Index: app/src/main/java/com/kfb/kfbv1/hotspot/WIFI_AP_STATE.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/hotspot/WIFI_AP_STATE.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/hotspot/WIFI_AP_STATE.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,5 @@
+package com.kfb.kfbv1.hotspot;
+
+public enum WIFI_AP_STATE {
+ WIFI_AP_STATE_DISABLING, WIFI_AP_STATE_DISABLED, WIFI_AP_STATE_ENABLING, WIFI_AP_STATE_ENABLED, WIFI_AP_STATE_FAILED
+}
\ No newline at end of file
Index: app/src/main/java/com/kfb/kfbv1/hotspot/WifiApManager.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/hotspot/WifiApManager.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/hotspot/WifiApManager.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,215 @@
+package com.kfb.kfbv1.hotspot;
+/*
+ * Copyright 2013 WhiteByte (Nick Russler, Ahmet Yueksektepe).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.util.ArrayList;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.os.Build;
+import android.os.Handler;
+import android.provider.Settings;
+import android.util.Log;
+
+public class WifiApManager {
+ private final WifiManager mWifiManager;
+ private Context context;
+
+ public WifiApManager(Context context) {
+ this.context = context;
+ mWifiManager = (WifiManager) this.context.getSystemService(Context.WIFI_SERVICE);
+ }
+
+ /**
+ * Show write permission settings page to user if necessary or forced
+ * @param force show settings page even when rights are already granted
+ */
+ public void showWritePermissionSettings(boolean force) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (force || !Settings.System.canWrite(this.context)) {
+ Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
+ intent.setData(Uri.parse("package:" + this.context.getPackageName()));
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ this.context.startActivity(intent);
+ }
+ }
+ }
+
+ /**
+ * Start AccessPoint mode with the specified
+ * configuration. If the radio is already running in
+ * AP mode, update the new configuration
+ * Note that starting in access point mode disables station
+ * mode operation
+ *
+ * @param wifiConfig SSID, security and channel details as part of WifiConfiguration
+ * @return {@code true} if the operation succeeds, {@code false} otherwise
+ */
+ public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
+ try {
+ if (enabled) { // disable WiFi in any case
+ mWifiManager.setWifiEnabled(false);
+ }
+
+ Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
+ return (Boolean) method.invoke(mWifiManager, wifiConfig, enabled);
+ } catch (Exception e) {
+ Log.e(this.getClass().toString(), "", e);
+ return false;
+ }
+ }
+
+ /**
+ * Gets the Wi-Fi enabled state.
+ *
+ * @return {@link WIFI_AP_STATE}
+ * @see #isWifiApEnabled()
+ */
+ public WIFI_AP_STATE getWifiApState() {
+ try {
+ Method method = mWifiManager.getClass().getMethod("getWifiApState");
+
+ int tmp = ((Integer) method.invoke(mWifiManager));
+
+ // Fix for Android 4
+ if (tmp >= 10) {
+ tmp = tmp - 10;
+ }
+
+ return WIFI_AP_STATE.class.getEnumConstants()[tmp];
+ } catch (Exception e) {
+ Log.e(this.getClass().toString(), "", e);
+ return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
+ }
+ }
+
+ /**
+ * Return whether Wi-Fi AP is enabled or disabled.
+ *
+ * @return {@code true} if Wi-Fi AP is enabled
+ * @hide Dont open yet
+ * @see #getWifiApState()
+ */
+ public boolean isWifiApEnabled() {
+ return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
+ }
+
+ /**
+ * Gets the Wi-Fi AP Configuration.
+ *
+ * @return AP details in {@link WifiConfiguration}
+ */
+ public WifiConfiguration getWifiApConfiguration() {
+ try {
+ Method method = mWifiManager.getClass().getMethod("getWifiApConfiguration");
+ return (WifiConfiguration) method.invoke(mWifiManager);
+ } catch (Exception e) {
+ Log.e(this.getClass().toString(), "", e);
+ return null;
+ }
+ }
+
+ /**
+ * Sets the Wi-Fi AP Configuration.
+ *
+ * @return {@code true} if the operation succeeded, {@code false} otherwise
+ */
+ public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {
+ try {
+ Method method = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
+ return (Boolean) method.invoke(mWifiManager, wifiConfig);
+ } catch (Exception e) {
+ Log.e(this.getClass().toString(), "", e);
+ return false;
+ }
+ }
+
+ /**
+ * Gets a list of the clients connected to the Hotspot, reachable timeout is 300
+ *
+ * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
+ * @param finishListener, Interface called when the scan method finishes
+ */
+ public void getClientList(boolean onlyReachables, FinishScanListener finishListener) {
+ getClientList(onlyReachables, 300, finishListener);
+ }
+
+ /**
+ * Gets a list of the clients connected to the Hotspot
+ *
+ * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
+ * @param reachableTimeout Reachable Timout in miliseconds
+ * @param finishListener, Interface called when the scan method finishes
+ */
+ public void getClientList(final boolean onlyReachables, final int reachableTimeout, final FinishScanListener finishListener) {
+ Runnable runnable = new Runnable() {
+ public void run() {
+
+ BufferedReader br = null;
+ final ArrayList result = new ArrayList();
+
+ try {
+ br = new BufferedReader(new FileReader("/proc/net/arp"));
+ String line;
+ while ((line = br.readLine()) != null) {
+ String[] splitted = line.split(" +");
+
+ if ((splitted != null) && (splitted.length >= 4)) {
+ // Basic sanity check
+ String mac = splitted[3];
+
+ if (mac.matches("..:..:..:..:..:..")) {
+ boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);
+
+ if (!onlyReachables || isReachable) {
+ result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ Log.e(this.getClass().toString(), e.toString());
+ } finally {
+ try {
+ br.close();
+ } catch (IOException e) {
+ Log.e(this.getClass().toString(), e.getMessage());
+ }
+ }
+
+ // Get a handler that can be used to post to the main thread
+ Handler mainHandler = new Handler(context.getMainLooper());
+ Runnable myRunnable = new Runnable() {
+ @Override
+ public void run() {
+ finishListener.onFinishScan(result);
+ }
+ };
+ mainHandler.post(myRunnable);
+ }
+ };
+
+ Thread mythread = new Thread(runnable);
+ mythread.start();
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbGate.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbGate.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbGate.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,66 @@
+package com.kfb.kfbv1.model;
+
+import java.util.ArrayList;
+
+public class KfbGate {
+ private String mName;
+ private String mAdres;
+ private String mMaxT;
+ private String mStatus;
+ private String mError;
+
+ private ArrayList mMeasure;
+
+ public void setmName(String mName) {
+ this.mName = mName;
+ }
+
+ public void setmAdres(String mAdres) {
+ this.mAdres = mAdres;
+ }
+
+ public String getmAdres() {
+ return mAdres;
+ }
+
+ public void setmMeasure(ArrayList mMeasure) {
+ this.mMeasure = mMeasure;
+ }
+
+ public String getmName() {
+ return mName;
+ }
+
+ public ArrayList getmMeasure() {
+ return mMeasure;
+ }
+
+ public KfbGate()
+ {
+ mMeasure = new ArrayList();
+ }
+
+ public void setmMaxT(String mMaxT) {
+ this.mMaxT = mMaxT;
+ }
+
+ public String getmError() {
+ return mError;
+ }
+
+ public void setmError(String mError) {
+ this.mError = mError;
+ }
+
+ public void setmStatus(String mStatus) {
+ this.mStatus = mStatus;
+ }
+
+ public String getmMaxT() {
+ return mMaxT;
+ }
+
+ public String getmStatus() {
+ return mStatus;
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbGates.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbGates.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbGates.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,31 @@
+package com.kfb.kfbv1.model;
+
+import java.util.ArrayList;
+
+public class KfbGates {
+ private int mSize;
+ private ArrayList mGate;
+
+ public KfbGates()
+ {
+ mGate = new ArrayList();
+ mSize = 0;
+ }
+
+ public void AddGate(KfbGate aGate){
+ mGate.add(aGate);
+ mSize++;
+ }
+
+ public void setmGate(ArrayList mGate) {
+ this.mGate = mGate;
+ }
+
+ public int getmSize() {
+ return mSize;
+ }
+
+ public ArrayList getmGate() {
+ return mGate;
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbHttpRequest.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbHttpRequest.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbHttpRequest.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,92 @@
+package com.kfb.kfbv1.model;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.loopj.android.http.AsyncHttpClient;
+import com.loopj.android.http.AsyncHttpResponseHandler;
+import com.loopj.android.http.ResponseHandlerInterface;
+import com.loopj.android.http.SyncHttpClient;
+
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.net.ssl.HttpsURLConnection;
+
+import cz.msebera.android.httpclient.Header;
+
+public class KfbHttpRequest {
+ private KfbGate mGate;
+ public String outS;
+ private SyncHttpClient client;
+
+ public String getTest(String aUrl)
+ {
+ client = new SyncHttpClient();
+ try {
+ String uri = aUrl;
+ client.get(uri, new AsyncHttpResponseHandler() {
+ @Override
+ public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
+ outS = new String(responseBody);
+ KfbModel.getData().tekser =outS;
+ KfbModel.getData().error = false;
+ //KfbModel.getData().progresok=true;
+
+ // KfbModel.getData().textViewout.setText(outS);
+ }
+
+ @Override
+ public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
+ outS = "ERROR"+ error.getMessage();
+ KfbModel.getData().tekser =outS;
+ KfbModel.getData().error = true;
+ // KfbModel.getData().progresok=true;
+
+ // KfbModel.getData().textViewout.setText(outS);
+
+ }
+ });
+ return outS;
+ }catch (Exception e)
+ {
+ Log.e("HttpClient",e.getMessage());
+ return "";
+ }
+ }
+ public void getRequest(KfbGate aGate) {
+ mGate = aGate;
+
+ client = new SyncHttpClient();
+ try {
+ String uri = aGate.getmAdres();
+ client.get(uri, new AsyncHttpResponseHandler() {
+ @Override
+ public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
+ outS = new String(responseBody);
+ KfbModel.getData().tekser =outS;
+ KfbModel.getData().error = false;
+ }
+
+ @Override
+ public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
+ outS = "ERROR"+ error.getMessage();
+ KfbModel.getData().tekser =outS;
+ KfbModel.getData().error = true;
+ }
+ });
+
+
+ }catch (Exception e)
+ {
+ Log.e("HttpClient",e.getMessage());
+ }
+ }
+}
+
+
Index: app/src/main/java/com/kfb/kfbv1/model/KfbMeasure.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbMeasure.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbMeasure.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,5 @@
+package com.kfb.kfbv1.model;
+
+public class KfbMeasure {
+ private float mTemp;
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbModel.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbModel.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbModel.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,50 @@
+package com.kfb.kfbv1.model;
+
+import android.os.Handler;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.kfb.kfbv1.KfbProgrsBar;
+import com.kfb.kfbv1.MyItemRecyclerViewAdapter;
+
+
+
+public class KfbModel {
+ private static KfbModel mmodel;
+
+ public static KfbModel getData()
+ {
+ if(mmodel==null)
+ {
+ mmodel = new KfbModel();
+ }
+ return mmodel;
+ }
+
+ private KfbModel()
+ {
+ mGates = new KfbGates();
+ }
+ // data private
+ private KfbGates mGates;
+ private MyItemRecyclerViewAdapter mAdapter;
+ // data
+ public boolean sendHttp;
+ public KfbProgrsBar progresBar;
+ public String tekser;
+ public boolean error;
+ public Handler handler;
+ public String url;
+
+ public MyItemRecyclerViewAdapter getmAdapter() {
+ return mAdapter;
+ }
+
+ public void setmAdapter(MyItemRecyclerViewAdapter mAdapter) {
+ this.mAdapter = mAdapter;
+ }
+
+ public KfbGates getGates(){
+ return mGates;
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbParser.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbParser.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbParser.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,18 @@
+package com.kfb.kfbv1.model;
+
+public class KfbParser {
+ public KfbGate dataParser(String aData,KfbGate aGate)
+ {
+ KfbGate k = aGate;
+ int p = aData.lastIndexOf("Tmax =");
+ p = p+6;
+ String t = aData.substring(p ,p+5);
+ k.setmMaxT(t);
+
+ p = aData.lastIndexOf("status:");
+ p=p+7;
+ t = aData.substring(p ,p+6);
+ k.setmStatus(t);
+ return k;
+ }
+}
Index: app/src/main/java/com/kfb/kfbv1/model/KfbTask.java
===================================================================
--- app/src/main/java/com/kfb/kfbv1/model/KfbTask.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/java/com/kfb/kfbv1/model/KfbTask.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,61 @@
+package com.kfb.kfbv1.model;
+
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.TextView;
+
+import com.kfb.kfbv1.R;
+
+public class KfbTask implements Runnable {
+ @Override
+ public void run() {
+ Handler handler = KfbModel.getData().handler;
+ KfbHttpRequest HttpKfb = new KfbHttpRequest();
+ HttpKfb.getTest(KfbModel.getData().url);
+ if(KfbModel.getData().tekser!=null)
+ {
+ KfbParser p = new KfbParser();
+ // if(KfbModel.getData().error==false) {
+ // p.dataParser(KfbModel.getData().tekser, KfbModel.getData().getGates().getmGate().get(0));
+ // }
+ Message msg = handler.obtainMessage();
+ msg.what = 1;
+ msg.obj = "tekst";
+ msg.arg1 = 1;
+ handler.sendMessage(msg);
+ }
+
+
+ while(KfbModel.getData().sendHttp==true)
+ {
+ KfbParser p = new KfbParser();
+ for (int i = 0 ;i
+
+
+
Index: app/src/main/res/drawable-v24/circular_progress_bar.xml
===================================================================
--- app/src/main/res/drawable-v24/circular_progress_bar.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/drawable-v24/circular_progress_bar.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/drawable-v24/ic_launcher_foreground.xml
===================================================================
--- app/src/main/res/drawable-v24/ic_launcher_foreground.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/drawable-v24/ic_launcher_foreground.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/drawable/ic_launcher_background.xml
===================================================================
--- app/src/main/res/drawable/ic_launcher_background.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/drawable/ic_launcher_background.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: app/src/main/res/drawable/splash.xml
===================================================================
--- app/src/main/res/drawable/splash.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/drawable/splash.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,7 @@
+
+-
+
+
Index: app/src/main/res/layout/activity_gate.xml
===================================================================
--- app/src/main/res/layout/activity_gate.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/layout/activity_gate.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/layout/activity_main.xml
===================================================================
--- app/src/main/res/layout/activity_main.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/layout/activity_main.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/layout/fragment_item.xml
===================================================================
--- app/src/main/res/layout/fragment_item.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/layout/fragment_item.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: app/src/main/res/layout/fragment_item_list.xml
===================================================================
--- app/src/main/res/layout/fragment_item_list.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/layout/fragment_item_list.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
Index: app/src/main/res/layout/progres.xml
===================================================================
--- app/src/main/res/layout/progres.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/layout/progres.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,30 @@
+
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
===================================================================
--- app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
===================================================================
--- app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
Index: app/src/main/res/values/colors.xml
===================================================================
--- app/src/main/res/values/colors.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/values/colors.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,6 @@
+
+
+ #6200EE
+ #3700B3
+ #03DAC5
+
Index: app/src/main/res/values/strings.xml
===================================================================
--- app/src/main/res/values/strings.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/values/strings.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,3 @@
+
+ KFBv1
+
Index: app/src/main/res/values/styles.xml
===================================================================
--- app/src/main/res/values/styles.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/main/res/values/styles.xml (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
Index: app/src/test/java/com/kfb/kfbv1/ExampleUnitTest.java
===================================================================
--- app/src/test/java/com/kfb/kfbv1/ExampleUnitTest.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ app/src/test/java/com/kfb/kfbv1/ExampleUnitTest.java (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,17 @@
+package com.kfb.kfbv1;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
Index: build.gradle
===================================================================
--- build.gradle (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ build.gradle (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,29 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.6.1'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
Index: gradle.properties
===================================================================
--- gradle.properties (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ gradle.properties (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,20 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
Index: gradle/wrapper/gradle-wrapper.properties
===================================================================
--- gradle/wrapper/gradle-wrapper.properties (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ gradle/wrapper/gradle-wrapper.properties (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,6 @@
+#Mon Mar 30 23:58:29 CEST 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
Index: gradlew.bat
===================================================================
--- gradlew.bat (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ gradlew.bat (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
Index: settings.gradle
===================================================================
--- settings.gradle (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
+++ settings.gradle (revision 78e9338ac88fbd90d19c3607de90adc1952b06d1)
@@ -0,0 +1,2 @@
+rootProject.name='KFBv1'
+include ':app'
diff --git app/debug/app-debug.apk app/debug/app-debug.apk
new file mode 100644
index 0000000000000000000000000000000000000000..3157ee5464f92e32903fc840a7038557c5b9e247
GIT binary patch
literal 2723956
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