diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-04-16 15:25:45 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-04-16 15:25:45 +0300 |
| commit | 9989868a8bb9cfc6759e7401218649458df1240f (patch) | |
| tree | 7cc1774634ec619a3647adb6fd0ac1dbdb43f6a5 /Software/Android_Studio | |
| parent | db51c8fe4340085dec66fcb9b5923fda1c29db7d (diff) | |
| download | Tango-9989868a8bb9cfc6759e7401218649458df1240f.tar.gz Tango-9989868a8bb9cfc6759e7401218649458df1240f.zip | |
Working on TCC..
Diffstat (limited to 'Software/Android_Studio')
13 files changed, 570 insertions, 65 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java index b25e6970c..1109ba02f 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/Event.java @@ -1,5 +1,59 @@ package com.twine.colorcapture.core; -public class Event +import java.util.ArrayList; +import java.util.List; + + +/** + * Represents C# like event simulation by holding a collection of event handlers. + * + * @param <T> the event handler type parameter + */ +public class Event<T> { + private List<IEventHandler<T>> listeners = new ArrayList<>(); + + /** + * Remove listener. + * + * @param listener the listener + */ + public void removeListener(IEventHandler<T> listener) + { + listeners.remove(listener); + } + + /** + * Add listener. + * + * @param listener the listener + */ + public void addListener(IEventHandler<T> listener) + { + listeners.add(listener); + } + + /** + * Invoke the event for all listeners. + * + * @param sender the sender + * @param e the e + */ + public void invoke(Object sender, T e) + { + + for (int i = 0; i < listeners.size(); i++) + { + listeners.get(i).invoke(sender, e); + } + } + + + /** + * Clears the collection of event handlers. + */ + public void reset() + { + listeners.clear(); + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java index 7d0a277b5..5d212eed8 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/IEventHandler.java @@ -1,5 +1,18 @@ package com.twine.colorcapture.core; -public class IEventHandler +/** + * Represents an {@link Event} handler delegate. + * + * @param <T> the type parameter + */ +public interface IEventHandler<T> { + + /** + * Invokes the handler callback. + * + * @param sender the sender + * @param args the event arguments. + */ + void invoke(Object sender, T args); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java index 052f7a3b8..3262a72a8 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/ObservableCollection.java @@ -1,5 +1,213 @@ package com.twine.colorcapture.core; -public class ObservableCollection -{ +import android.support.annotation.NonNull; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + + +/** + * Represents an observable collection with change notification. + * + * @param <T> the type parameter + */ +public class ObservableCollection<T> implements List<T> { + + /** + * The interface On changed listener. + */ + public interface OnChangedListener { + /** + * On change. + */ + void onChange(); + } + + private List<T> list; + private OnChangedListener onChangedListener; + + /** + * Sets on change listener. + * + * @param listener the listener + */ + public void setOnChangeListener(OnChangedListener listener) { + this.onChangedListener = listener; + } + + + /** + * Clear on change listener. + */ + public void clearOnChangeListener() + { + this.onChangedListener = null; + } + + /** + * On change. + */ + protected void onChange() { + if (this.onChangedListener != null) { + this.onChangedListener.onChange(); + } + } + + /** + * Instantiates a new Observable collection. + */ + public ObservableCollection() { + list = new ArrayList<>(); + } + + @Override + public int size() { + return list.size(); + } + + @Override + public boolean isEmpty() { + return list.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return list.contains(o); + } + + @NonNull + @Override + public Iterator<T> iterator() { + return list.iterator(); + } + + @NonNull + @Override + public Object[] toArray() { + return list.toArray(); + } + + @NonNull + @Override + public <T1> T1[] toArray(@NonNull T1[] t1s) { + return list.toArray(t1s); + } + + @Override + public boolean add(T t) { + boolean result = list.add(t); + onChange(); + return result; + } + + @Override + public boolean remove(Object o) { + boolean result = list.remove(o); + onChange(); + return result; + } + + @Override + public boolean containsAll(@NonNull Collection<?> collection) { + return list.containsAll(collection); + } + + @Override + public boolean addAll(@NonNull Collection<? extends T> collection) { + boolean result = list.addAll(collection); + onChange(); + return result; + } + + @Override + public boolean addAll(int i, @NonNull Collection<? extends T> collection) { + boolean result = list.addAll(i, collection); + onChange(); + return result; + } + + @Override + public boolean removeAll(@NonNull Collection<?> collection) { + boolean result = list.removeAll(collection); + onChange(); + return result; + } + + @Override + public boolean retainAll(@NonNull Collection<?> collection) { + boolean result = list.retainAll(collection); + onChange(); + return result; + } + + @Override + public void clear() { + list.clear(); + onChange(); + } + + @Override + public boolean equals(Object o) { + return list.equals(o); + } + + @Override + public int hashCode() { + return list.hashCode(); + } + + @Override + public T get(int i) { + return list.get(i); + } + + @Override + public T set(int i, T t) { + T result = list.set(i, t); + onChange(); + return result; + } + + @Override + public void add(int i, T t) { + list.add(i,t); + onChange(); + } + + @Override + public T remove(int i) { + T result = list.remove(i); + onChange(); + return result; + } + + @Override + public int indexOf(Object o) { + return list.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return list.lastIndexOf(o); + } + + @NonNull + @Override + public ListIterator<T> listIterator() { + return listIterator(); + } + + @NonNull + @Override + public ListIterator<T> listIterator(int i) { + return listIterator(i); + } + + @NonNull + @Override + public List<T> subList(int i, int i1) { + return list.subList(i,i1); + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java index 2ded0cb8f..e88b3bace 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeMachine.java @@ -2,4 +2,32 @@ package com.twine.colorcapture.integration; public class ExternalBridgeMachine { + private String ipAddress; + private String serialNumber; + + public String getIpAddress() + { + return ipAddress; + } + + public void setIpAddress(String ipAddress) + { + this.ipAddress = ipAddress; + } + + public String getSerialNumber() + { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) + { + this.serialNumber = serialNumber; + } + + public ExternalBridgeMachine(String ipAddress, String serialNumber) + { + this.ipAddress = ipAddress; + this.serialNumber = serialNumber; + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java index 56d2224f4..390ccab3b 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeScanner.java @@ -1,6 +1,115 @@ -package com.twine.colorcapture.bridge; +package com.twine.colorcapture.integration; + +import android.os.StrictMode; + +import com.twine.colorcapture.core.Event; +import com.twine.colorcapture.core.IEventHandler; +import com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket; + +import org.joda.time.DateTime; +import org.joda.time.Seconds; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import static br.com.zbra.androidlinq.Linq.stream; public class ExternalBridgeScanner { + private Thread udpDiscoveryThread; + private boolean isStarted; + private List<ExternalBridgeMachine> machines; + private Event<ExternalBridgeMachine> newMachineEvent; + + public ExternalBridgeScanner() + { + machines = new ArrayList<>(); + newMachineEvent = new Event<>(); + } + + public void start() + { + if (!isStarted) + { + machines.clear(); + isStarted = true; + udpDiscoveryThread = new Thread(this::udpDiscoveryMethod); + udpDiscoveryThread.start(); + } + } + + public void stop() + { + if (isStarted) + { + isStarted = false; + } + } + + public void addNewMachineEventHandler(IEventHandler<ExternalBridgeMachine> handler) + { + newMachineEvent.addListener(handler); + } + + private void udpDiscoveryMethod() + { + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + + while (isStarted) + { + DatagramSocket client = null; + + try + { + client = new DatagramSocket(8888); + client.setReuseAddress(true); + client.setBroadcast(true); + + byte[] buffer = new byte[100]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + + client.receive(packet); + byte[] message = new byte[packet.getLength()]; + ByteBuffer wrapper = ByteBuffer.wrap(message); + wrapper.put(buffer, 0, message.length); + + + ExternalBridgeUdpDiscoveryPacket discoveryMessage = ExternalBridgeUdpDiscoveryPacket.parseFrom(message); + + boolean hasTime = !discoveryMessage.getTime().equals(""); + + DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); + DateTime time = hasTime ? formatter.parseDateTime(discoveryMessage.getTime()) : DateTime.now(); + + String address = packet.getAddress().toString().replaceAll("/",""); + if (!hasTime || Seconds.secondsBetween(DateTime.now(), time).getSeconds() < 6) + { + if (!stream(machines).any(x -> x.getSerialNumber().equals(discoveryMessage.getSerialNumber()) && x.getIpAddress().equals(address))) + { + ExternalBridgeMachine newMachine = new ExternalBridgeMachine(address, discoveryMessage.getSerialNumber()); + machines.add(0, newMachine); + newMachineEvent.invoke(this, newMachine); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } + finally + { + if (client != null) + { + client.close(); + } + } + } + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java index 30cc259d6..8be2b5b9d 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/BindingAdapters.java @@ -9,34 +9,24 @@ import android.databinding.InverseBindingListener; import android.databinding.InverseBindingMethod; import android.databinding.InverseBindingMethods; import android.util.Log; +import android.widget.ListView; import com.twine.colorcapture.controls.ToggleImageButton; -//@BindingMethods({ -// @BindingMethod(type = ToggleImageButton.class, attribute = "checked", method = "setChecked"), -//}) -//@InverseBindingMethods({ -// @InverseBindingMethod(type = ToggleImageButton.class, attribute = "checked", method = "getChecked"), -//}) public class BindingAdapters { -// @BindingAdapter(value = "checkedAttrChanged") -// public static void setListener(ToggleImageButton btn, final InverseBindingListener attrChange) -// { -// btn.setOnCheckedChangeListener((e, r) -> attrChange.onChange()); -// } -// -// @BindingAdapter("checked") -// public static void setChecked(ToggleImageButton view, Boolean value) -// { -// Log.d("DATA BINDING", "setChecked: "); -// view.setChecked(value); -// } -// -// @InverseBindingAdapter(attribute = "checked") -// public static Boolean getChecked(ToggleImageButton view) -// { -// Log.d("DATA BINDING", "getChecked: "); -// return view.isChecked(); -// } + /** + * Binds a {@link ListView} item click to a listener. + * + * @param view the view + * @param listener the listener + */ + @BindingAdapter("android:onItemClick") + public static void listViewClickAdapter(ListView view, ListView.OnItemClickListener listener) + { + if (view != null && listener != null) + { + view.setOnItemClickListener(listener); + } + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java index cb7a558c5..e132d1b56 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/DialogBase.java @@ -1,5 +1,6 @@ package com.twine.colorcapture.mvvm; +import android.animation.ValueAnimator; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; @@ -87,7 +88,8 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends ButterKnife.bind(this, binding.getRoot()); return binding.getRoot(); - } catch (Exception ex) + } + catch (Exception ex) { ex.printStackTrace(); return null; @@ -132,18 +134,16 @@ public abstract class DialogBase<BindingView extends ViewDataBinding, VM extends getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent); View group = this.getView(); + group.post(() -> { - group.setAlpha(0); - - new CountUpTimer(500,30){ - @Override - public void onTick(float milli) - { - group.setAlpha(milli / 500f); - Log.d("ANIM", Float.toString(milli / 500f)); - } - }.start(); + ValueAnimator animator = ValueAnimator.ofFloat(0, 1); + animator.setDuration(300); + animator.addUpdateListener((x) -> + { + group.setAlpha((Float) x.getAnimatedValue()); + }); + animator.start(); }); } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java index 99bb0846d..5f2a0e8ac 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/loading/LoadingActivityVM.java @@ -8,6 +8,7 @@ import android.util.Log; import com.squareup.otto.Bus; import com.twine.colorcapture.BuildConfig; import com.twine.colorcapture.core.Task; +import com.twine.colorcapture.integration.ExternalBridgeScanner; import com.twine.colorcapture.mvvm.DependencyProperty; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationProvider; diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java index 38d917a7e..b579a3e9f 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java @@ -2,6 +2,7 @@ package com.twine.colorcapture.views.main; import com.squareup.otto.Bus; import com.twine.colorcapture.dialogs.welcome.WelcomeDialog; +import com.twine.colorcapture.integration.ExternalBridgeScanner; import com.twine.colorcapture.mvvm.DependencyProperty; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationProvider; diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java index d6eb15d34..c77e93a20 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java +++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java @@ -1,5 +1,18 @@ package com.twine.colorcapture.views.sendtomachine; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.databinding.ObservableList; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; + +import com.twine.colorcapture.BR; +import com.twine.colorcapture.R; +import com.twine.colorcapture.integration.ExternalBridgeMachine; +import com.twine.colorcapture.integration.ExternalBridgeScanner; import com.twine.colorcapture.mvvm.ViewModelBase; import com.twine.colorcapture.navigation.INavigationObjectReceiver; import com.twine.colorcapture.navigation.INavigationProvider; @@ -8,12 +21,49 @@ import com.twine.colorcapture.web.messages.DetectionColor; import javax.inject.Inject; +import me.tatarka.bindingcollectionadapter2.ItemBinding; + public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragment> implements INavigationObjectReceiver<DetectionColor> { + private ExternalBridgeScanner scanner; + + public ObservableList<ExternalBridgeMachine> machines; + public ItemBinding<String> machineBinding; + @Inject public SendToMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider) { + machines = new ObservableArrayList<>(); + scanner = new ExternalBridgeScanner(); + machineBinding = ItemBinding.of(BR.machine, R.layout.external_machine_item); + + scanner.addNewMachineEventHandler(this::onNewMachine); + } + + private void onNewMachine(Object o, ExternalBridgeMachine machine) + { + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + public void run() { + machines.add(0, machine); + } + }); + } + + @Override + protected void onNavigatedTo() + { + super.onNavigatedTo(); + machines.clear(); + scanner.start(); + } + @Override + protected void onNavigatedFrom() + { + machines.clear(); + super.onNavigatedFrom(); + scanner.stop(); } @Override @@ -21,4 +71,10 @@ public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragmen { DetectionColor color = detectionColor; } + + public void onMachineSelected(AdapterView<?> adapterView, View view, int i, long l) + { + ExternalBridgeMachine machine = (ExternalBridgeMachine) adapterView.getAdapter().getItem(i); + ExternalBridgeMachine m = machine; + } } diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml index a8b409b1d..8895ad0ae 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable/list_view_selectable.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - + <item android:drawable="@color/colorAccent" android:state_activated="true" /> </selector>
\ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml index d8fb3247f..c13fdaaef 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml @@ -1,6 +1,33 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.constraint.ConstraintLayout - xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="match_parent"> -</android.support.constraint.ConstraintLayout>
\ No newline at end of file +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools"> + + <data> + <variable + name="machine" + type="com.twine.colorcapture.integration.ExternalBridgeMachine"/> + </data> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:background="@drawable/list_view_selectable" + android:padding="5dp"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@{machine.serialNumber}" + tools:text="Serial Number" + android:textSize="18sp" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@{machine.ipAddress}" + tools:text="IP Address" + android:layout_marginTop="10dp" /> + </LinearLayout> +</layout>
\ No newline at end of file diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml index 82dc3d1df..0e9fba276 100644 --- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_send_to_machine.xml @@ -1,40 +1,58 @@ -<layout xmlns:tools="http://schemas.android.com/tools" - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:bind="http://schemas.android.com/apk/res-auto"> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:bind="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> <data> + <variable name="vm" type="com.twine.colorcapture.views.sendtomachine.SendToMachineFragmentVM" /> </data> <RelativeLayout - android:layoutDirection="ltr" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/colorDarkBackground" + android:layoutDirection="ltr" android:paddingLeft="20dp" android:paddingRight="20dp" - android:background="@color/colorDarkBackground" tools:context="com.twine.colorcapture.views.sendtomachine.SendToMachineFragment"> + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_gravity="center" + android:layout_marginTop="15dp" + android:fontFamily="@font/flexo_bold" + android:letterSpacing="0.07" + android:text="Send To Machine" + android:textSize="17.3sp" /> - <FrameLayout - android:id="@+id/frameTitle" - android:layout_width="match_parent" + <android.support.v7.widget.AppCompatTextView + android:id="@+id/txtScanning" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="15dp"> + android:layout_below="@id/txtTitle" + android:layout_gravity="center" + android:layout_marginTop="15dp" + android:fontFamily="@font/flexo_light" + android:letterSpacing="0.07" + android:text="Scanning for machines on your local network..." + android:textSize="17.3sp" /> - <android.support.v7.widget.AppCompatTextView - android:id="@+id/txtTitlef" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:fontFamily="@font/flexo_bold" - android:letterSpacing="0.07" - android:layout_gravity="center" - android:text="Send To Machine" - android:textSize="17.3sp" /> + <ListView + android:id="@+id/listResults" + android:layout_marginTop="10dp" + android:layout_below="@id/txtScanning" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:choiceMode="none" + android:onItemClick="@{vm::onMachineSelected}" + bind:itemBinding="@{vm.machineBinding}" + bind:items="@{vm.machines}" /> - </FrameLayout> </RelativeLayout> </layout> |
