Repository: codepath/intro_android_demo
Branch: master
Commit: 0ddcdf083ba0
Files: 103
Total size: 93.6 KB
Directory structure:
gitextract_5d8jesy6/
├── .gitignore
├── .travis.yml
├── README.md
├── app/
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── codepath/
│ │ └── apps/
│ │ └── demointroandroid/
│ │ ├── ActionBarMenuActivity.java
│ │ ├── AsyncTaskPerformActivity.java
│ │ ├── BasicClickHandlersActivity.java
│ │ ├── BasicImageDownloadActivity.java
│ │ ├── BasicTextViewActivity.java
│ │ ├── BasicViewsActivity.java
│ │ ├── ContactListActivity.java
│ │ ├── DemoSelector.java
│ │ ├── ExerciseActivityMapper.java
│ │ ├── ExplicitIntentActivity.java
│ │ ├── GridViewDemoActivity.java
│ │ ├── ImplicitIntentsActivity.java
│ │ ├── IntentWithResultActivity.java
│ │ ├── LayoutGravityActivity.java
│ │ ├── LinearLayoutDemoActivity.java
│ │ ├── ListViewClicksActivity.java
│ │ ├── PersistSettingsActivity.java
│ │ ├── ProgressBarActivity.java
│ │ ├── PublishingInstructionsActivity.java
│ │ ├── SimpleAlertDialog.java
│ │ ├── SimpleBundleDemoActivity.java
│ │ ├── SimpleListViewActivity.java
│ │ ├── SimpleReturnResultActivity.java
│ │ ├── SmartImageDownloadActivity.java
│ │ ├── SpinnerWithToastActivity.java
│ │ ├── TimePickerDemoActivity.java
│ │ ├── ToastFormInputsActivity.java
│ │ └── ViewAttributesActivity.java
│ └── res/
│ ├── drawable/
│ │ └── simple_list_selector.xml
│ ├── layout/
│ │ ├── activity_action_bar_menu.xml
│ │ ├── activity_async_task_perform.xml
│ │ ├── activity_basic_click_handlers.xml
│ │ ├── activity_basic_image_download.xml
│ │ ├── activity_basic_text_view.xml
│ │ ├── activity_basic_views.xml
│ │ ├── activity_button_toast.xml
│ │ ├── activity_contact_list.xml
│ │ ├── activity_demo_selector.xml
│ │ ├── activity_explicit_intent.xml
│ │ ├── activity_grid_view_demo.xml
│ │ ├── activity_implicit_intents.xml
│ │ ├── activity_intent_with_result.xml
│ │ ├── activity_layout_gravity.xml
│ │ ├── activity_linear_layout_demo.xml
│ │ ├── activity_list_view_clicks.xml
│ │ ├── activity_persist_settings.xml
│ │ ├── activity_progress_bar.xml
│ │ ├── activity_publishing_instructions.xml
│ │ ├── activity_simple_bundle_demo.xml
│ │ ├── activity_simple_list_view.xml
│ │ ├── activity_simple_return_result.xml
│ │ ├── activity_smart_image_download.xml
│ │ ├── activity_spinner_with_toast.xml
│ │ ├── activity_time_picker_demo.xml
│ │ ├── activity_toast_form_inputs.xml
│ │ ├── activity_view_attributes.xml
│ │ └── simple_list_view_item.xml
│ ├── menu/
│ │ ├── activity_action_bar_menu.xml
│ │ ├── activity_async_task_perform.xml
│ │ ├── activity_basic_click_handlers.xml
│ │ ├── activity_basic_image_download.xml
│ │ ├── activity_basic_text_view.xml
│ │ ├── activity_basic_views.xml
│ │ ├── activity_button_toast.xml
│ │ ├── activity_contact_list.xml
│ │ ├── activity_demo_selector.xml
│ │ ├── activity_explicit_intent.xml
│ │ ├── activity_grid_view_demo.xml
│ │ ├── activity_implicit_intents.xml
│ │ ├── activity_intent_with_result.xml
│ │ ├── activity_layout_gravity.xml
│ │ ├── activity_linear_layout_demo.xml
│ │ ├── activity_list_view_clicks.xml
│ │ ├── activity_persist_settings.xml
│ │ ├── activity_progress_bar.xml
│ │ ├── activity_publishing_instructions.xml
│ │ ├── activity_simple_bundle_demo.xml
│ │ ├── activity_simple_list_view.xml
│ │ ├── activity_simple_return_result.xml
│ │ ├── activity_smart_image_download.xml
│ │ ├── activity_spinner_with_toast.xml
│ │ ├── activity_time_picker_demo.xml
│ │ ├── activity_toast_form_inputs.xml
│ │ └── activity_view_attributes.xml
│ ├── values/
│ │ ├── colors.xml
│ │ ├── exercises_list.xml
│ │ ├── spinner_values.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-v11/
│ │ └── styles.xml
│ └── values-v14/
│ └── styles.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Eclipse project files
.classpath
.project
# Proguard folder generated by Eclipse
proguard/
proguard-project.txt
# Intellij project files
*.iml
*.ipr
*.iws
.idea/
*.pydevproject
.project
.metadata
.gradle
build/**
bin/**
tmp/**
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
# Android Studio project files
*.iml
.gradle
.idea
build
import-summary.txt
================================================
FILE: .travis.yml
================================================
language: android
jdk:
- oraclejdk8
sudo: false
android:
components:
- tools
- platform-tools
- build-tools-28.0.3
- android-28
licenses:
- android-sdk-license-.+
script:
- "./gradlew build check --daemon"
after_failure: "cat $TRAVIS_BUILD_DIR/app/build/outputs/lint-results-debug.xml"
================================================
FILE: README.md
================================================
intro_android_demo
==================
Demo of app exercises for Intro to Android App Development
<img src="http://i.imgur.com/DzkMzcy.png" width="250" />
<img src="http://i.imgur.com/VJWFW9Q.png" width="250" />
Sample Listing:
- Chapter 1: App Fundamentals
- Basic TextViews Example
- Chapter 2: User Interface
- Linear Layout Demo
- Chapter 3: View Controls
- Layout Gravity
- Basic Views
- View Attributes
- Simple ListView
- Chapter 4: User Interactions
- Basic Click Handlers
- Handling ListView Clicks
- Action Bar Demo
- Chapter 5: User Flows
- Explicit Intents
- Implicit Intents
- Intent with Results
- Chapter 6: Networking
- Basic Image Download
- AsyncTask Example
- Smart Image Download
- Chapter 7: Advanced Views
- Toast Inputs
- Spinner Toast
- TimePicker
- ProgressBar
- GridView
- Chapter 8: Preferences
- Persist Settings
- Chapter 9: Content Providers
- Contact List
- Chapter 10: Publishing
- APK Instructions
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "codepath.apps.demointroandroid"
minSdkVersion 21
targetSdkVersion 28
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.codepath.libraries:asynchttpclient:0.1.0'
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Chapter 1, Exercise 1: Change version data to 2 and 2.0 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="codepath.apps.demointroandroid"
android:versionCode="2"
android:versionName="2.0" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="codepath.apps.demointroandroid.DemoSelector"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="codepath.apps.demointroandroid.BasicTextViewActivity"
android:label="@string/title_activity_basic_text_view" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.LinearLayoutDemoActivity"
android:label="@string/title_activity_linear_layout_demo" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.LayoutGravityActivity"
android:label="@string/title_activity_layout_gravity" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.BasicViewsActivity"
android:label="@string/title_activity_basic_views" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ViewAttributesActivity"
android:label="@string/title_activity_view_attributes" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.SimpleListViewActivity"
android:label="@string/title_activity_simple_list_view" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.BasicClickHandlersActivity"
android:label="@string/title_activity_basic_click_handlers" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ButtonToastActivity"
android:label="@string/title_activity_button_toast" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ListViewClicksActivity"
android:label="@string/title_activity_list_view_clicks" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ExplicitIntentActivity"
android:label="@string/title_activity_explicit_intent" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ImplicitIntentsActivity"
android:label="@string/title_activity_implicit_intents" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.IntentWithResultActivity"
android:label="@string/title_activity_intent_with_result" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ActionBarMenuActivity"
android:label="@string/title_activity_action_bar_menu" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.SimpleBundleDemoActivity"
android:label="@string/title_activity_simple_bundle_demo" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.SimpleReturnResultActivity"
android:label="@string/title_activity_simple_return_result" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.BasicImageDownloadActivity"
android:label="@string/title_activity_basic_image_download" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.AsyncTaskPerformActivity"
android:label="@string/title_activity_async_task_perform" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.SmartImageDownloadActivity"
android:label="@string/title_activity_smart_image_download" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ToastFormInputsActivity"
android:label="@string/title_activity_toast_form_inputs" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.SpinnerWithToastActivity"
android:label="@string/title_activity_spinner_with_toast" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.TimePickerDemoActivity"
android:label="@string/title_activity_time_picker_demo" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ProgressBarActivity"
android:label="@string/title_activity_progress_bar" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.GridViewDemoActivity"
android:label="@string/title_activity_grid_view_demo" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.PersistSettingsActivity"
android:label="@string/title_activity_persist_settings" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.ContactListActivity"
android:label="@string/title_activity_contact_list" >
</activity>
<activity
android:name="codepath.apps.demointroandroid.PublishingInstructionsActivity"
android:label="@string/title_activity_publishing_instructions" >
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ActionBarMenuActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class ActionBarMenuActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_action_bar_menu);
getActionBar().setTitle("Click an Icon");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_action_bar_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_toast:
Toast.makeText(this, "Toasted", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_launch:
Intent i = new Intent(this, SimpleBundleDemoActivity.class);
startActivity(i);
break;
default:
break;
}
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/AsyncTaskPerformActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
public class AsyncTaskPerformActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_async_task_perform);
new MyAsyncTask().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_async_task_perform, menu);
return true;
}
public void doneCounting() {
Toast.makeText(this, "Done Counting to 100000", Toast.LENGTH_SHORT).show();
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
public Void doInBackground(Void... params) {
for (long i=0; i < 100000; i++) {
System.out.println(i);
}
return null;
}
protected void onPostExecute(Void result) {
doneCounting();
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicClickHandlersActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class BasicClickHandlersActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_click_handlers);
Button secondButton = (Button) findViewById(R.id.btnClick2);
secondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
secondButtonClicked(v);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_basic_click_handlers, menu);
return true;
}
public void firstButtonClicked(View v) {
SimpleAlertDialog.displayWithOK(this, "firstButton clicked via XML handler");
}
private void secondButtonClicked(View v) {
SimpleAlertDialog.displayWithOK(this, "secondButton clicked via Java handler in onCreate");
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicImageDownloadActivity.java
================================================
package codepath.apps.demointroandroid;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class BasicImageDownloadActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_image_download);
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder().permitNetwork().build());
downloadImageFromUri("https://2.gravatar.com/avatar/858dfac47ab8176458c005414d3f0c36?s=128&d=&r=G");
}
private void downloadImageFromUri(String address) {
URL url;
try {
url = new URL(address);
} catch (MalformedURLException e1) {
url = null;
}
URLConnection conn;
InputStream in;
Bitmap bitmap;
try {
conn = url.openConnection();
conn.connect();
in = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(in);
in.close();
} catch (IOException e) {
bitmap = null;
}
if (bitmap != null) {
ImageView img = (ImageView) findViewById(R.id.ivBasicImage);
img.setImageBitmap(bitmap);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_basic_image_download, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicTextViewActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class BasicTextViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_text_view);
Log.d("DEBUG", "onCreate was just called!");
}
protected void onResume() {
super.onResume();
Log.d("DEBUG", "onResume was just called!");
}
protected void onPause() {
super.onPause();
Log.d("DEBUG", "onPause was just called!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_basic_text_view, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicViewsActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class BasicViewsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_views);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_basic_views, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ContactListActivity.java
================================================
package codepath.apps.demointroandroid;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.CursorLoader;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import androidx.core.app.ActivityCompat;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class ContactListActivity extends Activity {
private static final int REQUEST_READ_CONTACTS = 1;
ArrayList<String> names = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_list);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS)
== PackageManager.PERMISSION_GRANTED) {
loadContacts();
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_CONTACTS},
REQUEST_READ_CONTACTS);
}
populateListView();
}
private void populateListView() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, names);
ListView listView = (ListView) findViewById(R.id.lvContacts);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ContactListActivity.this, names.get(position), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (requestCode == REQUEST_READ_CONTACTS) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
loadContacts();
} else {
Toast.makeText(this, "Permission Denied, Not able to load contact", Toast.LENGTH_SHORT).show();
}
}
}
@SuppressLint("NewApi")
private void loadContacts() {
Uri allContacts = Uri.parse("content://contacts/people");
CursorLoader cursorLoader = new CursorLoader(this, allContacts,
null, // the columns to retrive
null, // the selection criteria
null, // the selection args
null // the sort order
);
Cursor c = cursorLoader.loadInBackground();
if (c.moveToFirst()) {
do {
// Get Contact ID
int idIndex = c.getColumnIndex(ContactsContract.Contacts._ID);
String contactID = c.getString(idIndex);
// Get Contact Name
int nameIndex = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String contactDisplayName = c.getString(nameIndex);
names.add(contactDisplayName);
Log.d("debug", contactID + ", " + contactDisplayName);
} while (c.moveToNext());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_contact_list, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/DemoSelector.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
public class DemoSelector extends Activity {
ExpandableListView elvChapters;
ChaptersListAdapter elaAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo_selector);
setupChaptersListView();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_demo_selector, menu);
return true;
}
private void setupChaptersListView() {
elvChapters = (ExpandableListView)findViewById(R.id.elvChapters);
elaAdapter = new ChaptersListAdapter();
elvChapters.setAdapter(elaAdapter);
elvChapters.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
String exerciseTitle = (String)elaAdapter.getChild(groupPosition, childPosition);
Class<? extends Activity> exerciseClass = elaAdapter.getExerciseClass(groupPosition, childPosition, id);
if (exerciseClass != null) {
Toast.makeText(DemoSelector.this, exerciseTitle, Toast.LENGTH_LONG).show();
startActivity(new Intent(DemoSelector.this, exerciseClass));
} else {
Toast.makeText(DemoSelector.this, "Exercise Not Available", Toast.LENGTH_SHORT).show();
}
return false;
}
});
}
private class ChaptersListAdapter extends BaseExpandableListAdapter {
private String[] chapters = getResources().getStringArray(R.array.chapters);
private String[][] exercises;
public ChaptersListAdapter() {
super();
exercises = new String[chapters.length][];
for (int i=0; i < exercises.length; i++) {
int resId = getResources().getIdentifier("chap" + (i+1), "array", getPackageName());
exercises[i] = getResources().getStringArray(resId);
}
}
public Object getChild(int groupPosition, int childPosition) {
return exercises[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return exercises[groupPosition].length;
}
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(DemoSelector.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setTextSize(20);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
// Set the text starting position
textView.setPadding(60, 20, 20, 20);
return textView;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setPadding(80, 20, 20, 20);
textView.setText(getChild(groupPosition, childPosition).toString());
return textView;
}
public Object getGroup(int groupPosition) {
return "Chapter " + (groupPosition + 1) + ": " + chapters[groupPosition];
}
public int getGroupCount() {
return chapters.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
public Class<? extends Activity> getExerciseClass(int groupPosition, int childPosition, long id) {
String exerciseId = "chap" + (groupPosition + 1) + "ex" + (childPosition + 1);
return ExerciseActivityMapper.getExerciseClass(exerciseId);
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ExerciseActivityMapper.java
================================================
package codepath.apps.demointroandroid;
import java.util.HashMap;
import android.app.Activity;
public class ExerciseActivityMapper {
private static ExerciseActivityMapper singleton;
private HashMap<String, Class<? extends Activity>> exerciseClassMap;
public ExerciseActivityMapper() {
defineExerciseMappings();
}
// ExerciseActivityMapper.getExerciseClass("chap1ex1");
public static Class<? extends Activity> getExerciseClass(String exerciseId) {
return getSingleton().exerciseClassMap.get(exerciseId);
}
private static ExerciseActivityMapper getSingleton() {
if (singleton == null) {
singleton = new ExerciseActivityMapper();
}
return singleton;
}
private void defineExerciseMappings() {
exerciseClassMap = new HashMap<String, Class<? extends Activity>>();
// Chapter 1: App Fundamentals
exerciseClassMap.put("chap1ex1", BasicTextViewActivity.class);
// Chapter 2: User Interface
exerciseClassMap.put("chap2ex1", LinearLayoutDemoActivity.class);
// Chapter 3: View Controls
exerciseClassMap.put("chap3ex1", LayoutGravityActivity.class);
exerciseClassMap.put("chap3ex2", BasicViewsActivity.class);
exerciseClassMap.put("chap3ex3", ViewAttributesActivity.class);
exerciseClassMap.put("chap3ex4", SimpleListViewActivity.class);
// Chapter 4: User Interactions
exerciseClassMap.put("chap4ex1", BasicClickHandlersActivity.class);
exerciseClassMap.put("chap4ex2", ListViewClicksActivity.class);
// Chapter 5: User Flows
exerciseClassMap.put("chap5ex1", ExplicitIntentActivity.class); // Explicit Intents
exerciseClassMap.put("chap5ex2", ImplicitIntentsActivity.class); // Implicit Intents
exerciseClassMap.put("chap5ex3", IntentWithResultActivity.class); // Intent with Results
exerciseClassMap.put("chap5ex4", ActionBarMenuActivity.class); // Action Bar
// Chapter 6: Networking
exerciseClassMap.put("chap6ex1", BasicImageDownloadActivity.class); // Basic Image Download
exerciseClassMap.put("chap6ex2", AsyncTaskPerformActivity.class); // AsyncTask
exerciseClassMap.put("chap6ex3", SmartImageDownloadActivity.class); // Smart Image Download
// Chapter 7: Advanced Views
exerciseClassMap.put("chap7ex1", ToastFormInputsActivity.class); // Toast Inputs
exerciseClassMap.put("chap7ex2", SpinnerWithToastActivity.class); // Spinner Toast
exerciseClassMap.put("chap7ex3", TimePickerDemoActivity.class); // TimePicker
exerciseClassMap.put("chap7ex4", ProgressBarActivity.class); // ProgressBar
exerciseClassMap.put("chap7ex5", GridViewDemoActivity.class); // GridView
// Chapter 8: Preferences
exerciseClassMap.put("chap8ex1", PersistSettingsActivity.class); // Persist Settings
// Chapter 9: ContentProviders
exerciseClassMap.put("chap9ex1", ContactListActivity.class); // Contact List
// Chapter 10: Publishing
exerciseClassMap.put("chap10ex1", PublishingInstructionsActivity.class); // APK Generation
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ExplicitIntentActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ExplicitIntentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explicit_intent);
Button btnLaunchSecond = (Button) findViewById(R.id.btnLaunchSecond);
btnLaunchSecond.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ExplicitIntentActivity.this, SimpleBundleDemoActivity.class);
i.putExtra("text", "Passed String Extra!");
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_explicit_intent, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/GridViewDemoActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class GridViewDemoActivity extends Activity {
GridView gvImages;
GridImageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view_demo);
populateGridViewImages();
}
private void populateGridViewImages() {
gvImages = (GridView) findViewById(R.id.gvImages);
String[] numbers = new String[] { "ad", "ae", "af", "ag", "ai", "al"};
adapter = new GridImageAdapter(this,
android.R.layout.simple_list_item_1, numbers);
gvImages.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_grid_view_demo, menu);
return true;
}
class GridImageAdapter extends ArrayAdapter<String> {
public GridImageAdapter(Context context, int textViewResourceId, String[] numbers) {
super(context, textViewResourceId, numbers);
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView v = new ImageView(GridViewDemoActivity.this);
int resId = getResources().getIdentifier(getItem(position), "drawable", getPackageName());
v.setImageDrawable(getResources().getDrawable(resId));
return v;
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ImplicitIntentsActivity.java
================================================
package codepath.apps.demointroandroid;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class ImplicitIntentsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_implicit_intents);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_implicit_intents, menu);
return true;
}
public void visitUrlAddress(View v) {
Uri url = getUriToVisit();
if (url != null) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(url);
startActivity(i);
}
}
public Uri getUriToVisit() {
String urlAddress = ((TextView) findViewById(R.id.txtUrlAddress)).getText().toString();
if (urlAddress != null) {
if (!urlAddress.startsWith("http://"))
urlAddress = "http://" + urlAddress;
return Uri.parse(urlAddress);
} else {
return null;
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/IntentWithResultActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class IntentWithResultActivity extends Activity {
final static int GET_RESULT_TEXT = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_with_result);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_intent_with_result, menu);
return true;
}
public void enterText(View v) {
startActivityForResult(
new Intent(IntentWithResultActivity.this, SimpleReturnResultActivity.class),
GET_RESULT_TEXT);
}
// Handle the result once the activity returns a result, display contact
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
TextView tvResult = (TextView)findViewById(R.id.txtDisplayResult);
tvResult.setText(data.getStringExtra("result"));
Toast.makeText(this, data.getStringExtra("result"), Toast.LENGTH_SHORT).show();
}
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/LayoutGravityActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class LayoutGravityActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_gravity);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_layout_gravity, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/LinearLayoutDemoActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class LinearLayoutDemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_layout_demo);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_linear_layout_demo, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ListViewClicksActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewClicksActivity extends Activity {
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_clicks);
String[] myCountries = { "United States", "Canada", "Mexico", "Japan" };
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, myCountries);
ListView listView = (ListView) findViewById(R.id.lvDemo);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String country = adapter.getItem(position);
SimpleAlertDialog.displayWithOK(ListViewClicksActivity.this, country);
Toast.makeText(ListViewClicksActivity.this, country, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_list_view_clicks, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/PersistSettingsActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
public class PersistSettingsActivity extends Activity {
SharedPreferences prefs;
Editor edits;
TextView txtPersist;
CheckBox chkPersist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_persist_settings);
txtPersist = (TextView) findViewById(R.id.txtPersistText);
chkPersist = (CheckBox) findViewById(R.id.chkPersistState);
prefs = getSharedPreferences("view", 0);
edits = prefs.edit();
populateValues();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_persist_settings, menu);
return true;
}
public void populateValues() {
String persistedText = prefs.getString("txtVal", "None Stored Yet");
boolean isChecked = prefs.getBoolean("chkState", false);
txtPersist.setText(persistedText);
chkPersist.setChecked(isChecked);
}
public void persistValues(View v) {
edits.putString("txtVal", txtPersist.getText().toString());
edits.putBoolean("chkState", chkPersist.isChecked());
edits.commit();
Toast.makeText(this, "Persisted!", Toast.LENGTH_SHORT).show();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ProgressBarActivity.java
================================================
package codepath.apps.demointroandroid;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.stetho.server.http.HttpStatus;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class ProgressBarActivity extends Activity {
ProgressBar pb;
TextView tvResult;
ArrayList<String> lines = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_bar);
pb = (ProgressBar) findViewById(R.id.pgDownloading);
tvResult = (TextView) findViewById(R.id.txtUrlOutput);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_progress_bar, menu);
return true;
}
public void startFourUrlAsync(View v) {
new DelayTask().execute();
}
public class DelayTask extends AsyncTask<Void, Integer, String> {
int count = 0;
@Override
protected void onPreExecute() {
pb.setVisibility(ProgressBar.VISIBLE);
}
@Override
protected String doInBackground(Void... params) {
String res = loadUrlBody("https://google.com");
lines.add(res.split("\n")[0]);
publishProgress(25);
res = loadUrlBody("https://yahoo.com");
lines.add(res.split("\n")[0]);
publishProgress(50);
res = loadUrlBody("https://twitter.com");
lines.add(res.split("\n")[0]);
publishProgress(75);
res = loadUrlBody("https://facebook.com");
lines.add(res.split("\n")[0]);
publishProgress(100);
return "complete";
}
@Override
protected void onProgressUpdate(Integer... values) {
pb.setProgress(values[0]);
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(ProgressBarActivity.this, "Completed!", Toast.LENGTH_SHORT).show();
tvResult.setText(lines.toString());
}
protected String loadUrlBody(String address) {
OkHttpClient httpclient = new OkHttpClient();
Response response;
String responseString = null;
try {
response = httpclient.newCall(new Request.Builder().url(address).build()).execute();
int statusCode = response.code();
if (statusCode == HttpStatus.HTTP_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(response.body().bytes());
responseString = out.toString();
out.close();
} else {
response.body().byteStream().close();
throw new IOException(response.message());
}
} catch (IOException e) {
Log.e(ProgressBarActivity.class.getSimpleName(),
"Error retrieving data from: " + address, e);
}
return responseString;
}
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/PublishingInstructionsActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class PublishingInstructionsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_publishing_instructions);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater()
.inflate(R.menu.activity_publishing_instructions, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleAlertDialog.java
================================================
package codepath.apps.demointroandroid;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
// SimpleAlertDialog.displayWithOK(this, "Hello", "Title");
public class SimpleAlertDialog {
public static void displayWithOK(Context c, String message) {
displayWithOK(c, message, "CodePath Demo Intro Android");
}
public static void displayWithOK(Context c, String message, String title) {
final AlertDialog alertDialog = new AlertDialog.Builder(c).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting OK Button
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alertDialog.hide();
}
});
// Showing Alert Message
alertDialog.show();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleBundleDemoActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class SimpleBundleDemoActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_bundle_demo);
String initialText = getIntent().getStringExtra("text");
TextView tvDisplayText = (TextView) findViewById(R.id.tvDisplayText);
if (initialText != null)
tvDisplayText.setText(initialText);
getActionBar().setHomeButtonEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_simple_bundle_demo, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent i = new Intent(this, ActionBarMenuActivity.class);
startActivity(i);
break;
default:
break;
}
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleListViewActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class SimpleListViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_list_view);
String[] myStringArray = { "Bruce", "Wayne", "Bill" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.simple_list_view_item, myStringArray);
ListView listView = (ListView) findViewById(R.id.lvDemo);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_simple_list_view, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleReturnResultActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class SimpleReturnResultActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_return_result);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_simple_return_result, menu);
return true;
}
public void sendResult(View v) {
String result = ((EditText) findViewById(R.id.txtRandomResultText)).getText().toString();
Intent i = new Intent();
i.putExtra("result", result);
setResult(RESULT_OK, i);
finish();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SmartImageDownloadActivity.java
================================================
package codepath.apps.demointroandroid;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.codepath.asynchttpclient.AsyncHttpClient;
import com.codepath.asynchttpclient.callback.BinaryHttpResponseHandler;
import java.io.IOException;
import okhttp3.Headers;
import okhttp3.Response;
public class SmartImageDownloadActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smart_image_download);
downloadSmartImageFromUrl("https://2.gravatar.com/avatar/858dfac47ab8176458c005414d3f0c36?s=128&d=&r=G");
}
private void downloadSmartImageFromUrl(String address) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(address, new BinaryHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Headers headers, Response response) {
try {
byte[] image = response.body().bytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
ImageView img = findViewById(R.id.ivSmartImage);
img.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, @Nullable Headers headers,
String errorResponse, @Nullable Throwable throwable) {
}
}
);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_smart_image_download, menu);
return true;
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/SpinnerWithToastActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
public class SpinnerWithToastActivity extends Activity {
Spinner spinner;
Button btnSpinnerVal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_with_toast);
spinner = (Spinner) findViewById(R.id.spnOptions);
btnSpinnerVal = (Button) findViewById(R.id.btnSpinnerValue);
loadSpinner();
}
private void loadSpinner() {
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spinner_options, android.R.layout.simple_spinner_item);
// Set layout style during dropdown
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Load data from adapter
spinner.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_spinner_with_toast, menu);
return true;
}
public void displayVal(View v) {
Toast.makeText(this, spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/TimePickerDemoActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
public class TimePickerDemoActivity extends Activity {
TimePicker tpTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_picker_demo);
tpTime = (TimePicker) findViewById(R.id.tpTime);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_time_picker_demo, menu);
return true;
}
public void displayTime(View v) {
String time = tpTime.getCurrentHour() + ":" + tpTime.getCurrentMinute();
Toast.makeText(this, time, Toast.LENGTH_SHORT).show();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ToastFormInputsActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class ToastFormInputsActivity extends Activity {
EditText etVal;
CheckBox chkVal;
RadioGroup rdgVal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toast_form_inputs);
etVal = (EditText) findViewById(R.id.etVal);
chkVal = (CheckBox) findViewById(R.id.chkVal);
rdgVal = (RadioGroup) findViewById(R.id.rdgVal);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_toast_form_inputs, menu);
return true;
}
public void toastInputs(View v) {
int selected = rdgVal.getCheckedRadioButtonId();
RadioButton b = (RadioButton) findViewById(selected);
String text = etVal.getText() + " | " + chkVal.isChecked() + " | " + b.getText();
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
}
================================================
FILE: app/src/main/java/codepath/apps/demointroandroid/ViewAttributesActivity.java
================================================
package codepath.apps.demointroandroid;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;
public class ViewAttributesActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_attributes);
TextView tvMain = (TextView) findViewById(R.id.tvMain);
Log.d("DEBUG", tvMain.getText().toString());
Toast.makeText(this, tvMain.getText().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_view_attributes, menu);
return true;
}
}
================================================
FILE: app/src/main/res/drawable/simple_list_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/blue" /> <!-- focused -->
<item android:state_pressed="true" android:drawable="@color/blue" /> <!-- pressed -->
<item android:drawable="@color/dark_blue" />
</selector>
================================================
FILE: app/src/main/res/layout/activity_action_bar_menu.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActionBarMenuActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="20sp"
android:text="Try My Action Bar!" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/activity_async_task_perform.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AsyncTaskPerformActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="AsyncTask in Progress" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/activity_basic_click_handlers.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".BasicClickHandlersActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:onClick="firstButtonClicked"
android:text="XML onClick" />
<Button
android:id="@+id/btnClick2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Java onClick" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_basic_image_download.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".BasicImageDownloadActivity" >
<ImageView
android:id="@+id/ivBasicImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_basic_text_view.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BasicTextViewActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="20sp"
android:text="@string/second_textview" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/activity_basic_views.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".BasicViewsActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/hello_world" />
<EditText
android:id="@+id/editText1"
android:hint="Demo"
android:layout_margin="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_margin="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ImageView
android:layout_margin="20dp"
android:id="@+id/imageView1"
android:contentDescription="Demo Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<ImageButton
android:layout_margin="20dp"
android:id="@+id/imageButton1"
android:contentDescription="Demo Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_button_toast.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ButtonToastActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/activity_contact_list.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ContactListActivity" >
<ListView
android:id="@+id/lvContacts"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_demo_selector.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/llContentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DemoSelector" >
<ExpandableListView
android:id="@+id/elvChapters"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ExpandableListView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_explicit_intent.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ExplicitIntentActivity" >
<Button
android:id="@+id/btnLaunchSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Launch Second Activity" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_grid_view_demo.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".GridViewDemoActivity" >
<GridView
android:id="@+id/gvImages"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="2" >
</GridView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_implicit_intents.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ImplicitIntentsActivity" >
<EditText
android:id="@+id/txtUrlAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:hint="Enter URL Address"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:onClick="visitUrlAddress"
android:text="Visit" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_intent_with_result.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".IntentWithResultActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="enterText"
android:text="Launch Activity for Result" />
<TextView
android:id="@+id/txtDisplayResult"
android:layout_marginTop="20dp"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Result Yet!" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_layout_gravity.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".LayoutGravityActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="Gravity Left" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:text="Gravity Center" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginTop="30dp"
android:text="Gravity Right" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_linear_layout_demo.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".LinearLayoutDemoActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wrap Content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Match Parent" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_list_view_clicks.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SimpleListViewActivity" >
<ListView
android:id="@+id/lvDemo"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_persist_settings.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ToastFormInputsActivity" >
<EditText
android:id="@+id/txtPersistText"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:hint="Enter Text"
android:layout_height="wrap_content"
android:ems="10" />
<CheckBox
android:id="@+id/chkPersistState"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check or Uncheck" />
<Button
android:id="@+id/btnPersistValues"
android:layout_marginTop="10dp"
android:onClick="persistValues"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_progress_bar.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
tools:context=".ProgressBarActivity" >
<LinearLayout
android:id="@+id/llLoadUrls"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" >
<ProgressBar
android:id="@+id/pgDownloading"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:indeterminate="false"
android:max="100" />
<Button
android:id="@+id/button1"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startFourUrlAsync"
android:layout_gravity="center_vertical"
android:text="Load Url Responses" />
</LinearLayout>
<TextView
android:id="@+id/txtUrlOutput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="Responses Live Here" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_publishing_instructions.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".PublishingInstructionsActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textSize="25sp"
android:padding="10dp"
android:layout_marginBottom="20dp"
android:text="Publishing Instructions" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_marginBottom="10dp"
android:text="1. Export your application as an APK (Android Package) file." />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:textStyle="bold"
android:textSize="15sp"
android:layout_marginBottom="10dp"
android:text="2. Generate your own self-signed certificate and digitally sign your application with it." />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_marginBottom="10dp"
android:text="3. Deploy the signed application." />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_marginBottom="10dp"
android:text="4. Use the Android Market for hosting and selling your application." />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_simple_bundle_demo.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".SimpleBundleDemoActivity" >
<TextView
android:id="@+id/tvDisplayText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Passed Bundle :(" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_simple_list_view.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SimpleListViewActivity" >
<ListView
android:id="@+id/lvDemo"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_simple_return_result.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".SimpleReturnResultActivity" >
<EditText
android:id="@+id/txtRandomResultText"
android:hint="Enter Any Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="sendResult"
android:layout_marginTop="20dp"
android:text="Send Result" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_smart_image_download.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".SmartImageDownloadActivity" >
<ImageView
android:id="@+id/ivSmartImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_spinner_with_toast.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SpinnerWithToastActivity" >
<Spinner
android:id="@+id/spnOptions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="fill_horizontal" />
<Button
android:id="@+id/btnSpinnerValue"
android:onClick="displayVal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Toast Selected" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_time_picker_demo.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".TimePickerDemoActivity" >
<TimePicker
android:id="@+id/tpTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="29dp" />
<Button
android:id="@+id/btnDisplayTime"
android:layout_width="wrap_content"
android:onClick="displayTime"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Submit" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_toast_form_inputs.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ToastFormInputsActivity" >
<EditText
android:id="@+id/etVal"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:hint="Enter Text"
android:layout_height="wrap_content"
android:ems="10" />
<CheckBox
android:id="@+id/chkVal"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check or Uncheck" />
<RadioGroup
android:id="@+id/rdgVal"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rbOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="First" />
<RadioButton
android:id="@+id/rbTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second" />
<RadioButton
android:id="@+id/rbThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Three" />
</RadioGroup>
<Button
android:id="@+id/button1"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="toastInputs"
android:text="Submit" />
</LinearLayout>
================================================
FILE: app/src/main/res/layout/activity_view_attributes.xml
================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ViewAttributesActivity" >
<TextView
android:id="@+id/tvMain"
android:background="#06327a"
android:textColor="#cbd9f0"
android:padding="15dp"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="false"
android:text="Identified TextView" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/simple_list_view_item.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="5dp"
android:textSize="15sp"
android:background="@drawable/simple_list_selector"
android:layout_height="match_parent"
android:textColor="#8ab1dd" >
</TextView>
================================================
FILE: app/src/main/res/menu/activity_action_bar_menu.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_toast"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:title="Toast" />
<item
android:id="@+id/menu_launch"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:title="Second" />
</menu>
================================================
FILE: app/src/main/res/menu/activity_async_task_perform.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_basic_click_handlers.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_basic_image_download.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_basic_text_view.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_basic_views.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_button_toast.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_contact_list.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_demo_selector.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_explicit_intent.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_grid_view_demo.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_implicit_intents.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_intent_with_result.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_layout_gravity.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_linear_layout_demo.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_list_view_clicks.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_persist_settings.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_progress_bar.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_publishing_instructions.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_simple_bundle_demo.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_simple_list_view.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_simple_return_result.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_smart_image_download.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_spinner_with_toast.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_time_picker_demo.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_toast_form_inputs.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/menu/activity_view_attributes.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="blue">#4b6d92</color>
<color name="other_blue">#71869e</color>
<color name="dark_blue">#213851</color>
</resources>
================================================
FILE: app/src/main/res/values/exercises_list.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="chapters">
<item>App Fundamentals</item>
<item>User Interface</item>
<item>View Controls</item>
<item>User Interactions</item>
<item>User Flows</item>
<item>Networking</item>
<item>Advanced Views</item>
<item>Preferences</item>
<item>Content Providers</item>
<item>Publishing</item>
</string-array>
<string-array name="chap1">
<item>Basic TextView</item>
</string-array>
<string-array name="chap2">
<item>Linear Layout Demo</item>
</string-array>
<string-array name="chap3">
<item>Layout Gravity</item>
<item>Basic Views</item>
<item>View Attributes</item>
<item>Simple ListView</item>
</string-array>
<string-array name="chap4">
<item>Basic Click Handlers</item>
<item>Handling ListView Clicks</item>
</string-array>
<string-array name="chap5">
<item>Explicit Intents</item>
<item>Implicit Intents</item>
<item>Intent with Results</item>
<item>Action Bar</item>
</string-array>
<string-array name="chap6">
<item>Basic Image Download</item>
<item>AsyncTask</item>
<item>Smart Image Download</item>
</string-array>
<string-array name="chap7">
<item>Toast Inputs</item>
<item>Spinner Toast</item>
<item>TimePicker</item>
<item>ProgressBar</item>
<item>GridView</item>
</string-array>
<string-array name="chap8">
<item>Persist Settings</item>
</string-array>
<string-array name="chap9">
<item>Contact List</item>
</string-array>
<string-array name="chap10">
<item>APK Instructions</item>
</string-array>
</resources>
================================================
FILE: app/src/main/res/values/spinner_values.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="spinner_options">
<item>Red</item>
<item>Orange</item>
<item>Yellow</item>
<item>Green</item>
<item>Blue</item>
<item>Indigo</item>
<item>Violet</item>
</string-array>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">CodePath Android Demo</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_basic_text_view">Basic TextView</string>
<!-- Chapter 1, Exercise 3: Add string for basic textview -->
<string name="second_textview">Second TextView for Chapter 1</string>
<string name="title_activity_linear_layout_demo">LinearLayoutDemoActivity</string>
<string name="title_activity_layout_gravity">LayoutGravityActivity</string>
<string name="title_activity_basic_views">BasicViewsActivity</string>
<string name="title_activity_view_attributes">ViewAttributesActivity</string>
<string name="title_activity_simple_list_view">SimpleListViewActivity</string>
<string name="title_activity_basic_click_handlers">BasicClickHandlersActivity</string>
<string name="title_activity_button_toast">ButtonToastActivity</string>
<string name="title_activity_list_view_clicks">ListViewClicksActivity</string>
<string name="title_activity_explicit_intent">ExplicitIntentActivity</string>
<string name="title_activity_implicit_intents">ImplicitIntentsActivity</string>
<string name="title_activity_intent_with_result">IntentWithResultActivity</string>
<string name="title_activity_action_bar_menu">ActionBarMenuActivity</string>
<string name="title_activity_simple_bundle_demo">SimpleBundleDemoActivity</string>
<string name="title_activity_simple_return_result">SimpleReturnResultActivity</string>
<string name="title_activity_basic_image_download">BasicImageDownloadActivity</string>
<string name="title_activity_async_task_perform">AsyncTaskPerformActivity</string>
<string name="title_activity_smart_image_download">SmartImageDownloadActivity</string>
<string name="title_activity_toast_form_inputs">ToastFormInputsActivity</string>
<string name="title_activity_spinner_with_toast">SpinnerWithToastActivity</string>
<string name="title_activity_time_picker_demo">TimePickerDemoActivity</string>
<string name="title_activity_progress_bar">ProgressBarActivity</string>
<string name="title_activity_grid_view_demo">GridViewDemoActivity</string>
<string name="title_activity_persist_settings">PersistSettingsActivity</string>
<string name="title_activity_contact_list">ContactListActivity</string>
<string name="title_activity_publishing_instructions">PublishingInstructionsActivity</string>
</resources>
================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
</resources>
================================================
FILE: app/src/main/res/values-v11/styles.xml
================================================
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
<!-- API 11 theme customizations can go here. -->
</style>
</resources>
================================================
FILE: app/src/main/res/values-v14/styles.xml
================================================
<resources>
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
</resources>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
jcenter()
google()
}
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Sat Aug 24 23:02:30 PDT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
================================================
FILE: gradle.properties
================================================
android.enableJetifier=true
android.useAndroidX=true
================================================
FILE: gradlew
================================================
#!/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 "$@"
================================================
FILE: gradlew.bat
================================================
@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
================================================
FILE: settings.gradle
================================================
include ':app'
gitextract_5d8jesy6/ ├── .gitignore ├── .travis.yml ├── README.md ├── app/ │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── codepath/ │ │ └── apps/ │ │ └── demointroandroid/ │ │ ├── ActionBarMenuActivity.java │ │ ├── AsyncTaskPerformActivity.java │ │ ├── BasicClickHandlersActivity.java │ │ ├── BasicImageDownloadActivity.java │ │ ├── BasicTextViewActivity.java │ │ ├── BasicViewsActivity.java │ │ ├── ContactListActivity.java │ │ ├── DemoSelector.java │ │ ├── ExerciseActivityMapper.java │ │ ├── ExplicitIntentActivity.java │ │ ├── GridViewDemoActivity.java │ │ ├── ImplicitIntentsActivity.java │ │ ├── IntentWithResultActivity.java │ │ ├── LayoutGravityActivity.java │ │ ├── LinearLayoutDemoActivity.java │ │ ├── ListViewClicksActivity.java │ │ ├── PersistSettingsActivity.java │ │ ├── ProgressBarActivity.java │ │ ├── PublishingInstructionsActivity.java │ │ ├── SimpleAlertDialog.java │ │ ├── SimpleBundleDemoActivity.java │ │ ├── SimpleListViewActivity.java │ │ ├── SimpleReturnResultActivity.java │ │ ├── SmartImageDownloadActivity.java │ │ ├── SpinnerWithToastActivity.java │ │ ├── TimePickerDemoActivity.java │ │ ├── ToastFormInputsActivity.java │ │ └── ViewAttributesActivity.java │ └── res/ │ ├── drawable/ │ │ └── simple_list_selector.xml │ ├── layout/ │ │ ├── activity_action_bar_menu.xml │ │ ├── activity_async_task_perform.xml │ │ ├── activity_basic_click_handlers.xml │ │ ├── activity_basic_image_download.xml │ │ ├── activity_basic_text_view.xml │ │ ├── activity_basic_views.xml │ │ ├── activity_button_toast.xml │ │ ├── activity_contact_list.xml │ │ ├── activity_demo_selector.xml │ │ ├── activity_explicit_intent.xml │ │ ├── activity_grid_view_demo.xml │ │ ├── activity_implicit_intents.xml │ │ ├── activity_intent_with_result.xml │ │ ├── activity_layout_gravity.xml │ │ ├── activity_linear_layout_demo.xml │ │ ├── activity_list_view_clicks.xml │ │ ├── activity_persist_settings.xml │ │ ├── activity_progress_bar.xml │ │ ├── activity_publishing_instructions.xml │ │ ├── activity_simple_bundle_demo.xml │ │ ├── activity_simple_list_view.xml │ │ ├── activity_simple_return_result.xml │ │ ├── activity_smart_image_download.xml │ │ ├── activity_spinner_with_toast.xml │ │ ├── activity_time_picker_demo.xml │ │ ├── activity_toast_form_inputs.xml │ │ ├── activity_view_attributes.xml │ │ └── simple_list_view_item.xml │ ├── menu/ │ │ ├── activity_action_bar_menu.xml │ │ ├── activity_async_task_perform.xml │ │ ├── activity_basic_click_handlers.xml │ │ ├── activity_basic_image_download.xml │ │ ├── activity_basic_text_view.xml │ │ ├── activity_basic_views.xml │ │ ├── activity_button_toast.xml │ │ ├── activity_contact_list.xml │ │ ├── activity_demo_selector.xml │ │ ├── activity_explicit_intent.xml │ │ ├── activity_grid_view_demo.xml │ │ ├── activity_implicit_intents.xml │ │ ├── activity_intent_with_result.xml │ │ ├── activity_layout_gravity.xml │ │ ├── activity_linear_layout_demo.xml │ │ ├── activity_list_view_clicks.xml │ │ ├── activity_persist_settings.xml │ │ ├── activity_progress_bar.xml │ │ ├── activity_publishing_instructions.xml │ │ ├── activity_simple_bundle_demo.xml │ │ ├── activity_simple_list_view.xml │ │ ├── activity_simple_return_result.xml │ │ ├── activity_smart_image_download.xml │ │ ├── activity_spinner_with_toast.xml │ │ ├── activity_time_picker_demo.xml │ │ ├── activity_toast_form_inputs.xml │ │ └── activity_view_attributes.xml │ ├── values/ │ │ ├── colors.xml │ │ ├── exercises_list.xml │ │ ├── spinner_values.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-v11/ │ │ └── styles.xml │ └── values-v14/ │ └── styles.xml ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle
SYMBOL INDEX (138 symbols across 28 files)
FILE: app/src/main/java/codepath/apps/demointroandroid/ActionBarMenuActivity.java
class ActionBarMenuActivity (line 11) | public class ActionBarMenuActivity extends Activity {
method onCreate (line 13) | @SuppressLint("NewApi")
method onCreateOptionsMenu (line 21) | @Override
method onOptionsItemSelected (line 29) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/AsyncTaskPerformActivity.java
class AsyncTaskPerformActivity (line 9) | public class AsyncTaskPerformActivity extends Activity {
method onCreate (line 11) | @Override
method onCreateOptionsMenu (line 18) | @Override
method doneCounting (line 25) | public void doneCounting() {
class MyAsyncTask (line 29) | private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
method doInBackground (line 30) | public Void doInBackground(Void... params) {
method onPostExecute (line 37) | protected void onPostExecute(Void result) {
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicClickHandlersActivity.java
class BasicClickHandlersActivity (line 9) | public class BasicClickHandlersActivity extends Activity {
method onCreate (line 11) | @Override
method onCreateOptionsMenu (line 24) | @Override
method firstButtonClicked (line 31) | public void firstButtonClicked(View v) {
method secondButtonClicked (line 35) | private void secondButtonClicked(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicImageDownloadActivity.java
class BasicImageDownloadActivity (line 18) | public class BasicImageDownloadActivity extends Activity {
method onCreate (line 20) | @SuppressLint("NewApi")
method downloadImageFromUri (line 30) | private void downloadImageFromUri(String address) {
method onCreateOptionsMenu (line 57) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicTextViewActivity.java
class BasicTextViewActivity (line 8) | public class BasicTextViewActivity extends Activity {
method onCreate (line 10) | @Override
method onResume (line 17) | protected void onResume() {
method onPause (line 22) | protected void onPause() {
method onCreateOptionsMenu (line 27) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/BasicViewsActivity.java
class BasicViewsActivity (line 7) | public class BasicViewsActivity extends Activity {
method onCreate (line 9) | @Override
method onCreateOptionsMenu (line 15) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/ContactListActivity.java
class ContactListActivity (line 23) | public class ContactListActivity extends Activity {
method onCreate (line 28) | @Override
method populateListView (line 42) | private void populateListView() {
method onRequestPermissionsResult (line 56) | @Override
method loadContacts (line 69) | @SuppressLint("NewApi")
method onCreateOptionsMenu (line 96) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/DemoSelector.java
class DemoSelector (line 17) | public class DemoSelector extends Activity {
method onCreate (line 22) | @Override
method onCreateOptionsMenu (line 29) | @Override
method setupChaptersListView (line 36) | private void setupChaptersListView() {
class ChaptersListAdapter (line 58) | private class ChaptersListAdapter extends BaseExpandableListAdapter {
method ChaptersListAdapter (line 62) | public ChaptersListAdapter() {
method getChild (line 72) | public Object getChild(int groupPosition, int childPosition) {
method getChildId (line 76) | public long getChildId(int groupPosition, int childPosition) {
method getChildrenCount (line 80) | public int getChildrenCount(int groupPosition) {
method getGenericView (line 84) | public TextView getGenericView() {
method getChildView (line 99) | public View getChildView(int groupPosition, int childPosition, boole...
method getGroup (line 107) | public Object getGroup(int groupPosition) {
method getGroupCount (line 111) | public int getGroupCount() {
method getGroupId (line 115) | public long getGroupId(int groupPosition) {
method getGroupView (line 119) | public View getGroupView(int groupPosition, boolean isExpanded, View...
method isChildSelectable (line 126) | public boolean isChildSelectable(int groupPosition, int childPositio...
method hasStableIds (line 130) | public boolean hasStableIds() {
method getExerciseClass (line 134) | public Class<? extends Activity> getExerciseClass(int groupPosition,...
FILE: app/src/main/java/codepath/apps/demointroandroid/ExerciseActivityMapper.java
class ExerciseActivityMapper (line 7) | public class ExerciseActivityMapper {
method ExerciseActivityMapper (line 11) | public ExerciseActivityMapper() {
method getExerciseClass (line 16) | public static Class<? extends Activity> getExerciseClass(String exerci...
method getSingleton (line 20) | private static ExerciseActivityMapper getSingleton() {
method defineExerciseMappings (line 27) | private void defineExerciseMappings() {
FILE: app/src/main/java/codepath/apps/demointroandroid/ExplicitIntentActivity.java
class ExplicitIntentActivity (line 11) | public class ExplicitIntentActivity extends Activity {
method onCreate (line 13) | @Override
method onCreateOptionsMenu (line 28) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/GridViewDemoActivity.java
class GridViewDemoActivity (line 13) | public class GridViewDemoActivity extends Activity {
method onCreate (line 18) | @Override
method populateGridViewImages (line 25) | private void populateGridViewImages() {
method onCreateOptionsMenu (line 33) | @Override
class GridImageAdapter (line 40) | class GridImageAdapter extends ArrayAdapter<String> {
method GridImageAdapter (line 42) | public GridImageAdapter(Context context, int textViewResourceId, Str...
method getView (line 46) | public View getView(int position, View convertView, ViewGroup parent) {
FILE: app/src/main/java/codepath/apps/demointroandroid/ImplicitIntentsActivity.java
class ImplicitIntentsActivity (line 11) | public class ImplicitIntentsActivity extends Activity {
method onCreate (line 13) | @Override
method onCreateOptionsMenu (line 19) | @Override
method visitUrlAddress (line 26) | public void visitUrlAddress(View v) {
method getUriToVisit (line 36) | public Uri getUriToVisit() {
FILE: app/src/main/java/codepath/apps/demointroandroid/IntentWithResultActivity.java
class IntentWithResultActivity (line 13) | public class IntentWithResultActivity extends Activity {
method onCreate (line 17) | @Override
method onCreateOptionsMenu (line 23) | @Override
method enterText (line 30) | public void enterText(View v) {
method onActivityResult (line 37) | protected void onActivityResult(int requestCode, int resultCode, Inten...
FILE: app/src/main/java/codepath/apps/demointroandroid/LayoutGravityActivity.java
class LayoutGravityActivity (line 7) | public class LayoutGravityActivity extends Activity {
method onCreate (line 9) | @Override
method onCreateOptionsMenu (line 15) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/LinearLayoutDemoActivity.java
class LinearLayoutDemoActivity (line 7) | public class LinearLayoutDemoActivity extends Activity {
method onCreate (line 9) | @Override
method onCreateOptionsMenu (line 15) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/ListViewClicksActivity.java
class ListViewClicksActivity (line 13) | public class ListViewClicksActivity extends Activity {
method onCreate (line 16) | @Override
method onCreateOptionsMenu (line 37) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/PersistSettingsActivity.java
class PersistSettingsActivity (line 13) | public class PersistSettingsActivity extends Activity {
method onCreate (line 20) | @Override
method onCreateOptionsMenu (line 32) | @Override
method populateValues (line 39) | public void populateValues() {
method persistValues (line 46) | public void persistValues(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/ProgressBarActivity.java
class ProgressBarActivity (line 23) | public class ProgressBarActivity extends Activity {
method onCreate (line 29) | @Override
method onCreateOptionsMenu (line 37) | @Override
method startFourUrlAsync (line 44) | public void startFourUrlAsync(View v) {
class DelayTask (line 48) | public class DelayTask extends AsyncTask<Void, Integer, String> {
method onPreExecute (line 51) | @Override
method doInBackground (line 56) | @Override
method onProgressUpdate (line 73) | @Override
method onPostExecute (line 78) | @Override
method loadUrlBody (line 84) | protected String loadUrlBody(String address) {
FILE: app/src/main/java/codepath/apps/demointroandroid/PublishingInstructionsActivity.java
class PublishingInstructionsActivity (line 7) | public class PublishingInstructionsActivity extends Activity {
method onCreate (line 9) | @Override
method onCreateOptionsMenu (line 15) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleAlertDialog.java
class SimpleAlertDialog (line 8) | public class SimpleAlertDialog {
method displayWithOK (line 9) | public static void displayWithOK(Context c, String message) {
method displayWithOK (line 13) | public static void displayWithOK(Context c, String message, String tit...
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleBundleDemoActivity.java
class SimpleBundleDemoActivity (line 11) | public class SimpleBundleDemoActivity extends Activity {
method onCreate (line 13) | @SuppressLint("NewApi")
method onCreateOptionsMenu (line 25) | @Override
method onOptionsItemSelected (line 34) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleListViewActivity.java
class SimpleListViewActivity (line 9) | public class SimpleListViewActivity extends Activity {
method onCreate (line 11) | @Override
method onCreateOptionsMenu (line 23) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/SimpleReturnResultActivity.java
class SimpleReturnResultActivity (line 10) | public class SimpleReturnResultActivity extends Activity {
method onCreate (line 12) | @Override
method onCreateOptionsMenu (line 18) | @Override
method sendResult (line 25) | public void sendResult(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/SmartImageDownloadActivity.java
class SmartImageDownloadActivity (line 21) | public class SmartImageDownloadActivity extends Activity {
method onCreate (line 23) | @Override
method downloadSmartImageFromUrl (line 30) | private void downloadSmartImageFromUrl(String address) {
method onCreateOptionsMenu (line 55) | @Override
FILE: app/src/main/java/codepath/apps/demointroandroid/SpinnerWithToastActivity.java
class SpinnerWithToastActivity (line 12) | public class SpinnerWithToastActivity extends Activity {
method onCreate (line 16) | @Override
method loadSpinner (line 25) | private void loadSpinner() {
method onCreateOptionsMenu (line 34) | @Override
method displayVal (line 41) | public void displayVal(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/TimePickerDemoActivity.java
class TimePickerDemoActivity (line 10) | public class TimePickerDemoActivity extends Activity {
method onCreate (line 14) | @Override
method onCreateOptionsMenu (line 21) | @Override
method displayTime (line 28) | public void displayTime(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/ToastFormInputsActivity.java
class ToastFormInputsActivity (line 13) | public class ToastFormInputsActivity extends Activity {
method onCreate (line 19) | @Override
method onCreateOptionsMenu (line 28) | @Override
method toastInputs (line 35) | public void toastInputs(View v) {
FILE: app/src/main/java/codepath/apps/demointroandroid/ViewAttributesActivity.java
class ViewAttributesActivity (line 10) | public class ViewAttributesActivity extends Activity {
method onCreate (line 12) | @Override
method onCreateOptionsMenu (line 21) | @Override
Condensed preview — 103 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (110K chars).
[
{
"path": ".gitignore",
"chars": 740,
"preview": "# built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\n"
},
{
"path": ".travis.yml",
"chars": 302,
"preview": "language: android\njdk:\n - oraclejdk8\nsudo: false\nandroid:\n components:\n - tools\n - platform-tools\n - build-tools-28"
},
{
"path": "README.md",
"chars": 1023,
"preview": "intro_android_demo\n==================\n\nDemo of app exercises for Intro to Android App Development\n\n<img src=\"http://i.im"
},
{
"path": "app/build.gradle",
"chars": 536,
"preview": "apply plugin: 'com.android.application'\n\nandroid {\n compileSdkVersion 28\n\n defaultConfig {\n applicationId \""
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 5935,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Chapter 1, Exercise 1: Change version data to 2 and 2.0 -->\n<manifest xmlns:"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ActionBarMenuActivity.java",
"chars": 1123,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.annotation.SuppressLint;\nimport androi"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/AsyncTaskPerformActivity.java",
"chars": 1078,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.AsyncTask;\nimport android.os.Bundle;\nimport android.app.Activ"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/BasicClickHandlersActivity.java",
"chars": 1116,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/BasicImageDownloadActivity.java",
"chars": 1910,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport and"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/BasicTextViewActivity.java",
"chars": 833,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.util.Log;"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/BasicViewsActivity.java",
"chars": 551,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ContactListActivity.java",
"chars": 3787,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport and"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/DemoSelector.java",
"chars": 5046,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.annotation.SuppressLint;\nimport androi"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ExerciseActivityMapper.java",
"chars": 2954,
"preview": "package codepath.apps.demointroandroid;\n\nimport java.util.HashMap;\n\nimport android.app.Activity;\n\npublic class ExerciseA"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ExplicitIntentActivity.java",
"chars": 1040,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.content.I"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/GridViewDemoActivity.java",
"chars": 1638,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.content.C"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ImplicitIntentsActivity.java",
"chars": 1175,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.app.Activity;\n"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/IntentWithResultActivity.java",
"chars": 1408,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.provider.ContactsContract;\nimport andr"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/LayoutGravityActivity.java",
"chars": 560,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/LinearLayoutDemoActivity.java",
"chars": 571,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ListViewClicksActivity.java",
"chars": 1462,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/PersistSettingsActivity.java",
"chars": 1558,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.content.S"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ProgressBarActivity.java",
"chars": 3561,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.app.Activity;\nimport android.os.AsyncTask;\nimport android.os.Bun"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/PublishingInstructionsActivity.java",
"chars": 592,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SimpleAlertDialog.java",
"chars": 912,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android."
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SimpleBundleDemoActivity.java",
"chars": 1237,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.annotation.SuppressLint;\nimport androi"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SimpleListViewActivity.java",
"chars": 900,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SimpleReturnResultActivity.java",
"chars": 895,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.content.I"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SmartImageDownloadActivity.java",
"chars": 2142,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.gra"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/SpinnerWithToastActivity.java",
"chars": 1384,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/TimePickerDemoActivity.java",
"chars": 899,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ToastFormInputsActivity.java",
"chars": 1251,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.view.Menu"
},
{
"path": "app/src/main/java/codepath/apps/demointroandroid/ViewAttributesActivity.java",
"chars": 834,
"preview": "package codepath.apps.demointroandroid;\n\nimport android.os.Bundle;\nimport android.app.Activity;\nimport android.util.Log;"
},
{
"path": "app/src/main/res/drawable/simple_list_selector.xml",
"chars": 353,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector\n xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <it"
},
{
"path": "app/src/main/res/layout/activity_action_bar_menu.xml",
"chars": 543,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/t"
},
{
"path": "app/src/main/res/layout/activity_async_task_perform.xml",
"chars": 517,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/t"
},
{
"path": "app/src/main/res/layout/activity_basic_click_handlers.xml",
"chars": 999,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_basic_image_download.xml",
"chars": 562,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_basic_text_view.xml",
"chars": 548,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/t"
},
{
"path": "app/src/main/res/layout/activity_basic_views.xml",
"chars": 1553,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_button_toast.xml",
"chars": 510,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/t"
},
{
"path": "app/src/main/res/layout/activity_contact_list.xml",
"chars": 494,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_demo_selector.xml",
"chars": 510,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_explicit_intent.xml",
"chars": 560,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_grid_view_demo.xml",
"chars": 524,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_implicit_intents.xml",
"chars": 959,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_intent_with_result.xml",
"chars": 854,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_layout_gravity.xml",
"chars": 940,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_linear_layout_demo.xml",
"chars": 619,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_list_view_clicks.xml",
"chars": 493,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_persist_settings.xml",
"chars": 1102,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_progress_bar.xml",
"chars": 1625,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_publishing_instructions.xml",
"chars": 2293,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_simple_bundle_demo.xml",
"chars": 559,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_simple_list_view.xml",
"chars": 493,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_simple_return_result.xml",
"chars": 881,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_smart_image_download.xml",
"chars": 562,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_spinner_with_toast.xml",
"chars": 849,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_time_picker_demo.xml",
"chars": 803,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_toast_form_inputs.xml",
"chars": 1891,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "app/src/main/res/layout/activity_view_attributes.xml",
"chars": 691,
"preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/t"
},
{
"path": "app/src/main/res/layout/simple_list_view_item.xml",
"chars": 344,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:"
},
{
"path": "app/src/main/res/menu/activity_action_bar_menu.xml",
"chars": 379,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n\t\tandroid:id=\"@+id/menu_toast\"\n\t\tandroid:i"
},
{
"path": "app/src/main/res/menu/activity_async_task_perform.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_basic_click_handlers.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_basic_image_download.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_basic_text_view.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_basic_views.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_button_toast.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_contact_list.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_demo_selector.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_explicit_intent.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_grid_view_demo.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_implicit_intents.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_intent_with_result.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_layout_gravity.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_linear_layout_demo.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_list_view_clicks.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_persist_settings.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_progress_bar.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_publishing_instructions.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_simple_bundle_demo.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_simple_list_view.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_simple_return_result.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_smart_image_download.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_spinner_with_toast.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_time_picker_demo.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_toast_form_inputs.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/menu/activity_view_attributes.xml",
"chars": 249,
"preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n <item\n android:id=\"@+id/menu_settings\"\n "
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 191,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"blue\">#4b6d92</color>\n <color name=\"other_blue\">#"
},
{
"path": "app/src/main/res/values/exercises_list.xml",
"chars": 1831,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string-array name=\"chapters\">\n <item>App Fundamentals</ite"
},
{
"path": "app/src/main/res/values/spinner_values.xml",
"chars": 308,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string-array name=\"spinner_options\">\n <item>Red</item>\n "
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 2547,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <string name=\"app_name\">CodePath Android Demo</string>\n <stri"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 679,
"preview": "<resources>\n\n <!--\n Base application theme, dependent on API level. This theme is replaced\n by AppBaseT"
},
{
"path": "app/src/main/res/values-v11/styles.xml",
"chars": 323,
"preview": "<resources>\n\n <!--\n Base application theme for API 11+. This theme completely replaces\n AppBaseTheme fr"
},
{
"path": "app/src/main/res/values-v14/styles.xml",
"chars": 380,
"preview": "<resources>\n\n <!--\n Base application theme for API 14+. This theme completely replaces\n AppBaseTheme fr"
},
{
"path": "build.gradle",
"chars": 335,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n re"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 232,
"preview": "#Sat Aug 24 23:02:30 PDT 2019\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 52,
"preview": "android.enableJetifier=true\nandroid.useAndroidX=true"
},
{
"path": "gradlew",
"chars": 5080,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "gradlew.bat",
"chars": 2404,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@r"
},
{
"path": "settings.gradle",
"chars": 15,
"preview": "include ':app'\n"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the codepath/intro_android_demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 103 files (93.6 KB), approximately 25.4k tokens, and a symbol index with 138 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.