Project structure change
							
								
								
									
										1
									
								
								Android/app/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| /build | ||||
							
								
								
									
										28
									
								
								Android/app/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,28 @@ | ||||
| apply plugin: 'com.android.application' | ||||
|  | ||||
| android { | ||||
|     compileSdkVersion 26 | ||||
|     defaultConfig { | ||||
|         applicationId "yehor.vialov.vaporizr2" | ||||
|         minSdkVersion 25 | ||||
|         targetSdkVersion 26 | ||||
|         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 'com.android.support:appcompat-v7:26.1.0' | ||||
|     implementation 'com.android.support.constraint:constraint-layout:1.0.2' | ||||
|     testImplementation 'junit:junit:4.12' | ||||
|     androidTestImplementation 'com.android.support.test:runner:1.0.1' | ||||
|     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' | ||||
| } | ||||
							
								
								
									
										21
									
								
								Android/app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -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 | ||||
| @@ -0,0 +1,26 @@ | ||||
| package yehor.vialov.vaporizr2; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.support.test.InstrumentationRegistry; | ||||
| import android.support.test.runner.AndroidJUnit4; | ||||
|  | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
|  | ||||
| import static org.junit.Assert.*; | ||||
|  | ||||
| /** | ||||
|  * Instrumented test, which will execute on an Android device. | ||||
|  * | ||||
|  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||||
|  */ | ||||
| @RunWith(AndroidJUnit4.class) | ||||
| public class ExampleInstrumentedTest { | ||||
|     @Test | ||||
|     public void useAppContext() throws Exception { | ||||
|         // Context of the app under test. | ||||
|         Context appContext = InstrumentationRegistry.getTargetContext(); | ||||
|  | ||||
|         assertEquals("yehor.vialov.vaporizr2", appContext.getPackageName()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										23
									
								
								Android/app/src/main/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     package="yehor.vialov.vaporizr2"> | ||||
|  | ||||
|     <uses-permission android:name="android.permission.BLUETOOTH" /> | ||||
|  | ||||
|     <application | ||||
|         android:allowBackup="true" | ||||
|         android:icon="@drawable/icon" | ||||
|         android:label="@string/app_name" | ||||
|         android:supportsRtl="true" | ||||
|         android:theme="@style/AppTheme"> | ||||
|         <activity android:name=".MainActivity" android:configChanges="orientation" | ||||
|             android:screenOrientation="landscape"> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.MAIN" /> | ||||
|  | ||||
|                 <category android:name="android.intent.category.LAUNCHER" /> | ||||
|             </intent-filter> | ||||
|         </activity> | ||||
|     </application> | ||||
|  | ||||
| </manifest> | ||||
| @@ -0,0 +1,232 @@ | ||||
| package yehor.vialov.vaporizr2; | ||||
|  | ||||
| import android.bluetooth.BluetoothAdapter; | ||||
| import android.bluetooth.BluetoothDevice; | ||||
| import android.bluetooth.BluetoothSocket; | ||||
| import android.content.Intent; | ||||
| import android.support.v7.app.AppCompatActivity; | ||||
| import android.os.Bundle; | ||||
| import android.view.View; | ||||
| import android.widget.Button; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.SeekBar; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import org.w3c.dom.Text; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.io.OutputStream; | ||||
| import java.util.UUID; | ||||
|  | ||||
| public class MainActivity extends AppCompatActivity { | ||||
|  | ||||
|     private final static int REQUEST_ENABLE_BT = 1; | ||||
|     TextView txtStatus; | ||||
|     OutputStream btOutStream; | ||||
|     Boolean btConnected = false; | ||||
|     BluetoothSocket btSocket = null; | ||||
|     SeekBar motorA; | ||||
|     SeekBar motorB; | ||||
|     TextView txtA; | ||||
|     TextView txtB; | ||||
|     private final static int MOTOR_FULL_FORWARD_COMMAND = 4; | ||||
|     private final static int MOTOR_FULL_BACKWARD_COMMAND = 0; | ||||
|     private final static int MOTOR_STOP_COMMAND = 2; | ||||
|     ImageView imEngine; | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_main); | ||||
|  | ||||
|         txtStatus = (TextView) findViewById(R.id.txtStatus); | ||||
|  | ||||
|         motorA = (SeekBar)findViewById(R.id.motorB); | ||||
|         motorA.setProgress(MOTOR_STOP_COMMAND); | ||||
|         motorA.setMax(MOTOR_FULL_FORWARD_COMMAND); | ||||
|         motorB = (SeekBar)findViewById(R.id.motorA); | ||||
|         motorB.setProgress(MOTOR_STOP_COMMAND); | ||||
|         motorB.setMax(MOTOR_FULL_FORWARD_COMMAND); | ||||
|         motorA.setEnabled(false); | ||||
|         motorB.setEnabled(false); | ||||
|         imEngine = (ImageView)findViewById(R.id.imCE); | ||||
|  | ||||
|         imEngine.setVisibility(View.VISIBLE); | ||||
|         txtA = (TextView)findViewById(R.id.txtA); | ||||
|         txtB = (TextView)findViewById(R.id.txtB); | ||||
|         txtA.setText(Integer.toString(MOTOR_STOP_COMMAND)); | ||||
|         txtB.setText(Integer.toString(MOTOR_STOP_COMMAND)); | ||||
|  | ||||
|         motorA.setOnSeekBarChangeListener( | ||||
|                 new SeekBar.OnSeekBarChangeListener() { | ||||
|                     String progress = ""; | ||||
|                     @Override | ||||
|                     public void onProgressChanged(SeekBar seekBar, | ||||
|                                                   int progresValue, boolean fromUser) { | ||||
|                         sendCommand(); | ||||
|                     } | ||||
|  | ||||
|                     @Override | ||||
|                     public void onStartTrackingTouch(SeekBar seekBar) { | ||||
|                         // Do something here, | ||||
|                         //if you want to do anything at the start of | ||||
|                         // touching the seekbar | ||||
|                     } | ||||
|  | ||||
|                     @Override | ||||
|                     public void onStopTrackingTouch(SeekBar seekBar) { | ||||
|                         seekBar.setProgress(MOTOR_STOP_COMMAND); | ||||
|  | ||||
|                     } | ||||
|         }); | ||||
|  | ||||
|         motorB.setOnSeekBarChangeListener( | ||||
|                 new SeekBar.OnSeekBarChangeListener() { | ||||
|                     String progress = ""; | ||||
|                     @Override | ||||
|                     public void onProgressChanged(SeekBar seekBar, | ||||
|                                                   int progresValue, boolean fromUser) { | ||||
|                         sendCommand(); | ||||
|                     } | ||||
|  | ||||
|                     @Override | ||||
|                     public void onStartTrackingTouch(SeekBar seekBar) { | ||||
|                         // Do something here, | ||||
|                         //if you want to do anything at the start of | ||||
|                         // touching the seekbar | ||||
|                     } | ||||
|  | ||||
|                     @Override | ||||
|                     public void onStopTrackingTouch(SeekBar seekBar) { | ||||
|                         seekBar.setProgress(MOTOR_STOP_COMMAND); | ||||
|  | ||||
|                     } | ||||
|                 }); | ||||
|  | ||||
|         connectToCar(); | ||||
|  | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onDestroy() { | ||||
|         disconnectFromCar(); | ||||
|         super.onDestroy(); | ||||
|     } | ||||
|  | ||||
|     private void disconnectFromCar() { | ||||
|         try { | ||||
|             btOutStream.close(); | ||||
|         } catch (Exception e) { | ||||
|             //e.printStackTrace(); | ||||
|         } | ||||
|         try { | ||||
|             btSocket.close(); | ||||
|         } catch (Exception e) { | ||||
|             //e.printStackTrace(); | ||||
|         } | ||||
|         btConnected = false; | ||||
|         motorA.setEnabled(false); | ||||
|         motorB.setEnabled(false); | ||||
|         imEngine.setVisibility(View.GONE); | ||||
|     } | ||||
|  | ||||
|     private void connectToCar() { | ||||
|         new Thread() { | ||||
|             public void run() { | ||||
|                 while (btSocket==null || !btSocket.isConnected()) { | ||||
|                     runOnUiThread(new Runnable() { | ||||
|                         @Override | ||||
|                         public void run() { | ||||
|                             txtStatus.setText("Connecting..."); | ||||
|                             imEngine.setVisibility(View.VISIBLE); | ||||
|                         } | ||||
|                     }); | ||||
|  | ||||
|                     BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); | ||||
|                     if (adapter == null) { | ||||
|                         // Device does not support Bluetooth | ||||
|                         finish(); //exit | ||||
|                     } | ||||
|  | ||||
|                     if (!adapter.isEnabled()) { | ||||
|                         runOnUiThread(new Runnable() { | ||||
|                             @Override | ||||
|                             public void run() { | ||||
|                                 txtStatus.setText("Bluetooth is not enabled. Will retry in 5 sec."); | ||||
|                                 imEngine.setVisibility(View.VISIBLE); | ||||
|                             } | ||||
|                         }); | ||||
|                         //make sure the device's bluetooth is enabled | ||||
|                         Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); | ||||
|                         startActivityForResult(enableBluetooth, REQUEST_ENABLE_BT); | ||||
|                     } else { | ||||
|                         final UUID SERIAL_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //UUID for serial connection | ||||
|                         String mac = "98:D3:31:F5:2D:2F"; //my laptop's mac adress | ||||
|                         BluetoothDevice device = adapter.getRemoteDevice(mac); //get remote device by mac, we assume these two devices are already paired | ||||
|                         // Get a BluetoothSocket to connect with the given BluetoothDevice | ||||
|                         btSocket = null; | ||||
|                         btOutStream = null; | ||||
|                         try { | ||||
|                             btSocket = device.createRfcommSocketToServiceRecord(SERIAL_UUID); | ||||
|                         } catch (Exception e) { | ||||
|                             runOnUiThread(new Runnable() { | ||||
|                                 @Override | ||||
|                                 public void run() { | ||||
|                                     txtStatus.setText("Error creating socket.  Will retry in 5 sec."); | ||||
|                                     imEngine.setVisibility(View.VISIBLE); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } | ||||
|  | ||||
|                         try { | ||||
|                             btSocket.connect(); | ||||
|                             btOutStream = btSocket.getOutputStream(); | ||||
|  | ||||
|                             btConnected = true; | ||||
|                             runOnUiThread(new Runnable() { | ||||
|                                 @Override | ||||
|                                 public void run() { | ||||
|                                     txtStatus.setText("Connected"); | ||||
|                                     imEngine.setVisibility(View.GONE); | ||||
|                                     motorA.setEnabled(true); | ||||
|                                     motorB.setEnabled(true); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } catch (Exception e) { | ||||
|                             final Exception er = e; | ||||
|                             runOnUiThread(new Runnable() { | ||||
|                                 @Override | ||||
|                                 public void run() { | ||||
|                                     txtStatus.setText("Connection error. Will retry in 5 sec."); | ||||
|                                     imEngine.setVisibility(View.VISIBLE); | ||||
|                                 } | ||||
|  | ||||
|                             }); | ||||
|                             e.printStackTrace(); | ||||
|                         } | ||||
|                     } | ||||
|                     try { | ||||
|                         Thread.sleep(5000); | ||||
|                     } catch (InterruptedException e) { | ||||
|                         e.printStackTrace(); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }.start(); | ||||
|     } | ||||
|  | ||||
|     private void sendCommand() { | ||||
|         String m1 = Integer.toString(motorA.getProgress()); | ||||
|         String m2 = Integer.toString(motorB.getProgress()); | ||||
|         txtA.setText(m1); | ||||
|         txtB.setText(m2); | ||||
|         try { | ||||
|             btOutStream.write((m1+m2).getBytes()); | ||||
|         } catch (Exception e) { | ||||
|             txtStatus.setText("Disconnected"); | ||||
|             disconnectFromCar(); | ||||
|             connectToCar(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -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:viewportHeight="108" | ||||
|     android:viewportWidth="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:strokeColor="#00000000" | ||||
|         android:strokeWidth="1"> | ||||
|         <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:strokeColor="#00000000" | ||||
|         android:strokeWidth="1" /> | ||||
| </vector> | ||||
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/drawable/engine.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 27 KiB | 
							
								
								
									
										170
									
								
								Android/app/src/main/res/drawable/ic_launcher_background.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,170 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     android:width="108dp" | ||||
|     android:height="108dp" | ||||
|     android:viewportHeight="108" | ||||
|     android:viewportWidth="108"> | ||||
|     <path | ||||
|         android:fillColor="#26A69A" | ||||
|         android:pathData="M0,0h108v108h-108z" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M9,0L9,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,0L19,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M29,0L29,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M39,0L39,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M49,0L49,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M59,0L59,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M69,0L69,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M79,0L79,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M89,0L89,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M99,0L99,108" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,9L108,9" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,19L108,19" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,29L108,29" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,39L108,39" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,49L108,49" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,59L108,59" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,69L108,69" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,79L108,79" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,89L108,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M0,99L108,99" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,29L89,29" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,39L89,39" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,49L89,49" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,59L89,59" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,69L89,69" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M19,79L89,79" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M29,19L29,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M39,19L39,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M49,19L49,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M59,19L59,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M69,19L69,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
|     <path | ||||
|         android:fillColor="#00000000" | ||||
|         android:pathData="M79,19L79,89" | ||||
|         android:strokeColor="#33FFFFFF" | ||||
|         android:strokeWidth="0.8" /> | ||||
| </vector> | ||||
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/drawable/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 55 KiB | 
							
								
								
									
										98
									
								
								Android/app/src/main/res/layout/activity_main.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,98 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     tools:context="yehor.vialov.vaporizr2.MainActivity"> | ||||
|  | ||||
|     <SeekBar | ||||
|         android:id="@+id/motorA" | ||||
|         style="@style/Widget.AppCompat.SeekBar.Discrete" | ||||
|         android:layout_width="0dp" | ||||
|         android:layout_height="0dp" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:layout_marginTop="8dp" | ||||
|         android:max="500" | ||||
|         android:min="0" | ||||
|         android:progress="255" | ||||
|         android:rotation="270" | ||||
|         android:thumb="@android:drawable/ic_notification_overlay" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toStartOf="@+id/guideline" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" /> | ||||
|  | ||||
|     <SeekBar | ||||
|         android:id="@+id/motorB" | ||||
|         style="@style/Widget.AppCompat.SeekBar.Discrete" | ||||
|         android:layout_width="0dp" | ||||
|         android:layout_height="0dp" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:layout_marginTop="8dp" | ||||
|         android:max="500" | ||||
|         android:min="0" | ||||
|         android:progress="255" | ||||
|         android:rotation="270" | ||||
|         android:thumb="@android:drawable/ic_notification_overlay" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="@+id/guideline" | ||||
|         app:layout_constraintTop_toTopOf="parent" /> | ||||
|  | ||||
|     <TextView | ||||
|         android:id="@+id/txtA" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:text="TextView" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" /> | ||||
|  | ||||
|     <TextView | ||||
|         android:id="@+id/txtB" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:text="TextView" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" /> | ||||
|  | ||||
|     <android.support.constraint.Guideline | ||||
|         android:id="@+id/guideline" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:orientation="vertical" | ||||
|         app:layout_constraintGuide_percent="0.5" /> | ||||
|  | ||||
|     <TextView | ||||
|         android:id="@+id/txtStatus" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginBottom="8dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:text="Status..." | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" /> | ||||
|  | ||||
|     <ImageView | ||||
|         android:id="@+id/imCE" | ||||
|         android:layout_width="101dp" | ||||
|         android:layout_height="63dp" | ||||
|         android:layout_marginEnd="8dp" | ||||
|         android:layout_marginStart="8dp" | ||||
|         android:layout_marginTop="16dp" | ||||
|         app:layout_constraintEnd_toStartOf="@+id/guideline" | ||||
|         app:layout_constraintStart_toStartOf="@+id/guideline" | ||||
|         app:layout_constraintTop_toTopOf="parent" | ||||
|         app:srcCompat="@drawable/engine" /> | ||||
|  | ||||
| </android.support.constraint.ConstraintLayout> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <background android:drawable="@drawable/ic_launcher_background" /> | ||||
|     <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||||
| </adaptive-icon> | ||||
| @@ -0,0 +1,5 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <background android:drawable="@drawable/ic_launcher_background" /> | ||||
|     <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||||
| </adaptive-icon> | ||||
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-hdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-mdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 4.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 10 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 9.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 15 KiB | 
							
								
								
									
										6
									
								
								Android/app/src/main/res/values/colors.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <resources> | ||||
|     <color name="colorPrimary">#3F51B5</color> | ||||
|     <color name="colorPrimaryDark">#303F9F</color> | ||||
|     <color name="colorAccent">#FF4081</color> | ||||
| </resources> | ||||
							
								
								
									
										3
									
								
								Android/app/src/main/res/values/strings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| <resources> | ||||
|     <string name="app_name">VaporizR2</string> | ||||
| </resources> | ||||
							
								
								
									
										11
									
								
								Android/app/src/main/res/values/styles.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | ||||
| <resources> | ||||
|  | ||||
|     <!-- Base application theme. --> | ||||
|     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> | ||||
|         <!-- Customize your theme here. --> | ||||
|         <item name="colorPrimary">@color/colorPrimary</item> | ||||
|         <item name="colorPrimaryDark">@color/colorPrimaryDark</item> | ||||
|         <item name="colorAccent">@color/colorAccent</item> | ||||
|     </style> | ||||
|  | ||||
| </resources> | ||||
| @@ -0,0 +1,17 @@ | ||||
| package yehor.vialov.vaporizr2; | ||||
|  | ||||
| import org.junit.Test; | ||||
|  | ||||
| import static org.junit.Assert.*; | ||||
|  | ||||
| /** | ||||
|  * Example local unit test, which will execute on the development machine (host). | ||||
|  * | ||||
|  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||||
|  */ | ||||
| public class ExampleUnitTest { | ||||
|     @Test | ||||
|     public void addition_isCorrect() throws Exception { | ||||
|         assertEquals(4, 2 + 2); | ||||
|     } | ||||
| } | ||||