Skip to content
This repository has been archived by the owner on Dec 29, 2019. It is now read-only.

Commit

Permalink
Merge pull request #39 from ened/demo
Browse files Browse the repository at this point in the history
Simple demo App
  • Loading branch information
Mark Raymond Jr committed Oct 8, 2018
2 parents ca43968 + 0aab8ba commit 1d9e031
Show file tree
Hide file tree
Showing 54 changed files with 745 additions and 136 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@ local.properties
.idea/libraries/
.idea/workspace.xml
.idea/tasks.xml
.idea/caches/
.idea/.name
.idea/compiler.xml
.idea/gradle.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/runConfigurations.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
*.iml
Expand Down
44 changes: 11 additions & 33 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,41 +1,19 @@
apply plugin: 'com.android.library'
buildscript {
ext.kotlin_version = '1.2.71'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 25
versionCode 3
versionName '0.3'
version 0.3
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
}
classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" }
}

repositories {
jcenter()
mavenCentral()
}

dependencies {
compile 'com.android.support:support-annotations:25.3.1'
compile 'com.arasthel:asyncjob-library:1.0.3'
compile 'com.bluelinelabs:logansquare:1.0.6'
allprojects {
repositories {
jcenter()
mavenCentral()
google()
}
}
1 change: 1 addition & 0 deletions demo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
44 changes: 44 additions & 0 deletions demo/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28



defaultConfig {
applicationId "com.peak.salut.demo"
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation project(':library')

annotationProcessor 'com.bluelinelabs:logansquare-compiler:1.3.7'
implementation 'com.bluelinelabs:logansquare:1.3.7'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.pascalwelsch.arrayadapter:arrayadapter:1.3.0'
}
21 changes: 21 additions & 0 deletions demo/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
21 changes: 21 additions & 0 deletions demo/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.peak.salut.demo">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
175 changes: 175 additions & 0 deletions demo/src/main/java/com/peak/salut/demo/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
package com.peak.salut.demo

import android.app.PendingIntent.getActivity
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.util.Log
import android.view.*
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import com.bluelinelabs.logansquare.LoganSquare
import com.pascalwelsch.arrayadapter.ArrayAdapter
import com.peak.salut.Callbacks.SalutCallback
import com.peak.salut.Callbacks.SalutDataCallback
import com.peak.salut.Callbacks.SalutDeviceCallback
import com.peak.salut.Salut
import com.peak.salut.SalutDataReceiver
import com.peak.salut.SalutDevice
import com.peak.salut.SalutServiceData
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {

enum class UiState {
DEFAULT,
HOST_MODE,
CLIENT_MODE
}

class MySalut(dataReceiver: SalutDataReceiver?, salutServiceData: SalutServiceData?, deviceNotSupported: SalutCallback?) : Salut(dataReceiver, salutServiceData, deviceNotSupported) {
override fun serialize(o: Any?): String {
return LoganSquare.serialize(o)
}
}

private lateinit var salut: Salut
private var uiState = UiState.DEFAULT

private lateinit var connectedDevicesAdapter: SimpleAdapter

companion object {
const val TAG = "SalutDemo"
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val dataReceiver = SalutDataReceiver(this, SalutDataCallback {

})

val instanceName = "Demo ID ${Random().nextInt(200)}"

instanceNameLabel.text = "My Instance Name: $instanceName"

val serviceData = SalutServiceData("sas", 50489, instanceName)

salut = MySalut(dataReceiver, serviceData, SalutCallback {
Log.e(TAG, "Device does not support WiFi P2P")
})

list.layoutManager = LinearLayoutManager(this)
connectedDevicesAdapter = SimpleAdapter()
list.adapter = connectedDevicesAdapter

startService.setOnClickListener { _ ->
updateUiState(UiState.HOST_MODE)

salut.startNetworkService({
connectedDevicesAdapter.add(it)
Toast.makeText(this.baseContext, it.readableName + " connected.", Toast.LENGTH_SHORT).show();
}, {
Log.d(TAG, "Network service started")
}, {
Log.e(TAG, "Can not start network service")
})
}

connectService.setOnClickListener { _ ->
updateUiState(UiState.CLIENT_MODE)

connectedDevicesAdapter.setAction("Connect") { position ->
val salutDevice = connectedDevicesAdapter.getItem(position)
salut.registerWithHost(salutDevice, {
Log.d(TAG, "Successfully registered")
Toast.makeText(this.baseContext, "Successfully connected to " + this.salut.registeredHost.readableName, Toast.LENGTH_SHORT).show();
}, {
Log.e(TAG, "Error registering")
})
}

salut.discoverNetworkServices(SalutDeviceCallback {
connectedDevicesAdapter.add(it)


}, true)
}
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
MenuInflater(this).inflate(R.menu.menu_demo, menu)

if (uiState == UiState.DEFAULT) {
menu?.removeItem(R.id.stop)
}

return true
}

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
if (item?.itemId == R.id.stop) {
if (uiState == UiState.HOST_MODE) {
salut.stopNetworkService(false)
updateUiState(UiState.DEFAULT)
} else if (uiState == UiState.CLIENT_MODE) {
salut.stopServiceDiscovery(true)
updateUiState(UiState.DEFAULT)
}
return true
}

return false
}

private fun updateUiState(mode: UiState) {
this.uiState = mode
startService.visibility = if (mode == UiState.HOST_MODE) View.VISIBLE else View.GONE
connectService.visibility = if (mode == UiState.CLIENT_MODE) View.VISIBLE else View.GONE

invalidateOptionsMenu()
}

class SimpleAdapter : ArrayAdapter<SalutDevice, SimpleViewHolder>() {

private var actionTitle: String? = null
private var action: ((index: Int) -> Unit)? = null

fun setAction(title: String, action: ((index: Int) -> Unit)) {
actionTitle = title
this.action = action

notifyDataSetChanged()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SimpleViewHolder {
val view = LayoutInflater.from(parent.context)
return SimpleViewHolder(view.inflate(R.layout.list_item_device, parent, false))
}

override fun getItemId(item: SalutDevice): Any? {
return item.macAddress
}

override fun onBindViewHolder(viewHolder: SimpleViewHolder, position: Int) {
viewHolder.titleView.text = getItem(position)?.instanceName

viewHolder.action.visibility = if (action != null) View.VISIBLE else View.GONE
if (action != null) {
viewHolder.action.text = actionTitle
viewHolder.action.setOnClickListener { _ ->
action?.let { it -> it(position) }
}
}
}
}

class SimpleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val titleView: TextView = itemView.findViewById(R.id.title)
val action: Button = itemView.findViewById(R.id.action)
}
}
Binary file added demo/src/main/res/drawable-hdpi/ic_action_cancel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added demo/src/main/res/drawable-mdpi/ic_action_cancel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions demo/src/main/res/drawable-v24/ic_launcher_foreground.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 1d9e031

Please sign in to comment.