This repository has been archived by the owner on Sep 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #12 from enderian/branchR4
R4
- Loading branch information
Showing
123 changed files
with
4,305 additions
and
583 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
###### Παραδοτέο R3 | ||
|
||
> Έχει γίνει και μερική υλοποίηση του παραδοτέου με Guice (dependency injection) και Mockito στο branch R3-Guice. | ||
# Εισαγωγή | ||
|
||
Στο παρών έγγραφο θα αναλυθούν η λογική της αρχιτεκτονικής και τα διαγράμματα ακολουθίας για την λογική πεδίου. Στο τέλος θα αναρτηθεί coverage report για τον κώδικα. | ||
|
||
# Αρχιτεκτονική Λογισμικού | ||
|
||
## Διάγραμμα πακέτων | ||
|
||
![](package-diagram.png) | ||
|
||
Τα πακέτα builder, configurations, lab, people, schedule ανήκουν στο domain model. Το πακέτα dao & memorydao προσφέρουν πρόσβαση στα δεδομένα μας (Direct Memory Access). Τέλος έχουμε εφαρμόσει το μοντέλο model view presenter για τα fragments που θα δημιουργηθούν στο R4. | ||
|
||
# Στατική Όψη Λογικής Πεδίου | ||
|
||
Παρακάτω παρουσιάζεται διαγραμματικά η στατική όψη της λογικής πεδίου. | ||
|
||
![](static-view.png) | ||
|
||
# Διαγράμματα Ακολουθίας Δυναμικής Όψης Λογικής Πεδίου | ||
|
||
Παρακάτω παρουσιάζεται διαγραμματικά το διάγραμμα ακολουθίας για το signIn ενός χρήστη. | ||
|
||
![](signin-seq.png) | ||
|
||
# Υλοποίηση Λογικής Πεδίου & Testing | ||
|
||
Η υλοποίηση της λογικής πεδίου και το testing μπορούν να βρεθούν στο Android Studio Project που έχει αναρτηθεί. | ||
|
||
# Coverage Reports | ||
|
||
Το report για το coverage του κώδικα μπορεί να δημιουργηθεί μέσα από το Android Studio (Analyze -> Generate Coverage Report), αλλά συνοπτικά είχαμε 95% coverage στις κλάσεις, 99% coverage στις μεθόδους & 96% coverage στις γραμμές. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,35 @@ | ||
###### Παραδοτέο R3 | ||
|
||
> Έχει γίνει και μερική υλοποίηση του παραδοτέου με Guice (dependency injection) και Mockito στο branch R3-Guice. | ||
###### Παραδοτέο R4 | ||
|
||
# Εισαγωγή | ||
|
||
Στο παρών έγγραφο θα αναλυθούν η λογική της αρχιτεκτονικής και τα διαγράμματα ακολουθίας για την λογική πεδίου. Στο τέλος θα αναρτηθεί coverage report για τον κώδικα. | ||
Στο παρών έγγραφο θα αναλυθεί η τελική υλοποίηση της εφαρμογής στο Android framework. | ||
|
||
# Αρχιτεκτονική Λογισμικού | ||
|
||
## Διάγραμμα πακέτων | ||
## Διάγραμμα κλάσεων | ||
|
||
![](Deliverables/R3/package-diagram.png) | ||
Παρακάτων παρουσιάζεται το διάγραμμα κλάσεων που εμπεριέχει όλο το project. Δυστυχώς είναι δυσανάγνωστο από το αρχείο της Markdown. | ||
|
||
Τα πακέτα builder, configurations, lab, people, schedule ανήκουν στο domain model. Το πακέτα dao & memorydao προσφέρουν πρόσβαση στα δεδομένα μας (Direct Memory Access). Τέλος έχουμε εφαρμόσει το μοντέλο model view presenter για τα fragments που θα δημιουργηθούν στο R4. | ||
![](Deliverables/R4/class-diagram.png) | ||
|
||
# Στατική Όψη Λογικής Πεδίου | ||
## Διάγραμμα πακέτων | ||
|
||
Παρακάτω παρουσιάζεται διαγραμματικά η στατική όψη της λογικής πεδίου. | ||
![](Deliverables/R3/package-diagram.png) | ||
|
||
![](Deliverables/R3/static-view.png) | ||
Τα πακέτα builder, configurations, lab, people, schedule ανήκουν στο domain model. | ||
Το πακέτα dao & memorydao προσφέρουν πρόσβαση στα δεδομένα μας (Direct Memory Access). | ||
Το πακέτο services περιέχει τις υπηρεσίες (services), που εδώ λειτουργούν ως presenters. | ||
|
||
# Διαγράμματα Ακολουθίας Δυναμικής Όψης Λογικής Πεδίου | ||
## Παραδείγματα λειτουργειών | ||
|
||
Παρακάτω παρουσιάζεται διαγραμματικά το διάγραμμα ακολουθίας για το signIn ενός χρήστη. | ||
Ακολουθούν τα sequence diagrams για την συνδεση, και ως παράδειγμα την ανάγνωση ιστορικού ανά terminal και την αποθήκευση νέου configuration. | ||
|
||
![](Deliverables/R3/signin-seq.png) | ||
![](Deliverables/R4/sign-in.png) | ||
|
||
# Υλοποίηση Λογικής Πεδίου & Testing | ||
![](Deliverables/R4/history-read.png) | ||
|
||
Η υλοποίηση της λογικής πεδίου και το testing μπορούν να βρεθούν στο Android Studio Project που έχει αναρτηθεί. | ||
![](Deliverables/R4/configuration-save.png) | ||
|
||
# Coverage Reports | ||
|
||
Το report για το coverage του κώδικα μπορεί να δημιουργηθεί μέσα από το Android Studio (Analyze -> Generate Coverage Report), αλλά συνοπτικά είχαμε 95% coverage στις κλάσεις, 99% coverage στις μεθόδους & 96% coverage στις γραμμές. | ||
Το report για το coverage του κώδικα μπορεί να δημιουργηθεί μέσα από το Android Studio (Analyze -> Generate Coverage Report). Συνοπτικά με τις κλάσεις των activities και των fragments που απαιτούν Android tests είχαμε 46% συνολικό coverage, 50% στα services/presenters (λόγω μεθόδων Android) και 100% σε DAO και μοντέλο πεδίου. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 0 additions & 26 deletions
26
app/src/androidTest/java/gr/aueb/se/labadministration/ExampleInstrumentedTest.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,48 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="gr.aueb.se.labadministration"> | ||
|
||
<application | ||
android:allowBackup="true" | ||
android:icon="@mipmap/ic_launcher" | ||
android:icon="@drawable/app_icon" | ||
android:label="@string/app_name" | ||
android:roundIcon="@mipmap/ic_launcher_round" | ||
android:roundIcon="@drawable/app_icon" | ||
android:supportsRtl="true" | ||
android:theme="@style/AppTheme" /> | ||
</manifest> | ||
android:theme="@style/AppTheme"> | ||
|
||
<service | ||
android:name=".services.SignInService" | ||
android:enabled="true" | ||
android:exported="false" /> | ||
<service | ||
android:name=".services.LabService" | ||
android:enabled="true" | ||
android:exported="false" /> | ||
<service | ||
android:name=".services.HistoryService" | ||
android:enabled="true" | ||
android:exported="false" /> | ||
<service | ||
android:name=".services.ConfigurationService" | ||
android:enabled="true" | ||
android:exported="false" /> | ||
|
||
<activity android:name=".activities.NewConfigurationActivity" /> | ||
|
||
<activity android:name=".activities.NewTerminalActivity" /> | ||
|
||
<activity | ||
android:name=".activities.MainActivity" | ||
android:label="@string/title_activity_main" /> | ||
|
||
<activity android:name=".activities.SignInActivity"> | ||
<intent-filter> | ||
<action android:name="android.intent.action.VIEW" /> | ||
<action android:name="android.intent.action.MAIN" /> | ||
|
||
<category android:name="android.intent.category.LAUNCHER" /> | ||
</intent-filter> | ||
</activity> | ||
</application> | ||
|
||
</manifest> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
91 changes: 91 additions & 0 deletions
91
app/src/main/java/gr/aueb/se/labadministration/activities/MainActivity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package gr.aueb.se.labadministration.activities; | ||
|
||
import android.content.SharedPreferences; | ||
import android.os.Bundle; | ||
|
||
import androidx.appcompat.app.ActionBar; | ||
import androidx.appcompat.app.AppCompatActivity; | ||
import androidx.fragment.app.Fragment; | ||
import androidx.fragment.app.FragmentTransaction; | ||
|
||
import com.google.android.material.bottomnavigation.BottomNavigationView; | ||
|
||
import gr.aueb.se.labadministration.R; | ||
import gr.aueb.se.labadministration.fragments.ConfigurationFragment; | ||
import gr.aueb.se.labadministration.fragments.HistoryFragment; | ||
import gr.aueb.se.labadministration.fragments.LabFragment; | ||
|
||
/** | ||
* The main activity of the application, redirects to sign in activity | ||
*/ | ||
public class MainActivity extends AppCompatActivity { | ||
|
||
/** | ||
* The bottom navigation bar, in case of admin the nav_history and nav_configuration options appear | ||
*/ | ||
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener | ||
= item -> { | ||
switch (item.getItemId()) { | ||
case R.id.nav_history: | ||
switchFragment(new HistoryFragment()); | ||
break; | ||
case R.id.nav_labs: | ||
switchFragment(new LabFragment()); | ||
break; | ||
case R.id.nav_configuration: | ||
switchFragment(new ConfigurationFragment()); | ||
break; | ||
default: return false; | ||
} | ||
return true; | ||
}; | ||
|
||
/** | ||
* Fragment transaction method | ||
* @param fragment to switch to | ||
*/ | ||
public void switchFragment(Fragment fragment) { | ||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); | ||
transaction.replace(R.id.fragment_view, fragment); | ||
transaction.commit(); | ||
} | ||
|
||
/** | ||
* Default Android Methods | ||
*/ | ||
@Override | ||
protected void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | ||
setContentView(R.layout.activity_main); | ||
makeActionBar(); | ||
BottomNavigationView navView = findViewById(R.id.nav_view); | ||
navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); | ||
|
||
if (getIntent().getBooleanExtra("configurations", false)) { | ||
navView.setSelectedItemId(R.id.nav_configuration); | ||
switchFragment(new ConfigurationFragment()); | ||
} else { | ||
switchFragment(new LabFragment()); | ||
} | ||
|
||
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("user", MODE_PRIVATE); | ||
boolean administrator = sharedPreferences.getBoolean("administrator", false); | ||
|
||
navView.getMenu().findItem(R.id.nav_history).setVisible(administrator); | ||
navView.getMenu().findItem(R.id.nav_configuration).setVisible(administrator); | ||
} | ||
|
||
@Override | ||
public void onBackPressed() { | ||
getSupportFragmentManager().popBackStack(); | ||
} | ||
|
||
// makes the action bar. | ||
private void makeActionBar() { | ||
ActionBar actionBar = getSupportActionBar(); | ||
actionBar.setIcon(R.drawable.app_icon); | ||
actionBar.setDisplayUseLogoEnabled(true);// display app_icon. | ||
actionBar.setDisplayShowHomeEnabled(true);// display back button. | ||
} | ||
|
||
} |
Oops, something went wrong.