Migrated Login logic to Service

This commit is contained in:
Juan Miguel Boyero Corral 2015-05-09 21:24:50 +02:00
parent 95c11d527f
commit ac3851162c
52 changed files with 795 additions and 1971 deletions

View File

@ -137,6 +137,7 @@
<orderEntry type="library" exported="" name="kxml-2.2.4" level="project" />
<orderEntry type="library" exported="" name="play-services-appinvite-7.3.0" level="project" />
<orderEntry type="library" exported="" name="play-services-gcm-7.3.0" level="project" />
<orderEntry type="library" exported="" name="eventbus-2.4.0" level="project" />
<orderEntry type="library" exported="" name="play-services-nearby-7.3.0" level="project" />
<orderEntry type="library" exported="" name="ksoap2-j2se-3.4.0" level="project" />
<orderEntry type="library" exported="" name="support-v4-22.1.1" level="project" />

View File

@ -33,4 +33,5 @@ dependencies {
compile 'commons-io:commons-io:latest.release'
compile 'com.nostra13.universalimageloader:universal-image-loader:latest.release'
compile 'it.neokree:MaterialNavigationDrawer:latest.release'
compile 'de.greenrobot:eventbus:latest.release'
}

View File

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="es.ugr.swad.swadroid"
android:installLocation="auto"
android:versionCode="69"
android:versionName="1.2.4">
android:installLocation="auto" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -33,23 +31,23 @@
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true"></supports-screens>
android:xlargeScreens="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher_swadroid"
android:label="@string/app_name"
android:theme="@style/MockedAccountLight">
android:theme="@style/MockedAccountLight" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="es.ugr.swad.swadroid.LoginActivity"
android:name=".LoginActivity"
android:icon="@drawable/ic_launcher_swadroid"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light"
android:windowSoftInputMode="adjustResize|stateVisible">
android:windowSoftInputMode="adjustResize|stateVisible" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -57,50 +55,48 @@
</intent-filter>
</activity>
<activity
android:theme="@android:style/Theme.Holo.Light"
android:name="es.ugr.swad.swadroid.PreferencesActivity"
android:label="@string/set_preferences"></activity>
<activity android:name="es.ugr.swad.swadroid.modules.RecoverPassword"></activity>
android:name=".PreferencesActivity"
android:label="@string/set_preferences"
android:theme="@android:style/Theme.Holo.Light" />
<activity android:name=".modules.RecoverPassword" />
<activity
android:name="es.ugr.swad.swadroid.modules.Login"
android:label="@string/loginModuleLabel"></activity>
android:name=".modules.Login.OldLogin"
android:label="@string/loginModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.rollcall.Rollcall"
android:name=".modules.rollcall.Rollcall"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/rollcallModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name=".modules.rollcall.EventsDownload"
android:label="@string/rollcallModuleLabel"></activity>
android:label="@string/rollcallModuleLabel" />
<activity
android:name=".modules.rollcall.UsersActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/rollcallModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.modules.rollcall.Rollcall">
android:parentActivityName=".modules.rollcall.Rollcall" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.modules.rollcall.Rollcall" />
</activity>
<activity
android:name=".modules.rollcall.UsersDownload"
android:label="@string/rollcallModuleLabel"></activity>
android:label="@string/rollcallModuleLabel" />
<activity
android:name=".modules.rollcall.UsersSend"
android:label="@string/rollcallModuleLabel"></activity>
android:label="@string/rollcallModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.Groups"
android:label="@string/rollcallModuleLabel"></activity>
android:name=".modules.Groups"
android:label="@string/rollcallModuleLabel" />
<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
android:windowSoftInputMode="stateAlwaysHidden" >
<intent-filter>
<action android:name="es.ugr.swad.swadroid.android.SCAN" />
@ -108,146 +104,134 @@
</intent-filter>
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.Courses"
android:label="@string/coursesModuleLabel"></activity>
android:name=".modules.Courses"
android:label="@string/coursesModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.notifications.Notifications"
android:name=".modules.notifications.Notifications"
android:label="@string/notificationsModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.notifications.NotificationItem"
android:name=".modules.notifications.NotificationItem"
android:label="@string/notificationsModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.modules.notifications.Notifications">
android:parentActivityName=".modules.notifications.Notifications" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.modules.notifications.Notifications" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.tests.Tests"
android:name=".modules.tests.Tests"
android:label="@string/testsModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.tests.TestsQuestionsDownload"
android:label="@string/testsModuleLabel"></activity>
android:name=".modules.tests.TestsQuestionsDownload"
android:label="@string/testsModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.tests.TestsConfigDownload"
android:label="@string/testsModuleLabel"></activity>
android:name=".modules.tests.TestsConfigDownload"
android:label="@string/testsModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.tests.TestsMake"
android:name=".modules.tests.TestsMake"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/testsModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.modules.tests.Tests">
android:parentActivityName=".modules.tests.Tests" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.modules.tests.Tests" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.messages.Messages"
android:name=".modules.messages.Messages"
android:configChanges="orientation|screenSize"
android:label="@string/messagesModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.messages.FilterUsersList"
android:name=".modules.messages.FilterUsersList"
android:configChanges="orientation|screenSize"
android:label="@string/filterUsersListModuleLabel"></activity>
android:label="@string/filterUsersListModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.messages.UsersList"
android:name=".modules.messages.UsersList"
android:configChanges="orientation|screenSize"
android:label="@string/messagesModuleLabel"></activity>
android:label="@string/messagesModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.Notices"
android:name=".modules.Notices"
android:label="@string/noticesModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity android:name="es.ugr.swad.swadroid.sync.AccountAuthenticator"></activity>
<activity android:name=".sync.AccountAuthenticator" />
<activity
android:name="es.ugr.swad.swadroid.modules.downloads.DirectoryTreeDownload"
android:label="@string/documentsDownloadModuleLabel"></activity>
android:name=".modules.downloads.DirectoryTreeDownload"
android:label="@string/documentsDownloadModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.downloads.GetFile"
android:label="@string/documentsDownloadModuleLabel"></activity>
android:name=".modules.downloads.GetFile"
android:label="@string/documentsDownloadModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.downloads.DownloadsManager"
android:name=".modules.downloads.DownloadsManager"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/documentsDownloadModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.groups.MyGroupsManager"
android:name=".modules.groups.MyGroupsManager"
android:label="@string/myGroupsModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.GroupTypes"
android:label="@string/groupTypesModuleLabel"></activity>
android:name=".modules.GroupTypes"
android:label="@string/groupTypesModuleLabel" />
<activity
android:name="es.ugr.swad.swadroid.modules.groups.SendMyGroups"
android:label="@string/sendMyGroupsProgressTitle"></activity>
android:name=".modules.groups.SendMyGroups"
android:label="@string/sendMyGroupsProgressTitle" />
<activity
android:name="es.ugr.swad.swadroid.modules.GenerateQR"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:name=".modules.GenerateQR"
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.information.Information"
android:name=".modules.information.Information"
android:configChanges="orientation|screenSize"
android:label="@string/informationModuleLabel"
android:parentActivityName="es.ugr.swad.swadroid.SWADMain">
android:parentActivityName=".SWADMain" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="es.ugr.swad.swadroid.SWADMain" />
</activity>
<activity
android:name="es.ugr.swad.swadroid.modules.notifications.NotificationsMarkAllAsRead"
android:label="@string/notificationsMarkAllAsReadModuleLabel"></activity>
android:name=".modules.notifications.NotificationsMarkAllAsRead"
android:label="@string/notificationsMarkAllAsReadModuleLabel" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"></activity>
android:label="@string/app_name" />
<provider
android:name="es.ugr.swad.swadroid.sync.DummyProvider"
android:name=".sync.DummyProvider"
android:authorities="es.ugr.swad.swadroid.content"
android:label="SWADroid"
android:syncable="true" />
<service
android:name="es.ugr.swad.swadroid.sync.AccountAuthenticatorService"
android:exported="true">
android:name=".sync.AccountAuthenticatorService"
android:exported="false" >
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
@ -257,8 +241,8 @@
android:resource="@xml/authenticator" />
</service>
<service
android:name="es.ugr.swad.swadroid.modules.notifications.NotificationsSyncAdapterService"
android:exported="true">
android:name=".modules.notifications.NotificationsSyncAdapterService"
android:exported="false" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
@ -267,6 +251,10 @@
android:name="android.content.SyncAdapter"
android:resource="@xml/sync_notifications" />
</service>
<service
android:name=".modules.Login.LoginService"
android:exported="false" >
</service>
</application>
</manifest>
</manifest>

View File

@ -15,8 +15,6 @@
package es.ugr.swad.swadroid;
import org.xmlpull.v1.XmlPullParserException;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
@ -39,12 +37,18 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import de.greenrobot.event.EventBus;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.gui.DialogFactory;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.model.Login;
import es.ugr.swad.swadroid.modules.Login.LoginEvent;
import es.ugr.swad.swadroid.modules.Login.LoginService;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.RecoverPassword;
import es.ugr.swad.swadroid.utils.Crypto;
import es.ugr.swad.swadroid.utils.Utils;
@ -101,6 +105,46 @@ public class LoginActivity extends Activity implements OnClickListener {
}
}
@Override
public void onStart() {
super.onStart();
//Register to start receiving responses from Login Service
EventBus.getDefault().register(this);
Log.i(TAG, "Registered EventBus for LoginService");
}
@Override
public void onStop() {
//Unregister to stop receiving responses from Login Service
EventBus.getDefault().unregister(this);
Log.i(TAG, "Unregistered EventBus for LoginService");
super.onStop();
}
// This method will be called when a response form Login Service is received
public void onEvent(LoginEvent event){
Log.i(TAG, "Received response from LoginService: " + event.toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
showProgress(false);
}
});
if(event.isLogged()) {
Login.setLogged(true);
mFromPreferece = false;
mLoginError = false;
startActivity(new Intent(this, MainActivity.class));
finish();
} else {
mLoginError = true;
}
}
private void setupLoginForm() {
mLoginFormView = findViewById(R.id.login_form);
@ -226,7 +270,10 @@ public class LoginActivity extends Activity implements OnClickListener {
//error(TAG, e.getMessage(), e, true);
}
showProgress(true);
startActivityForResult(new Intent(this, Login.class), Constants.LOGIN_REQUEST_CODE);
//startActivityForResult(new Intent(this, OldLogin.class), Constants.LOGIN_REQUEST_CODE);
//Call Login Service
startService(new Intent(this, LoginService.class));
}
}
@ -236,7 +283,7 @@ public class LoginActivity extends Activity implements OnClickListener {
switch (requestCode) {
case Constants.LOGIN_REQUEST_CODE:
showProgress(false);
Login.setLogged(true);
OldLogin.setLogged(true);
setResult(RESULT_OK);
mFromPreferece = false;
mLoginError = false;

View File

@ -29,7 +29,7 @@ import android.util.Log;
import java.security.NoSuchAlgorithmException;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.sync.SyncUtils;
import es.ugr.swad.swadroid.utils.Crypto;
@ -499,7 +499,7 @@ public class Preferences {
}
public static void logoutClean(Context context, String key) {
Login.setLogged(false);
OldLogin.setLogged(false);
Log.i(TAG, "Forced logout due to " + key + " change in preferences");
cleanDatabase();

View File

@ -43,7 +43,7 @@ import java.util.List;
import es.ugr.swad.swadroid.gui.DialogFactory;
import es.ugr.swad.swadroid.gui.widget.SeekBarDialogPreference;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.sync.SyncUtils;
import es.ugr.swad.swadroid.utils.Crypto;
import es.ugr.swad.swadroid.utils.Utils;
@ -247,7 +247,7 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
Preferences.logoutClean(ctx, Preferences.LOGOUTPREF);
Preferences.setUserID("");
Preferences.setUserPassword("");
Login.setLogged(false);
OldLogin.setLogged(false);
startActivity(new Intent(getBaseContext(), LoginActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
@ -380,7 +380,7 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
userPasswordPrefChanged = true;
syncPrefsChanged = true;
Preferences.setPreferencesChanged();
Login.setLogged(false);
OldLogin.setLogged(false);
} else {
Toast.makeText(getApplicationContext(), R.string.pradoLoginToast,
Toast.LENGTH_LONG).show();

View File

@ -60,7 +60,7 @@ import es.ugr.swad.swadroid.model.Course;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.GenerateQR;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Notices;
import es.ugr.swad.swadroid.modules.downloads.DownloadsManager;
import es.ugr.swad.swadroid.modules.groups.MyGroupsManager;
@ -252,12 +252,12 @@ public class SWADMain extends MenuExpandableListActivity {
Courses.setSelectedCourseCode(c.getId());
Courses.setSelectedCourseShortName(c.getShortName());
Courses.setSelectedCourseFullName(c.getFullName());
Login.setCurrentUserRole(c.getUserRole());
OldLogin.setCurrentUserRole(c.getUserRole());
} else {
Courses.setSelectedCourseCode(-1);
Courses.setSelectedCourseShortName("");
Courses.setSelectedCourseFullName("");
Login.setCurrentUserRole(-1);
OldLogin.setCurrentUserRole(-1);
}
currentRole = -1;
} catch (Exception ex) {
@ -290,10 +290,10 @@ public class SWADMain extends MenuExpandableListActivity {
}
//If today is the user birthday, show birthday message
if ((Login.getLoggedUser() != null)
&& DateTimeUtils.isBirthday(Login.getLoggedUser().getUserBirthday())) {
if ((OldLogin.getLoggedUser() != null)
&& DateTimeUtils.isBirthday(OldLogin.getLoggedUser().getUserBirthday())) {
mBirthdayTextView.setText(getString(R.string.birthdayMsg).replace(
Constants.USERNAME_TEMPLATE, Login.getLoggedUser().getUserFirstname()));
Constants.USERNAME_TEMPLATE, OldLogin.getLoggedUser().getUserFirstname()));
mBirthdayLayout.setVisibility(View.VISIBLE);
} else {
mBirthdayLayout.setVisibility(View.GONE);
@ -322,7 +322,7 @@ public class SWADMain extends MenuExpandableListActivity {
Courses.setSelectedCourseShortName("");
Courses.setSelectedCourseFullName("");
Login.setCurrentUserRole(-1);
OldLogin.setCurrentUserRole(-1);
}
/**
@ -458,14 +458,14 @@ public class SWADMain extends MenuExpandableListActivity {
Courses.setSelectedCourseCode(courseSelected.getId());
Courses.setSelectedCourseShortName(courseSelected.getShortName());
Courses.setSelectedCourseFullName(courseSelected.getFullName());
Login.setCurrentUserRole(courseSelected.getUserRole());
OldLogin.setCurrentUserRole(courseSelected.getUserRole());
Preferences.setLastCourseSelected(lastSelected);
} else {
courseSelected = (Course) listCourses.get(0);
Courses.setSelectedCourseCode(courseSelected.getId());
Courses.setSelectedCourseShortName(courseSelected.getShortName());
Courses.setSelectedCourseFullName(courseSelected.getFullName());
Login.setCurrentUserRole(courseSelected.getUserRole());
OldLogin.setCurrentUserRole(courseSelected.getUserRole());
Preferences.setLastCourseSelected(0);
}
}
@ -694,7 +694,7 @@ public class SWADMain extends MenuExpandableListActivity {
Courses.setSelectedCourseCode(-1);
Courses.setSelectedCourseShortName("");
Courses.setSelectedCourseFullName("");
Login.setCurrentUserRole(-1);
OldLogin.setCurrentUserRole(-1);
Preferences.setLastCourseSelected(-1);
dBCleaned = true;
listCourses.clear();
@ -899,7 +899,7 @@ public class SWADMain extends MenuExpandableListActivity {
Courses.setSelectedCourseCode(courseCode);
Courses.setSelectedCourseShortName(courseSelected.getShortName());
Courses.setSelectedCourseFullName(courseSelected.getFullName());
Login.setCurrentUserRole(courseSelected.getUserRole());
OldLogin.setCurrentUserRole(courseSelected.getUserRole());
createMenu();
}
}

View File

@ -0,0 +1,65 @@
package es.ugr.swad.swadroid.model;
/**
* Class for store login info
*
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
public class Login {
/**
* Time to force relogin
*/
public static final int RELOGIN_TIME = 86400000; //24h
/**
* User logged flag
*/
private static boolean logged;
/**
* Logged user
*/
private static User loggedUser;
/**
* Time of application's last login
*/
private static long lastLoginTime;
/**
* Role of the logged User in the current selected course
*/
private static int currentUserRole = -1;
public static boolean isLogged() {
return logged;
}
public static void setLogged(boolean logged) {
Login.logged = logged;
}
public static User getLoggedUser() {
return loggedUser;
}
public static void setLoggedUser(User loggedUser) {
Login.loggedUser = loggedUser;
}
public static long getLastLoginTime() {
return lastLoginTime;
}
public static void setLastLoginTime(long lastLoginTime) {
Login.lastLoginTime = lastLoginTime;
}
public static int getCurrentUserRole() {
return currentUserRole;
}
public static void setCurrentUserRole(int currentUserRole) {
Login.currentUserRole = currentUserRole;
}
}

View File

@ -36,6 +36,7 @@ import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.Course;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.webservices.SOAPClient;
/**
@ -165,7 +166,7 @@ public class Courses extends Module {
//Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
sendRequest(Course.class, false);
if (result != null) {

View File

@ -14,6 +14,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.gui.MenuActivity;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.utils.QR;
public class GenerateQR extends MenuActivity {
@ -48,8 +49,8 @@ public class GenerateQR extends MenuActivity {
SWADroidTracker.sendScreenView(getApplicationContext(), TAG);
if (!Login.isLogged() || (Login.getLoggedUser() == null)) {
Intent activity = new Intent(getApplicationContext(), Login.class);
if (!OldLogin.isLogged() || (OldLogin.getLoggedUser() == null)) {
Intent activity = new Intent(getApplicationContext(), OldLogin.class);
startActivityForResult(activity, Constants.LOGIN_REQUEST_CODE);
} else {
generateQR();
@ -62,11 +63,11 @@ public class GenerateQR extends MenuActivity {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case Constants.LOGIN_REQUEST_CODE:
if ((Login.getLoggedUser() != null) && !Login.getLoggedUser().getUserNickname()
if ((OldLogin.getLoggedUser() != null) && !OldLogin.getLoggedUser().getUserNickname()
.equals(Constants.NULL_VALUE)) {
generateQR();
} else {
Login.setLogged(false);
OldLogin.setLogged(false);
Toast.makeText(getApplicationContext(), R.string.errorNoUserNickname,
Toast.LENGTH_LONG).show();
@ -86,7 +87,7 @@ public class GenerateQR extends MenuActivity {
private void generateQR() {
try {
ImageView qr_image = (ImageView) findViewById(R.id.qr_code_image);
Bitmap qrCode = QR.encode(this, "@" + Login.getLoggedUser().getUserNickname());
Bitmap qrCode = QR.encode(this, "@" + OldLogin.getLoggedUser().getUserNickname());
qr_image.setImageBitmap(qrCode);
} catch (WriterException e) {
error(TAG, e.getMessage(), e, true);

View File

@ -17,6 +17,7 @@ import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.GroupType;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.webservices.SOAPClient;
/**
@ -79,7 +80,7 @@ public class GroupTypes extends Module {
@Override
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) Courses.getSelectedCourseCode());
sendRequest(GroupTypes.class, false);

View File

@ -35,6 +35,7 @@ import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.Group;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.webservices.SOAPClient;
/**
@ -117,7 +118,7 @@ public class Groups extends Module {
@Override
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) courseCode);
sendRequest(Group.class, false);

View File

@ -0,0 +1,29 @@
package es.ugr.swad.swadroid.modules.Login;
/**
* Class for create responses by Login Service
*
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
public class LoginEvent {
boolean isLogged;
public LoginEvent(boolean isLogged) {
this.isLogged = isLogged;
}
public boolean isLogged() {
return isLogged;
}
public void setIsLogged(boolean isLogged) {
this.isLogged = isLogged;
}
@Override
public String toString() {
return "LoginEvent{" +
"isLogged=" + isLogged +
'}';
}
}

View File

@ -0,0 +1,143 @@
package es.ugr.swad.swadroid.modules.Login;
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
import org.ksoap2.serialization.SoapObject;
import de.greenrobot.event.EventBus;
import es.ugr.swad.swadroid.Config;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.model.Login;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.services.AbstractIntentService;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
/**
* Login {@link IntentService} for connect to SWAD.
* <p/>
*/
public class LoginService extends AbstractIntentService {
/**
* Login tag name for Logcat
*/
public static final String TAG = Constants.APP_TAG + " LoginService";
@Override
public void onCreate() {
super.onCreate();
webserviceClient = new SOAPClient();
webserviceClient.setMETHOD_NAME("loginByUserPasswordKey");
}
@Override
protected void getParams(Intent intent) {
}
@Override
protected void requestService()
throws Exception {
//If last login time > RELOGIN_TIME, force login
if (System.currentTimeMillis() - Login.getLastLoginTime() > Login.RELOGIN_TIME) {
Log.i(TAG, "last login time > RELOGIN_TIME, loggin off...");
Login.setLogged(false);
}
//If the application isn't logged, force login
if (!Login.isLogged()) {
Log.i(TAG, "Not logged, forcing login...");
String userID = Preferences.getUserID();
//If the user ID is a DNI
if (Utils.isValidDni(userID)) {
//If the DNI has no letter, remove left zeros
if (Utils.isInteger(userID)) {
userID = String.valueOf(Integer.parseInt(userID));
//If the last position of the DNI is a char, remove it
} else if (Utils.isInteger(userID.substring(0, userID.length() - 1))) {
userID = String
.valueOf(Integer.parseInt(userID.substring(0, userID.length() - 1)));
}
}
//Creates webservice request, adds required params and sends request to webservice
webserviceClient.createRequest();
webserviceClient.addParam("userID", userID);
webserviceClient.addParam( "userPassword", Preferences.getUserPassword());
webserviceClient.addParam( "appKey", Config.SWAD_APP_KEY);
((SOAPClient) webserviceClient).sendRequest(User.class, true);
result = webserviceClient.getResult();
if (result != null) {
SoapObject soap = (SoapObject) result;
//Stores user data returned by webservice response
User user = new User(
Long.parseLong(soap.getProperty("userCode").toString()), // userCode
soap.getProperty("wsKey").toString(), // wsKey
soap.getProperty("userID").toString(), // userID
soap.getProperty("userNickname").toString(),
// userNickname
soap.getProperty("userSurname1").toString(),
// userSurname1
soap.getProperty("userSurname2").toString(),
// userSurname2
soap.getProperty("userFirstname").toString(),
// userFirstname
soap.getProperty("userPhoto").toString(), // photoPath
soap.getProperty("userBirthday").toString(),
// userBirthday
Integer.parseInt(soap.getProperty("userRole").toString()) // userRole
);
Login.setLogged(true);
Login.setLoggedUser(user);
//Update application last login time
Login.setLastLoginTime(System.currentTimeMillis());
if (isDebuggable) {
Log.d(TAG, "id=" + user.getId());
Log.d(TAG, "wsKey=" + user.getWsKey());
Log.d(TAG, "userID=" + user.getUserID());
Log.d(TAG, "userNickname=" + user.getUserNickname());
Log.d(TAG, "userSurname1=" + user.getUserSurname1());
Log.d(TAG, "userSurname2=" + user.getUserSurname2());
Log.d(TAG, "userFirstName=" + user.getUserFirstname());
Log.d(TAG, "userPhoto=" + user.getUserPhoto());
Log.d(TAG, "userBirthday=" + ((user.getUserBirthday() != null) ? user
.getUserBirthday().getTime() : "null"));
Log.d(TAG, "userRole=" + user.getUserRole());
Log.d(TAG, "isLogged=" + Login.isLogged());
Log.d(TAG, "lastLoginTime=" + Login.getLastLoginTime());
}
} else {
Log.e(TAG, "Error logging user (result=null)");
onError();
}
}
}
@Override
protected void returnResult() {
EventBus.getDefault().post(new LoginEvent(Login.isLogged()));
}
@Override
protected void onError() {
super.onError();
// Force logout and reset password (this will show again
// the login screen)
Log.e(TAG, "loggin off user...");
Login.setLogged(false);
Preferences.setUserPassword("");
}
}

View File

@ -17,7 +17,7 @@
* along with SWADroid. If not, see <http://www.gnu.org/licenses/>.
*/
package es.ugr.swad.swadroid.modules;
package es.ugr.swad.swadroid.modules.Login;
import android.os.Bundle;
import android.util.Log;
@ -28,6 +28,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -37,7 +38,7 @@ import es.ugr.swad.swadroid.webservices.SOAPClient;
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
* @author Antonio Aguilera Malagon <aguilerin@gmail.com>
*/
public class Login extends Module {
public class OldLogin extends Module {
/**
* Time to force relogin
@ -84,7 +85,7 @@ public class Login extends Module {
* @param logged User logged flag
*/
public static void setLogged(boolean logged) {
Login.logged = logged;
OldLogin.logged = logged;
}
/**
@ -98,7 +99,7 @@ public class Login extends Module {
* Sets the user logged on SWAD
*/
public static void setLoggedUser(User loggedUser) {
Login.loggedUser = loggedUser;
OldLogin.loggedUser = loggedUser;
}
/**
@ -116,7 +117,7 @@ public class Login extends Module {
* @param l Start time of application
*/
public static void setLastLoginTime(long l) {
Login.lastLoginTime = l;
OldLogin.lastLoginTime = l;
}
/**
@ -183,12 +184,12 @@ public class Login extends Module {
throws Exception {
//If last login time > Global.RELOGIN_TIME, force login
if (System.currentTimeMillis() - Login.getLastLoginTime() > Login.RELOGIN_TIME) {
Login.setLogged(false);
if (System.currentTimeMillis() - OldLogin.getLastLoginTime() > OldLogin.RELOGIN_TIME) {
OldLogin.setLogged(false);
}
//If the application isn't logged, force login
if (!Login.isLogged()) {
if (!OldLogin.isLogged()) {
String userID = Preferences.getUserID();
//If the user ID is a DNI
@ -233,11 +234,11 @@ public class Login extends Module {
Integer.parseInt(soap.getProperty("userRole").toString()) // userRole
);
Login.setLogged(true);
Login.setLoggedUser(user);
OldLogin.setLogged(true);
OldLogin.setLoggedUser(user);
//Update application last login time
Login.setLastLoginTime(System.currentTimeMillis());
OldLogin.setLastLoginTime(System.currentTimeMillis());
if (isDebuggable) {
Log.d(TAG, "id=" + user.getId());
@ -251,8 +252,8 @@ public class Login extends Module {
Log.d(TAG, "userBirthday=" + ((user.getUserBirthday() != null) ? user
.getUserBirthday().getTime() : "null"));
Log.d(TAG, "userRole=" + user.getUserRole());
Log.d(TAG, "isLogged=" + Login.isLogged());
Log.d(TAG, "lastLoginTime=" + Login.getLastLoginTime());
Log.d(TAG, "isLogged=" + OldLogin.isLogged());
Log.d(TAG, "lastLoginTime=" + OldLogin.getLastLoginTime());
}
}
}

View File

@ -19,13 +19,6 @@
package es.ugr.swad.swadroid.modules;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapFault;
import org.ksoap2.transport.HttpResponseException;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
@ -37,6 +30,13 @@ import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapFault;
import org.ksoap2.transport.HttpResponseException;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.net.SocketTimeoutException;
@ -49,6 +49,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.gui.MenuActivity;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
import es.ugr.swad.swadroid.webservices.RESTClient;
@ -137,8 +138,8 @@ public abstract class Module extends MenuActivity {
Toast.LENGTH_SHORT).show();
} else {
// If this is not the Login module, launch login check
if (!(this instanceof Login)) {
Intent loginActivity = new Intent(this, Login.class);
if (!(this instanceof OldLogin)) {
Intent loginActivity = new Intent(this, OldLogin.class);
startActivityForResult(loginActivity,
Constants.LOGIN_REQUEST_CODE);
}
@ -236,7 +237,7 @@ public abstract class Module extends MenuActivity {
* getString(R.string.loginSuccessfulMsg));
*/
if (!(this instanceof Login)) {
if (!(this instanceof OldLogin)) {
connect();
}
@ -429,7 +430,7 @@ public abstract class Module extends MenuActivity {
// Force logout and reset password (this will show again
// the login screen)
Login.setLogged(false);
OldLogin.setLogged(false);
Preferences.setUserPassword("");
} else if (es.faultstring.equals("Unknown application key")) {
errorMsg = getString(R.string.errorBadAppKeyMsg);

View File

@ -36,6 +36,7 @@ import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.gui.DialogFactory;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.webservices.SOAPClient;
/**
@ -137,7 +138,7 @@ public class Notices extends Module {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) selectedCourseCode);
addParam("body", body);

View File

@ -27,7 +27,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -47,7 +47,7 @@ public class DirectoryTreeDownload extends Module {
@Override
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) Courses.getSelectedCourseCode());
addParam("groupCode", group);
addParam("treeCode", treeCode);

View File

@ -31,7 +31,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.model.Group;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -98,7 +98,7 @@ public class GetFile extends Module {
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("fileCode", (int) fileCode);
sendRequest(Group.class, false);

View File

@ -45,7 +45,7 @@ import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.GroupTypes;
import es.ugr.swad.swadroid.modules.Groups;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
/**
* Activity to manage the enrollments into groups. It is responsible for maintain the UI and send
@ -262,7 +262,7 @@ public class MyGroupsManager extends MenuExpandableListActivity {
groupTypes = (ArrayList<Model>) dbHelper.getAllRows(DataBaseHelper.DB_TABLE_GROUP_TYPES,
"courseCode =" + String.valueOf(courseCode), "groupTypeName");
LongSparseArray<ArrayList<Group>> children = getHashMapGroups(groupTypes);
int currentRole = Login.getCurrentUserRole();
int currentRole = OldLogin.getCurrentUserRole();
EnrollmentExpandableListAdapter adapter = new EnrollmentExpandableListAdapter(this,
groupTypes, children, R.layout.group_type_list_item, R.layout.group_list_item,
currentRole);

View File

@ -33,7 +33,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.model.Group;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -116,7 +116,7 @@ public class SendMyGroups extends Module {
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) courseCode);
addParam("myGroups", myGroups);
sendRequest(Group.class, false);

View File

@ -18,7 +18,7 @@ import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -167,7 +167,7 @@ public class Information extends Module {
@Override
protected void requestService() throws Exception {
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", Courses.getSelectedCourseCode());
addParam("infoType", infoTypeToAdd);
sendRequest(User.class, true);

View File

@ -37,7 +37,7 @@ import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -174,7 +174,7 @@ public class Messages extends Module {
addFootBody();
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("messageCode", eventCode.intValue());
addParam("to", receivers);
addParam("subject", subject);

View File

@ -56,7 +56,7 @@ import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.gui.AlertNotificationFactory;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.model.SWADNotification;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.sync.SyncUtils;
import es.ugr.swad.swadroid.utils.DateTimeUtils;
@ -221,10 +221,10 @@ public class Notifications extends Module implements
hideSwipeProgress();
//If today is the user birthday, show birthday message
if ((Login.getLoggedUser() != null)
&& DateTimeUtils.isBirthday(Login.getLoggedUser().getUserBirthday())) {
if ((OldLogin.getLoggedUser() != null)
&& DateTimeUtils.isBirthday(OldLogin.getLoggedUser().getUserBirthday())) {
mBirthdayTextView.setText(getString(R.string.birthdayMsg).replace(
Constants.USERNAME_TEMPLATE, Login.getLoggedUser().getUserFirstname()));
Constants.USERNAME_TEMPLATE, OldLogin.getLoggedUser().getUserFirstname()));
mBirthdayLayout.setVisibility(View.VISIBLE);
} else {
mBirthdayLayout.setVisibility(View.GONE);
@ -427,7 +427,7 @@ public class Notifications extends Module implements
// Creates webservice request, adds required params and sends
// request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("beginTime", timestamp);
sendRequest(SWADNotification.class, false);

View File

@ -26,7 +26,7 @@ import android.util.Log;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -81,7 +81,7 @@ public class NotificationsMarkAllAsRead extends Module {
//Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("notifications", seenNotifCodes);
sendRequest(Integer.class, false);

View File

@ -59,7 +59,7 @@ import es.ugr.swad.swadroid.gui.AlertNotificationFactory;
import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.model.SWADNotification;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.ssl.SecureConnection;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
@ -182,11 +182,11 @@ public class NotificationsSyncAdapterService extends Service {
Integer.parseInt(soap.getProperty("userRole").toString()) // userRole
);
Login.setLoggedUser(loggedUser);
Login.setLogged(true);
OldLogin.setLoggedUser(loggedUser);
OldLogin.setLogged(true);
//Update application last login time
Login.setLastLoginTime(System.currentTimeMillis());
OldLogin.setLastLoginTime(System.currentTimeMillis());
}
}
@ -201,7 +201,7 @@ public class NotificationsSyncAdapterService extends Service {
METHOD_NAME = "getNotifications";
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("beginTime", timestamp);
sendRequest(SWADNotification.class, false);
@ -317,17 +317,17 @@ public class NotificationsSyncAdapterService extends Service {
}
//If last login time > Global.RELOGIN_TIME, force login
if (Login.isLogged() &&
((System.currentTimeMillis() - Login.getLastLoginTime()) > Login.RELOGIN_TIME)) {
if (OldLogin.isLogged() &&
((System.currentTimeMillis() - OldLogin.getLastLoginTime()) > OldLogin.RELOGIN_TIME)) {
Login.setLogged(false);
OldLogin.setLogged(false);
}
if (!Login.isLogged()) {
if (!OldLogin.isLogged()) {
logUser();
}
if (Login.isLogged()) {
if (OldLogin.isLogged()) {
getNotifications();
if (notifCount > 0) {
@ -460,7 +460,7 @@ public class NotificationsSyncAdapterService extends Service {
sendException = false;
//Force logout and reset password (this will show again the login screen)
Login.setLogged(false);
OldLogin.setLogged(false);
Preferences.setUserPassword("");
} else if (es.faultstring.equals("Unknown application key")) {
errorMessage = mContext.getString(R.string.errorBadAppKeyMsg);

View File

@ -34,7 +34,7 @@ import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.Event;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -93,7 +93,7 @@ public class EventsDownload extends Module {
// Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) courseCode);
sendRequest(Event.class, false);

View File

@ -35,7 +35,7 @@ import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.model.UserAttendance;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -91,7 +91,7 @@ public class UsersDownload extends Module {
protected void requestService() throws Exception {
// Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("attendanceEventCode", eventCode);
sendRequest(UserAttendance.class, false);

View File

@ -30,7 +30,7 @@ import android.widget.Toast;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -105,7 +105,7 @@ public class UsersSend extends Module {
protected void requestService() throws Exception {
// Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("attendanceEventCode", String.valueOf(eventCode));
addParam("users", usersCodes);
addParam("setOthersAsAbsent", String.valueOf(setOthersAsAbsent));

View File

@ -30,7 +30,7 @@ import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.Test;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -102,7 +102,7 @@ public class TestsConfigDownload extends Module {
//Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) Courses.getSelectedCourseCode());
sendRequest(Test.class, true);

View File

@ -38,7 +38,7 @@ import es.ugr.swad.swadroid.model.TestAnswer;
import es.ugr.swad.swadroid.model.TestQuestion;
import es.ugr.swad.swadroid.model.TestTag;
import es.ugr.swad.swadroid.modules.Courses;
import es.ugr.swad.swadroid.modules.Login;
import es.ugr.swad.swadroid.modules.Login.OldLogin;
import es.ugr.swad.swadroid.modules.Module;
import es.ugr.swad.swadroid.utils.DateTimeUtils;
import es.ugr.swad.swadroid.utils.Utils;
@ -92,7 +92,7 @@ public class TestsQuestionsDownload extends Module {
//Creates webservice request, adds required params and sends request to webservice
createRequest(SOAPClient.CLIENT_TYPE);
addParam("wsKey", Login.getLoggedUser().getWsKey());
addParam("wsKey", OldLogin.getLoggedUser().getWsKey());
addParam("courseCode", (int) Courses.getSelectedCourseCode());
addParam("beginTime", timestamp);
sendRequest(Test.class, false);

View File

@ -0,0 +1,106 @@
package es.ugr.swad.swadroid.services;
import android.app.IntentService;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.util.Log;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
/**
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
*/
public abstract class AbstractIntentService extends IntentService {
/**
* Tag name for Logcat
*/
public static final String TAG = Constants.APP_TAG + " AbstractIntentService";
/**
* Client for SWAD webservices
*/
protected IWebserviceClient webserviceClient;
/**
* Webservice result.
*/
protected Object result;
/**
* Application debuggable flag
*/
protected static boolean isDebuggable;
/**
* Database Helper.
*/
protected static DataBaseHelper dbHelper;
/**
* Application preferences
*/
protected static Preferences prefs;
public AbstractIntentService() {
super("AbstractIntentService");
}
@Override
public void onCreate() {
super.onCreate();
try {
//Initialize preferences
prefs = new Preferences(this);
//Initialize database
dbHelper = new DataBaseHelper(this);
getPackageManager().getApplicationInfo(
getPackageName(), 0);
isDebuggable = (ApplicationInfo.FLAG_DEBUGGABLE != 0);
} catch (Exception e) {
Utils.error(this, TAG, e.getMessage(), e, true, isDebuggable);
}
}
/**
* Gets service parameters from intent
* @param intent Intent containing service parameters
*/
protected abstract void getParams(Intent intent);
/**
* Connects to SWAD and gets user data.
*/
protected abstract void requestService() throws Exception;
/**
* Returns result of service to caller
*/
protected abstract void returnResult();
protected void onError() {
// Launch database rollback
if (dbHelper.isDbInTransaction()) {
Log.e(TAG, "Stopping pending database transaction");
dbHelper.endTransaction(false);
}
}
@Override
protected void onHandleIntent(Intent intent) {
try {
getParams(intent);
requestService();
} catch (Exception e) {
onError();
Utils.error(this, TAG, e.getMessage(), e, true, isDebuggable);
}
returnResult();
}
}

View File

@ -0,0 +1,107 @@
package es.ugr.swad.swadroid.services;
import android.app.Service;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.util.Log;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
/**
* A {@link Service} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
*/
public abstract class AbstractService extends Service {
/**
* Tag name for Logcat
*/
public static final String TAG = Constants.APP_TAG + " AbstractService";
/**
* Application debuggable flag
*/
protected static boolean isDebuggable;
/**
* Database Helper.
*/
protected static DataBaseHelper dbHelper;
/**
* Application preferences
*/
protected static Preferences prefs;
/**
* Client for SWAD webservices
*/
protected IWebserviceClient webserviceClient;
/**
* Webservice result.
*/
protected Object result;
public AbstractService() {
}
@Override
public void onCreate() {
super.onCreate();
try {
//Initialize preferences
prefs = new Preferences(this);
//Initialize database
dbHelper = new DataBaseHelper(this);
getPackageManager().getApplicationInfo(
getPackageName(), 0);
isDebuggable = (ApplicationInfo.FLAG_DEBUGGABLE != 0);
} catch (Exception e) {
Utils.error(this, TAG, e.getMessage(), e, true, isDebuggable);
}
}
/**
* Gets service parameters from intent
* @param intent Intent containing service parameters
*/
protected abstract void getParams(Intent intent);
/**
* Connects to SWAD and gets user data.
*/
protected abstract void requestService() throws Exception;
/**
* Returns result of service to caller
*/
protected abstract void returnResult();
protected void onError() {
// Launch database rollback
if (dbHelper.isDbInTransaction()) {
Log.e(TAG, "Stopping pending database transaction");
dbHelper.endTransaction(false);
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
getParams(intent);
requestService();
} catch (Exception e) {
onError();
Utils.error(this, TAG, e.getMessage(), e, true, isDebuggable);
}
returnResult();
return super.onStartCommand(intent, flags, startId);
}
}

View File

@ -22,6 +22,7 @@ package es.ugr.swad.swadroid.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import java.text.Normalizer;
import java.util.Iterator;
@ -30,6 +31,7 @@ import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import es.ugr.swad.swadroid.SWADroidTracker;
import es.ugr.swad.swadroid.model.Model;
/**
@ -239,4 +241,14 @@ public class Utils {
return pattern.matcher(temp).replaceAll("");
}
public static void error(Context context, String tag, String errorMsg, Exception ex,
boolean sendException, boolean isDebuggable) {
Log.e(tag, ex.getMessage(), ex);
// Send exception details to Google Analytics
if (!isDebuggable && sendException) {
SWADroidTracker.sendException(context, ex, false);
}
}
}

View File

@ -25,11 +25,11 @@ package es.ugr.swad.swadroid.webservices;
*/
public interface IWebserviceClient {
public void createRequest();
void createRequest();
public void addParam(String param, Object value);
void addParam(String param, Object value);
public void setMETHOD_NAME(String METHOD_NAME);
void setMETHOD_NAME(String METHOD_NAME);
public Object getResult();
Object getResult();
}

View File

@ -18,17 +18,28 @@
*/
package es.ugr.swad.swadroid.webservices;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.util.Log;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpResponseException;
import org.ksoap2.transport.KeepAliveHttpsTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.content.pm.ApplicationInfo;
import android.util.Log;
import java.net.SocketTimeoutException;
import java.security.cert.CertificateException;
import java.util.concurrent.TimeoutException;
import javax.net.ssl.SSLException;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.Preferences;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.utils.Utils;
/**
* SOAP client for SWAD webservices
@ -87,6 +98,11 @@ public class SOAPClient implements IWebserviceClient {
*/
private Object result;
/**
* Context of caller
*/
private Context context;
/**
* Default constructor
*/
@ -103,13 +119,15 @@ public class SOAPClient implements IWebserviceClient {
* @param SOAP_ACTION SOAP_ACTION param for webservice request
* @param METHOD_NAME METHOD_NAME param for webservice request
* @param NAMESPACE NAMESPACE param for webservice request
* @param context Context of caller
*/
public SOAPClient(String SERVER, String SOAP_ACTION, String METHOD_NAME,
String NAMESPACE) {
String NAMESPACE, Context context) {
this.SERVER = SERVER;
this.SOAP_ACTION = SOAP_ACTION;
this.METHOD_NAME = METHOD_NAME;
this.NAMESPACE = NAMESPACE;
this.context = context;
isDebuggable = (ApplicationInfo.FLAG_DEBUGGABLE != 0);
}
@ -195,12 +213,30 @@ public class SOAPClient implements IWebserviceClient {
public Object getResult() {
return result;
}
/**
* Gets the context of caller
*
* @return the context of caller
*/
public Context getContext() {
return context;
}
/**
* Sets the context of caller
*
* @param context the context of caller
*/
public void setContext(Context context) {
this.context = context;
}
/**
* Creates webservice request.
*/
@Override
public void createRequest() {
Log.i(TAG, "Creating SOAP request...");
request = new SoapObject(NAMESPACE, METHOD_NAME);
result = null;
}
@ -213,6 +249,9 @@ public class SOAPClient implements IWebserviceClient {
*/
@Override
public void addParam(String param, Object value) {
if(isDebuggable)
Log.d(TAG, "Adding SOAP param " + param + "=" + value);
request.addProperty(param, value);
}
@ -284,6 +323,7 @@ public class SOAPClient implements IWebserviceClient {
Log.e(TAG, connection.responseDump.toString());
}
onError(e);
throw e;
}
} else {
@ -297,4 +337,67 @@ public class SOAPClient implements IWebserviceClient {
}
}
protected void onError(Exception e) {
String errorMsg;
int httpStatusCode;
boolean sendException = true;
/**
* If an exception has occurred, shows error message according
* to exception type.
*/
if (e instanceof SoapFault) {
SoapFault es = (SoapFault) e;
if (es.faultstring.equals("Bad log in")) {
errorMsg = context.getString(R.string.errorBadLoginMsg);
sendException = false;
} else if (es.faultstring.equals("Bad web service key")) {
errorMsg = context.getString(R.string.errorBadLoginMsg);
sendException = false;
} else if (es.faultstring.equals("Unknown application key")) {
errorMsg = context.getString(R.string.errorBadAppKeyMsg);
} else {
errorMsg = "Server error: " + es.getMessage();
}
} else if ((e instanceof CertificateException) || (e instanceof SSLException)) {
errorMsg = context.getString(R.string.errorServerCertificateMsg);
} else if (e instanceof XmlPullParserException) {
errorMsg = context.getString(R.string.errorServerResponseMsg);
} else if ((e instanceof TimeoutException)
|| (e instanceof SocketTimeoutException)) {
errorMsg = context.getString(R.string.errorTimeoutMsg);
sendException = false;
} else if (e instanceof HttpResponseException) {
httpStatusCode = ((HttpResponseException) e).getStatusCode();
Log.e(TAG, "httpStatusCode=" + httpStatusCode);
switch (httpStatusCode) {
case 500:
errorMsg = context.getString(R.string.errorInternalServerMsg);
break;
case 503:
errorMsg = context.getString(R.string.errorServiceUnavailableMsg);
sendException = false;
break;
default:
errorMsg = e.getMessage();
if ((errorMsg == null) || errorMsg.equals("")) {
errorMsg = context.getString(R.string.errorConnectionMsg);
}
}
} else {
errorMsg = e.getMessage();
if ((errorMsg == null) || errorMsg.equals("")) {
errorMsg = context.getString(R.string.errorConnectionMsg);
}
}
// Request finalized with errors
Utils.error(context, TAG, errorMsg, e, sendException, isDebuggable);
}
}

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.database.DataBaseHelper" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/database/DataBaseHelper.java" binary="false" corner="BOTTOM_RIGHT">
<position height="1609" width="548" x="323" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.database.DataBaseHelperException" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/database/DataBaseHelperException.java" binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="242" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,250 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.downloads.Downloads" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/Downloads.java" binary="false" corner="BOTTOM_RIGHT">
<position height="1195" width="277" x="1727" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadsManager.onGroupSelectedListener"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="115" width="279" x="873" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.downloads.DirectoryTreeDownload.DirectoryTree"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DirectoryTreeDownload.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="97" width="183" x="1504" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.modules.downloads.NodeAdapter.ViewHolder" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="183" x="576" y="2831"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.downloads.InvalidPathException" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DirectoryNavigator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="97" width="183" x="899" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.modules.downloads.FileDownloaderAsyncTask" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/FileDownloaderAsyncTask.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="187" width="255" x="381" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadManager.Request" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="565" width="326" x="2616" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.modules.downloads.DirectoryTreeDownload" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DirectoryTreeDownload.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="223" width="183" x="1504" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.modules.downloads.Downloads.Impl.RequestHeaders"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/Downloads.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="187" width="185" x="1727" y="2831"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="10" language="java" name="es.ugr.swad.swadroid.modules.downloads.DirectoryItem" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DirectoryItem.java" binary="false" corner="BOTTOM_RIGHT">
<position height="565" width="318" x="884" y="2831"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="11" language="java" name="es.ugr.swad.swadroid.modules.downloads.Downloads.Impl" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/Downloads.java" binary="false" corner="BOTTOM_RIGHT">
<position height="1519" width="293" x="1727" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="12" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadManager" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="997" width="271" x="2296" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="13" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadManager.Query" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="331" width="280" x="2296" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="14" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadFactory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadFactory.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="151" width="300" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="15" language="java" name="es.ugr.swad.swadroid.modules.downloads.DirectoryNavigator" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DirectoryNavigator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="385" width="272" x="1192" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="16" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadManager.CursorTranslator"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="493" width="196" x="2060" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="17" language="java" name="es.ugr.swad.swadroid.modules.downloads.GetFile" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/GetFile.java" binary="false" corner="BOTTOM_RIGHT">
<position height="241" width="183" x="676" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="18" language="java" name="es.ugr.swad.swadroid.modules.downloads.NodeAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="257" x="576" y="1272"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="19" language="java" name="es.ugr.swad.swadroid.modules.downloads.DownloadsManager" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="727" width="342" x="1122" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="20">
<end type="SOURCE" refId="12"/>
<end type="TARGET" refId="7"/>
</nesting>
<association id="21">
<end type="SOURCE" refId="19" navigable="false">
<attribute id="22" name="navigator"/>
<multiplicity id="23" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="15" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="24">
<end type="SOURCE" refId="18"/>
<end type="TARGET" refId="4"/>
</nesting>
<nesting id="25">
<end type="SOURCE" refId="12"/>
<end type="TARGET" refId="16"/>
</nesting>
<nesting id="26">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="11"/>
</nesting>
<association id="27">
<end type="SOURCE" refId="15" navigable="false">
<attribute id="28" name="currentItems"/>
<multiplicity id="29" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="10" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="30">
<end type="SOURCE" refId="12"/>
<end type="TARGET" refId="13"/>
</nesting>
<nesting id="31">
<end type="SOURCE" refId="11"/>
<end type="TARGET" refId="9"/>
</nesting>
<nesting id="32">
<end type="SOURCE" refId="19"/>
<end type="TARGET" refId="2"/>
</nesting>
<association id="33">
<end type="SOURCE" refId="18" navigable="false">
<attribute id="34" name="list"/>
<multiplicity id="35" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="10" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="36">
<end type="SOURCE" refId="8"/>
<end type="TARGET" refId="3"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.gui.ImageListItem" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageListItem.java" binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="140" x="4195" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.gui.ImageExpandableListAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="367" width="768" x="1716" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.gui.ImageListAdapter.ViewHolder" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageListAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="140" x="3890" y="498"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.gui.ImageListAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageListAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="265" x="3890" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.gui.MenuExpandableListActivity" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/MenuExpandableListActivity.java" binary="false" corner="BOTTOM_RIGHT">
<position height="421" width="231" x="3619" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.gui.MenuActivity" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/MenuActivity.java" binary="false" corner="BOTTOM_RIGHT">
<position height="385" width="231" x="770" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.gui.ImageFactory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageFactory.java" binary="false" corner="BOTTOM_RIGHT">
<position height="97" width="326" x="3253" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.gui.DialogFactory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/DialogFactory.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="635" x="1041" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.gui.AlertNotificationFactory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/AlertNotificationFactory.java" binary="false" corner="BOTTOM_RIGHT">
<position height="169" width="689" x="2524" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="10" language="java" name="es.ugr.swad.swadroid.gui.ImageExpandableListAdapter.ViewHolder"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="97" width="126" x="1716" y="498"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="11">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="10"/>
</nesting>
<nesting id="12">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="3"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.groups.SendMyGroups" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/groups/SendMyGroups.java" binary="false" corner="BOTTOM_RIGHT">
<position height="277" width="168" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.groups.MyGroupsManager" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/groups/MyGroupsManager.java" binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="404" x="840" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.groups.EnrollmentExpandableListAdapter.ChildHolder"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="168" x="371" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.modules.groups.EnrollmentExpandableListAdapter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="511" width="551" x="249" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.groups.EnrollmentExpandableListAdapter.GroupHolder"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="204" x="127" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="6">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="5"/>
</nesting>
<nesting id="7">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="3"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.information.Information" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/information/Information.java" binary="false" corner="BOTTOM_RIGHT">
<position height="277" width="187" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,94 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.SWADMain" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/SWADMain.java" binary="false" corner="BOTTOM_RIGHT">
<position height="817" width="318" x="970" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.PasswordDialogPreference" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/PasswordDialogPreference.java" binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="264" x="295" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.LoginActivity" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/LoginActivity.java" binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="214" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.Constants" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/Constants.java" binary="false" corner="BOTTOM_RIGHT">
<position height="2005" width="295" x="1532" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.SWADMain.onItemSelectedListener" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/SWADMain.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="279" x="1097" y="2082"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.PreferencesActivity" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/PreferencesActivity.java" binary="false" corner="BOTTOM_RIGHT">
<position height="583" width="331" x="599" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.Preferences" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/Preferences.java" binary="false" corner="BOTTOM_RIGHT">
<position height="1195" width="213" x="844" y="2082"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.Config" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/Config.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="164" x="1328" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="9">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="5"/>
</nesting>
<association id="10">
<end type="SOURCE" refId="1" navigable="false">
<attribute id="11" name="prefs"/>
<multiplicity id="12" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="7" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,198 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.model.PracticeSession" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/PracticeSession.java" binary="false" corner="BOTTOM_RIGHT">
<position height="403" width="272" x="979" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.model.TestAnswer" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/TestAnswer.java" binary="false" corner="BOTTOM_RIGHT">
<position height="853" width="255" x="2787" y="2176"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.model.SWADNotification" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/SWADNotification.java" binary="false" corner="BOTTOM_RIGHT">
<position height="1141" width="529" x="2492" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.model.Test" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/Test.java" binary="false" corner="BOTTOM_RIGHT">
<position height="979" width="255" x="1586" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.model.TestTag" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/TestTag.java" binary="false" corner="BOTTOM_RIGHT">
<position height="475" width="255" x="684" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.model.User" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/User.java" binary="false" corner="BOTTOM_RIGHT">
<position height="763" width="308" x="41" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.model.Group" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/Group.java" binary="false" corner="BOTTOM_RIGHT">
<position height="745" width="255" x="1902" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.model.PairTable" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/PairTable.java" binary="false" corner="BOTTOM_RIGHT">
<position height="331" width="255" x="389" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.model.GroupType" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/GroupType.java" binary="false" corner="BOTTOM_RIGHT">
<position height="511" width="255" x="2197" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="10" language="java" name="es.ugr.swad.swadroid.model.Model" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/Model.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="138" x="1862" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="11" language="java" name="es.ugr.swad.swadroid.model.Pair" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/Pair.java" binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="151" x="389" y="1445"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="12" language="java" name="es.ugr.swad.swadroid.model.Course" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/Course.java" binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="255" x="1291" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="13" language="java" name="es.ugr.swad.swadroid.model.TestQuestion" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/model/TestQuestion.java" binary="false" corner="BOTTOM_RIGHT">
<position height="691" width="275" x="1862" y="1445"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<generalization id="14">
<bendpoint x="3051" y="1445"/>
<bendpoint x="3051" y="264"/>
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="10"/>
</generalization>
<association id="15">
<end type="SOURCE" refId="4" navigable="false">
<attribute id="16" name="questions"/>
<multiplicity id="17" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="13" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="18">
<end type="SOURCE" refId="12"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="19">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="10"/>
</generalization>
<association id="20">
<end type="SOURCE" refId="8" navigable="false">
<attribute id="21" name="values"/>
<multiplicity id="22" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="11" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="23">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="24">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="25">
<end type="SOURCE" refId="8"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="26">
<bendpoint x="1871" y="264"/>
<end type="SOURCE" refId="13"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="27">
<end type="SOURCE" refId="9"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="28">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="29">
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="10"/>
</generalization>
<generalization id="30">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="10"/>
</generalization>
<association id="31">
<end type="SOURCE" refId="13" navigable="false">
<attribute id="32" name="answers"/>
<multiplicity id="33" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,131 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.RecoverPassword" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/RecoverPassword.java" binary="false" corner="BOTTOM_RIGHT">
<position height="241" width="162" x="41" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.Groups" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Groups.java" binary="false" corner="BOTTOM_RIGHT">
<position height="277" width="189" x="1363" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.Module" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Module.java" binary="false" corner="BOTTOM_RIGHT">
<position height="511" width="350" x="654" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.modules.Login" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Login.java" binary="false" corner="BOTTOM_RIGHT">
<position height="241" width="137" x="243" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.Notices" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Notices.java" binary="false" corner="BOTTOM_RIGHT">
<position height="439" width="211" x="1112" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.modules.GroupTypes" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/GroupTypes.java" binary="false" corner="BOTTOM_RIGHT">
<position height="259" width="189" x="654" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.modules.Courses" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Courses.java" binary="false" corner="BOTTOM_RIGHT">
<position height="259" width="189" x="883" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.modules.GenerateQR" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/GenerateQR.java" binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="137" x="1592" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.modules.Module.Connect" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/Module.java" binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="194" x="420" y="588"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<generalization id="10">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="3"/>
</generalization>
<generalization id="11">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="3"/>
</generalization>
<nesting id="12">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="9"/>
</nesting>
<generalization id="13">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="3"/>
</generalization>
<association id="14">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="15" name="connect"/>
<multiplicity id="16" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="9" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="17">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="3"/>
</generalization>
<generalization id="18">
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="3"/>
</generalization>
<generalization id="19">
<end type="SOURCE" refId="8"/>
<end type="TARGET" refId="3"/>
</generalization>
<generalization id="20">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="3"/>
</generalization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,125 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.notifications.NotificationsExpandableListAdapter"
project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="421" width="446" x="649" y="876"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.notifications.Notifications.SyncReceiver"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/Notifications.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="97" width="191" x="418" y="876"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.notifications.NotificationItem" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="367" width="230" x="45" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java"
name="es.ugr.swad.swadroid.modules.notifications.NotificationsSyncAdapterService.SyncAdapterImpl" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="115" width="404" x="1135" y="876"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.notifications.NotificationsSyncAdapterService"
project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="583" width="432" x="1135" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.modules.notifications.Notifications" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/Notifications.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="799" width="230" x="546" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.modules.notifications.NotificationsMarkAllAsRead"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationsMarkAllAsRead.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="191" x="315" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.modules.notifications.NotificationsCursorAdapter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/notifications/NotificationsCursorAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="205" width="279" x="816" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="9">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="10" name="sSyncAdapter"/>
<multiplicity id="11" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="12">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="4"/>
</nesting>
<association id="13">
<end type="SOURCE" refId="6" navigable="false">
<attribute id="14" name="adapter"/>
<multiplicity id="15" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="16">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="2"/>
</nesting>
<association id="17">
<end type="SOURCE" refId="6" navigable="false">
<attribute id="18" name="receiver"/>
<multiplicity id="19" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.rollcall.RollcallConfigDownload" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/RollcallConfigDownload.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="259" width="166" x="1316" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.rollcall.Rollcall" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/Rollcall.java" binary="false" corner="BOTTOM_RIGHT">
<position height="421" width="250" x="780" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SeparatedListAdapter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SeparatedListAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="295" width="206" x="1522" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SessionsArrayAdapter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SessionsArrayAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="300" x="2436" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SessionsHistory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SessionsHistory.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="205" width="206" x="1070" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SessionItemModel"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SessionItemModel.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="206" x="2530" y="1074"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SessionsList" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SessionsList.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="259" width="206" x="289" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.SessionsArrayAdapter.ViewHolder"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/SessionsArrayAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="206" x="2284" y="1074"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.modules.rollcall.sessions.NewPracticeSession"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/sessions/NewPracticeSession.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="997" width="278" x="1768" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="10" language="java" name="es.ugr.swad.swadroid.modules.rollcall.students.StudentItemModel"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/students/StudentItemModel.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="259" width="205" x="780" y="1074"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="11" language="java" name="es.ugr.swad.swadroid.modules.rollcall.students.StudentsArrayAdapter.ViewHolder"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/students/StudentsArrayAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="133" width="205" x="2039" y="1074"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="12" language="java" name="es.ugr.swad.swadroid.modules.rollcall.students.StudentsArrayAdapter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/students/StudentsArrayAdapter.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="310" x="2086" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="13" language="java" name="es.ugr.swad.swadroid.modules.rollcall.students.StudentsHistory"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/students/StudentsHistory.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="205" x="535" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="14" language="java" name="es.ugr.swad.swadroid.modules.rollcall.students.StudentsList" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/rollcall/students/StudentsList.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="241" width="205" x="44" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="15">
<end type="SOURCE" refId="13" navigable="false">
<attribute id="16" name="studentsList"/>
<multiplicity id="17" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="10" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="18">
<end type="SOURCE" refId="4" navigable="false">
<attribute id="19" name="list"/>
<multiplicity id="20" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="6" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="21">
<end type="SOURCE" refId="12"/>
<end type="TARGET" refId="11"/>
</nesting>
<nesting id="22">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="8"/>
</nesting>
<association id="23">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="24" name="studentsList"/>
<multiplicity id="25" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="10" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="26">
<end type="SOURCE" refId="12" navigable="false">
<attribute id="27" name="list"/>
<multiplicity id="28" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="10" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,62 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.ssl.UntrustedTrustManager" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/ssl/UntrustedTrustManager.java" binary="false" corner="BOTTOM_RIGHT">
<position height="133" width="267" x="395" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.ssl.AdditionalKeyStoresSSLSocketFactory" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/ssl/AdditionalKeyStoresSSLSocketFactory.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="259" width="314" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.ssl.UntrustedHostnameVerifier" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/ssl/UntrustedHostnameVerifier.java" binary="false" corner="BOTTOM_RIGHT">
<position height="97" width="193" x="702" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.ssl.SecureConnection" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/ssl/SecureConnection.java" binary="false" corner="BOTTOM_RIGHT">
<position height="169" width="202" x="935" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java"
name="es.ugr.swad.swadroid.ssl.AdditionalKeyStoresSSLSocketFactory.AdditionalKeyStoresTrustManager"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/ssl/AdditionalKeyStoresSSLSocketFactory.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="278" x="41" y="336"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="6">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="5"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.sync.DummyProvider" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/sync/DummyProvider.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="247" x="627" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.sync.AccountAuthenticatorService.AccountAuthenticatorImpl"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/sync/AccountAuthenticatorService.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="223" width="423" x="346" y="264"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.sync.PeriodicSyncReceiver" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/sync/PeriodicSyncReceiver.java" binary="false" corner="BOTTOM_RIGHT">
<position height="133" width="300" x="914" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.sync.AccountAuthenticatorService" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/sync/AccountAuthenticatorService.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="241" x="346" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.sync.AccountAuthenticator" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/sync/AccountAuthenticator.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="148" x="1254" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.sync.SyncUtils" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/sync/SyncUtils.java" binary="false" corner="BOTTOM_RIGHT">
<position height="169" width="265" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="7">
<end type="SOURCE" refId="4" navigable="false">
<attribute id="8" name="sAccountAuthenticator"/>
<multiplicity id="9" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="10">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="2"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.modules.tests.AnswerTypesArrayAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/AnswerTypesArrayAdapter.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="151" width="250" x="1875" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.modules.tests.TestsMake" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/TestsMake.java" binary="false" corner="BOTTOM_RIGHT">
<position height="583" width="321" x="837" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.modules.tests.TestsQuestionsDownload" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/TestsQuestionsDownload.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="223" width="170" x="627" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.modules.tests.TestsConfigDownload" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/TestsConfigDownload.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="241" width="161" x="1198" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.modules.tests.CheckedAnswersArrayAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/CheckedAnswersArrayAdapter.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="205" width="436" x="1399" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.modules.tests.Tests" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/Tests.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="259" x="328" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.modules.tests.TagsArrayAdapter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/TagsArrayAdapter.java" binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="247" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<enumeration id="8" language="java" name="es.ugr.swad.swadroid.modules.tests.TestsMake.ScreenStep" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/modules/tests/TestsMake.java" binary="false" corner="BOTTOM_RIGHT">
<position height="169" width="175" x="837" y="660"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</enumeration>
<association id="9">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="10" name="screenStep"/>
<multiplicity id="11" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="8" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="12">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="8"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.utils.OldCrypto" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/OldCrypto.java" binary="false" corner="BOTTOM_RIGHT">
<position height="187" width="161" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.utils.Utils" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/Utils.java" binary="false" corner="BOTTOM_RIGHT">
<position height="457" width="360" x="1196" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.utils.Base64.OutputStream" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/Base64.java" binary="false" corner="BOTTOM_RIGHT">
<position height="385" width="180" x="344" y="1002"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="es.ugr.swad.swadroid.utils.Base64" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/Base64.java" binary="false" corner="BOTTOM_RIGHT">
<position height="925" width="253" x="454" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="es.ugr.swad.swadroid.utils.TimeUtils" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/TimeUtils.java" binary="false" corner="BOTTOM_RIGHT">
<position height="241" width="174" x="982" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="es.ugr.swad.swadroid.utils.Base64.InputStream" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/Base64.java" binary="false" corner="BOTTOM_RIGHT">
<position height="295" width="162" x="564" y="1002"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.utils.QR" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/QR.java" binary="false" corner="BOTTOM_RIGHT">
<position height="97" width="172" x="242" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.utils.Crypto" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/utils/Crypto.java" binary="false" corner="BOTTOM_RIGHT">
<position height="277" width="195" x="747" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="9">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="6"/>
</nesting>
<nesting id="10">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="3"/>
</nesting>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<interface id="1" language="java" name="es.ugr.swad.swadroid.webservices.IWebserviceClient" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/webservices/IWebserviceClient.java" binary="false" corner="BOTTOM_RIGHT">
<position height="133" width="177" x="509" y="570"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="es.ugr.swad.swadroid.webservices.SOAPClient" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/webservices/SOAPClient.java" binary="false" corner="BOTTOM_RIGHT">
<position height="493" width="219" x="704" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.webservices.RESTClient" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/webservices/RESTClient.java" binary="false" corner="BOTTOM_RIGHT">
<position height="295" width="350" x="314" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<enumeration id="4" language="java" name="es.ugr.swad.swadroid.webservices.RESTClient.REQUEST_TYPE" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/webservices/RESTClient.java" binary="false" corner="BOTTOM_RIGHT">
<position height="151" width="154" x="314" y="570"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</enumeration>
<class id="5" language="java" name="es.ugr.swad.swadroid.webservices.RestEasy" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/webservices/RestEasy.java" binary="false" corner="BOTTOM_RIGHT">
<position height="169" width="233" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="6">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="4"/>
</nesting>
<realization id="7">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<realization id="8">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>

View File

@ -1,182 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="es.ugr.swad.swadroid.gui.widget.TextProgressBar" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/TextProgressBar.java" binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="227" x="620" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPickerButton" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPickerButton.java" binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="248" x="1149" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPicker" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPicker.java" binary="false" corner="BOTTOM_RIGHT">
<position height="763" width="258" x="1149" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<interface id="4" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPicker.Formatter" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPicker.java" binary="false" corner="BOTTOM_RIGHT">
<position height="79" width="143" x="966" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="5" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPicker.OnChangedListener"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPicker.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="79" width="206" x="1437" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="6" language="java" name="es.ugr.swad.swadroid.gui.widget.SeekBarDialogPreference.SavedState"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/SeekBarDialogPreference.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="187" width="185" x="325" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="es.ugr.swad.swadroid.gui.widget.ExpandedListView" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/ExpandedListView.java" binary="false" corner="BOTTOM_RIGHT">
<position height="115" width="222" x="887" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="es.ugr.swad.swadroid.gui.widget.CheckableLinearLayout" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/CheckableLinearLayout.java" binary="false" corner="BOTTOM_RIGHT">
<position height="223" width="244" x="41" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPicker.NumberRangeKeyListener"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPicker.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="133" width="304" x="622" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="10" language="java" name="es.ugr.swad.swadroid.gui.widget.SeekBarDialogPreference" project="SWADroid"
file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/SeekBarDialogPreference.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="511" width="255" x="325" y="37"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="11" language="java" name="es.ugr.swad.swadroid.gui.widget.NumberPicker.NumberPickerInputFilter"
project="SWADroid" file="/SWADroid/src/es/ugr/swad/swadroid/gui/widget/NumberPicker.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="97" width="304" x="1683" y="840"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<nesting id="12">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="4"/>
</nesting>
<nesting id="13">
<end type="SOURCE" refId="10"/>
<end type="TARGET" refId="6"/>
</nesting>
<nesting id="14">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="5"/>
</nesting>
<nesting id="15">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="11"/>
</nesting>
<association id="16">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="17" name="mDecrementButton"/>
<multiplicity id="18" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="19">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="9"/>
</nesting>
<association id="20">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="21" name="mIncrementButton"/>
<multiplicity id="22" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="23">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="24" name="TWO_DIGIT_FORMATTER"/>
<multiplicity id="25" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="26">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="27" name="mListener"/>
<multiplicity id="28" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="5" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="29">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="30" name="mFormatter"/>
<multiplicity id="31" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="32">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="33" name="mNumberPicker"/>
<multiplicity id="34" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="3" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>