http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/MapType.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/MapType.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/MapType.java new file mode 100644 index 0000000..18eaa7a --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/MapType.java @@ -0,0 +1,227 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +import org.waveprotocol.wave.model.adt.ObservableBasicMap; +import org.waveprotocol.wave.model.adt.docbased.DocumentBasedBasicMap; +import org.waveprotocol.wave.model.document.Doc; +import org.waveprotocol.wave.model.document.ObservableDocument; +import org.waveprotocol.wave.model.document.util.DefaultDocEventRouter; +import org.waveprotocol.wave.model.document.util.DocEventRouter; +import org.waveprotocol.wave.model.document.util.DocHelper; +import org.waveprotocol.wave.model.util.CopyOnWriteSet; +import org.waveprotocol.wave.model.util.Preconditions; +import org.waveprotocol.wave.model.util.Serializer; +import org.waveprotocol.wave.model.wave.SourcesEvents; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class MapType extends Type implements SourcesEvents<MapType.Listener> { + + + public final static String ROOT_TAG = "map"; + public final static String PREFIX = "map"; + private final static String ENTRY_TAG_NAME = "entry"; + private final static String KEY_ATTR_NAME = "k"; + private final static String VALUE_ATTR_NAME = "v"; + private final CopyOnWriteSet<Listener> listeners = CopyOnWriteSet.create(); + private ObservableBasicMap<String, Type> observableMap; + private ObservableBasicMap.Listener<String, Type> observableMapListener; + private Model model; + private ObservableDocument backendDocument; + private String backendDocumentId; + private Doc.E backendRootElement; + private boolean isAttached; + private Map<String, Type> map; + + public MapType(Model model) { + + this.model = model; + this.isAttached = false; + this.map = new HashMap<String, Type>(); + + observableMapListener = new ObservableBasicMap.Listener<String, Type>() { + + @Override + public void onEntrySet(String key, Type oldValue, Type newValue) { + + if (newValue == null) { + + map.remove(key); + for (Listener l : listeners) + l.onValueRemoved(key, oldValue); + + } else { + + map.put(key, newValue); + for (Listener l : listeners) + l.onValueChanged(key, oldValue, newValue); + + } + + } + }; + } + + protected static Type createAndAttach(Model model, String id) { + // Model Root Doc is a map and more... allow model+root as map doc + Preconditions.checkArgument(id.startsWith(PREFIX) || id.startsWith(Model.ROOT_DOC_PREFIX), + "MapType.fromString() not a map id"); + MapType map = new MapType(model); + map.attach(id); + return map; + + } + + @Override + protected void attach(String docId) { + + + if (docId == null) { + + docId = model.generateDocId(getPrefix()); + backendDocument = model.createDocument(docId); + + } else + backendDocument = model.getDocument(docId); + + backendDocumentId = docId; + + backendRootElement = DocHelper.getElementWithTagName(backendDocument, ROOT_TAG); + if (backendRootElement == null) + backendRootElement = + backendDocument.createChildElement(backendDocument.getDocumentElement(), ROOT_TAG, + Collections.<String, String>emptyMap()); + + DocEventRouter router = DefaultDocEventRouter.create(backendDocument); + + this.observableMap = + DocumentBasedBasicMap.create(router, backendRootElement, Serializer.STRING, + model.getTypeSerializer(), ENTRY_TAG_NAME, KEY_ATTR_NAME, VALUE_ATTR_NAME); + + this.observableMap.addListener(observableMapListener); + + this.isAttached = true; + + } + + protected void deAttach() { + Preconditions.checkArgument(isAttached, "Unable to deAttach an unattached MapType"); + } + + @Override + protected String getPrefix() { + return PREFIX; + } + + @Override + protected boolean isAttached() { + return isAttached; + } + + @Override + protected String serializeToModel() { + Preconditions.checkArgument(isAttached, "Unable to serialize an unattached MapType"); + return backendDocumentId; + } + + @Override + protected ListElementInitializer getListElementInitializer() { + return new ListElementInitializer() { + + @Override + public String getType() { + return PREFIX; + } + + @Override + public String getBackendId() { + return serializeToModel(); + } + }; + } + + @Override + public void addListener(Listener listener) { + listeners.add(listener); + } + + @Override + public void removeListener(Listener listener) { + listeners.add(listener); + } + + public Type get(String key) { + + if (!map.containsKey(key)) { + if (observableMap.keySet().contains(key)) { + map.put(key, observableMap.get(key)); + } else + return null; + } + + return map.get(key); + } + + public Type put(String key, Type value) { + Preconditions.checkArgument(isAttached, "MapType.put(): not attached to model"); + Preconditions.checkArgument(!value.isAttached(), + "MapType.put(): forbidden to add an already attached Type"); + + value.attach(null); + + if (!observableMap.put(key, value)) { + return null; + } + + return value; + } + + public StringType put(String key, String value) { + Preconditions.checkArgument(isAttached, "MapType.put(): not attached to model"); + + StringType strValue = new StringType(model, value); + strValue.attach(null); + + if (!observableMap.put(key, strValue)) { + return null; + } + + return strValue; + } + + public Set<String> keySet() { + return observableMap.keySet(); + } + + public void remove(String key) { + Preconditions.checkArgument(isAttached, "MapType.remove(): not attached to model"); + observableMap.remove(key); + } + + @Override + public String getDocumentId() { + return backendDocumentId; + } + + @Override + public Model getModel() { + return model; + } + + @Override + public String getType() { + return "MapType"; + } + + public interface Listener { + + void onValueChanged(String key, Type oldValue, Type newValue); + + void onValueRemoved(String key, Type value); + + } + + +}
http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Model.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Model.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Model.java new file mode 100644 index 0000000..495f592 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Model.java @@ -0,0 +1,351 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +import com.google.common.collect.ImmutableMap; + +import org.waveprotocol.wave.model.adt.ObservableBasicValue; +import org.waveprotocol.wave.model.adt.ObservableElementList; +import org.waveprotocol.wave.model.adt.docbased.DocumentBasedBasicValue; +import org.waveprotocol.wave.model.adt.docbased.DocumentBasedElementList; +import org.waveprotocol.wave.model.adt.docbased.Factory; +import org.waveprotocol.wave.model.adt.docbased.Initializer; +import org.waveprotocol.wave.model.document.Doc.E; +import org.waveprotocol.wave.model.document.ObservableDocument; +import org.waveprotocol.wave.model.document.WaveContext; +import org.waveprotocol.wave.model.document.operation.DocInitialization; +import org.waveprotocol.wave.model.document.util.DefaultDocEventRouter; +import org.waveprotocol.wave.model.document.util.DocEventRouter; +import org.waveprotocol.wave.model.document.util.DocHelper; +import org.waveprotocol.wave.model.document.util.DocProviders; +import org.waveprotocol.wave.model.document.util.DocumentEventRouter; +import org.waveprotocol.wave.model.id.IdGenerator; +import org.waveprotocol.wave.model.id.IdUtil; +import org.waveprotocol.wave.model.id.ModernIdSerialiser; +import org.waveprotocol.wave.model.id.WaveId; +import org.waveprotocol.wave.model.id.WaveletId; +import org.waveprotocol.wave.model.util.CopyOnWriteSet; +import org.waveprotocol.wave.model.util.Preconditions; +import org.waveprotocol.wave.model.util.Serializer; +import org.waveprotocol.wave.model.version.HashedVersion; +import org.waveprotocol.wave.model.wave.Blip; +import org.waveprotocol.wave.model.wave.ObservableWavelet; +import org.waveprotocol.wave.model.wave.ParticipantId; +import org.waveprotocol.wave.model.wave.SourcesEvents; +import org.waveprotocol.wave.model.wave.WaveletListener; + +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +public class Model implements SourcesEvents<Model.Listener> { + + public static final String MODEL_VERSION = "0.2"; + public static final String WAVELET_ID_PREFIX = "swl"; + public static final String WAVELET_ID = WAVELET_ID_PREFIX + IdUtil.TOKEN_SEPARATOR + "root"; + + public static final String ROOT_DOC_PREFIX = "model"; + private static final String ROOT_DOC_ID = ROOT_DOC_PREFIX + "+root"; + private static final String METADATA_TAG = "model"; + private static final String METADATA_ATTR_VERSION = "v"; + + private static final String STRING_INDEX_TAG = "strings"; + private static final String STRING_ITEM_TAG = "s"; + private static final String STRING_VALUE_ATTR = "v"; + + private static final Factory<E, ObservableBasicValue<String>, String> StringIndexFactory = + new Factory<E, ObservableBasicValue<String>, String>() { + + @Override + public ObservableBasicValue<String> adapt(DocumentEventRouter<? super E, E, ?> router, + E element) { + return DocumentBasedBasicValue.create(router, element, Serializer.STRING, + STRING_VALUE_ATTR); + } + + @Override + public Initializer createInitializer(final String initialState) { + + return new Initializer() { + + @Override + public void initialize(Map<String, String> target) { + target.put(STRING_VALUE_ATTR, initialState); + } + + }; + } + }; + + private final MapSerializer typeSerializer; + private final ObservableDocument rootModelDocument; + private final ObservableElementList<ObservableBasicValue<String>, String> stringIndex; + private final ObservableWavelet wavelet; + private final TypeIdGenerator idGenerator; + private final CopyOnWriteSet<Listener> listeners = CopyOnWriteSet.create(); + private final WaveletListener waveletListener = new WaveletListener() { + + @Override + public void onParticipantRemoved(ObservableWavelet wavelet, ParticipantId participant) { + for (Listener l : listeners) + l.onRemoveParticipant(participant); + } + + @Override + public void onParticipantAdded(ObservableWavelet wavelet, ParticipantId participant) { + for (Listener l : listeners) + l.onAddParticipant(participant); + } + + @Override + public void onLastModifiedTimeChanged(ObservableWavelet wavelet, long oldTime, long newTime) { + + + } + + @Override + public void onBlipAdded(ObservableWavelet wavelet, Blip blip) { + + + } + + @Override + public void onBlipRemoved(ObservableWavelet wavelet, Blip blip) { + + + } + + @Override + public void onBlipSubmitted(ObservableWavelet wavelet, Blip blip) { + + + } + + @Override + public void onBlipTimestampModified(ObservableWavelet wavelet, Blip blip, long oldTime, + long newTime) { + + + } + + @Override + public void onBlipVersionModified(ObservableWavelet wavelet, Blip blip, Long oldVersion, + Long newVersion) { + + + } + + @Override + public void onBlipContributorAdded(ObservableWavelet wavelet, Blip blip, + ParticipantId contributor) { + + + } + + @Override + public void onBlipContributorRemoved(ObservableWavelet wavelet, Blip blip, + ParticipantId contributor) { + + + } + + @Override + public void onVersionChanged(ObservableWavelet wavelet, long oldVersion, long newVersion) { + + } + + @Override + public void onHashedVersionChanged(ObservableWavelet wavelet, HashedVersion oldHashedVersion, + HashedVersion newHashedVersion) { + + } + + @Override + public void onRemoteBlipContentModified(ObservableWavelet wavelet, Blip blip) { + + } + }; + + private MapType rootMap = null; + + protected Model(ObservableWavelet wavelet, TypeIdGenerator idGenerator, + ObservableElementList<ObservableBasicValue<String>, String> stringIndex, + ObservableDocument modelDocument) { + + this.wavelet = wavelet; + this.wavelet.addListener(waveletListener); + + this.idGenerator = idGenerator; + this.stringIndex = stringIndex; + this.rootModelDocument = modelDocument; + this.typeSerializer = new MapSerializer(this); + } + + public static Model create(WaveContext wave, String domain, ParticipantId loggedInUser, + boolean isNewWave, IdGenerator idGenerator) { + + WaveletId waveletId = WaveletId.of(domain, WAVELET_ID); + ObservableWavelet wavelet = wave.getWave().getWavelet(waveletId); + + if (wavelet == null) { + wavelet = wave.getWave().getWavelet(waveletId); + wavelet.addParticipant(loggedInUser); + } + + ObservableDocument modelDocument = wavelet.getDocument(ROOT_DOC_ID); + DocEventRouter router = DefaultDocEventRouter.create(modelDocument); + + E metadataElement = DocHelper.getElementWithTagName(modelDocument, METADATA_TAG); + if (metadataElement == null) { + metadataElement = modelDocument.createChildElement(modelDocument.getDocumentElement(), METADATA_TAG, + ImmutableMap.of(METADATA_ATTR_VERSION, MODEL_VERSION)); + } + + E strIndexElement = DocHelper.getElementWithTagName(modelDocument, STRING_INDEX_TAG); + if (strIndexElement == null) { + strIndexElement = + modelDocument.createChildElement(modelDocument.getDocumentElement(), STRING_INDEX_TAG, + Collections.<String, String>emptyMap()); + } + + return new Model(wavelet, TypeIdGenerator.get(idGenerator), DocumentBasedElementList.create( + router, strIndexElement, STRING_ITEM_TAG, StringIndexFactory), modelDocument); + } + + protected ObservableElementList<ObservableBasicValue<String>, String> getStringIndex() { + return stringIndex; + } + + public WaveId getWaveId() { + return this.wavelet.getWaveId(); + } + + public String getWaveletIdString() { + return ModernIdSerialiser.INSTANCE.serialiseWaveletId(wavelet.getId()); + } + + protected String generateDocId(String prefix) { + return idGenerator.newDocumentId(prefix); + } + + protected ObservableDocument createDocument(String docId) { + Preconditions.checkArgument(!wavelet.getDocumentIds().contains(docId), + "Trying to create an existing substrate document"); + return wavelet.getDocument(docId); + } + + protected DocInitialization getBlipDocInitialization(String text) { + + DocInitialization op; + String initContent = "<body><line/>" + text + "</body>"; + + try { + op = DocProviders.POJO.parse(initContent).asOperation(); + } catch (IllegalArgumentException e) { + /* + if (e.getCause() instanceof XmlParseException) { + + } else { + + } + **/ + return null; + } + + return op; + } + + protected Blip createBlip(String docId) { + Preconditions.checkArgument(!wavelet.getDocumentIds().contains(docId), + "Trying to create an existing substrate document"); + return wavelet.createBlip(docId); + } + + protected ObservableDocument getDocument(String docId) { + Preconditions.checkArgument(wavelet.getDocumentIds().contains(docId), + "Trying to get a non existing substrate document"); + return wavelet.getDocument(docId); + } + + + protected Blip getBlip(String docId) { + Preconditions.checkArgument(wavelet.getDocumentIds().contains(docId), + "Trying to get a non existing substrate document"); + return wavelet.getBlip(docId); + } + + + protected MapSerializer getTypeSerializer() { + return typeSerializer; + } + + @Override + public void addListener(Listener listener) { + listeners.add(listener); + } + + + @Override + public void removeListener(Listener listener) { + listeners.add(listener); + } + + public Set<ParticipantId> getParticipants() { + return wavelet.getParticipantIds(); + } + + public void addParticipant(String address) { + wavelet.addParticipant(ParticipantId.ofUnsafe(address)); + } + + public void removeParticipant(String address) { + wavelet.removeParticipant(ParticipantId.ofUnsafe(address)); + } + + public MapType getRoot() { + + if (rootMap == null) { + rootMap = (MapType) MapType.createAndAttach(this, ROOT_DOC_ID); + } + + return rootMap; + } + + + public MapType createMap() { + return new MapType(this); + } + + public StringType createString(String value) { + return new StringType(this, value); + } + + public ListType createList() { + return new ListType(this); + } + + public TextType createText() { + return new TextType(this); + } + + public TextType createText(String textOrXml) { + TextType tt = new TextType(this); + if (textOrXml != null) tt.setInitContent(textOrXml); + return tt; + } + + public Set<String> getModelDocuments() { + return wavelet.getDocumentIds(); + } + + public String getModelDocument(String documentId) { + return wavelet.getDocument(documentId).toDebugString(); + } + + public interface Listener { + + void onAddParticipant(ParticipantId participant); + + void onRemoveParticipant(ParticipantId participant); + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/StringType.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/StringType.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/StringType.java new file mode 100644 index 0000000..53dc309 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/StringType.java @@ -0,0 +1,159 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +import org.waveprotocol.wave.model.adt.ObservableBasicValue; +import org.waveprotocol.wave.model.util.CopyOnWriteSet; +import org.waveprotocol.wave.model.util.Preconditions; +import org.waveprotocol.wave.model.wave.SourcesEvents; + +public class StringType extends Type implements SourcesEvents<StringType.Listener> { + + + public final static String PREFIX = "str"; + public final static String VALUE_ATTR = "v"; + private final CopyOnWriteSet<Listener> listeners = CopyOnWriteSet.create(); + private ObservableBasicValue<String> observableValue; + private ObservableBasicValue.Listener<String> observableValueListener; + private Model model; + private int indexStringPos; + private String initValue; + private boolean isAttached; + + protected StringType(Model model) { + + this.model = model; + this.initValue = null; + this.observableValueListener = new ObservableBasicValue.Listener<String>() { + + @Override + public void onValueChanged(String oldValue, String newValue) { + for (Listener l : listeners) + l.onValueChanged(oldValue, newValue); + } + }; + } + + public StringType(Model model, String value) { + + this.model = model; + this.initValue = value != null ? value : ""; // null string is not valid + + this.observableValueListener = new ObservableBasicValue.Listener<String>() { + + @Override + public void onValueChanged(String oldValue, String newValue) { + for (Listener l : listeners) + l.onValueChanged(oldValue, newValue); + } + }; + } + + protected static Type createAndAttach(Model model, String id) { + + Preconditions.checkArgument(id.startsWith(PREFIX), + "StringType.createAndAttach() not a string id"); + StringType string = new StringType(model); + string.attach(id); + return string; + + } + + @Override + protected String getPrefix() { + return PREFIX; + } + + @Override + protected void attach(String stringId) { + + if (stringId == null) { + + indexStringPos = model.getStringIndex().size(); + observableValue = model.getStringIndex().add(indexStringPos, initValue); + + } else { + + indexStringPos = Integer.valueOf(stringId.split("\\+")[1]); + observableValue = model.getStringIndex().get(indexStringPos); + initValue = observableValue.get(); + + } + + observableValue.addListener(observableValueListener); + + this.isAttached = true; + + } + + protected void deAttach() { + Preconditions.checkArgument(isAttached, "Unable to deAttach an unattached MapType"); + } + + @Override + protected boolean isAttached() { + return isAttached; + } + + @Override + protected String serializeToModel() { + Preconditions.checkArgument(isAttached, "Unable to serialize an unattached StringType"); + return PREFIX + "+" + Integer.toString(indexStringPos); + } + + @Override + protected ListElementInitializer getListElementInitializer() { + return new ListElementInitializer() { + + @Override + public String getType() { + return PREFIX; + } + + @Override + public String getBackendId() { + Preconditions.checkArgument(isAttached, "Unable to initialize an unattached StringType"); + return serializeToModel(); + } + + }; + } + + @Override + public void addListener(Listener listener) { + listeners.add(listener); + } + + @Override + public void removeListener(Listener listener) { + listeners.remove(listener); + } + + public String getValue() { + if (!isAttached()) + return initValue; + else + return observableValue.get(); + } + + public void setValue(String value) { + if (isAttached()) observableValue.set(value); + } + + @Override + public String getDocumentId() { + return null; + } + + @Override + public Model getModel() { + return model; + } + + @Override + public String getType() { + return "StringType"; + } + + public interface Listener { + void onValueChanged(String oldValue, String newValue); + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TextType.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TextType.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TextType.java new file mode 100644 index 0000000..fc145c8 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TextType.java @@ -0,0 +1,172 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +import org.waveprotocol.wave.model.document.AnnotationInterval; +import org.waveprotocol.wave.model.document.Doc.N; +import org.waveprotocol.wave.model.document.Document; +import org.waveprotocol.wave.model.document.ObservableDocument; +import org.waveprotocol.wave.model.document.util.Point; +import org.waveprotocol.wave.model.document.util.XmlStringBuilder; +import org.waveprotocol.wave.model.util.CopyOnWriteSet; +import org.waveprotocol.wave.model.util.Preconditions; +import org.waveprotocol.wave.model.wave.Blip; +import org.waveprotocol.wave.model.wave.SourcesEvents; + +import java.util.Collections; + +public class TextType extends Type implements SourcesEvents<TextType.Listener> { + + public final static String PREFIX = "b"; + public final static String VALUE_ATTR = "t"; + private final CopyOnWriteSet<Listener> listeners = CopyOnWriteSet.create(); + private Model model; + private Blip blip; + private String initContent; + private boolean isAttached; + + protected TextType(Model model) { + this.model = model; + this.isAttached = false; + } + + protected static Type createAndAttach(Model model, String id) { + Preconditions.checkArgument(id.startsWith(PREFIX), "Not a TextType instance id"); + TextType txt = new TextType(model); + txt.attach(id); + return txt; + } + + protected void setInitContent(String textOrXml) { + this.initContent = textOrXml; + } + + @Override + protected void attach(String docId) { + + if (docId == null) { + docId = model.generateDocId(PREFIX); + blip = model.createBlip(docId); + + if (initContent == null) + initContent = ""; + XmlStringBuilder sb = XmlStringBuilder.createFromXmlString("<body><line/>" + this.initContent + "</body>"); + blip.getContent().appendXml(sb); + + } else { + blip = model.getBlip(docId); + } + Preconditions.checkNotNull(blip, "Unable to attach TextType, couldn't create or get blip"); + isAttached = true; + } + + @Override + protected void deAttach() { + Preconditions.checkArgument(isAttached, "Unable to deAttach an unattached TextType"); + } + + @Override + protected ListElementInitializer getListElementInitializer() { + return new ListElementInitializer() { + + @Override + public String getType() { + return PREFIX; + } + + @Override + public String getBackendId() { + return serializeToModel(); + } + }; + } + + @Override + protected String getPrefix() { + return PREFIX; + } + + @Override + protected boolean isAttached() { + return isAttached; + } + + @Override + protected String serializeToModel() { + Preconditions.checkArgument(isAttached, "Unable to serialize an unattached TextType"); + return blip.getId(); + } + + @Override + public void addListener(Listener listener) { + listeners.add(listener); + } + + @Override + public void removeListener(Listener listener) { + listeners.remove(listener); + } + + @Override + public String getDocumentId() { + return blip.getId(); + } + + @Override + public Model getModel() { + return model; + } + + @Override + public String getType() { + return "TextType"; + } + + public ObservableDocument getMutableDocument() { + return blip.getWavelet().getDocument(blip.getId()); + } + + public void insertText(int location, String text) { + Document doc = blip.getContent(); + doc.insertText(location, text); + } + + public void insertNewLine(int location) { + Document doc = blip.getContent(); + Point<N> point = doc.locate(location); + doc.createElement(point, "line", Collections.<String, String>emptyMap()); + } + + public void deleteText(int start, int end) { + Document doc = blip.getContent(); + doc.deleteRange(start, end); + } + + public int getSize() { + Document doc = blip.getContent(); + return doc.size(); + } + + public String getXml() { + Document doc = blip.getContent(); + return doc.toXmlString(); + } + + public void setAnnotation(int start, int end, String key, String value) { + Document doc = blip.getContent(); + doc.setAnnotation(start, end, key, value); + } + + public String getAnnotation(int location, String key) { + Document doc = blip.getContent(); + return doc.getAnnotation(location, key); + } + + public Iterable<AnnotationInterval<String>> getAllAnnotations(int start, int end) { + Document doc = blip.getContent(); + return doc.annotationIntervals(start, end, null); + } + + public interface Listener { + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Type.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Type.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Type.java new file mode 100644 index 0000000..02fe181 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/Type.java @@ -0,0 +1,47 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +public abstract class Type { + + public static Type createInstance(String type, String backendId, Model model) { + + Type instance = null; + + if (StringType.PREFIX.equals(type)) { + + instance = StringType.createAndAttach(model, backendId); + + } else if (ListType.PREFIX.equals(type)) { + + instance = ListType.createAndAttach(model, backendId); + + } else if (MapType.PREFIX.equals(type)) { + + instance = MapType.createAndAttach(model, backendId); + + } else if (TextType.PREFIX.equals(type)) { + + instance = TextType.createAndAttach(model, backendId); + } + + return instance; + } + + protected abstract void attach(String docId); + + protected abstract void deAttach(); + + protected abstract ListElementInitializer getListElementInitializer(); + + protected abstract String getPrefix(); + + protected abstract boolean isAttached(); + + protected abstract String serializeToModel(); + + public abstract String getDocumentId(); + + public abstract Model getModel(); + + public abstract String getType(); + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TypeIdGenerator.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TypeIdGenerator.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TypeIdGenerator.java new file mode 100644 index 0000000..6aaba6f --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/models/TypeIdGenerator.java @@ -0,0 +1,43 @@ +package app.android.box.waveprotocol.org.androidwave.service.models; + +import org.waveprotocol.wave.model.id.IdGenerator; +import org.waveprotocol.wave.model.id.WaveId; + +public class TypeIdGenerator implements IdGeneratorGeneric { + + + public static final String WAVE_ID_PREFIX = "s"; + private static TypeIdGenerator singleton = null; + private IdGenerator idGenerator; + + TypeIdGenerator() { + + } + + public static TypeIdGenerator get() { + if (singleton == null) singleton = new TypeIdGenerator(); + return singleton; + } + + public static TypeIdGenerator get(IdGenerator idGenerator) { + if (singleton == null) singleton = new TypeIdGenerator(); + singleton.idGenerator = idGenerator; + return singleton; + } + + @Override + public IdGeneratorGeneric initialize(IdGenerator idGenerator) { + this.idGenerator = idGenerator; + return this; + } + + @Override + public WaveId newWaveId() { + return WaveId.of(idGenerator.getDefaultDomain(), idGenerator.newId(WAVE_ID_PREFIX)); + } + + public String newDocumentId(String prefix) { + return idGenerator.newId(prefix); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/AndroidSimpleTimer.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/AndroidSimpleTimer.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/AndroidSimpleTimer.java new file mode 100644 index 0000000..529a23c --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/AndroidSimpleTimer.java @@ -0,0 +1,38 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import java.util.TimerTask; + +public class AndroidSimpleTimer implements SimpleTimer { + + private final TimerTask task; + + public static final SimpleTimer.Factory FACTORY = new SimpleTimer.Factory() { + public SimpleTimer create(TimerTask task) { + return new AndroidSimpleTimer(task); + } + }; + + public AndroidSimpleTimer(TimerTask task) { + this.task = task; + } + + @Override + public double getTime() { + return 0; + } + + @Override + public void schedule() { + + } + + @Override + public void schedule(double when) { + + } + + @Override + public void cancel() { + + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/BrowserBackedScheduler.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/BrowserBackedScheduler.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/BrowserBackedScheduler.java new file mode 100644 index 0000000..d4dcddf --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/BrowserBackedScheduler.java @@ -0,0 +1,104 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import java.util.TimerTask; + +public class BrowserBackedScheduler implements Scheduler { + + private final JobRegistry jobs; + private final SimpleTimer timer; + private final Controller controller; + private double nextSliceRunTime = Double.MAX_VALUE; + private int timeSliceMillis = 100; + + public BrowserBackedScheduler(SimpleTimer.Factory timerFactory, Controller controller) { + this.timer = timerFactory.create(runner); + this.controller = controller; + this.jobs = new JobRegistry(controller); + } + + private final TimerTask runner = new TimerTask() { + + @Override + public void run() { + nextSliceRunTime = Double.MAX_VALUE; + workSlice(timeSliceMillis); + double next = getNextRunTime(); + if (next == 0) { + maybeScheduleSlice(); + } else if (next > 0) { + maybeScheduleSlice(next); + } + } + }; + + private void workSlice(int maxMillis) { + + } + + private double getNextRunTime() { + return 0; + } + + private void maybeScheduleSlice(){ + + } + + private void maybeScheduleSlice(double when){ + + } + + @Override + public void noteUserActivity() { + + } + + @Override + public void schedule(Priority priority, Task task) { + + } + + @Override + public void schedule(Priority priority, IncrementalTask process) { + + } + + @Override + public void scheduleDelayed(Priority priority, Task task, int minimumTime) { + + } + + @Override + public void scheduleDelayed(Priority priority, IncrementalTask process, int minimumTime) { + + } + + @Override + public void scheduleRepeating(Priority priority, IncrementalTask process, int minimumTime, int interval) { + + } + + @Override + public void cancel(Schedulable job) { + + } + + @Override + public boolean isScheduled(Schedulable job) { + return false; + } + + @Override + public void addListener(Listener listener) { + + } + + @Override + public void removeListener(Listener listener) { + + } + + @Override + public String debugShortDescription() { + return null; + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Controller.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Controller.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Controller.java new file mode 100644 index 0000000..d35c8a8 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Controller.java @@ -0,0 +1,36 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +public interface Controller { + + void jobAdded(Scheduler.Priority priority, Scheduler.Schedulable job); + + void jobRemoved(Scheduler.Priority priority, Scheduler.Schedulable job); + + boolean isRunnable(Scheduler.Priority priority); + + boolean isSuppressed(Scheduler.Priority priority, Scheduler.Schedulable job); + + public static final Controller NOOP = new Controller() { + + + @Override + public void jobAdded(Scheduler.Priority priority, Scheduler.Schedulable job) { + // Do nothing + } + + @Override + public void jobRemoved(Scheduler.Priority priority, Scheduler.Schedulable job) { + // Do nothing + } + + @Override + public boolean isRunnable(Scheduler.Priority priority) { + return true; + } + + @Override + public boolean isSuppressed(Scheduler.Priority priority, Scheduler.Schedulable job) { + return false; + } + }; +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/JobRegistry.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/JobRegistry.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/JobRegistry.java new file mode 100644 index 0000000..ed2f9eb --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/JobRegistry.java @@ -0,0 +1,25 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import org.waveprotocol.wave.model.util.CollectionUtils; +import org.waveprotocol.wave.model.util.IntMap; + +import java.util.LinkedList; +import java.util.Queue; + +public class JobRegistry { + + private int jobCount; + + private final Controller jobCounter; + + private final IntMap<Queue<Scheduler.Schedulable>> priorities = CollectionUtils.createIntMap(); + + public JobRegistry(Controller jobCounter) { + this.jobCounter = jobCounter; + + for (Scheduler.Priority p : Scheduler.Priority.values()) { + priorities.put(p.ordinal(), new LinkedList<Scheduler.Schedulable>()); + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/OptimalGroupingScheduler.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/OptimalGroupingScheduler.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/OptimalGroupingScheduler.java new file mode 100644 index 0000000..0c7b2c2 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/OptimalGroupingScheduler.java @@ -0,0 +1,17 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import org.waveprotocol.wave.model.util.FuzzingBackOffScheduler; +import org.waveprotocol.wave.model.util.FuzzingBackOffScheduler.CollectiveScheduler; +import org.waveprotocol.wave.model.util.Scheduler; + + +public class OptimalGroupingScheduler implements CollectiveScheduler { + + public OptimalGroupingScheduler(Object lowPriorityTimer) { + } + + @Override + public FuzzingBackOffScheduler.Cancellable schedule(Scheduler.Command command, int i, int i1) { + return null; + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Scheduler.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Scheduler.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Scheduler.java new file mode 100644 index 0000000..460838d --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/Scheduler.java @@ -0,0 +1,53 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +public interface Scheduler { + + public interface Listener { + void onJobExecuted(Schedulable job, int timeSpent); + } + + public interface Schedulable { + } + + public interface Task extends Schedulable { + + void execute(); + } + + public interface IncrementalTask extends Schedulable { + + boolean execute(); + } + + public enum Priority { + CRITICAL, + HIGH, + MEDIUM, + LOW, + INTERNAL_SUPPRESS; + } + + public void noteUserActivity(); + + void schedule(Priority priority, Task task); + + void schedule(Priority priority, IncrementalTask process); + + void scheduleDelayed(Priority priority, Task task, int minimumTime); + + void scheduleDelayed(Priority priority, IncrementalTask process, + int minimumTime); + + void scheduleRepeating(Priority priority, IncrementalTask process, + int minimumTime, int interval); + + void cancel(Schedulable job); + + boolean isScheduled(Schedulable job); + + void addListener(Listener listener); + + void removeListener(Listener listener); + + public String debugShortDescription(); +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerInstance.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerInstance.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerInstance.java new file mode 100644 index 0000000..6c90fd7 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerInstance.java @@ -0,0 +1,34 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + + + +public class SchedulerInstance { + + private static TimerService low; + private static TimerService high; + private static TimerService medium; + + private static BrowserBackedScheduler instance; + + private static void init() { + if (instance == null) { + setSchedulerInstance(new BrowserBackedScheduler(AndroidSimpleTimer.FACTORY, Controller.NOOP)); + } + } + + public static void setSchedulerInstance(BrowserBackedScheduler instance) { + SchedulerInstance.instance = instance; + setDefaultTimerService(); + } + + private static void setDefaultTimerService() { + low = new SchedulerTimerService(instance, Scheduler.Priority.LOW); + high = new SchedulerTimerService(instance, Scheduler.Priority.HIGH); + medium = new SchedulerTimerService(instance, Scheduler.Priority.MEDIUM); + } + + public static TimerService getLowPriorityTimer() { + init(); + return low; + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerTimerService.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerTimerService.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerTimerService.java new file mode 100644 index 0000000..c5f15af --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SchedulerTimerService.java @@ -0,0 +1,54 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +/** + * Created by charith on 8/12/15. + */ +public class SchedulerTimerService implements TimerService { + public SchedulerTimerService(BrowserBackedScheduler instance, Object p1) { + } + + @Override + public void schedule(Scheduler.Task task) { + + } + + @Override + public void schedule(Scheduler.IncrementalTask process) { + + } + + @Override + public void scheduleDelayed(Scheduler.Task task, int minimumTime) { + + } + + @Override + public void scheduleDelayed(Scheduler.IncrementalTask process, int minimumTime) { + + } + + @Override + public void scheduleRepeating(Scheduler.IncrementalTask process, int minimumTime, int interval) { + + } + + @Override + public void cancel(Scheduler.Schedulable job) { + + } + + @Override + public boolean isScheduled(Scheduler.Schedulable job) { + return false; + } + + @Override + public int elapsedMillis() { + return 0; + } + + @Override + public double currentTimeMillis() { + return 0; + } +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SimpleTimer.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SimpleTimer.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SimpleTimer.java new file mode 100644 index 0000000..2bf4233 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/SimpleTimer.java @@ -0,0 +1,18 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import java.util.TimerTask; + +public interface SimpleTimer { + + public interface Factory { + SimpleTimer create(TimerTask runnable); + } + + double getTime(); + + void schedule(); + + void schedule(double when); + + void cancel(); +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/TimerService.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/TimerService.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/TimerService.java new file mode 100644 index 0000000..2d07696 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/service/scheduler/TimerService.java @@ -0,0 +1,27 @@ +package app.android.box.waveprotocol.org.androidwave.service.scheduler; + +import app.android.box.waveprotocol.org.androidwave.service.scheduler.Scheduler.Task; +import app.android.box.waveprotocol.org.androidwave.service.scheduler.Scheduler.IncrementalTask; +import app.android.box.waveprotocol.org.androidwave.service.scheduler.Scheduler.Schedulable; + +public interface TimerService { + + void schedule(Task task); + + void schedule(IncrementalTask process); + + void scheduleDelayed(Task task, int minimumTime); + + void scheduleDelayed(IncrementalTask process, int minimumTime); + + void scheduleRepeating(IncrementalTask process, int minimumTime, int interval); + + void cancel(Schedulable job); + + boolean isScheduled(Schedulable job); + + int elapsedMillis(); + + double currentTimeMillis(); + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/java/app/android/box/waveprotocol/org/androidwave/util/Util.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/app/android/box/waveprotocol/org/androidwave/util/Util.java b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/util/Util.java new file mode 100644 index 0000000..01b7fc6 --- /dev/null +++ b/app/src/main/java/app/android/box/waveprotocol/org/androidwave/util/Util.java @@ -0,0 +1,42 @@ +package app.android.box.waveprotocol.org.androidwave.util; + +/** + * Created by charith on 8/1/15. + */ +public class Util { + + /** + * This method get Wave username as input and it split it to username and hostname + * + * @param username Wave user's username + * @return hostname and username + */ + public static String[] getHostAndUserNames(String username) { + + String[] usernameAndHost = username.split("@"); + + if (usernameAndHost.length > 1) { + return usernameAndHost; + } + + return null; + } + + /** + * This method generate http url for given hostname + * + * @param hostname Apache Wave server name + * @return http url of the host + */ + public static String hostCreator(String hostname, String servlet) { + + StringBuilder hostUrl = new StringBuilder(); + + if (hostname.equalsIgnoreCase("local.net")) { + hostname = "10.0.2.2:9898"; + } + + return hostUrl.append("http://").append(hostname).append("/").append(servlet).toString(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/anim/move.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/anim/move.xml b/app/src/main/res/anim/move.xml new file mode 100644 index 0000000..f00fc91 --- /dev/null +++ b/app/src/main/res/anim/move.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<set + xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@android:anim/linear_interpolator" + android:fillAfter="true"> + + <translate + android:fromYDelta="0%p" + android:toYDelta="-30%p" + android:duration="2000" /> +</set> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/anim/rotate.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/anim/rotate.xml b/app/src/main/res/anim/rotate.xml new file mode 100644 index 0000000..5fad358 --- /dev/null +++ b/app/src/main/res/anim/rotate.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <rotate android:fromDegrees="0" + android:toDegrees="360" + android:pivotX="50%" + android:pivotY="50%" + android:duration="600" + android:repeatMode="restart" + android:repeatCount="infinite" + android:interpolator="@android:anim/cycle_interpolator"/> +</set> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable-hdpi/check_sm.9.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable-hdpi/check_sm.9.png b/app/src/main/res/drawable-hdpi/check_sm.9.png new file mode 100644 index 0000000..9981a75 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/check_sm.9.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable-hdpi/ic_action_search.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable-hdpi/ic_action_search.png b/app/src/main/res/drawable-hdpi/ic_action_search.png new file mode 100644 index 0000000..40f4769 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_search.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable-mdpi/ic_action_search.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable-mdpi/ic_action_search.png b/app/src/main/res/drawable-mdpi/ic_action_search.png new file mode 100644 index 0000000..43a857b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_search.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable-xhdpi/ic_action_search.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable-xhdpi/ic_action_search.png b/app/src/main/res/drawable-xhdpi/ic_action_search.png new file mode 100644 index 0000000..86ce171 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_search.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable-xxhdpi/ic_action_search.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_search.png b/app/src/main/res/drawable-xxhdpi/ic_action_search.png new file mode 100644 index 0000000..321e9c1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_search.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/backgroud.jpg ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/backgroud.jpg b/app/src/main/res/drawable/backgroud.jpg new file mode 100644 index 0000000..ca77967 Binary files /dev/null and b/app/src/main/res/drawable/backgroud.jpg differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/circle.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/circle.xml b/app/src/main/res/drawable/circle.xml new file mode 100644 index 0000000..13c7e63 --- /dev/null +++ b/app/src/main/res/drawable/circle.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:top="8px"> + <layer-list> + <item> + <shape android:shape="oval"> + <solid android:color="#08000000"/> + <padding + android:bottom="3px" + android:left="3px" + android:right="3px" + android:top="3px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#09000000"/> + <padding + android:bottom="2px" + android:left="2px" + android:right="2px" + android:top="2px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#10000000"/> + <padding + android:bottom="2px" + android:left="2px" + android:right="2px" + android:top="2px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#11000000"/> + <padding + android:bottom="1px" + android:left="1px" + android:right="1px" + android:top="1px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#12000000"/> + <padding + android:bottom="1px" + android:left="1px" + android:right="1px" + android:top="1px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#13000000"/> + <padding + android:bottom="1px" + android:left="1px" + android:right="1px" + android:top="1px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#14000000"/> + <padding + android:bottom="1px" + android:left="1px" + android:right="1px" + android:top="1px" + /> + </shape> + </item> + <item> + <shape android:shape="oval"> + <solid android:color="#15000000"/> + <padding + android:bottom="1px" + android:left="1px" + android:right="1px" + android:top="1px" + /> + </shape> + </item> + + </layer-list> + </item> + + <item > + + <ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="?android:colorControlHighlight"> + <item android:id="@android:id/mask"> + <shape android:shape="oval"> + <solid android:color="#FFBB00" /> + </shape> + </item> + <item> + <shape android:shape="oval"> + + <solid android:color="@color/colorPrimary" /> + + + </shape> + </item> + </ripple> + + </item> + + +</layer-list> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action.png b/app/src/main/res/drawable/ic_action.png new file mode 100644 index 0000000..3acf41b Binary files /dev/null and b/app/src/main/res/drawable/ic_action.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_backward.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_backward.png b/app/src/main/res/drawable/ic_action_backward.png new file mode 100644 index 0000000..0118606 Binary files /dev/null and b/app/src/main/res/drawable/ic_action_backward.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_drawer.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_drawer.png b/app/src/main/res/drawable/ic_action_drawer.png new file mode 100644 index 0000000..37629fe Binary files /dev/null and b/app/src/main/res/drawable/ic_action_drawer.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_forword.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_forword.png b/app/src/main/res/drawable/ic_action_forword.png new file mode 100644 index 0000000..92b29a6 Binary files /dev/null and b/app/src/main/res/drawable/ic_action_forword.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_next_item.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_next_item.png b/app/src/main/res/drawable/ic_action_next_item.png new file mode 100644 index 0000000..5f30474 Binary files /dev/null and b/app/src/main/res/drawable/ic_action_next_item.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_search_back.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_search_back.png b/app/src/main/res/drawable/ic_action_search_back.png new file mode 100644 index 0000000..1ea57c7 Binary files /dev/null and b/app/src/main/res/drawable/ic_action_search_back.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_action_search_forward.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_action_search_forward.png b/app/src/main/res/drawable/ic_action_search_forward.png new file mode 100644 index 0000000..fd1b3de Binary files /dev/null and b/app/src/main/res/drawable/ic_action_search_forward.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_arrow_forward_white_1.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_arrow_forward_white_1.png b/app/src/main/res/drawable/ic_arrow_forward_white_1.png new file mode 100644 index 0000000..b8c16a3 Binary files /dev/null and b/app/src/main/res/drawable/ic_arrow_forward_white_1.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_arrow_forward_white_2.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_arrow_forward_white_2.png b/app/src/main/res/drawable/ic_arrow_forward_white_2.png new file mode 100644 index 0000000..552d40d Binary files /dev/null and b/app/src/main/res/drawable/ic_arrow_forward_white_2.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_launcher.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_launcher.png b/app/src/main/res/drawable/ic_launcher.png new file mode 100644 index 0000000..c877026 Binary files /dev/null and b/app/src/main/res/drawable/ic_launcher.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_profile.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_profile.png b/app/src/main/res/drawable/ic_profile.png new file mode 100644 index 0000000..4957c4a Binary files /dev/null and b/app/src/main/res/drawable/ic_profile.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_search.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_search.png b/app/src/main/res/drawable/ic_search.png new file mode 100644 index 0000000..dd5adfc Binary files /dev/null and b/app/src/main/res/drawable/ic_search.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/ic_search2.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/ic_search2.png b/app/src/main/res/drawable/ic_search2.png new file mode 100644 index 0000000..3acabfe Binary files /dev/null and b/app/src/main/res/drawable/ic_search2.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_a.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_a.png b/app/src/main/res/drawable/letter_a.png new file mode 100644 index 0000000..c148287 Binary files /dev/null and b/app/src/main/res/drawable/letter_a.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_b.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_b.png b/app/src/main/res/drawable/letter_b.png new file mode 100644 index 0000000..40f5ac2 Binary files /dev/null and b/app/src/main/res/drawable/letter_b.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_c.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_c.png b/app/src/main/res/drawable/letter_c.png new file mode 100644 index 0000000..0e2408e Binary files /dev/null and b/app/src/main/res/drawable/letter_c.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_d.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_d.png b/app/src/main/res/drawable/letter_d.png new file mode 100644 index 0000000..b46d7e3 Binary files /dev/null and b/app/src/main/res/drawable/letter_d.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_e.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_e.png b/app/src/main/res/drawable/letter_e.png new file mode 100644 index 0000000..feb3e1d Binary files /dev/null and b/app/src/main/res/drawable/letter_e.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_f.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_f.png b/app/src/main/res/drawable/letter_f.png new file mode 100644 index 0000000..20307ec Binary files /dev/null and b/app/src/main/res/drawable/letter_f.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_g.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_g.png b/app/src/main/res/drawable/letter_g.png new file mode 100644 index 0000000..1a8f373 Binary files /dev/null and b/app/src/main/res/drawable/letter_g.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_h.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_h.png b/app/src/main/res/drawable/letter_h.png new file mode 100644 index 0000000..0980c42 Binary files /dev/null and b/app/src/main/res/drawable/letter_h.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_i.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_i.png b/app/src/main/res/drawable/letter_i.png new file mode 100644 index 0000000..b18910b Binary files /dev/null and b/app/src/main/res/drawable/letter_i.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_j.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_j.png b/app/src/main/res/drawable/letter_j.png new file mode 100644 index 0000000..2cc1788 Binary files /dev/null and b/app/src/main/res/drawable/letter_j.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_k.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_k.png b/app/src/main/res/drawable/letter_k.png new file mode 100644 index 0000000..befed12 Binary files /dev/null and b/app/src/main/res/drawable/letter_k.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_l.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_l.png b/app/src/main/res/drawable/letter_l.png new file mode 100644 index 0000000..cc7b3c8 Binary files /dev/null and b/app/src/main/res/drawable/letter_l.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_m.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_m.png b/app/src/main/res/drawable/letter_m.png new file mode 100644 index 0000000..c74a90a Binary files /dev/null and b/app/src/main/res/drawable/letter_m.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_n.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_n.png b/app/src/main/res/drawable/letter_n.png new file mode 100644 index 0000000..65e532d Binary files /dev/null and b/app/src/main/res/drawable/letter_n.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_o.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_o.png b/app/src/main/res/drawable/letter_o.png new file mode 100644 index 0000000..f3ec11f Binary files /dev/null and b/app/src/main/res/drawable/letter_o.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_p.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_p.png b/app/src/main/res/drawable/letter_p.png new file mode 100644 index 0000000..0f6fba1 Binary files /dev/null and b/app/src/main/res/drawable/letter_p.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_q.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_q.png b/app/src/main/res/drawable/letter_q.png new file mode 100644 index 0000000..d331416 Binary files /dev/null and b/app/src/main/res/drawable/letter_q.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_r.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_r.png b/app/src/main/res/drawable/letter_r.png new file mode 100644 index 0000000..43f4f5d Binary files /dev/null and b/app/src/main/res/drawable/letter_r.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_s.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_s.png b/app/src/main/res/drawable/letter_s.png new file mode 100644 index 0000000..3e50227 Binary files /dev/null and b/app/src/main/res/drawable/letter_s.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_t.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_t.png b/app/src/main/res/drawable/letter_t.png new file mode 100644 index 0000000..a5d8a5a Binary files /dev/null and b/app/src/main/res/drawable/letter_t.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_u.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_u.png b/app/src/main/res/drawable/letter_u.png new file mode 100644 index 0000000..d9372c2 Binary files /dev/null and b/app/src/main/res/drawable/letter_u.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_v.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_v.png b/app/src/main/res/drawable/letter_v.png new file mode 100644 index 0000000..2020a45 Binary files /dev/null and b/app/src/main/res/drawable/letter_v.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_w.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_w.png b/app/src/main/res/drawable/letter_w.png new file mode 100644 index 0000000..5ed2ca5 Binary files /dev/null and b/app/src/main/res/drawable/letter_w.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_x.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_x.png b/app/src/main/res/drawable/letter_x.png new file mode 100644 index 0000000..94ebb41 Binary files /dev/null and b/app/src/main/res/drawable/letter_x.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_y.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_y.png b/app/src/main/res/drawable/letter_y.png new file mode 100644 index 0000000..46f1944 Binary files /dev/null and b/app/src/main/res/drawable/letter_y.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/drawable/letter_z.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/letter_z.png b/app/src/main/res/drawable/letter_z.png new file mode 100644 index 0000000..61bb0d4 Binary files /dev/null and b/app/src/main/res/drawable/letter_z.png differ http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_activity.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_activity.xml b/app/src/main/res/layout/chat_activity.xml new file mode 100644 index 0000000..6be9e57 --- /dev/null +++ b/app/src/main/res/layout/chat_activity.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" android:layout_height="match_parent"> + +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_fragment.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_fragment.xml b/app/src/main/res/layout/chat_fragment.xml new file mode 100644 index 0000000..6be9e57 --- /dev/null +++ b/app/src/main/res/layout/chat_fragment.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" android:layout_height="match_parent"> + +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_new_friend_activity.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_new_friend_activity.xml b/app/src/main/res/layout/chat_new_friend_activity.xml new file mode 100644 index 0000000..6be9e57 --- /dev/null +++ b/app/src/main/res/layout/chat_new_friend_activity.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" android:layout_height="match_parent"> + +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_new_friend_fragment.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_new_friend_fragment.xml b/app/src/main/res/layout/chat_new_friend_fragment.xml new file mode 100644 index 0000000..6be9e57 --- /dev/null +++ b/app/src/main/res/layout/chat_new_friend_fragment.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" android:layout_height="match_parent"> + +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_new_wave_activtiy.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_new_wave_activtiy.xml b/app/src/main/res/layout/chat_new_wave_activtiy.xml new file mode 100644 index 0000000..31601f8 --- /dev/null +++ b/app/src/main/res/layout/chat_new_wave_activtiy.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/drawer_layout"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <LinearLayout + android:id="@+id/container_toolbar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <include + android:id="@+id/toolbar" + layout="@layout/toolbar" /> + </LinearLayout> + + <FrameLayout + android:id="@+id/container_body_chat_newWave" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" /> + + + </LinearLayout> +</LinearLayout> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/chat_new_wave_fragment.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/chat_new_wave_fragment.xml b/app/src/main/res/layout/chat_new_wave_fragment.xml new file mode 100644 index 0000000..028267f --- /dev/null +++ b/app/src/main/res/layout/chat_new_wave_fragment.xml @@ -0,0 +1,15 @@ +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/coordinatorLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + tools:context="info.androidhive.materialdesign.activity.HomeFragment"> + + <ListView + android:id="@android:id/list" + android:layout_width="match_parent" + android:layout_height="wrap_content" > + </ListView> + +</RelativeLayout> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/custom_message_row.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/custom_message_row.xml b/app/src/main/res/layout/custom_message_row.xml new file mode 100644 index 0000000..32de049 --- /dev/null +++ b/app/src/main/res/layout/custom_message_row.xml @@ -0,0 +1,37 @@ +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/coordinatorLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal" + > + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/imageViewMessage" + android:layout_margin="10dp" + /> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/textViewHeader" + android:gravity="left" + android:textSize="25dp" + android:paddingTop="10dp" + /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/textViewContent" + android:gravity="left" + android:textSize="15dp" + /> + </LinearLayout> + +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/custom_row.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/custom_row.xml b/app/src/main/res/layout/custom_row.xml new file mode 100644 index 0000000..6faa338 --- /dev/null +++ b/app/src/main/res/layout/custom_row.xml @@ -0,0 +1,22 @@ +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/coordinatorLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal" + > + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/imageViewFriend" + android:layout_margin="10dp" + /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/textViewFriend" + android:gravity="center" + android:textSize="25dp" + android:layout_margin="20dp" + /> +</LinearLayout> http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/fragment_navigation_drawer.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml new file mode 100644 index 0000000..17dd42a --- /dev/null +++ b/app/src/main/res/layout/fragment_navigation_drawer.xml @@ -0,0 +1,32 @@ +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/white"> + + + <RelativeLayout + android:id="@+id/nav_header_container" + android:layout_width="match_parent" + android:layout_height="140dp" + android:layout_alignParentTop="true" + android:background="@drawable/backgroud"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:src="@drawable/ic_profile" + android:scaleType="fitCenter" + android:layout_centerInParent="true" /> + + </RelativeLayout> + + + <android.support.v7.widget.RecyclerView + android:id="@+id/drawerList" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/nav_header_container" + android:layout_marginTop="15dp" /> + + +</RelativeLayout> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-wave-android/blob/514564b1/app/src/main/res/layout/header.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/header.xml b/app/src/main/res/layout/header.xml new file mode 100644 index 0000000..7f43314 --- /dev/null +++ b/app/src/main/res/layout/header.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="190dp" + android:background="@color/colorPrimary" + android:orientation="vertical"> + + <de.hdodenhof.circleimageview.CircleImageView + android:id="@+id/profile_image" + android:layout_width="76dp" + android:layout_height="76dp" + android:src="@drawable/ic_launcher" + android:layout_marginLeft="24dp" + android:layout_centerVertical="true" + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" + android:layout_marginStart="24dp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Apache Wave" + android:textSize="14sp" + android:textColor="#FFF" + android:textStyle="bold" + android:gravity="left" + android:paddingBottom="4dp" + android:id="@+id/username" + android:layout_above="@+id/email" + android:layout_alignLeft="@+id/profile_image" + android:layout_alignStart="@+id/profile_image" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="[email protected]" + android:id="@+id/email" + android:gravity="left" + android:layout_marginBottom="8dp" + android:textSize="14sp" + android:textColor="#fff" + android:layout_alignParentBottom="true" + android:layout_alignLeft="@+id/username" + android:layout_alignStart="@+id/username" /> + +</RelativeLayout>
