diff --git a/Lab3_Permissions/.gitignore b/Lab3_Permissions/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ceff37eff0e621e8f96607f26a6bced4727fb5a5
--- /dev/null
+++ b/Lab3_Permissions/.gitignore
@@ -0,0 +1,39 @@
+# 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
+.settings
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Intellij project files
+*.iml
+*.ipr
+*.iws
+.idea
+.idea/workspace.xml
+.gradle
+build/
+captures/
+
+# Mac files
+.DS_Store
+
+# Windows thumbnail db
+Thumbs.db
diff --git a/Lab3_Permissions/Lab3_Permissions.pdf b/Lab3_Permissions/Lab3_Permissions.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e040c4d4f09a8fc1ecc360ea8109ece5cbbf52fc
Binary files /dev/null and b/Lab3_Permissions/Lab3_Permissions.pdf differ
diff --git a/Lab3_Permissions/app/build.gradle b/Lab3_Permissions/app/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..dd56ee9beca1bf9c8e0263b60ef2fa042498b746
--- /dev/null
+++ b/Lab3_Permissions/app/build.gradle
@@ -0,0 +1,24 @@
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 26
+    buildToolsVersion "26.0.1"
+
+    defaultConfig {
+        applicationId "course.labs.permissionslab"
+        minSdkVersion 21
+        targetSdkVersion 26
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
+        }
+    }
+}
+
+dependencies {
+    androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.6.0'
+    androidTestCompile 'com.android.support.test:rules:0.4.1'
+}
diff --git a/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/AllTests.java b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/AllTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a6f2b0b11bb3ae3b52dbcfa8f83ccebe8623ab7
--- /dev/null
+++ b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/AllTests.java
@@ -0,0 +1,39 @@
+package course.labs.permissionslab.tests;
+
+import android.app.Activity;
+import android.test.ActivityInstrumentationTestCase2;
+
+import junit.framework.TestSuite;
+
+import course.labs.permissionslab.ActivityLoaderActivity;
+
+/**
+ * Created by Heba Aly on 9/18/2017.
+ */
+
+public class AllTests  extends
+        ActivityInstrumentationTestCase2<Activity> {
+
+    public AllTests(Class<Activity> activityClass) {
+        super(activityClass);
+    }
+
+    public static TestSuite suite() {
+        TestSuite t = new TestSuite();
+        t.addTestSuite(PermissionEnforcementTest.class);
+        t.addTestSuite(TestPhoneStatus.class);
+        t.addTestSuite(TestDangerousApp.class);
+        return t;
+    }
+
+    @Override
+    public void setUp() throws Exception {
+
+    }
+
+
+    @Override
+    public void tearDown() throws Exception {
+    }
+
+}
diff --git a/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/PermissionEnforcementTest.java b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/PermissionEnforcementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd1b02ac5e4b25a87a5ea3e649ec63af5d6b42e7
--- /dev/null
+++ b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/PermissionEnforcementTest.java
@@ -0,0 +1,56 @@
+package course.labs.permissionslab.tests;
+
+import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.test.ActivityInstrumentationTestCase2;
+
+import com.robotium.solo.Solo;
+
+import course.labs.permissionslab.ActivityLoaderActivity;
+
+public class PermissionEnforcementTest extends
+		ActivityInstrumentationTestCase2<ActivityLoaderActivity> {
+	private Solo solo;
+
+	public PermissionEnforcementTest() {
+		super(ActivityLoaderActivity.class);
+	}
+
+	public void setUp() throws Exception {
+		solo = new Solo(getInstrumentation());
+		getActivity();
+	}
+
+	@Override
+	public void tearDown() throws Exception {
+		solo.finishOpenedActivities();
+	}
+
+	// Executes PermissionEnforcementTest
+	public void testRun() {
+		
+		// =============== Section One ==================
+		solo.waitForActivity(
+				course.labs.permissionslab.ActivityLoaderActivity.class, 2000);
+
+		PackageManager pm = getActivity().getPackageManager();
+		try {
+			ActivityInfo activityInfo = pm.getActivityInfo(new ComponentName(
+					"course.labs.dangerousapp",
+					"course.labs.dangerousapp.DangerousActivity"), 0);
+			assertTrue(
+					"PermissionEnforcementTest:" +
+					"Section One:" +
+					"course.labs.permissions.DANGEROUS_ACTIVITY_PERM not enforced by DangerousActivity",
+					null != activityInfo && null != activityInfo.permission
+							&& activityInfo.permission
+									.equals("course.labs.permissions.DANGEROUS_ACTIVITY_PERM"));
+		} catch (NameNotFoundException e) {
+			fail("PermissionEnforcementTest:" +
+					"Section One:" +
+					"DangerousActivity not found");
+		}
+	}
+}
diff --git a/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestDangerousApp.java b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestDangerousApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc71c8ec55c29a1d912fadaf803c5a2037eb5a9f
--- /dev/null
+++ b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestDangerousApp.java
@@ -0,0 +1,68 @@
+package course.labs.permissionslab.tests;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+import com.robotium.solo.Solo;
+
+import course.labs.permissionslab.ActivityLoaderActivity;
+import course.labs.permissionslab.PhoneStatusActivity;
+
+
+public class TestDangerousApp extends ActivityInstrumentationTestCase2<ActivityLoaderActivity> {
+  	private Solo solo;
+  	
+  	public TestDangerousApp() {
+		super(ActivityLoaderActivity.class);
+  	}
+
+  	public void setUp() throws Exception {
+		solo = new Solo(getInstrumentation());
+		getActivity();
+  	}
+  
+   	@Override
+   	public void tearDown() throws Exception {
+        solo.finishOpenedActivities();
+  	}
+   	
+   	// Executes TestDangerousApp
+	public void testRun() {
+				
+		// ===================== Section One ===================
+		// Wait for activity: 'course.labs.permissionslab.ActivityLoaderActivity'
+		assertTrue("TestDangerousApp:" +
+				"Section One:" +
+				"ActivityLoaderActivity did not load correctly.", 
+				solo.waitForActivity(course.labs.permissionslab.ActivityLoaderActivity.class));
+
+		// Click on Bookmarks Activity
+		solo.clickOnView(solo.getView(course.labs.permissionslab.R.id.start_phone_status_button));
+
+		// Wait for activity: 'course.labs.permissionslab.PhoneStatusActivity'
+		assertTrue("TestDangerousApp:" +
+				   "Section One:" +
+				   "PhoneStatusActivity did not load correctly",
+				   solo.waitForActivity(PhoneStatusActivity.class));
+		
+		// ===================== Section Two ===================
+		// Click on Go To DangerousActivity
+		solo.clickOnView(solo.getView(course.labs.permissionslab.R.id.go_to_dangerous_activity_button));
+
+		// Wait for activity: 'course.labs.permissionslab.GoToDangerousActivity'
+		assertTrue("TestDangerousApp:" +
+				"Section Two:" +
+				"GoToDangerousActivity did not load correctly", 
+				solo.waitForActivity(course.labs.permissionslab.GoToDangerousActivity.class));
+		
+		// Assert that: 'This button will load a Dangerous Level activity' is shown
+		assertTrue("TestDangerousApp:" +
+				"Section Two:" +
+				"Dangerous Level activity button is not shown.",
+				solo.waitForText(java.util.regex.Pattern.quote("This button will load a Dangerous Level activity")));
+		
+		// Click on Start Dangerous Activity
+		solo.clickOnView(solo.getView(course.labs.permissionslab.R.id.start_dangerous_activity_button));
+
+		solo.clickOnActionBarHomeButton();
+	}
+}
diff --git a/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestPhoneStatus.java b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestPhoneStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fe3ed4906b3511c79d47784b32abe4879441cf6
--- /dev/null
+++ b/Lab3_Permissions/app/src/androidTest/java/course/labs/permissionslab/tests/TestPhoneStatus.java
@@ -0,0 +1,67 @@
+package course.labs.permissionslab.tests;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+import com.robotium.solo.Solo;
+
+import course.labs.permissionslab.ActivityLoaderActivity;
+import course.labs.permissionslab.PhoneStatusActivity;
+
+public class TestPhoneStatus extends
+		ActivityInstrumentationTestCase2<ActivityLoaderActivity> {
+	private Solo solo;
+
+	public TestPhoneStatus() {
+		super(ActivityLoaderActivity.class);
+	}
+
+	public void setUp() throws Exception {
+		solo = new Solo(getInstrumentation());
+		getActivity();
+	}
+
+	@Override
+	public void tearDown() throws Exception {
+		solo.finishOpenedActivities();
+	}
+
+	// Executes TestPhoneStatus
+	public void testRun() {
+		
+		int delay = 2000;
+		
+		// ================ Section One ===============
+		// Wait for activity:
+		// 'course.labs.permissionslab.ActivityLoaderActivity'
+		assertTrue(
+				"TestPhoneStatus:" +
+				"Section One:" +
+				"ActivityLoaderActivity did not load correctly.",
+				solo.waitForActivity(course.labs.permissionslab.ActivityLoaderActivity.class, delay));
+
+		// Click on Bookmarks Activity
+		solo.clickOnView(solo
+				.getView(course.labs.permissionslab.R.id.start_phone_status_button));
+
+		// Wait for activity: 'course.labs.permissionslab.PhoneStatusActivity'
+		assertTrue(
+				"TestPhoneStatus:" +
+				"Section One:" +
+				"PhoneStatusActivity did not load correctly.",
+				solo.waitForActivity(PhoneStatusActivity.class, delay));
+		
+		// ================ Section Two ===============
+		// Click on Get Bookmarks
+		solo.clickOnView(solo
+				.getView(course.labs.permissionslab.R.id.get_phone_number_button));
+
+		// Check for at least one bookmark
+		assertTrue("TestPhoneStatus:" +
+				   "Section Two:" +
+				   "The phone number is not correctly displayed.",
+				solo.waitForText("Phone Number: 1"));
+
+		
+
+	}
+}
diff --git a/Lab3_Permissions/app/src/androidTest/res/.gitkeep b/Lab3_Permissions/app/src/androidTest/res/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Lab3_Permissions/app/src/main/AndroidManifest.xml b/Lab3_Permissions/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8f681da9651d9c81451bbb7add7dfb788e896c49
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/AndroidManifest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="course.labs.permissionslab"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <!--  TODO add uses permission elements -->
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".ActivityLoaderActivity"
+            android:label="@string/title_main" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name=".PhoneStatusActivity"
+            android:label="@string/title_permissions" >
+        </activity>
+        <activity
+            android:name=".GoToDangerousActivity"
+            android:label="@string/title_activity_customization" >
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/ActivityLoaderActivity.java b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/ActivityLoaderActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..93e35394494eae19962147e671ca251cc624c16c
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/ActivityLoaderActivity.java
@@ -0,0 +1,29 @@
+package course.labs.permissionslab;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+
+public class ActivityLoaderActivity extends Activity {
+
+	private static final String TAG = "Lab-Permissions";
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_loader_activity);
+
+		Button startPhoneStatusButton = (Button) findViewById(R.id.start_phone_status_button);
+		// TODO - Add onClickListener to the startPhoneStatusButton to call startPhoneStatusActivity()
+
+	}
+
+	private void startPhoneStatusActivity() {
+		Log.i(TAG, "Entered startPhoneStatusActivity()");
+	
+		// TODO - Start the PhoneStatusActivity
+	}
+}
diff --git a/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/GoToDangerousActivity.java b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/GoToDangerousActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe4c7cca54229903e6b4dea06b4abd364caeb147
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/GoToDangerousActivity.java
@@ -0,0 +1,45 @@
+package course.labs.permissionslab;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+
+public class GoToDangerousActivity extends Activity {
+	
+	private static final String TAG = "Lab-Permissions";
+
+	private static final String DANGEROUS_ACTIVITY_ACTION = "course.labs.permissions.DANGEROUS_ACTIVITY";
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.go_to_dangerous_activity);
+
+		Button startDangerousActivityButton = (Button) findViewById(R.id.start_dangerous_activity_button);
+
+		startDangerousActivityButton.setOnClickListener(new OnClickListener() {
+
+			@Override
+			public void onClick(View v) {
+
+				startDangerousActivity();
+
+			}
+		});
+
+	}
+
+	private void startDangerousActivity() {
+
+		Log.i(TAG, "Entered startDangerousActivity()");
+
+		startActivity(new Intent(DANGEROUS_ACTIVITY_ACTION));
+		
+
+	}
+
+}
diff --git a/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/PhoneStatusActivity.java b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/PhoneStatusActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3dff3fb9d2049dfc094bbbe5ca0a3824a00d831
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/java/course/labs/permissionslab/PhoneStatusActivity.java
@@ -0,0 +1,56 @@
+package course.labs.permissionslab;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class PhoneStatusActivity extends Activity {
+	
+	private static final String TAG = "Lab-Permissions";
+
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.phone_status_activity);
+
+		Button getPhoneNumButton = (Button) findViewById(R.id.get_phone_number_button);
+		// TODO - Add onClickListener to the getPhoneNumButton to call loadPhoneNumber()
+
+
+		Button goToDangerousActivityButton = (Button) findViewById(R.id.go_to_dangerous_activity_button);
+		// TODO - Add onClickListener to the goToDangerousActivityButton to call startGoToDangerousActivity()
+
+
+	}
+
+	private void loadPhoneNumber() {
+
+		Log.i(TAG, "Entered loadPhoneNumber()");
+
+		TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+		String mPhoneNumber = tMgr.getLine1Number();
+
+		TextView box = (TextView) findViewById(R.id.text);
+		box.setText("Phone Number: "+mPhoneNumber);
+
+		Log.i(TAG, "Phone Number loaded");
+	}
+
+	private void startGoToDangerousActivity() {
+
+		Log.i(TAG, "Entered startGoToDangerousActivity()");
+
+		// TODO - Start the GoToDangerousActivity
+
+
+	}
+
+}
diff --git a/Lab3_Permissions/app/src/main/res/drawable-hdpi/ic_launcher.png b/Lab3_Permissions/app/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e79b184fcf8cc47dede6d7ccde00d1a1e2d9c23
Binary files /dev/null and b/Lab3_Permissions/app/src/main/res/drawable-hdpi/ic_launcher.png differ
diff --git a/Lab3_Permissions/app/src/main/res/drawable-ldpi/ic_launcher.png b/Lab3_Permissions/app/src/main/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebfac7d78b9e17c113f734d10af74bd2b100beba
Binary files /dev/null and b/Lab3_Permissions/app/src/main/res/drawable-ldpi/ic_launcher.png differ
diff --git a/Lab3_Permissions/app/src/main/res/drawable-mdpi/ic_launcher.png b/Lab3_Permissions/app/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..1183441937efcae0151b75099bec444d034886e9
Binary files /dev/null and b/Lab3_Permissions/app/src/main/res/drawable-mdpi/ic_launcher.png differ
diff --git a/Lab3_Permissions/app/src/main/res/drawable-xhdpi/ic_launcher.png b/Lab3_Permissions/app/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8ab2a114716b712ec0c5122f9e9524afaa60b52
Binary files /dev/null and b/Lab3_Permissions/app/src/main/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/Lab3_Permissions/app/src/main/res/layout/activity_loader_activity.xml b/Lab3_Permissions/app/src/main/res/layout/activity_loader_activity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a81a63524d1c376e9df6ed89732b114089bdb4d
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/layout/activity_loader_activity.xml
@@ -0,0 +1,14 @@
+<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=".ActivityLoaderActivity" >
+    
+    <Button
+        android:id="@+id/start_phone_status_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_button3" />
+    
+</LinearLayout>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/layout/go_to_dangerous_activity.xml b/Lab3_Permissions/app/src/main/res/layout/go_to_dangerous_activity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a657661650296aa375fc0528641fd09cda48518d
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/layout/go_to_dangerous_activity.xml
@@ -0,0 +1,18 @@
+<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" >
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/cust_message" />
+
+    <Button
+        android:id="@+id/start_dangerous_activity_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/cust_button1" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/layout/phone_status_activity.xml b/Lab3_Permissions/app/src/main/res/layout/phone_status_activity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eed6220b60a26af0f292f36d492f90e238da2296
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/layout/phone_status_activity.xml
@@ -0,0 +1,26 @@
+<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" >
+
+    <TextView
+        android:id="@+id/text"
+        android:layout_width="match_parent"
+        android:layout_height="250dp"
+        android:maxHeight="250dp"
+        android:text="@string/place_holder" />
+
+    <Button
+        android:id="@+id/get_phone_number_button"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/perms_button1" />
+
+    <Button
+        android:id="@+id/go_to_dangerous_activity_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/perms_button2" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/values-v11/styles.xml b/Lab3_Permissions/app/src/main/res/values-v11/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..541752f6edf47a27cad70a23c00cc17aa4c84c08
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+<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>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/values-v14/styles.xml b/Lab3_Permissions/app/src/main/res/values-v14/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f20e01501dfde7d1f4cc9c29f85169ce57bc5846
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<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>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/values/strings.xml b/Lab3_Permissions/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f0d33c4bc41a1ad017eb44c0e53a297be981f34d
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/values/strings.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">PermissionsLab</string>
+    <string name="title_main">PermissionsLab</string>
+    <string name="main_button3">PhoneStatus Activity</string>
+    <string name="title_permissions">Permissions</string>
+    <string name="perms_button1">Get Phone Number</string>
+    <string name="perms_button2">Go To DangerousActivity</string>
+    <string name="place_holder">Phone Number Goes Here</string>
+    <string name="title_activity_customization">Customization</string>
+    <string name="cust_button1">Start Dangerous Activity</string>
+    <string name="cust_message">This button will load a Dangerous Level activity</string>
+
+</resources>
\ No newline at end of file
diff --git a/Lab3_Permissions/app/src/main/res/values/styles.xml b/Lab3_Permissions/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a10ca492dd2610011d3979b4dc551f471fa27ab
--- /dev/null
+++ b/Lab3_Permissions/app/src/main/res/values/styles.xml
@@ -0,0 +1,20 @@
+<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>
\ No newline at end of file
diff --git a/Lab3_Permissions/build.gradle b/Lab3_Permissions/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..8674409cc64f09406fc5792870881826b40393f3
--- /dev/null
+++ b/Lab3_Permissions/build.gradle
@@ -0,0 +1,15 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.3.3'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+    }
+}
diff --git a/Lab3_Permissions/gradle/wrapper/gradle-wrapper.jar b/Lab3_Permissions/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659
Binary files /dev/null and b/Lab3_Permissions/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/Lab3_Permissions/gradle/wrapper/gradle-wrapper.properties b/Lab3_Permissions/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..cb5b266ce62cf4432822291eaa9744b71673d169
--- /dev/null
+++ b/Lab3_Permissions/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Sat Sep 16 15:28:28 EDT 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/Lab3_Permissions/gradlew b/Lab3_Permissions/gradlew
new file mode 100755
index 0000000000000000000000000000000000000000..9d82f78915133e1c35a6ea51252590fb38efac2f
--- /dev/null
+++ b/Lab3_Permissions/gradlew
@@ -0,0 +1,160 @@
+#!/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
+
+# 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\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+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"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/Lab3_Permissions/gradlew.bat b/Lab3_Permissions/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..8a0b282aa6885fb573c106b3551f7275c5f17e8e
--- /dev/null
+++ b/Lab3_Permissions/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/Lab3_Permissions/settings.gradle b/Lab3_Permissions/settings.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..e7b4def49cb53d9aa04228dd3edb14c9e635e003
--- /dev/null
+++ b/Lab3_Permissions/settings.gradle
@@ -0,0 +1 @@
+include ':app'