Fixed initialization of server URL
This commit is contained in:
parent
6ae9ade27e
commit
ef5f67ffc1
|
@ -193,6 +193,11 @@ public class Preferences extends PreferenceActivity implements OnPreferenceChang
|
|||
* @return Server URL.
|
||||
*/
|
||||
public String getServer() {
|
||||
if(server.isEmpty()) {
|
||||
server = Global.getDefaultServer();
|
||||
serverPref.setSummary(server);
|
||||
}
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
|
@ -459,7 +464,7 @@ public class Preferences extends PreferenceActivity implements OnPreferenceChang
|
|||
return true;
|
||||
}
|
||||
});
|
||||
serverPref.setSummary(prefs.getString(SERVERPREF, Global.getDefaultServer()));
|
||||
serverPref.setSummary(server);
|
||||
|
||||
try {
|
||||
currentVersionPref.setSummary(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
|
||||
|
@ -516,7 +521,7 @@ public class Preferences extends PreferenceActivity implements OnPreferenceChang
|
|||
if(!prefs.getString(USERPASSWORDPREF, "").equals(""))
|
||||
userPasswordPref.setSummary(stars);
|
||||
|
||||
serverPref.setSummary(prefs.getString(SERVERPREF, Global.getDefaultServer()));
|
||||
serverPref.setSummary(server);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -214,7 +214,7 @@ public class Notifications extends Module {
|
|||
|
||||
//Call synchronization service
|
||||
Account account = new Account(getString(R.string.app_name), accountType);
|
||||
ContentResolver.requestSync(account, authority, null);
|
||||
ContentResolver.requestSync(account, authority, new Bundle());
|
||||
|
||||
//Calculates next timestamp to be requested
|
||||
/*Long timestamp = new Long(dbHelper.getFieldOfLastNotification("eventTime"));
|
||||
|
|
|
@ -20,12 +20,14 @@
|
|||
package es.ugr.swad.swadroid.modules.notifications;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.ksoap2.SoapEnvelope;
|
||||
import org.ksoap2.SoapFault;
|
||||
import org.ksoap2.serialization.KvmSerializable;
|
||||
import org.ksoap2.serialization.SoapObject;
|
||||
import org.ksoap2.serialization.SoapSerializationEnvelope;
|
||||
import org.ksoap2.transport.KeepAliveHttpsTransportSE;
|
||||
|
@ -39,6 +41,8 @@ import es.ugr.swad.swadroid.Preferences;
|
|||
import es.ugr.swad.swadroid.R;
|
||||
import es.ugr.swad.swadroid.model.DataBaseHelper;
|
||||
import es.ugr.swad.swadroid.model.SWADNotification;
|
||||
import es.ugr.swad.swadroid.model.User;
|
||||
import es.ugr.swad.swadroid.ssl.SecureConnection;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.OperationCanceledException;
|
||||
|
@ -62,7 +66,6 @@ import android.util.Log;
|
|||
public class NotificationsSyncAdapterService extends Service {
|
||||
private static final String TAG = "NotificationsSyncAdapterService";
|
||||
private static SyncAdapterImpl sSyncAdapter = null;
|
||||
private static ContentResolver mContentResolver = null;
|
||||
|
||||
public NotificationsSyncAdapterService() {
|
||||
super();
|
||||
|
@ -103,5 +106,169 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
mContentResolver = context.getContentResolver();
|
||||
Log.i(TAG, "performSync: " + account.toString());
|
||||
//This is where the magic will happen!
|
||||
/**
|
||||
* Use of KeepAliveHttpsTransport deals with the problems with the Android ssl libraries having trouble
|
||||
* with certificates and certificate authorities somehow messing up connecting/needing reconnects.
|
||||
*/
|
||||
URL = prefs.getServer();
|
||||
connection = new KeepAliveHttpsTransportSE(URL, 443, "", TIMEOUT);
|
||||
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
|
||||
System.setProperty("http.keepAlive", "false");
|
||||
envelope.setOutputSoapObject(request);
|
||||
//connection.debug = true;
|
||||
connection.call(SOAP_ACTION, envelope);
|
||||
//Log.d(TAG, connection.requestDump.toString());
|
||||
//Log.d(TAG, connection.responseDump.toString());
|
||||
|
||||
if(simple && !(envelope.getResponse() instanceof SoapFault)) {
|
||||
result = envelope.bodyIn;
|
||||
} else {
|
||||
result = envelope.getResponse();
|
||||
}
|
||||
}
|
||||
|
||||
private static class SyncAdapterImpl extends AbstractThreadedSyncAdapter {
|
||||
private Context mContext;
|
||||
|
||||
public SyncAdapterImpl(Context context) {
|
||||
super(context, true);
|
||||
mContext = context;
|
||||
prefs = new Preferences();
|
||||
try {
|
||||
db = DataFramework.getInstance();
|
||||
db.open(mContext, mContext.getPackageName());
|
||||
dbHelper = new DataBaseHelper(db);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
|
||||
try {
|
||||
prefs.getPreferences(mContext);
|
||||
NotificationsSyncAdapterService.performSync(mContext, account, extras, authority, provider, syncResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
IBinder ret = null;
|
||||
ret = getSyncAdapter().getSyncAdapterBinder();
|
||||
return ret;
|
||||
}
|
||||
|
||||
private SyncAdapterImpl getSyncAdapter() {
|
||||
if (sSyncAdapter == null)
|
||||
sSyncAdapter = new SyncAdapterImpl(this);
|
||||
return sSyncAdapter;
|
||||
}
|
||||
|
||||
private static void performSync(Context context, Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)
|
||||
throws OperationCanceledException, SoapFault, IOException, IllegalAccessException, InstantiationException, XmlPullParserException, NoSuchAlgorithmException, KeyManagementException {
|
||||
|
||||
//Initialize HTTPS connections
|
||||
SecureConnection.initSecureConnection();
|
||||
|
||||
//If last login time > Global.RELOGIN_TIME, force login
|
||||
if(System.currentTimeMillis()-Global.getLastLoginTime() > Global.RELOGIN_TIME) {
|
||||
Global.setLogged(false);
|
||||
}
|
||||
|
||||
if(!Global.isLogged()) {
|
||||
Log.d(TAG, "Not logged");
|
||||
|
||||
METHOD_NAME = "loginByUserPasswordKey";
|
||||
MessageDigest md = MessageDigest.getInstance("SHA-512");
|
||||
md.update(prefs.getUserPassword().getBytes());
|
||||
String userPassword = new String(Base64.encodeBytes(md.digest()));
|
||||
userPassword = userPassword.replace('+','-').replace('/','_').replace('=', ' ').replaceAll("\\s+", "").trim();
|
||||
|
||||
createRequest();
|
||||
addParam("userID", prefs.getUserID());
|
||||
addParam("userPassword", userPassword);
|
||||
addParam("appKey", Global.getAppKey());
|
||||
sendRequest(true);
|
||||
|
||||
if (result != null) {
|
||||
KvmSerializable ks = (KvmSerializable) result;
|
||||
|
||||
//Stores user data returned by webservice response
|
||||
User loggedUser = new User(
|
||||
Long.parseLong(ks.getProperty(0).toString()), // id
|
||||
Integer.parseInt(ks.getProperty(1).toString()), // userTypeCode
|
||||
ks.getProperty(2).toString(), // wsKey
|
||||
ks.getProperty(3).toString(), // userID
|
||||
null, // userNickname
|
||||
ks.getProperty(4).toString(), // userSurname1
|
||||
ks.getProperty(5).toString(), // userSurname2
|
||||
ks.getProperty(6).toString(), // userFirstName
|
||||
ks.getProperty(7).toString(), // userTypeName
|
||||
null, // photoPath
|
||||
Integer.parseInt(ks.getProperty(8).toString()) // userRole
|
||||
);
|
||||
|
||||
Global.setLoggedUser(loggedUser);
|
||||
|
||||
//Update application last login time
|
||||
Global.setLastLoginTime(System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
if(Global.isLogged()) {
|
||||
Log.d(TAG, "Logged");
|
||||
|
||||
//Calculates next timestamp to be requested
|
||||
Long timestamp = new Long(dbHelper.getFieldOfLastNotification("eventTime"));
|
||||
timestamp++;
|
||||
|
||||
//Creates webservice request, adds required params and sends request to webservice
|
||||
METHOD_NAME = "getNotifications";
|
||||
createRequest();
|
||||
addParam("wsKey", Global.getLoggedUser().getWsKey());
|
||||
addParam("beginTime", timestamp);
|
||||
sendRequest(false);
|
||||
|
||||
if (result != null) {
|
||||
dbHelper.beginTransaction();
|
||||
|
||||
//Stores notifications data returned by webservice response
|
||||
Vector<?> res = (Vector<?>) result;
|
||||
SoapObject soap = (SoapObject) res.get(1);
|
||||
notifCount = soap.getPropertyCount();
|
||||
for (int i = 0; i < notifCount; i++) {
|
||||
SoapObject pii = (SoapObject)soap.getProperty(i);
|
||||
Long notificationCode = new Long(pii.getProperty("notificationCode").toString());
|
||||
String eventType = pii.getProperty("eventType").toString();
|
||||
Long eventTime = new Long(pii.getProperty("eventTime").toString());
|
||||
String userSurname1 = pii.getProperty("userSurname1").toString();
|
||||
String userSurname2 = pii.getProperty("userSurname2").toString();
|
||||
String userFirstName = pii.getProperty("userFirstname").toString();
|
||||
String location = pii.getProperty("location").toString();
|
||||
String summary = pii.getProperty("summary").toString();
|
||||
Integer status = new Integer(pii.getProperty("status").toString());
|
||||
String content = pii.getProperty("content").toString();
|
||||
SWADNotification n = new SWADNotification(notificationCode, eventType, eventTime, userSurname1, userSurname2, userFirstName, location, summary, status, content);
|
||||
dbHelper.insertNotification(n);
|
||||
|
||||
/*if(isDebuggable)
|
||||
Log.d(TAG, n.toString());*/
|
||||
}
|
||||
|
||||
//Request finalized without errors
|
||||
Log.i(TAG, "Retrieved " + notifCount + " notifications");
|
||||
|
||||
//Clear old notifications to control database size
|
||||
dbHelper.clearOldNotifications(SIZE_LIMIT);
|
||||
|
||||
dbHelper.endTransaction();
|
||||
}
|
||||
|
||||
alertNotif(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user