shlist

share and manage lists between multiple people
Log | Files | Refs

commit de583b974777e0113b7f536b28c0cc69e8e72d03
parent 7238cdbb686912f621a2bfcea57674fe8beaa93c
Author: David Engel <drengel88@gmail.com>
Date:   Mon, 13 Jul 2015 22:28:01 -0600

android: Added new project, got new device messaging working, main display, new list messaging.

Diffstat:
Aandroid/shlist/.gitignore | 6++++++
Aandroid/shlist/.idea/.name | 2++
Aandroid/shlist/.idea/compiler.xml | 23+++++++++++++++++++++++
Aandroid/shlist/.idea/copyright/profiles_settings.xml | 4++++
Aandroid/shlist/.idea/encodings.xml | 5+++++
Aandroid/shlist/.idea/gradle.xml | 19+++++++++++++++++++
Aandroid/shlist/.idea/misc.xml | 10++++++++++
Aandroid/shlist/.idea/modules.xml | 10++++++++++
Aandroid/shlist/.idea/scopes/scope_settings.xml | 6++++++
Aandroid/shlist/.idea/vcs.xml | 7+++++++
Aandroid/shlist/app/.gitignore | 1+
Aandroid/shlist/app/app.iml | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/app/build.gradle | 25+++++++++++++++++++++++++
Aandroid/shlist/app/proguard-rules.pro | 17+++++++++++++++++
Aandroid/shlist/app/src/androidTest/java/drsocto/shlist/ApplicationTest.java | 14++++++++++++++
Aandroid/shlist/app/src/main/AndroidManifest.xml | 22++++++++++++++++++++++
Aandroid/shlist/app/src/main/java/drsocto/shlist/DBHelper.java | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java | 218+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/java/drsocto/shlist/ListUtils.java | 31+++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/java/drsocto/shlist/NetMan.java | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/res/layout/add_list_prompt.xml | 23+++++++++++++++++++++++
Aandroid/shlist/app/src/main/res/layout/layout_home_screen.xml | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/res/layout/list_row.xml | 24++++++++++++++++++++++++
Aandroid/shlist/app/src/main/res/menu/menu_home_screen.xml | 10++++++++++
Aandroid/shlist/app/src/main/res/mipmap-hdpi/ic_launcher.png | 0
Aandroid/shlist/app/src/main/res/mipmap-mdpi/ic_launcher.png | 0
Aandroid/shlist/app/src/main/res/mipmap-xhdpi/ic_launcher.png | 0
Aandroid/shlist/app/src/main/res/mipmap-xxhdpi/ic_launcher.png | 0
Aandroid/shlist/app/src/main/res/values-w820dp/dimens.xml | 6++++++
Aandroid/shlist/app/src/main/res/values/colors.xml | 33+++++++++++++++++++++++++++++++++
Aandroid/shlist/app/src/main/res/values/dimens.xml | 5+++++
Aandroid/shlist/app/src/main/res/values/strings.xml | 6++++++
Aandroid/shlist/app/src/main/res/values/styles.xml | 8++++++++
Aandroid/shlist/build.gradle | 19+++++++++++++++++++
Aandroid/shlist/gradle.properties | 19+++++++++++++++++++
Aandroid/shlist/gradle/wrapper/gradle-wrapper.jar | 0
Aandroid/shlist/gradle/wrapper/gradle-wrapper.properties | 6++++++
Aandroid/shlist/gradlew | 164+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/gradlew.bat | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aandroid/shlist/settings.gradle | 1+
Aandroid/shlist/shlist.iml | 19+++++++++++++++++++
41 files changed, 1168 insertions(+), 0 deletions(-)

diff --git a/android/shlist/.gitignore b/android/shlist/.gitignore @@ -0,0 +1,6 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build diff --git a/android/shlist/.idea/.name b/android/shlist/.idea/.name @@ -0,0 +1 @@ +shlist +\ No newline at end of file diff --git a/android/shlist/.idea/compiler.xml b/android/shlist/.idea/compiler.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CompilerConfiguration"> + <option name="DEFAULT_COMPILER" value="Javac" /> + <resourceExtensions /> + <wildcardResourcePatterns> + <entry name="!?*.java" /> + <entry name="!?*.form" /> + <entry name="!?*.class" /> + <entry name="!?*.groovy" /> + <entry name="!?*.scala" /> + <entry name="!?*.flex" /> + <entry name="!?*.kt" /> + <entry name="!?*.clj" /> + </wildcardResourcePatterns> + <annotationProcessing> + <profile default="true" name="Default" enabled="false"> + <processorPath useClasspath="true" /> + </profile> + </annotationProcessing> + </component> +</project> + diff --git a/android/shlist/.idea/copyright/profiles_settings.xml b/android/shlist/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ +<component name="CopyrightManager"> + <settings default="" /> +</component> +\ No newline at end of file diff --git a/android/shlist/.idea/encodings.xml b/android/shlist/.idea/encodings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" /> +</project> + diff --git a/android/shlist/.idea/gradle.xml b/android/shlist/.idea/gradle.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="GradleSettings"> + <option name="linkedExternalProjectsSettings"> + <GradleProjectSettings> + <option name="distributionType" value="LOCAL" /> + <option name="externalProjectPath" value="$PROJECT_DIR$" /> + <option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.2.1" /> + <option name="modules"> + <set> + <option value="$PROJECT_DIR$" /> + <option value="$PROJECT_DIR$/app" /> + </set> + </option> + </GradleProjectSettings> + </option> + </component> +</project> + diff --git a/android/shlist/.idea/misc.xml b/android/shlist/.idea/misc.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="EntryPointsManager"> + <entry_points version="2.0" /> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/build/classes" /> + </component> +</project> + diff --git a/android/shlist/.idea/modules.xml b/android/shlist/.idea/modules.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> + <module fileurl="file://$PROJECT_DIR$/shlist.iml" filepath="$PROJECT_DIR$/shlist.iml" /> + </modules> + </component> +</project> + diff --git a/android/shlist/.idea/scopes/scope_settings.xml b/android/shlist/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ +<component name="DependencyValidationManager"> + <state> + <option name="SKIP_IMPORT_STATEMENTS" value="false" /> + </state> +</component> +\ No newline at end of file diff --git a/android/shlist/.idea/vcs.xml b/android/shlist/.idea/vcs.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="" /> + </component> +</project> + diff --git a/android/shlist/app/.gitignore b/android/shlist/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/android/shlist/app/app.iml b/android/shlist/app/app.iml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="shlist" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":app" /> + </configuration> + </facet> + <facet type="android" name="Android"> + <configuration> + <option name="SELECTED_BUILD_VARIANT" value="debug" /> + <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" /> + <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> + <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" /> + <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" /> + <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" /> + <option name="ALLOW_USER_CONFIGURATION" value="false" /> + <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> + <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> + <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> + <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" inherit-compiler-output="false"> + <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> + <output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" /> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> + <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> + </content> + <orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" exported="" name="support-annotations-22.1.1" level="project" /> + <orderEntry type="library" exported="" name="support-v4-22.1.1" level="project" /> + <orderEntry type="library" exported="" name="appcompat-v7-22.1.1" level="project" /> + </component> +</module> + diff --git a/android/shlist/app/build.gradle b/android/shlist/app/build.gradle @@ -0,0 +1,25 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 22 + buildToolsVersion "22.0.1" + + defaultConfig { + applicationId "drsocto.shlist" + minSdkVersion 15 + targetSdkVersion 22 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.android.support:appcompat-v7:22.1.1' +} diff --git a/android/shlist/app/proguard-rules.pro b/android/shlist/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\David\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 *; +#} diff --git a/android/shlist/app/src/androidTest/java/drsocto/shlist/ApplicationTest.java b/android/shlist/app/src/androidTest/java/drsocto/shlist/ApplicationTest.java @@ -0,0 +1,13 @@ +package drsocto.shlist; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a> + */ +public class ApplicationTest extends ApplicationTestCase<Application> { + public ApplicationTest() { + super(Application.class); + } +} +\ No newline at end of file diff --git a/android/shlist/app/src/main/AndroidManifest.xml b/android/shlist/app/src/main/AndroidManifest.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="drsocto.shlist" > + <uses-permission android:name="android.permission.READ_PHONE_STATE"/> + <uses-permission android:name="android.permission.INTERNET" /> + <application + android:allowBackup="true" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:theme="@style/AppTheme" > + <activity + android:name=".HomeScreen" + android:label="@string/app_name" > + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + +</manifest> diff --git a/android/shlist/app/src/main/java/drsocto/shlist/DBHelper.java b/android/shlist/app/src/main/java/drsocto/shlist/DBHelper.java @@ -0,0 +1,51 @@ +package drsocto.shlist; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +/** + * Created by David on 7/12/2015. + */ +public class DBHelper { + private String dbName; + private SQLiteDatabase theDB; + private Context theContext; + + public DBHelper(String name, Context context) { + dbName = name; + theContext = context; + } + + public void openOrCreateDB() { + theDB = theContext.openOrCreateDatabase(dbName, theContext.MODE_PRIVATE, null); + theDB.execSQL("CREATE TABLE IF NOT EXISTS device(id VARCHAR, phone_number int)"); + // TODO: create the rest of the tables here as well, can we check the return of that command? + // ie if that creates the table then create everything else? Or should we create when the tables are new. + } + + public void deleteDB() { theContext.deleteDatabase(dbName); } + + public void closeDB() { + theDB.close(); + } + + public String getDeviceID() { + Cursor resultSet = theDB.rawQuery("SELECT id FROM device", null); + if(resultSet.moveToFirst()) { + Log.i("DBHelper", "Returning a value from getDeviceID()"); + return resultSet.getString(resultSet.getColumnIndex("id")); + } else { + Log.i("DBHelper", "Returning empty string from getDeviceID()"); + return null; + } + } + + public void setDeviceID(String deviceID, String phoneNumber) { + Log.d("DBHelper", "Added Entry To device: " + deviceID + " - " + phoneNumber); + String query = "insert into device VALUES(?,?)"; + theDB.execSQL(query, new String[] {deviceID, phoneNumber}); + } + +} diff --git a/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java b/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java @@ -0,0 +1,217 @@ +package drsocto.shlist; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Canvas; +import android.os.AsyncTask; +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.telephony.TelephonyManager; +import android.util.Log; +import android.view.Display; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +// TODO: How do we preserve the local db on uninstall? +// We could just save device id for reinstalls and have +// server update lists on next run. Prompt user! + +public class HomeScreen extends ActionBarActivity { + + private final String DEBUG_TAG = "PIMPJUICE"; + private final String SERVER_ADDRESS = "104.236.186.39"; + private final int SERVER_PORT = 5437; + private final String dbName = "shlist.db"; + private final int NEW_LIST_MESSAGE_TYPE= 1; + private final int NEW_DEVICE_MESSAGE_TYPE= 3; + private ArrayList<String> list1; + private ArrayAdapter<String> adapter1; + private ArrayAdapter<String> adapter2; + private ArrayList<String> list2; + private long phoneNum; + private TextView cListsTV; + private TextView oListsTV; + NetMan nm; + DBHelper dbHelper; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.layout_home_screen); + + dbHelper = new DBHelper(dbName, this); + //dbHelper.deleteDB(); + dbHelper.openOrCreateDB(); + + nm = new NetMan(SERVER_ADDRESS, SERVER_PORT, this); + + TelephonyManager tMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); + String mPhoneNumber = tMgr.getLine1Number().substring(2); + //Log.d("HomeScreen", "Phone Number: " + mPhoneNumber); + // remove '+' before parsing + phoneNum = Long.parseLong(mPhoneNumber); + + String id = dbHelper.getDeviceID(); + + dbHelper.closeDB(); + + if (id == null) { + new sendNewDeviceMessageTask().execute(mPhoneNumber, "new_device"); + } else { + TextView tv = (TextView) findViewById(R.id.deviceID); + tv.setText("Device ID (From Local): " + id + "\n" + " Phone Number: " + mPhoneNumber); + } + + + list1 = new ArrayList<String>(); + + adapter1 = new ArrayAdapter<String>(this, R.layout.list_row, R.id.r_text, list1); + + ListView lv1 = (ListView) findViewById(R.id.currentLists); + + list2 = new ArrayList<String>(); + list2.add("Tough shlist"); + list2.add("shlist happens"); + list2.add("Well shlist..."); + list2.add("Well shlist..."); + list2.add("Well shlist..."); + + adapter2 = new ArrayAdapter<String>(this, R.layout.list_row, R.id.r_text, list2); + + ListView lv2 = (ListView) findViewById(R.id.openLists); + + cListsTV = (TextView) findViewById(R.id.currentListsTV); + oListsTV = (TextView) findViewById(R.id.openListsTV); + + cListsTV.setText("Current Lists (" + list1.size() + ")"); + oListsTV.setText("Available Lists (" + list2.size() + ")"); + + lv1.setAdapter(adapter1); + lv2.setAdapter(adapter2); + + + /* if device id doesn't exist + get phone number + send to server + TODO: make sure server always rolls new id and clears data + get device id + write device id locally + + + + */ + // We can get around the new phone thing, if you reinstall the app, we force it to reload contacts + + + // create and fill current lists + + // create and fill available lists + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_home_screen, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } else if (id == R.id.action_add) { + Log.d(DEBUG_TAG, "ADD PLAN CLICKED"); + addPlanDialog(); + } + + return super.onOptionsItemSelected(item); + } + + public void removeDB(View v) { + dbHelper.deleteDB(); + } + + public void addList(String name) { + dbHelper.openOrCreateDB(); + String device_id = dbHelper.getDeviceID(); + String message = device_id + "\0" + name; + new sendNewListMessageTask().execute(message, "new_list"); + // send pair to server + // get list id message + // create list item, add list item + } + + public void addPlanDialog() { + LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); + View layout = inflater.inflate(R.layout.add_list_prompt, (ViewGroup) findViewById(R.id.addListPromptLayout)); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setView(layout); + builder.setTitle("New List"); + final EditText nameBox = (EditText) layout.findViewById(R.id.userInput); + + builder.setPositiveButton("Add", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + addList(nameBox.getText().toString()); + dialogInterface.dismiss(); + } + }); + + builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.dismiss(); + } + }); + AlertDialog dialog = builder.create(); + + dialog.show(); + } + + public class sendNewDeviceMessageTask extends AsyncTask<String, Void, String> { + @Override + protected String doInBackground(String... urls) { + String result = nm.sendMessage(urls); + return result; + } + @Override + protected void onPostExecute(String result) { + TextView tv = (TextView) findViewById(R.id.deviceID); + tv.setText("Device ID (From Server): " + result + " Phone Number: " + phoneNum); + } + } + + public class sendNewListMessageTask extends AsyncTask<String, Void, String> { + @Override + protected String doInBackground(String... urls) { + String result = nm.sendMessage(urls); + return result; + } + @Override + protected void onPostExecute(String result) { + list1.add(result); + cListsTV.setText("Current Lists (" + list1.size() + ")"); + adapter1.notifyDataSetChanged(); + } + } +} +\ No newline at end of file diff --git a/android/shlist/app/src/main/java/drsocto/shlist/ListUtils.java b/android/shlist/app/src/main/java/drsocto/shlist/ListUtils.java @@ -0,0 +1,30 @@ +package drsocto.shlist; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; +import android.widget.ListView; + +/** + * Created by David on 7/12/2015. + */ +public class ListUtils { + public static void setDynamicHeight(ListView mListView) { + ListAdapter mListAdapter = mListView.getAdapter(); + if (mListAdapter == null) { + // when adapter is null + return; + } + int height = 0; + int desiredWidth = View.MeasureSpec.makeMeasureSpec(mListView.getWidth(), View.MeasureSpec.UNSPECIFIED); + for (int i = 0; i < mListAdapter.getCount(); i++) { + View listItem = mListAdapter.getView(i, null, mListView); + listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED); + height += listItem.getMeasuredHeight(); + } + ViewGroup.LayoutParams params = mListView.getLayoutParams(); + params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1)); + mListView.setLayoutParams(params); + mListView.requestLayout(); + } +} +\ No newline at end of file diff --git a/android/shlist/app/src/main/java/drsocto/shlist/NetMan.java b/android/shlist/app/src/main/java/drsocto/shlist/NetMan.java @@ -0,0 +1,107 @@ +package drsocto.shlist; + +import android.content.Context; +import android.os.AsyncTask; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.Socket; +import java.net.UnknownHostException; + +/** + * Created by David on 7/12/2015. + */ +public class NetMan { + private String addr; + private int port; + Socket socket; + Context context; + + public NetMan(String addr, int port, Context theContext) { + this.addr = addr; + this.port = port; + context = theContext; + } + + public int openSocket() { + try { + socket = new Socket(addr, port); + return 0; + } catch (UnknownHostException e) { + Log.d("NetMan", "Unknown Host Excetion"); + return 1; + } catch (IOException e) { + Log.d("NetMan", "IO Exception"); + return 2; + } + } + + public int closeSocket() { + try { + socket.close(); + return 0; + } catch (IOException e) { + Log.d("NetMan", "IOException" + e); + return 2; + } + } + + public String sendMessage(String[] message) { + Log.d("NetMan", "In sendMessage"); + int mTypeInt = lookupMessageType(message[1]); + byte[] type = toByteArray(mTypeInt); + byte[] length = toByteArray(message[0].length()); + //Log.d("HomeScreen", "Resulting type array is of size: " + type.length); + //Log.d("HomeScreen", "Resulting length array is of size: " + type.length); + if (openSocket() == 0) { + try { + PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); + socket.getOutputStream().write(type); + Log.d("NetMan", "Sent Message Type: 3"); + socket.getOutputStream().write(length); + Log.d("NetMan", "Sent Message Type: " + message[0].length()); + Log.d("NetMan", "Sending Message: " + message[0]); + out.print(message[0]); + out.flush(); + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + String response = in.readLine(); + Log.d("NetMan", "Received Device ID: " + response); + DBHelper dbh = new DBHelper("shlist.db", context); + dbh.openOrCreateDB(); + dbh.setDeviceID(response, message[0]); + if (mTypeInt == 1) { + String[] messageParts = message[0].split("\0"); + response = messageParts[1] + " - " + response; + } + return response; + + } catch (IOException e) { + Log.d("NetMan", "IOException" + e); + } + closeSocket(); + } + return "Failed"; + } + + public int lookupMessageType(String mTypeStr) { + if (mTypeStr.equals("new_list")) { + return 1; + } else if (mTypeStr.equals("new_device")) { + return 3; + } + return -1; + } + + public static byte[] toByteArray(long value) + { + byte[] ret = new byte[2]; + ret[1] = (byte) ((value >> ((0)*8) & 0xFF)); + ret[0] = (byte) ((value >> ((1)*8) & 0xFF)); + return ret; + } +} diff --git a/android/shlist/app/src/main/res/layout/add_list_prompt.xml b/android/shlist/app/src/main/res/layout/add_list_prompt.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/addListPromptLayout" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="10dp" > + + <EditText + android:id="@+id/userInput" + android:layout_width="match_parent" + android:inputType="text" + android:layout_height="wrap_content" + android:hint="List Name" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp"> + + <requestFocus /> + + </EditText> + +</LinearLayout> +\ No newline at end of file diff --git a/android/shlist/app/src/main/res/layout/layout_home_screen.xml b/android/shlist/app/src/main/res/layout/layout_home_screen.xml @@ -0,0 +1,63 @@ + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/homeScreenLayout" + android:orientation="vertical"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Foobar" + android:id="@+id/deviceID" + android:textAppearance="?android:attr/textAppearanceLarge" + android:background="@color/white" + android:textColor="@color/black" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="5dp" + android:textSize="15sp"/> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Current Lists" + android:id="@+id/currentListsTV" + android:textAppearance="?android:attr/textAppearanceLarge" + android:background="@color/black" + android:textColor="@color/white" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="5dp" + android:textSize="15sp"/> + + <ListView + android:id="@+id/currentLists" + android:layout_width="fill_parent" + android:layout_height="275dp" + android:layout_weight="0.4"/> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Available Lists" + android:id="@+id/openListsTV" + android:background="@color/black" + android:textColor="@color/white" + android:textAppearance="?android:attr/textAppearanceLarge" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="5dp" + android:textSize="15sp"/> + + <ListView + android:id="@+id/openLists" + android:layout_width="fill_parent" + android:layout_height="275dp" + android:layout_weight="0.4"/> + + <Button + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:onClick="removeDB" + android:text="Delete DB File"/> + </LinearLayout> +\ No newline at end of file diff --git a/android/shlist/app/src/main/res/layout/list_row.xml b/android/shlist/app/src/main/res/layout/list_row.xml @@ -0,0 +1,24 @@ +<?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:orientation="vertical" > +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/r_text" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:textSize="15sp" + android:padding="5dp"/> + +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/r_text2" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="David, Kyle, Greg" + android:textSize="10sp" + android:paddingLeft="5dp" + android:paddingBottom="5dp"/> + +</LinearLayout> diff --git a/android/shlist/app/src/main/res/menu/menu_home_screen.xml b/android/shlist/app/src/main/res/menu/menu_home_screen.xml @@ -0,0 +1,10 @@ +<menu 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" tools:context=".HomeScreen"> + + <item android:id="@+id/action_add" android:title="+" + app:showAsAction="always"/> + + <item android:id="@+id/action_settings" android:title="@string/action_settings" + android:orderInCategory="100" app:showAsAction="never" /> +</menu> diff --git a/android/shlist/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/shlist/app/src/main/res/mipmap-hdpi/ic_launcher.png Binary files differ. diff --git a/android/shlist/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/shlist/app/src/main/res/mipmap-mdpi/ic_launcher.png Binary files differ. diff --git a/android/shlist/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/shlist/app/src/main/res/mipmap-xhdpi/ic_launcher.png Binary files differ. diff --git a/android/shlist/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/shlist/app/src/main/res/mipmap-xxhdpi/ic_launcher.png Binary files differ. diff --git a/android/shlist/app/src/main/res/values-w820dp/dimens.xml b/android/shlist/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ +<resources> + <!-- Example customization of dimensions originally defined in res/values/dimens.xml + (such as screen margins) for screens with more than 820dp of available width. This + would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> + <dimen name="activity_horizontal_margin">64dp</dimen> +</resources> diff --git a/android/shlist/app/src/main/res/values/colors.xml b/android/shlist/app/src/main/res/values/colors.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <item name="blue" type="color">#FF33B5E5</item> + <item name="purple" type="color">#FFAA66CC</item> + <item name="green" type="color">#FF99CC00</item> + <item name="orange" type="color">#FFFFBB33</item> + <item name="red" type="color">#FFFF4444</item> + <item name="darkblue" type="color">#FF0099CC</item> + <item name="darkpurple" type="color">#FF9933CC</item> + <item name="darkgreen" type="color">#FF669900</item> + <item name="darkorange" type="color">#FFFF8800</item> + <item name="darkred" type="color">#FFCC0000</item> + <item name="white" type="color">#FFF</item> + <item name="black" type="color">#000</item> + + <integer-array name="androidcolors"> + <item>@color/blue</item> + <item>@color/purple</item> + <item>@color/green</item> + <item>@color/orange</item> + <item>@color/red</item> + <item>@color/darkblue</item> + <item>@color/darkpurple</item> + <item>@color/darkgreen</item> + <item>@color/darkorange</item> + <item>@color/darkred</item> + <item>@color/white</item> + <item>@color/black</item> + </integer-array> + +</resources> +\ No newline at end of file diff --git a/android/shlist/app/src/main/res/values/dimens.xml b/android/shlist/app/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ +<resources> + <!-- Default screen margins, per the Android Design guidelines. --> + <dimen name="activity_horizontal_margin">16dp</dimen> + <dimen name="activity_vertical_margin">16dp</dimen> +</resources> diff --git a/android/shlist/app/src/main/res/values/strings.xml b/android/shlist/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ +<resources> + <string name="app_name">shlist</string> + <string name="debug_tag">PIMPJUICE</string> + <string name="hello_world">Hello world!</string> + <string name="action_settings">Settings</string> +</resources> diff --git a/android/shlist/app/src/main/res/values/styles.xml b/android/shlist/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ +<resources> + + <!-- Base application theme. --> + <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> + <!-- Customize your theme here. --> + </style> + +</resources> diff --git a/android/shlist/build.gradle b/android/shlist/build.gradle @@ -0,0 +1,19 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.1.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/android/shlist/gradle.properties b/android/shlist/gradle.properties @@ -0,0 +1,18 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +\ No newline at end of file diff --git a/android/shlist/gradle/wrapper/gradle-wrapper.jar b/android/shlist/gradle/wrapper/gradle-wrapper.jar Binary files differ. diff --git a/android/shlist/gradle/wrapper/gradle-wrapper.properties b/android/shlist/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Apr 10 15:27:10 PDT 2013 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/android/shlist/gradlew b/android/shlist/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/shlist/gradlew.bat b/android/shlist/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/shlist/settings.gradle b/android/shlist/settings.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/android/shlist/shlist.iml b/android/shlist/shlist.iml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="java-gradle" name="Java-Gradle"> + <configuration> + <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> +