Full Code of codepath/intro_android_demo for AI

master 0ddcdf083ba0 cached
103 files
93.6 KB
25.4k tokens
138 symbols
1 requests
Download .txt
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" />&nbsp;
<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'
Download .txt
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
Download .txt
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.

Copied to clipboard!