diff --git a/AndroidShowCaseApp/.gitignore b/AndroidShowCaseApp/.gitignore new file mode 100755 index 0000000..c6cbe56 --- /dev/null +++ b/AndroidShowCaseApp/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/AndroidShowCaseApp/.idea/.name b/AndroidShowCaseApp/.idea/.name new file mode 100755 index 0000000..a1ed788 --- /dev/null +++ b/AndroidShowCaseApp/.idea/.name @@ -0,0 +1 @@ +AndroidShowCaseApp \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/compiler.xml b/AndroidShowCaseApp/.idea/compiler.xml new file mode 100755 index 0000000..96cc43e --- /dev/null +++ b/AndroidShowCaseApp/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/copyright/profiles_settings.xml b/AndroidShowCaseApp/.idea/copyright/profiles_settings.xml new file mode 100755 index 0000000..e7bedf3 --- /dev/null +++ b/AndroidShowCaseApp/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/gradle.xml b/AndroidShowCaseApp/.idea/gradle.xml new file mode 100755 index 0000000..39139a6 --- /dev/null +++ b/AndroidShowCaseApp/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/misc.xml b/AndroidShowCaseApp/.idea/misc.xml new file mode 100755 index 0000000..5d19981 --- /dev/null +++ b/AndroidShowCaseApp/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/modules.xml b/AndroidShowCaseApp/.idea/modules.xml new file mode 100755 index 0000000..9ee48b7 --- /dev/null +++ b/AndroidShowCaseApp/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/runConfigurations.xml b/AndroidShowCaseApp/.idea/runConfigurations.xml new file mode 100755 index 0000000..7f68460 --- /dev/null +++ b/AndroidShowCaseApp/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/.idea/vcs.xml b/AndroidShowCaseApp/.idea/vcs.xml new file mode 100755 index 0000000..6564d52 --- /dev/null +++ b/AndroidShowCaseApp/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/app/.gitignore b/AndroidShowCaseApp/app/.gitignore new file mode 100755 index 0000000..796b96d --- /dev/null +++ b/AndroidShowCaseApp/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/AndroidShowCaseApp/app/build.gradle b/AndroidShowCaseApp/app/build.gradle new file mode 100755 index 0000000..5f3d5e8 --- /dev/null +++ b/AndroidShowCaseApp/app/build.gradle @@ -0,0 +1,28 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.2" + + defaultConfig { + applicationId "com.navneet" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:design:23.1.1' + compile 'com.squareup.okhttp:okhttp:2.5.0' +} diff --git a/AndroidShowCaseApp/app/proguard-rules.pro b/AndroidShowCaseApp/app/proguard-rules.pro new file mode 100755 index 0000000..7b6f462 --- /dev/null +++ b/AndroidShowCaseApp/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 /home/navneet/Documents/android-sdk-linux/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/AndroidShowCaseApp/app/src/androidTest/java/com/navneet/ApplicationTest.java b/AndroidShowCaseApp/app/src/androidTest/java/com/navneet/ApplicationTest.java new file mode 100755 index 0000000..a13f50f --- /dev/null +++ b/AndroidShowCaseApp/app/src/androidTest/java/com/navneet/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.navneet; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/AndroidShowCaseApp/app/src/main/AndroidManifest.xml b/AndroidShowCaseApp/app/src/main/AndroidManifest.xml new file mode 100755 index 0000000..5be684f --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + diff --git a/AndroidShowCaseApp/app/src/main/java/com/navneet/AddNewDevices.java b/AndroidShowCaseApp/app/src/main/java/com/navneet/AddNewDevices.java new file mode 100644 index 0000000..1552009 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/java/com/navneet/AddNewDevices.java @@ -0,0 +1,118 @@ +package com.navneet; + +import android.app.Activity; +import android.content.ContentValues; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.network.NetworkClassHandler; +import com.network.NetworkInterface; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; + +/** + * Created by root on 1/8/16. + */ +public class AddNewDevices extends Activity implements View.OnClickListener, NetworkInterface{ + private ProgressBar progressBar; + private SQLiteDatabase database; + private Button submit; + private EditText name, version, codename, target, distribution; + private String err = ""; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.add_new_layout); + progressBar = (ProgressBar) findViewById(R.id.progressBar); + submit = (Button) findViewById(R.id.submit); + name = (EditText) findViewById(R.id.name); + version = (EditText) findViewById(R.id.version); + codename = (EditText) findViewById(R.id.codename); + target = (EditText) findViewById(R.id.target); + distribution = (EditText) findViewById(R.id.distribution); + submit.setOnClickListener(this); + } + private boolean Validation(){ + if(TextUtils.isEmpty(name.getText().toString().trim())) { + err = "Enter the Name"; + return false; + } else if(TextUtils.isEmpty(version.getText().toString().trim())) { + err = "Enter the Version"; + return false; + } else if(TextUtils.isEmpty(codename.getText().toString().trim())) { + err = "Enter the Code name"; + return false; + } else if(TextUtils.isEmpty(target.getText().toString().trim())) { + err = "Enter the Target"; + return false; + } else if(TextUtils.isEmpty(distribution.getText().toString().trim())) { + err = "Enter the Distribution"; + return false; + } + return true; + } + @Override + public void onClick(View v) { + if(Validation()){ + progressBar.setVisibility(View.VISIBLE); + HashMap map = new HashMap<>(); + map.put("name", name.getText().toString().trim()); + map.put("version", version.getText().toString().trim()); + map.put("codename", codename.getText().toString().trim()); + map.put("target", target.getText().toString().trim()); + map.put("distribution", distribution.getText().toString().trim()); + new NetworkClassHandler().OnPostRequestWithParams(this, 5, map,"http://mobilesandboxdev.azurewebsites.net/android"); + } else { + Toast.makeText(this, err,Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onResponse(String response, int requestCode) { + try { + JSONObject json = new JSONObject(response); + MyDatabaseHelper mMyDatabaseHelper = new MyDatabaseHelper(AddNewDevices.this); + database = mMyDatabaseHelper.getWritableDatabase(); + ContentValues cv = new ContentValues(); + if (json.has(MyDatabaseHelper.COLUMN_ID)) + cv.put(MyDatabaseHelper.COLUMN_ID, json.getInt(MyDatabaseHelper.COLUMN_ID)); + if (json.has(MyDatabaseHelper.NAME)) + cv.put(MyDatabaseHelper.NAME, json.getString(MyDatabaseHelper.NAME)); + else + cv.put(MyDatabaseHelper.NAME, "Information Not Available"); + if (json.has(MyDatabaseHelper.VERSION)) + cv.put(MyDatabaseHelper.VERSION, json.getString(MyDatabaseHelper.VERSION)); + else + cv.put(MyDatabaseHelper.VERSION, "Information Not Available"); + if (json.has(MyDatabaseHelper.CODE_NAME)) + cv.put(MyDatabaseHelper.CODE_NAME, json.getString(MyDatabaseHelper.CODE_NAME)); + else + cv.put(MyDatabaseHelper.CODE_NAME, "Information Not Available"); + if (json.has(MyDatabaseHelper.TARGET)) + cv.put(MyDatabaseHelper.TARGET, json.getString(MyDatabaseHelper.TARGET)); + else + cv.put(MyDatabaseHelper.TARGET, "Information Not Available"); + if (json.has(MyDatabaseHelper.DISTRIBUTION)) + cv.put(MyDatabaseHelper.DISTRIBUTION, json.getString(MyDatabaseHelper.DISTRIBUTION)); + else + cv.put(MyDatabaseHelper.DISTRIBUTION, "Information Not Available"); + database.insert(MyDatabaseHelper.TABLE_DEVICES, null, cv); + progressBar.setVisibility(View.GONE); + Toast.makeText(this, "Device info added successfully!",Toast.LENGTH_SHORT).show(); + setResult(RESULT_OK); + finish(); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/AndroidShowCaseApp/app/src/main/java/com/navneet/ListingActivity.java b/AndroidShowCaseApp/app/src/main/java/com/navneet/ListingActivity.java new file mode 100755 index 0000000..6f510ae --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/java/com/navneet/ListingActivity.java @@ -0,0 +1,143 @@ +package com.navneet; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ContentValues; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.support.v4.widget.SimpleCursorAdapter; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.ProgressBar; + +import com.network.NetworkClassHandler; +import com.network.NetworkInterface; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.io.File; + + +public class ListingActivity extends Activity implements NetworkInterface, AdapterView.OnItemClickListener, View.OnClickListener{ + private ListView listView; + private ProgressBar progressBar; + private SQLiteDatabase database; + private final int SERVER_SYNC_REQUEST = 1; + private SimpleCursorAdapter mSimpleCursorAdapter; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_listing); + listView = (ListView) findViewById(R.id.listView); + progressBar = (ProgressBar) findViewById(R.id.progressBar); + View footer = View.inflate(this, R.layout.add_new, null); + footer.setOnClickListener(this); + listView.addFooterView(footer); + listView.setOnItemClickListener(this); + File databaseFile = getDatabasePath(MyDatabaseHelper.DATABASE_NAME); + if(!databaseFile.exists()){ + progressBar.setVisibility(View.VISIBLE); + new NetworkClassHandler().OnGetRequest(ListingActivity.this, SERVER_SYNC_REQUEST, "http://mobilesandboxdev.azurewebsites.net/android/"); + } else { + MyDatabaseHelper mMyDatabaseHelper = new MyDatabaseHelper(ListingActivity.this); + database = mMyDatabaseHelper.getWritableDatabase(); + Cursor cursor = database.rawQuery("SELECT _id, " + MyDatabaseHelper.NAME + " FROM " + MyDatabaseHelper.TABLE_DEVICES + "", null); + listView.setAdapter(mSimpleCursorAdapter = new SimpleCursorAdapter(ListingActivity.this, R.layout.row, cursor, new String[]{MyDatabaseHelper.NAME}, new int[]{R.id.textView}, 0)); + } + } + @Override + public void onClick(View v) { + startActivityForResult(new Intent(this, AddNewDevices.class), 10); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(requestCode==10 && resultCode==RESULT_OK){ + Cursor cursor = database.rawQuery("SELECT _id," + MyDatabaseHelper.NAME + " FROM " + MyDatabaseHelper.TABLE_DEVICES + "", null); + mSimpleCursorAdapter.changeCursor(cursor); + mSimpleCursorAdapter.notifyDataSetChanged(); + } + } + + @Override + public void onResponse(final String response, final int requestCode) { + System.out.print(response); + runOnUiThread(new Runnable() { + @Override + public void run() { + switch (requestCode) { + case SERVER_SYNC_REQUEST: + try { + JSONArray json = new JSONArray(response); + MyDatabaseHelper mMyDatabaseHelper = new MyDatabaseHelper(ListingActivity.this); + database = mMyDatabaseHelper.getWritableDatabase(); + for (int i = 0; i < json.length(); i++) { + ContentValues cv = new ContentValues(); + if (json.getJSONObject(i).has(MyDatabaseHelper.COLUMN_ID)) + cv.put(MyDatabaseHelper.COLUMN_ID, json.getJSONObject(i).getInt(MyDatabaseHelper.COLUMN_ID)); + if (json.getJSONObject(i).has(MyDatabaseHelper.NAME)) + cv.put(MyDatabaseHelper.NAME, json.getJSONObject(i).getString(MyDatabaseHelper.NAME)); + else + cv.put(MyDatabaseHelper.NAME, "Information Not Available"); + if (json.getJSONObject(i).has(MyDatabaseHelper.VERSION)) + cv.put(MyDatabaseHelper.VERSION, json.getJSONObject(i).getString(MyDatabaseHelper.VERSION)); + else + cv.put(MyDatabaseHelper.VERSION, "Information Not Available"); + if (json.getJSONObject(i).has(MyDatabaseHelper.CODE_NAME)) + cv.put(MyDatabaseHelper.CODE_NAME, json.getJSONObject(i).getString(MyDatabaseHelper.CODE_NAME)); + else + cv.put(MyDatabaseHelper.CODE_NAME, "Information Not Available"); + if (json.getJSONObject(i).has(MyDatabaseHelper.TARGET)) + cv.put(MyDatabaseHelper.TARGET, json.getJSONObject(i).getString(MyDatabaseHelper.TARGET)); + else + cv.put(MyDatabaseHelper.TARGET, "Information Not Available"); + if (json.getJSONObject(i).has(MyDatabaseHelper.DISTRIBUTION)) + cv.put(MyDatabaseHelper.DISTRIBUTION, json.getJSONObject(i).getString(MyDatabaseHelper.DISTRIBUTION)); + else + cv.put(MyDatabaseHelper.DISTRIBUTION, "Information Not Available"); + database.insert(MyDatabaseHelper.TABLE_DEVICES, null, cv); + } + Cursor cursor = database.rawQuery("SELECT _id," + MyDatabaseHelper.NAME + " FROM " + MyDatabaseHelper.TABLE_DEVICES + "", null); + listView.setAdapter(mSimpleCursorAdapter = new SimpleCursorAdapter(ListingActivity.this, R.layout.row, cursor, new String[]{MyDatabaseHelper.NAME}, new int[]{R.id.textView}, 0)); + } catch (JSONException e) { + e.printStackTrace(); + } + progressBar.setVisibility(View.GONE); + break; + } + } + }); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + final Cursor c = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE_DEVICES + " WHERE _id=" + id, null); + c.moveToFirst(); + new AlertDialog.Builder(ListingActivity.this) + .setTitle("Device Info:") + .setMessage("Serial No: " + c.getInt(c.getColumnIndexOrThrow("_id")) + + "\nDevice Name: " + c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.NAME)) + + "\nDevice Version: " + c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.VERSION)) + + "\nDevice Code: " + c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.CODE_NAME)) + + "\nDevice Target: " + c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.TARGET)) + + "\nDevice Distribution: " + c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.DISTRIBUTION))) + .setCancelable(true) + .setPositiveButton("ok", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Whatever... + } + }).create().show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } +} diff --git a/AndroidShowCaseApp/app/src/main/java/com/navneet/MyDatabaseHelper.java b/AndroidShowCaseApp/app/src/main/java/com/navneet/MyDatabaseHelper.java new file mode 100755 index 0000000..72e4e60 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/java/com/navneet/MyDatabaseHelper.java @@ -0,0 +1,36 @@ +package com.navneet; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +/** + * Created by root on 1/8/16. + */ +public class MyDatabaseHelper extends SQLiteOpenHelper{ + private static final int DATABASE_VERSION = 1; + + public static final String DATABASE_NAME = "devicesDB.db"; + + public static final String TABLE_DEVICES = "devices"; + + public static final String COLUMN_ID = "id"; + public static final String NAME = "name"; + public static final String VERSION = "version"; + public static final String CODE_NAME = "codename"; + public static final String TARGET = "target"; + public static final String DISTRIBUTION = "distribution"; + + private static final String DATABASE_CREATE = "create table " + TABLE_DEVICES + "( _id INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_ID + " integer, " + NAME + " text, " + VERSION + " text, " + CODE_NAME + " text, " + TARGET + " text, " + DISTRIBUTION + " text);"; + public MyDatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(DATABASE_CREATE); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } +} diff --git a/AndroidShowCaseApp/app/src/main/java/com/network/NetworkClassHandler.java b/AndroidShowCaseApp/app/src/main/java/com/network/NetworkClassHandler.java new file mode 100755 index 0000000..8b43846 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/java/com/network/NetworkClassHandler.java @@ -0,0 +1,75 @@ +package com.network; + +import android.content.Context; + +import com.squareup.okhttp.Callback; +import com.squareup.okhttp.FormEncodingBuilder; +import com.squareup.okhttp.MediaType; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.RequestBody; +import com.squareup.okhttp.Response; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * Created by user on 14/10/15. + */ +public final class NetworkClassHandler { + public void OnGetRequest(final NetworkInterface mInterface, final int requestCode, String url){ + Request profileRequest = new Request.Builder().url(url).get().build(); + OkHttpClient httpClient = new OkHttpClient(); + httpClient.newCall(profileRequest).enqueue(new Callback() { + @Override + public void onResponse(Response response) throws IOException { + if (!response.isSuccessful()) { + // handle error + } else { + mInterface.onResponse(response.body().string(), requestCode); + } + } + @Override + public void onFailure(Request request, IOException e) { + // handle error + } + }); + } + public void OnPostRequestWithParams(final NetworkInterface mInterface, final int requestCode, HashMap params, String url){ + MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + JSONObject jsonBody = new JSONObject(); + try { + for(Map.Entry entry : params.entrySet()){ + if(entry.getValue() instanceof Integer){ + jsonBody.put(entry.getKey(), Integer.parseInt(entry.getValue().toString())); + } else if(entry.getValue() instanceof String) { + jsonBody.put(entry.getKey(), entry.getValue()); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + RequestBody body = RequestBody.create(JSON, jsonBody.toString()); + Request profileRequest = new Request.Builder().url(url).post(body).build(); + OkHttpClient httpClient = new OkHttpClient(); + httpClient.newCall(profileRequest).enqueue(new Callback() { + @Override + public void onResponse(Response response) throws IOException { + if (!response.isSuccessful()) { + // handle error + } else { + mInterface.onResponse(response.body().string(), requestCode); + } + } + @Override + public void onFailure(Request request, IOException e) { + // handle error + } + }); + } +} diff --git a/AndroidShowCaseApp/app/src/main/java/com/network/NetworkInterface.java b/AndroidShowCaseApp/app/src/main/java/com/network/NetworkInterface.java new file mode 100755 index 0000000..4bccb88 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/java/com/network/NetworkInterface.java @@ -0,0 +1,10 @@ +package com.network; + +import org.json.JSONObject; + +/** + * Created by user on 14/10/15. + */ +public interface NetworkInterface { + void onResponse(String response, int requestCode); +} diff --git a/AndroidShowCaseApp/app/src/main/res/drawable-hdpi/add_new.jpg b/AndroidShowCaseApp/app/src/main/res/drawable-hdpi/add_new.jpg new file mode 100644 index 0000000..f6ca7b2 Binary files /dev/null and b/AndroidShowCaseApp/app/src/main/res/drawable-hdpi/add_new.jpg differ diff --git a/AndroidShowCaseApp/app/src/main/res/layout/activity_listing.xml b/AndroidShowCaseApp/app/src/main/res/layout/activity_listing.xml new file mode 100755 index 0000000..9278ed2 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/res/layout/activity_listing.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/AndroidShowCaseApp/app/src/main/res/layout/add_new.xml b/AndroidShowCaseApp/app/src/main/res/layout/add_new.xml new file mode 100644 index 0000000..5a0290e --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/res/layout/add_new.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/AndroidShowCaseApp/app/src/main/res/layout/add_new_layout.xml b/AndroidShowCaseApp/app/src/main/res/layout/add_new_layout.xml new file mode 100644 index 0000000..2070fc9 --- /dev/null +++ b/AndroidShowCaseApp/app/src/main/res/layout/add_new_layout.xml @@ -0,0 +1,49 @@ + + + + + + + + + +