Added settings activity to android scanner; started refactoring scanner api
							parent
							
								
									24e3556320
								
							
						
					
					
						commit
						c7dd5bd663
					
				| 
						 | 
					@ -1,4 +1,3 @@
 | 
				
			||||||
 | 
					 | 
				
			||||||
buildscript {
 | 
					buildscript {
 | 
				
			||||||
    repositories {
 | 
					    repositories {
 | 
				
			||||||
        jcenter()
 | 
					        jcenter()
 | 
				
			||||||
| 
						 | 
					@ -15,18 +14,19 @@ buildscript {
 | 
				
			||||||
apply plugin: 'com.android.application'
 | 
					apply plugin: 'com.android.application'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
android {
 | 
					android {
 | 
				
			||||||
    compileSdkVersion 25
 | 
					    compileSdkVersion 26
 | 
				
			||||||
    buildToolsVersion "25.0.0"
 | 
					    buildToolsVersion "26.0.0"
 | 
				
			||||||
    defaultConfig {
 | 
					    defaultConfig {
 | 
				
			||||||
        applicationId "com.meerkat.laura.fakescannerapp"
 | 
					        applicationId "com.meerkat.laura.fakescannerapp"
 | 
				
			||||||
        minSdkVersion 11
 | 
					        minSdkVersion 14
 | 
				
			||||||
        targetSdkVersion 25
 | 
					        targetSdkVersion 26
 | 
				
			||||||
        versionCode 1
 | 
					        versionCode 1
 | 
				
			||||||
        versionName "1.0"
 | 
					        versionName "1.0"
 | 
				
			||||||
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 | 
					        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Enabling multidex support.
 | 
					        // Enabling multidex support.
 | 
				
			||||||
        multiDexEnabled true
 | 
					        multiDexEnabled true
 | 
				
			||||||
 | 
					        vectorDrawables.useSupportLibrary = true
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,8 +42,10 @@ android {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
configurations.all {
 | 
					configurations.all {
 | 
				
			||||||
    resolutionStrategy.dependencySubstitution {
 | 
					    resolutionStrategy.dependencySubstitution {
 | 
				
			||||||
 | 
					        // Avoid Android compilation error caused by two different javax.inject dependencies.
 | 
				
			||||||
        substitute module('org.glassfish.hk2.external:javax.inject:2.4.0-b34') with module('javax.inject:javax.inject:1')
 | 
					        substitute module('org.glassfish.hk2.external:javax.inject:2.4.0-b34') with module('javax.inject:javax.inject:1')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -54,21 +56,23 @@ dependencies {
 | 
				
			||||||
    compile project(':meerkat-common')
 | 
					    compile project(':meerkat-common')
 | 
				
			||||||
    compile project(':scanner-api-common')
 | 
					    compile project(':scanner-api-common')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    compile 'com.android.support:appcompat-v7:25.0.1'
 | 
					 | 
				
			||||||
    //    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta3'
 | 
					    //    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta3'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //compile 'com.android.support:appcompat-v7:23.1.0'
 | 
					    //compile 'com.android.support:appcompat-v7:23.1.0'
 | 
				
			||||||
    // Google protobufs
 | 
					    // Google protobufs
 | 
				
			||||||
    compile 'com.google.protobuf:protobuf-java:3.+'
 | 
					 | 
				
			||||||
    // Retrofit
 | 
					    // Retrofit
 | 
				
			||||||
//    compile 'com.squareup.retrofit2:retrofit:2.1.0'
 | 
					//    compile 'com.squareup.retrofit2:retrofit:2.1.0'
 | 
				
			||||||
//    compile 'com.squareup.retrofit2:converter-protobuf:2.2.0'
 | 
					//    compile 'com.squareup.retrofit2:converter-protobuf:2.2.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    testCompile 'junit:junit:4.12'
 | 
					 | 
				
			||||||
    //    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
 | 
					    //    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
 | 
				
			||||||
//        exclude group: 'com.android.support', module: 'support-annotations'
 | 
					//        exclude group: 'com.android.support', module: 'support-annotations'
 | 
				
			||||||
//    })
 | 
					//    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compile 'com.android.support:appcompat-v7:26.0.+'
 | 
				
			||||||
 | 
					    compile 'com.google.protobuf:protobuf-java:3.+'
 | 
				
			||||||
 | 
					    compile 'com.android.support:support-v4:26.0.+'
 | 
				
			||||||
 | 
					    compile 'com.android.support:support-vector-drawable:26.0.+'
 | 
				
			||||||
 | 
					    testCompile 'junit:junit:4.12'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
repositories {
 | 
					repositories {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
    <uses-permission android:name="android.permission.INTERNET"/>
 | 
					    <uses-permission android:name="android.permission.INTERNET"/>
 | 
				
			||||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 | 
					    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 | 
				
			||||||
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 | 
					    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <application
 | 
					    <application
 | 
				
			||||||
            android:allowBackup="true"
 | 
					            android:allowBackup="true"
 | 
				
			||||||
            android:icon="@mipmap/ic_launcher"
 | 
					            android:icon="@mipmap/ic_launcher"
 | 
				
			||||||
| 
						 | 
					@ -18,6 +19,10 @@
 | 
				
			||||||
                <category android:name="android.intent.category.LAUNCHER"/>
 | 
					                <category android:name="android.intent.category.LAUNCHER"/>
 | 
				
			||||||
            </intent-filter>
 | 
					            </intent-filter>
 | 
				
			||||||
        </activity>
 | 
					        </activity>
 | 
				
			||||||
 | 
					        <activity
 | 
				
			||||||
 | 
					                android:name=".SettingsActivity"
 | 
				
			||||||
 | 
					                android:label="@string/title_activity_settings">
 | 
				
			||||||
 | 
					        </activity>
 | 
				
			||||||
    </application>
 | 
					    </application>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</manifest>
 | 
					</manifest>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,109 @@
 | 
				
			||||||
 | 
					package com.meerkat.laura.fakescannerapp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.content.res.Configuration;
 | 
				
			||||||
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.preference.PreferenceActivity;
 | 
				
			||||||
 | 
					import android.support.annotation.LayoutRes;
 | 
				
			||||||
 | 
					import android.support.annotation.Nullable;
 | 
				
			||||||
 | 
					import android.support.v7.app.ActionBar;
 | 
				
			||||||
 | 
					import android.support.v7.app.AppCompatDelegate;
 | 
				
			||||||
 | 
					import android.support.v7.widget.Toolbar;
 | 
				
			||||||
 | 
					import android.view.MenuInflater;
 | 
				
			||||||
 | 
					import android.view.View;
 | 
				
			||||||
 | 
					import android.view.ViewGroup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
 | 
				
			||||||
 | 
					 * to be used with AppCompat.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private AppCompatDelegate mDelegate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onCreate(Bundle savedInstanceState) {
 | 
				
			||||||
 | 
					        getDelegate().installViewFactory();
 | 
				
			||||||
 | 
					        getDelegate().onCreate(savedInstanceState);
 | 
				
			||||||
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onPostCreate(Bundle savedInstanceState) {
 | 
				
			||||||
 | 
					        super.onPostCreate(savedInstanceState);
 | 
				
			||||||
 | 
					        getDelegate().onPostCreate(savedInstanceState);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public ActionBar getSupportActionBar() {
 | 
				
			||||||
 | 
					        return getDelegate().getSupportActionBar();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSupportActionBar(@Nullable Toolbar toolbar) {
 | 
				
			||||||
 | 
					        getDelegate().setSupportActionBar(toolbar);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public MenuInflater getMenuInflater() {
 | 
				
			||||||
 | 
					        return getDelegate().getMenuInflater();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setContentView(@LayoutRes int layoutResID) {
 | 
				
			||||||
 | 
					        getDelegate().setContentView(layoutResID);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setContentView(View view) {
 | 
				
			||||||
 | 
					        getDelegate().setContentView(view);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setContentView(View view, ViewGroup.LayoutParams params) {
 | 
				
			||||||
 | 
					        getDelegate().setContentView(view, params);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void addContentView(View view, ViewGroup.LayoutParams params) {
 | 
				
			||||||
 | 
					        getDelegate().addContentView(view, params);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onPostResume() {
 | 
				
			||||||
 | 
					        super.onPostResume();
 | 
				
			||||||
 | 
					        getDelegate().onPostResume();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onTitleChanged(CharSequence title, int color) {
 | 
				
			||||||
 | 
					        super.onTitleChanged(title, color);
 | 
				
			||||||
 | 
					        getDelegate().setTitle(title);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onConfigurationChanged(Configuration newConfig) {
 | 
				
			||||||
 | 
					        super.onConfigurationChanged(newConfig);
 | 
				
			||||||
 | 
					        getDelegate().onConfigurationChanged(newConfig);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onStop() {
 | 
				
			||||||
 | 
					        super.onStop();
 | 
				
			||||||
 | 
					        getDelegate().onStop();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onDestroy() {
 | 
				
			||||||
 | 
					        super.onDestroy();
 | 
				
			||||||
 | 
					        getDelegate().onDestroy();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void invalidateOptionsMenu() {
 | 
				
			||||||
 | 
					        getDelegate().invalidateOptionsMenu();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private AppCompatDelegate getDelegate() {
 | 
				
			||||||
 | 
					        if (mDelegate == null) {
 | 
				
			||||||
 | 
					            mDelegate = AppCompatDelegate.create(this, null);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return mDelegate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2,10 +2,15 @@ package com.meerkat.laura.fakescannerapp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
 | 
					import android.content.SharedPreferences;
 | 
				
			||||||
import android.os.Bundle;
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.preference.PreferenceManager;
 | 
				
			||||||
import android.support.v7.app.AppCompatActivity;
 | 
					import android.support.v7.app.AppCompatActivity;
 | 
				
			||||||
import android.util.Base64;
 | 
					import android.util.Base64;
 | 
				
			||||||
import android.util.Log;
 | 
					import android.util.Log;
 | 
				
			||||||
 | 
					import android.view.Menu;
 | 
				
			||||||
 | 
					import android.view.MenuInflater;
 | 
				
			||||||
 | 
					import android.view.MenuItem;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
import android.widget.Button;
 | 
					import android.widget.Button;
 | 
				
			||||||
import android.widget.TextView;
 | 
					import android.widget.TextView;
 | 
				
			||||||
| 
						 | 
					@ -16,30 +21,66 @@ import com.google.zxing.integration.android.IntentResult;
 | 
				
			||||||
import meerkat.pollingstation.ScannerClientAPI;
 | 
					import meerkat.pollingstation.ScannerClientAPI;
 | 
				
			||||||
import meerkat.protobuf.PollingStation;
 | 
					import meerkat.protobuf.PollingStation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.net.MalformedURLException;
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
 | 
					import java.net.URL;
 | 
				
			||||||
 | 
					import java.net.URLDecoder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.meerkat.laura.fakescannerapp.R.xml.preferences;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 | 
					public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 | 
				
			||||||
 | 
					    SharedPreferences sharedPref;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: Make this configurable
 | 
					    Button scanBtn;
 | 
				
			||||||
    private static final String PSC_ADDRESS = "http://127.0.0.1/";
 | 
					    TextView formatTxt, contentTxt, responseTxt;
 | 
				
			||||||
    private static final String PSC_SUB_ADDRESS = "";
 | 
					 | 
				
			||||||
    private static final String PSC_PATH = "/";
 | 
					 | 
				
			||||||
    private static final int PSC_PORT = 8880;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private Button scanBtn;
 | 
					 | 
				
			||||||
    private TextView formatTxt, contentTxt, responseTxt;
 | 
					 | 
				
			||||||
    ScannerClientAPI scannerClientAPI;
 | 
					    ScannerClientAPI scannerClientAPI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean onCreateOptionsMenu(Menu menu) {
 | 
				
			||||||
 | 
					        MenuInflater inflater = getMenuInflater();
 | 
				
			||||||
 | 
					        inflater.inflate(R.menu.options_menu, menu);
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean onOptionsItemSelected(MenuItem item) {
 | 
				
			||||||
 | 
					        // Handle item selection
 | 
				
			||||||
 | 
					        switch (item.getItemId()) {
 | 
				
			||||||
 | 
					            case R.id.action_settings:
 | 
				
			||||||
 | 
					                Intent i = new Intent(this, SettingsActivity.class);
 | 
				
			||||||
 | 
					                startActivity(i);
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                return super.onOptionsItemSelected(item);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void setNewScannerClientAPI(SharedPreferences sharedPref) {
 | 
				
			||||||
 | 
					        String pscUrlString = sharedPref.getString(SettingsActivity.PSC_URL, "");
 | 
				
			||||||
 | 
					        scannerClientAPI = new ScannerClientAPI(pscUrlString);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected void onCreate(Bundle savedInstanceState) {
 | 
					    protected void onCreate(Bundle savedInstanceState) {
 | 
				
			||||||
        super.onCreate(savedInstanceState);
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
        setContentView(R.layout.activity_main);
 | 
					        setContentView(R.layout.activity_main);
 | 
				
			||||||
 | 
					        PreferenceManager.setDefaultValues(this, preferences, false);
 | 
				
			||||||
 | 
					        sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 | 
				
			||||||
 | 
					        sharedPref.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
 | 
				
			||||||
 | 
					                if (s.equals(SettingsActivity.PSC_URL))
 | 
				
			||||||
 | 
					                    setNewScannerClientAPI(sharedPreferences);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scanBtn = (Button)findViewById(R.id.scan_button);
 | 
					        scanBtn = (Button)findViewById(R.id.scan_button);
 | 
				
			||||||
        formatTxt = (TextView)findViewById(R.id.scan_format);
 | 
					        formatTxt = (TextView)findViewById(R.id.scan_format);
 | 
				
			||||||
        contentTxt = (TextView)findViewById(R.id.scan_content);
 | 
					        contentTxt = (TextView)findViewById(R.id.scan_content);
 | 
				
			||||||
        responseTxt = (TextView)findViewById(R.id.server_response);
 | 
					        responseTxt = (TextView)findViewById(R.id.server_response);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scannerClientAPI = new ScannerClientAPI(PSC_ADDRESS, PSC_SUB_ADDRESS, PSC_PORT, PSC_PATH);
 | 
					        setNewScannerClientAPI(sharedPref);
 | 
				
			||||||
        scanBtn.setOnClickListener(this);
 | 
					        scanBtn.setOnClickListener(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					package com.meerkat.laura.fakescannerapp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.preference.PreferenceActivity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SettingsActivity extends PreferenceActivity {
 | 
				
			||||||
 | 
					    public final static String PSC_URL = "psc_url";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onCreate(Bundle savedInstanceState) {
 | 
				
			||||||
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
 | 
					        addPreferencesFromResource(R.xml.preferences);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					        android:width="24dp"
 | 
				
			||||||
 | 
					        android:height="24dp"
 | 
				
			||||||
 | 
					        android:viewportWidth="24.0"
 | 
				
			||||||
 | 
					        android:viewportHeight="24.0">
 | 
				
			||||||
 | 
					    <path
 | 
				
			||||||
 | 
					            android:fillColor="#FF000000"
 | 
				
			||||||
 | 
					            android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm1,15h-2v-6h2v6zm0,-8h-2V7h2v2z"/>
 | 
				
			||||||
 | 
					</vector>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					        android:width="24dp"
 | 
				
			||||||
 | 
					        android:height="24dp"
 | 
				
			||||||
 | 
					        android:viewportWidth="24.0"
 | 
				
			||||||
 | 
					        android:viewportHeight="24.0">
 | 
				
			||||||
 | 
					    <path
 | 
				
			||||||
 | 
					            android:fillColor="#FF000000"
 | 
				
			||||||
 | 
					            android:pathData="M11.5,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.9,2 2,2zm6.5,-6v-5.5c0,-3.07 -2.13,-5.64 -5,-6.32V3.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S10,2.67 10,3.5v0.68c-2.87,0.68 -5,3.25 -5,6.32V16l-2,2v1h17v-1l-2,-2z"/>
 | 
				
			||||||
 | 
					</vector>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					        android:width="24dp"
 | 
				
			||||||
 | 
					        android:height="24dp"
 | 
				
			||||||
 | 
					        android:viewportWidth="24.0"
 | 
				
			||||||
 | 
					        android:viewportHeight="24.0">
 | 
				
			||||||
 | 
					    <path
 | 
				
			||||||
 | 
					            android:fillColor="#FF000000"
 | 
				
			||||||
 | 
					            android:pathData="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01,-.25 1.97,-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0,-4.42,-3.58,-8,-8,-8zm0 14c-3.31 0,-6,-2.69,-6,-6 0,-1.01.25,-1.97.7,-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4,-4,-4,-4v3z"/>
 | 
				
			||||||
 | 
					</vector>
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 | 
					    xmlns:tools="http://schemas.android.com/tools"
 | 
				
			||||||
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
 | 
					    android:paddingLeft="@dimen/activity_horizontal_margin"
 | 
				
			||||||
    android:paddingRight="@dimen/activity_horizontal_margin"
 | 
					    android:paddingRight="@dimen/activity_horizontal_margin"
 | 
				
			||||||
    android:paddingTop="@dimen/activity_vertical_margin"
 | 
					    android:paddingTop="@dimen/activity_vertical_margin"
 | 
				
			||||||
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
 | 
					    android:paddingBottom="@dimen/activity_vertical_margin"
 | 
				
			||||||
 | 
					    tools:context=".MainActivity">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <TextView android:text="@string/instructions" android:layout_width="wrap_content"
 | 
					    <TextView android:text="@string/instructions" android:layout_width="wrap_content"
 | 
				
			||||||
              android:layout_height="wrap_content"
 | 
					              android:layout_height="wrap_content"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Settings, should always be in the overflow -->
 | 
				
			||||||
 | 
					    <item android:id="@+id/action_settings"
 | 
				
			||||||
 | 
					        android:title="@string/action_settings"
 | 
				
			||||||
 | 
					        app:showAsAction="never"/>
 | 
				
			||||||
 | 
					</menu>
 | 
				
			||||||
| 
						 | 
					@ -2,4 +2,79 @@
 | 
				
			||||||
    <string name="app_name">FakeScannerApp</string>
 | 
					    <string name="app_name">FakeScannerApp</string>
 | 
				
			||||||
    <string name="button_txt">SCAN</string>
 | 
					    <string name="button_txt">SCAN</string>
 | 
				
			||||||
    <string name="instructions">Please, press the button below to scan the vote receipt.</string>
 | 
					    <string name="instructions">Please, press the button below to scan the vote receipt.</string>
 | 
				
			||||||
 | 
					    <string name="title_activity_settings">Settings</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Strings related to Settings -->
 | 
				
			||||||
 | 
					    <string name="action_settings">Settings</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Example General settings -->
 | 
				
			||||||
 | 
					    <string name="pref_header_general">General</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_social_recommendations">Enable social recommendations</string>
 | 
				
			||||||
 | 
					    <string name="pref_description_social_recommendations">Recommendations for people to contact based on your message
 | 
				
			||||||
 | 
					        history
 | 
				
			||||||
 | 
					    </string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_psc_url">Scanner Service URL</string>
 | 
				
			||||||
 | 
					    <string name="pref_default_psc_url">http://192.168.70.10:8880/</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_add_friends_to_messages">Add friends to messages</string>
 | 
				
			||||||
 | 
					    <string-array name="pref_example_list_titles">
 | 
				
			||||||
 | 
					        <item>Always</item>
 | 
				
			||||||
 | 
					        <item>When possible</item>
 | 
				
			||||||
 | 
					        <item>Never</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					    <string-array name="pref_example_list_values">
 | 
				
			||||||
 | 
					        <item>1</item>
 | 
				
			||||||
 | 
					        <item>0</item>
 | 
				
			||||||
 | 
					        <item>-1</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Example settings for Data & Sync -->
 | 
				
			||||||
 | 
					    <string name="pref_header_data_sync">Data & sync</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_sync_frequency">Sync frequency</string>
 | 
				
			||||||
 | 
					    <string-array name="pref_sync_frequency_titles">
 | 
				
			||||||
 | 
					        <item>15 minutes</item>
 | 
				
			||||||
 | 
					        <item>30 minutes</item>
 | 
				
			||||||
 | 
					        <item>1 hour</item>
 | 
				
			||||||
 | 
					        <item>3 hours</item>
 | 
				
			||||||
 | 
					        <item>6 hours</item>
 | 
				
			||||||
 | 
					        <item>Never</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					    <string-array name="pref_sync_frequency_values">
 | 
				
			||||||
 | 
					        <item>15</item>
 | 
				
			||||||
 | 
					        <item>30</item>
 | 
				
			||||||
 | 
					        <item>60</item>
 | 
				
			||||||
 | 
					        <item>180</item>
 | 
				
			||||||
 | 
					        <item>360</item>
 | 
				
			||||||
 | 
					        <item>-1</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string-array name="list_preference_entries">
 | 
				
			||||||
 | 
					        <item>Entry 1</item>
 | 
				
			||||||
 | 
					        <item>Entry 2</item>
 | 
				
			||||||
 | 
					        <item>Entry 3</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string-array name="list_preference_entry_values">
 | 
				
			||||||
 | 
					        <item>1</item>
 | 
				
			||||||
 | 
					        <item>2</item>
 | 
				
			||||||
 | 
					        <item>3</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string-array name="multi_select_list_preference_default_value"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_system_sync_settings">System sync settings</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Example settings for Notifications -->
 | 
				
			||||||
 | 
					    <string name="pref_header_notifications">Notifications</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_new_message_notifications">New message notifications</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_ringtone">Ringtone</string>
 | 
				
			||||||
 | 
					    <string name="pref_ringtone_silent">Silent</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="pref_title_vibrate">Vibrate</string>
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					<PreferenceScreen xmlns:tools="http://schemas.android.com/tools"
 | 
				
			||||||
 | 
					    xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- NOTE: EditTextPreference accepts EditText attributes. -->
 | 
				
			||||||
 | 
					    <!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. -->
 | 
				
			||||||
 | 
					    <EditTextPreference
 | 
				
			||||||
 | 
					            android:key="psc_url"
 | 
				
			||||||
 | 
					            android:title="@string/pref_title_psc_url"
 | 
				
			||||||
 | 
					            android:defaultValue="@string/pref_default_psc_url"
 | 
				
			||||||
 | 
					            android:selectAllOnFocus="true"
 | 
				
			||||||
 | 
					            android:singleLine="true"
 | 
				
			||||||
 | 
					            android:maxLines="1"
 | 
				
			||||||
 | 
					        android:inputType="textUri" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
 | 
				
			||||||
 | 
					         dismiss it. -->
 | 
				
			||||||
 | 
					    <!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</PreferenceScreen>
 | 
				
			||||||
| 
						 | 
					@ -12,9 +12,7 @@ import static meerkat.pollingstation.PollingStationConstants.POLLING_STATION_WEB
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class PollingStationClientToyRun {
 | 
					public class PollingStationClientToyRun {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final String ADDRESS = "http://192.168.43.79";
 | 
					    private static final String PSC_URL = "http://192.168.70.10:8880/";
 | 
				
			||||||
    private static final String SUB_ADDRESS = "";
 | 
					 | 
				
			||||||
    private static final int PORT = 8080;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static void main(String [] args) {
 | 
					    public static void main(String [] args) {
 | 
				
			||||||
        int channel = 10;
 | 
					        int channel = 10;
 | 
				
			||||||
| 
						 | 
					@ -31,7 +29,7 @@ public class PollingStationClientToyRun {
 | 
				
			||||||
//        System.out.println("Channel int initial:"+channel);
 | 
					//        System.out.println("Channel int initial:"+channel);
 | 
				
			||||||
//        System.out.println("Channel int retrieved:"+retrieved);
 | 
					//        System.out.println("Channel int retrieved:"+retrieved);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ScannerClientAPI scannerClient = new ScannerClientAPI(ADDRESS, SUB_ADDRESS, PORT, POLLING_STATION_WEB_SCANNER_SCAN_PATH);
 | 
					        ScannerClientAPI scannerClient = new ScannerClientAPI(PSC_URL);
 | 
				
			||||||
        boolean sent = scannerClient.sendScan(scannedData);
 | 
					        boolean sent = scannerClient.sendScan(scannedData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        System.out.println("Message sent successfully: "+sent);
 | 
					        System.out.println("Message sent successfully: "+sent);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,9 +26,11 @@ import static org.hamcrest.MatcherAssert.assertThat;
 | 
				
			||||||
public class Receiver_ClientTest {
 | 
					public class Receiver_ClientTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private PollingStationScanner.Consumer scanner;
 | 
					    private PollingStationScanner.Consumer scanner;
 | 
				
			||||||
    private static final String ADDRESS = "http://localhost";
 | 
					    private static final int PSC_PORT = 8880;
 | 
				
			||||||
    private static final String SUB_ADDRESS = "";
 | 
					    private static final String PSC_HOST = "localhost";
 | 
				
			||||||
    private static final int PORT = 8080;
 | 
					    private static final String PSC_SCANNER_PATH = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final String PSC_URL = "http://" + PSC_HOST + ":" + PSC_PORT + PSC_SCANNER_PATH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Semaphore semaphore;
 | 
					    private Semaphore semaphore;
 | 
				
			||||||
    private Throwable thrown;
 | 
					    private Throwable thrown;
 | 
				
			||||||
| 
						 | 
					@ -82,7 +84,7 @@ public class Receiver_ClientTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        System.err.println("Setting up Scanner WebApp!");
 | 
					        System.err.println("Setting up Scanner WebApp!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scanner = new ReceiverScanHandler(PORT, SUB_ADDRESS);
 | 
					        scanner = new ReceiverScanHandler(PSC_PORT, PSC_SCANNER_PATH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        semaphore = new Semaphore(0);
 | 
					        semaphore = new Semaphore(0);
 | 
				
			||||||
        thrown = null;
 | 
					        thrown = null;
 | 
				
			||||||
| 
						 | 
					@ -106,7 +108,7 @@ public class Receiver_ClientTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scanner.subscribe(new ScanHandler(scannedData));
 | 
					        scanner.subscribe(new ScanHandler(scannedData));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ScannerClientAPI scannerClient = new ScannerClientAPI(ADDRESS, SUB_ADDRESS, PORT, POLLING_STATION_WEB_SCANNER_SCAN_PATH);
 | 
					        ScannerClientAPI scannerClient = new ScannerClientAPI(PSC_URL + POLLING_STATION_WEB_SCANNER_SCAN_PATH);
 | 
				
			||||||
        scannerClient.sendScan(scannedData);
 | 
					        scannerClient.sendScan(scannedData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        semaphore.acquire();
 | 
					        semaphore.acquire();
 | 
				
			||||||
| 
						 | 
					@ -124,7 +126,7 @@ public class Receiver_ClientTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scanner.subscribe(new ErrorHandler(errorMsg.getMsg()));
 | 
					        scanner.subscribe(new ErrorHandler(errorMsg.getMsg()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ScannerClientAPI scannerClient = new ScannerClientAPI(ADDRESS, SUB_ADDRESS, PORT, POLLING_STATION_WEB_SCANNER_ERROR_PATH);
 | 
					        ScannerClientAPI scannerClient = new ScannerClientAPI(PSC_URL + POLLING_STATION_WEB_SCANNER_ERROR_PATH);
 | 
				
			||||||
        scannerClient.sendError(errorMsg);
 | 
					        scannerClient.sendError(errorMsg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        semaphore.acquire();
 | 
					        semaphore.acquire();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,12 +23,11 @@ public class ScannerClientAPI {
 | 
				
			||||||
    private Client client;
 | 
					    private Client client;
 | 
				
			||||||
    private WebTarget webTarget;
 | 
					    private WebTarget webTarget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ScannerClientAPI(String address, String sub_address, int port, String path) {
 | 
					    public ScannerClientAPI(String url) {
 | 
				
			||||||
        client = ClientBuilder.newClient();
 | 
					        client = ClientBuilder.newClient();
 | 
				
			||||||
        client.register(ProtobufMessageBodyReader.class);
 | 
					        client.register(ProtobufMessageBodyReader.class);
 | 
				
			||||||
        client.register(ProtobufMessageBodyWriter.class);
 | 
					        client.register(ProtobufMessageBodyWriter.class);
 | 
				
			||||||
        webTarget = client.target(address + ":" + port)
 | 
					        webTarget = client.target(url);
 | 
				
			||||||
                .path(sub_address).path(path);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue