Skip to content
Snippets Groups Projects
Commit 36780496 authored by Andrej Rasevic's avatar Andrej Rasevic
Browse files

added Lab3_Permissions

parent d98069b9
No related branches found
No related tags found
No related merge requests found
Showing
with 525 additions and 0 deletions
# 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
File added
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'
}
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 {
}
}
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");
}
}
}
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();
}
}
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"));
}
}
<?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
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
}
}
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));
}
}
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
}
}
Lab3_Permissions/app/src/main/res/drawable-hdpi/ic_launcher.png

8.02 KiB

Lab3_Permissions/app/src/main/res/drawable-ldpi/ic_launcher.png

2.5 KiB

Lab3_Permissions/app/src/main/res/drawable-mdpi/ic_launcher.png

3.97 KiB

Lab3_Permissions/app/src/main/res/drawable-xhdpi/ic_launcher.png

13.2 KiB

<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
<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
<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
<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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment