Login Restructuring Complete
This commit is contained in:
@@ -60,6 +60,7 @@ public class MainActivity extends AppCompatActivity
|
||||
private int fragmentPage = FRAGMENT_NONE;
|
||||
private String fragmentData = "";
|
||||
private CanteenBrowser mCanteenBrowser;
|
||||
private boolean mOfflineMode = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -91,22 +92,22 @@ public class MainActivity extends AppCompatActivity
|
||||
LoginToken loginToken = getKVV().easyLogin();
|
||||
if (newFragmentPage != FRAGMENT_LOGIN && newFragmentPage != FRAGMENT_STARTUP && newFragmentPage != FRAGMENT_NONE) {
|
||||
if (loginToken != null)
|
||||
toLoginState(loginToken, newFragmentPage, newFragmentData, true);
|
||||
toLoginState(loginToken, newFragmentPage, newFragmentData);
|
||||
else
|
||||
checkAndDoLogin();
|
||||
} else {
|
||||
if (loginToken != null)
|
||||
toLoginState(loginToken, getDefaultFragmentAfterLogin(), "", true);
|
||||
toLoginState(loginToken, getDefaultFragmentAfterLogin(), "");
|
||||
else
|
||||
checkAndDoLogin();
|
||||
}
|
||||
|
||||
this.getCanteenBrowser().getCanteens(success -> {
|
||||
/*this.getCanteenBrowser().getCanteens(success -> {
|
||||
Canteen canteen = success.get(0);
|
||||
this.getCanteenBrowser().getCanteen(canteen, success1 -> {
|
||||
this.getCanteenBrowser().getDay(canteen.get(0), log::d, log::e, true);
|
||||
}, log::e, true);
|
||||
}, log::e, true);
|
||||
}, log::e, true);*/
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -227,15 +228,14 @@ public class MainActivity extends AppCompatActivity
|
||||
|
||||
private void toLogoutState() {
|
||||
changeFragment(FRAGMENT_LOGIN);
|
||||
View offline_header = findViewById(R.id.offline_msg);
|
||||
offline_header.setVisibility(View.GONE);
|
||||
setOfflineBanner(true);
|
||||
}
|
||||
|
||||
private void toLoginState(LoginToken loginToken, int newFragment, String newData, boolean onlineMode) {
|
||||
private void toLoginState(LoginToken loginToken, int newFragment, String newData) {
|
||||
if (loginToken == null) {
|
||||
toLogoutState();
|
||||
} else {
|
||||
toLoginState(loginToken.getFullname(), loginToken.getEmail(), newFragment, newData, onlineMode);
|
||||
toLoginState(loginToken.getFullname(), loginToken.getEmail(), newFragment, newData, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,11 +245,7 @@ public class MainActivity extends AppCompatActivity
|
||||
View header = mNavigationView.getHeaderView(0);
|
||||
((TextView) header.findViewById(R.id.login_name)).setText(fullname);
|
||||
((TextView) header.findViewById(R.id.login_mail)).setText(email);
|
||||
View offline_header = findViewById(R.id.offline_msg);
|
||||
if (onlineMode)
|
||||
offline_header.setVisibility(View.GONE);
|
||||
else
|
||||
offline_header.setVisibility(View.VISIBLE);
|
||||
setOfflineBanner(onlineMode);
|
||||
}
|
||||
|
||||
private void checkAndDoLogin() {
|
||||
@@ -260,7 +256,7 @@ public class MainActivity extends AppCompatActivity
|
||||
return;
|
||||
}
|
||||
this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> {
|
||||
toLoginState(success, getDefaultFragmentAfterLogin(), "", true);
|
||||
toLoginState(success, getDefaultFragmentAfterLogin(), "");
|
||||
}, error -> {
|
||||
log.e(error);
|
||||
toLogoutState();
|
||||
@@ -351,6 +347,24 @@ public class MainActivity extends AppCompatActivity
|
||||
this.fragmentData = newData;
|
||||
}
|
||||
|
||||
private void setOfflineBanner(boolean onlineMode) {
|
||||
View offline_header = findViewById(R.id.offline_msg);
|
||||
if (onlineMode)
|
||||
offline_header.setVisibility(View.GONE);
|
||||
else
|
||||
offline_header.setVisibility(View.VISIBLE);
|
||||
mOfflineMode = !onlineMode;
|
||||
}
|
||||
|
||||
private void setRefreshFailedBanner(boolean refreshFailed) {
|
||||
View viewNoConnection = findViewById(R.id.no_connection_msg);
|
||||
if (!mOfflineMode && refreshFailed)
|
||||
viewNoConnection.setVisibility(View.VISIBLE);
|
||||
else
|
||||
viewNoConnection.setVisibility(View.GONE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void afterAnyMenuInflate() {
|
||||
getCanteenBrowser().getCanteens(success -> {
|
||||
@@ -388,17 +402,13 @@ public class MainActivity extends AppCompatActivity
|
||||
setTitle(titleId);
|
||||
}
|
||||
|
||||
public void loginTokenInvalid() {
|
||||
//getKVV().invalidate();
|
||||
//checkAndDoLogin();
|
||||
log.d("Login token invalid!");
|
||||
public void loginTokenInvalid(boolean doPrecheck) {
|
||||
getKVV().invalidate();
|
||||
checkAndDoLogin();
|
||||
//log.d("Login token invalid!");
|
||||
}
|
||||
|
||||
public void refreshFailed(boolean isFailed) {
|
||||
View viewNoConnection = findViewById(R.id.no_connection_msg);
|
||||
if (isFailed)
|
||||
viewNoConnection.setVisibility(View.VISIBLE);
|
||||
else
|
||||
viewNoConnection.setVisibility(View.GONE);
|
||||
setRefreshFailedBanner(isFailed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import de.sebse.fuplanner.R;
|
||||
import de.sebse.fuplanner.services.KVV.types.Modules;
|
||||
import de.sebse.fuplanner.tools.MainAcitivityListener;
|
||||
import de.sebse.fuplanner.tools.logging.Logger;
|
||||
|
||||
@@ -58,7 +59,11 @@ public class ModDetailFragment extends Fragment implements ModDetailListener {
|
||||
}
|
||||
if (mListener != null) {
|
||||
mListener.onTitleTextChange(R.string.courses);
|
||||
mListener.getKVV().getModuleList(success -> mListener.onTitleTextChange(success.get(mItemPos).title), log::e);
|
||||
mListener.getKVV().getModuleList(success -> {
|
||||
Modules.Module module = success.get(mItemPos);
|
||||
if (module != null)
|
||||
mListener.onTitleTextChange(module.title);
|
||||
}, log::e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ public class KVV {
|
||||
private MainAcitivityListener mListener;
|
||||
|
||||
public KVV(Context context) {
|
||||
if (context instanceof MainAcitivityListener)
|
||||
mListener = (MainAcitivityListener) context;
|
||||
this.context = context;
|
||||
this.updatingList = new ArrayList<>();
|
||||
@@ -46,7 +45,7 @@ public class KVV {
|
||||
lastToken = success;
|
||||
this.endUpdate();
|
||||
try {
|
||||
login.saveOffline(this.context);
|
||||
login.saveOffline();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -67,7 +66,7 @@ public class KVV {
|
||||
|
||||
public void invalidate() {
|
||||
if (lastToken != null) {
|
||||
lastToken.delete(this.context);
|
||||
new KVVLogin(context).deleteOffline();
|
||||
lastToken = null;
|
||||
}
|
||||
addons.clear();
|
||||
@@ -79,14 +78,7 @@ public class KVV {
|
||||
}
|
||||
|
||||
public void getModule(String id, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||
this.getLastToken(token -> {
|
||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
||||
if (modules == null) {
|
||||
modules = new KVVModuleList(KVV.this.context, token);
|
||||
addons.put("modules", modules);
|
||||
}
|
||||
modules.getModule(id, saveOnCallback(modules, callback, forceRefresh), errorOnCallback(error), forceRefresh);
|
||||
});
|
||||
getModulePart(modules -> modules.getModule(id, saveOnCallback(modules, callback, forceRefresh), errorOnCallback(error), forceRefresh));
|
||||
}
|
||||
|
||||
public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error) {
|
||||
@@ -94,14 +86,7 @@ public class KVV {
|
||||
}
|
||||
|
||||
public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||
this.getLastToken(token -> {
|
||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
||||
if (modules == null) {
|
||||
modules = new KVVModuleList(KVV.this.context, token);
|
||||
addons.put("modules", modules);
|
||||
}
|
||||
modules.getModuleList(saveOnCallback(modules, callback, forceRefresh), errorOnCallback(error), forceRefresh);
|
||||
});
|
||||
getModulePart(modules -> modules.getModuleList(saveOnCallback(modules, callback, forceRefresh), errorOnCallback(error), forceRefresh));
|
||||
}
|
||||
|
||||
public void getModuleDetails(Modules.Module module, final NetworkCallback<Pair<Modules.Module, Boolean>> callback, final NetworkErrorCallback error) {
|
||||
@@ -150,7 +135,7 @@ public class KVV {
|
||||
this.getLastToken(token -> {
|
||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
||||
if (modules == null) {
|
||||
modules = new KVVModuleList(KVV.this.context, token);
|
||||
modules = new KVVModuleList(this.context, token);
|
||||
addons.put("modules", modules);
|
||||
}
|
||||
func.apply(modules);
|
||||
@@ -173,7 +158,7 @@ public class KVV {
|
||||
private NetworkErrorCallback errorOnCallback(NetworkErrorCallback errorCallback){
|
||||
return (error -> {
|
||||
if (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)
|
||||
mListener.loginTokenInvalid();
|
||||
mListener.loginTokenInvalid(false);
|
||||
else
|
||||
mListener.refreshFailed(true);
|
||||
errorCallback.onError(error);
|
||||
|
||||
@@ -21,10 +21,12 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
|
||||
*/
|
||||
|
||||
class KVVLogin extends HTTPService {
|
||||
private final Context mContext;
|
||||
private LoginToken loginToken;
|
||||
|
||||
KVVLogin(Context context) {
|
||||
super(context, false);
|
||||
this.mContext = context;
|
||||
try {
|
||||
this.loginToken = LoginToken.load(context);
|
||||
} catch (IOException e) {
|
||||
@@ -57,14 +59,14 @@ class KVVLogin extends HTTPService {
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteOffline(Context context) {
|
||||
public void deleteOffline() {
|
||||
if (this.loginToken != null)
|
||||
this.loginToken.delete(context);
|
||||
this.loginToken.delete(mContext);
|
||||
}
|
||||
|
||||
public void saveOffline(Context context) throws IOException {
|
||||
public void saveOffline() throws IOException {
|
||||
if (this.loginToken != null)
|
||||
this.loginToken.save(context);
|
||||
this.loginToken.save(mContext);
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +105,7 @@ class KVVLogin extends HTTPService {
|
||||
loginToken.setAdditionals(displayName, email);
|
||||
callback.onResponse(loginToken);
|
||||
} catch (JSONException e) {
|
||||
errorCallback.onError(new NetworkError(100201, 403, "Cannot parse announcements!"));
|
||||
errorCallback.onError(new NetworkError(100201, 403, "Cannot parse profile!"));
|
||||
return;
|
||||
}
|
||||
}, error -> errorCallback.onError(new NetworkError(100200, error.networkResponse.statusCode, "Testing login failed!")));
|
||||
|
||||
@@ -120,6 +120,10 @@ public class KVVModuleList extends HTTPService {
|
||||
errorCallback.onError(new NetworkError(101103, 403, "Cannot parse module list!"));
|
||||
return;
|
||||
}
|
||||
// Empty module may *may be* because token is invalid -> check
|
||||
if (modules.size() == 0)
|
||||
testLogin(token, token -> callback.onResponse(modules), errorCallback);
|
||||
else
|
||||
callback.onResponse(modules);
|
||||
}, error -> errorCallback.onError(new NetworkError(101104, error.networkResponse.statusCode, "Cannot get module list!")));
|
||||
}
|
||||
@@ -228,6 +232,10 @@ public class KVVModuleList extends HTTPService {
|
||||
errorCallback.onError(new NetworkError(101202, 403, "Cannot parse announcements!"));
|
||||
return;
|
||||
}
|
||||
// Empty announcements may *may be* because token is invalid -> check
|
||||
if (announcements.size() == 0)
|
||||
testLogin(token, token -> callback.onResponse(announcements), errorCallback);
|
||||
else
|
||||
callback.onResponse(announcements);
|
||||
}, error -> errorCallback.onError(new NetworkError(101203, error.networkResponse.statusCode, "Cannot get announcements!")));
|
||||
}
|
||||
@@ -293,6 +301,10 @@ public class KVVModuleList extends HTTPService {
|
||||
errorCallback.onError(new NetworkError(101302, 403, "Cannot parse announcements!"));
|
||||
return;
|
||||
}
|
||||
// Empty assignments may *may be* because token is invalid -> check
|
||||
if (assignments.size() == 0)
|
||||
testLogin(token, token -> callback.onResponse(assignments), errorCallback);
|
||||
else
|
||||
callback.onResponse(assignments);
|
||||
}, error -> errorCallback.onError(new NetworkError(101303, error.networkResponse.statusCode, "Cannot get assignments!")));
|
||||
|
||||
@@ -350,6 +362,10 @@ public class KVVModuleList extends HTTPService {
|
||||
return;
|
||||
}
|
||||
events.sort();
|
||||
// Empty events may *may be* because token is invalid -> check
|
||||
if (events.size() == 0)
|
||||
testLogin(token, token -> callback.onResponse(events), errorCallback);
|
||||
else
|
||||
callback.onResponse(events);
|
||||
}, error -> errorCallback.onError(new NetworkError(101403, error.networkResponse.statusCode, "Cannot get calendar entries!")));
|
||||
}
|
||||
@@ -409,4 +425,27 @@ public class KVVModuleList extends HTTPService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO Better, more elegant solution than duplicate code KVVLogin
|
||||
private void testLogin(LoginToken loginToken, NetworkCallback<LoginToken> callback, NetworkErrorCallback errorCallback) {
|
||||
get(String.format("https://kvv.imp.fu-berlin.de/direct/profile/%s.json", loginToken.getUsername()), loginToken.getCookies(), response -> {
|
||||
String body = response.getParsed();
|
||||
try {
|
||||
JSONObject json = new JSONObject(body);
|
||||
String displayName = json.getString("displayName");
|
||||
String email = json.getString("email");
|
||||
loginToken.setAdditionals(displayName, email);
|
||||
callback.onResponse(loginToken);
|
||||
} catch (JSONException e) {
|
||||
errorCallback.onError(new NetworkError(100201, 403, "Cannot parse profile!"));
|
||||
return;
|
||||
}
|
||||
}, error -> errorCallback.onError(new NetworkError(100200, error.networkResponse.statusCode, "Testing login failed!")));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public interface MainAcitivityListener {
|
||||
|
||||
GoogleAuth getGoogleAuth();
|
||||
|
||||
void loginTokenInvalid();
|
||||
void loginTokenInvalid(boolean doPrecheck);
|
||||
|
||||
void refreshFailed(boolean isFailed);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user