Skip to content

Commit

Permalink
Refactored some schedule activity-presenter methods
Browse files Browse the repository at this point in the history
  • Loading branch information
davidtakac committed Dec 29, 2018
1 parent fd1fb9e commit 0125c52
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,16 @@ public String getDarkBackgroundColor() {
return "#" + rgb;
}

@Override
public String getThemeChangedKey() {
return r.getString(R.string.prefkey_themechanged);
}

@Override
public String getLoadOnResumeKey() {
return r.getString(R.string.prefkey_loadonresume);
}

@Override
public String getScheduleUrl() {
return r.getString(R.string.ferit_baseurl) + r.getString(R.string.ferit_scheduleurl);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ public interface ResourceManager {
String getGroupsKey();
String getSettingsModifiedKey();
String getDarkScheduleKey();
String getThemeChangedKey();
String getLoadOnResumeKey();

String getScheduleUrl();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@

public interface ScheduleContract {
interface Presenter {
void loadCurrentWeekScrollToCurrentDay();
void loadCurrentWeekOrScrollToDay();
void hideElementsOtherThanSchedule();
void scrollToCurrentDay();
void highlightSelectedGroups();
void loadPreviousWeek();
void loadNextWeek();
void changeToDarkBackground();
void onResume();
void applyJavascript();
}

interface View {
void loadUrl(String toLoad);
void injectJavascript(String script);
String getLoadedUrl();
void refreshUi();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package os.dtakac.feritraspored.presenter.schedule;

import android.util.Log;

import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

import os.dtakac.feritraspored.model.resources.ResourceManager;
import os.dtakac.feritraspored.model.repository.IRepository;
import os.dtakac.feritraspored.util.Constants;
import os.dtakac.feritraspored.util.JavascriptUtil;

public class SchedulePresenter implements ScheduleContract.Presenter {
Expand Down Expand Up @@ -37,7 +34,7 @@ public SchedulePresenter(ScheduleContract.View view, IRepository repo, ResourceM
}

@Override
public void loadCurrentWeekScrollToCurrentDay() {
public void loadCurrentWeekOrScrollToDay() {
String loadedUrl = view.getLoadedUrl();
setDisplayedWeek(currentWeek);

Expand Down Expand Up @@ -67,9 +64,33 @@ public void hideElementsOtherThanSchedule() {

@Override
public void changeToDarkBackground() {
view.injectJavascript(jsUtil.changeClassBackgroundColor(classesToChangeBackgroundColor, resManager.getDarkBackgroundColor()));
view.injectJavascript(jsUtil.changeIdBackgroundColor(idsToChangeBackgroundColor, resManager.getDarkBackgroundColor()));
}

@Override
public void onResume() {
boolean themeChanged = repo.get(resManager.getThemeChangedKey(), false);

if(themeChanged){
repo.add(resManager.getThemeChangedKey(), false);
view.refreshUi();
} else {
boolean loadOnResume = repo.get(resManager.getLoadOnResumeKey(), false);
boolean settingsModified = repo.get(resManager.getSettingsModifiedKey(), false);
if (loadOnResume || settingsModified) {
loadCurrentWeekOrScrollToDay();
}
}
}

@Override
public void applyJavascript() {
hideElementsOtherThanSchedule();
scrollToCurrentDay();
highlightSelectedGroups();
if(repo.get(resManager.getDarkScheduleKey(), false)) {
view.injectJavascript(jsUtil.changeClassBackgroundColor(classesToChangeBackgroundColor, resManager.getDarkBackgroundColor()));
view.injectJavascript(jsUtil.changeIdBackgroundColor(idsToChangeBackgroundColor, resManager.getDarkBackgroundColor()));
changeToDarkBackground();
}
}

Expand Down
94 changes: 39 additions & 55 deletions app/src/main/java/os/dtakac/feritraspored/ui/ScheduleActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import os.dtakac.feritraspored.ui.settings.SettingsActivity;
import os.dtakac.feritraspored.util.JavascriptUtil;

// TODO: 12/28/18 refactor, let presenter handle deciding what to do
public class ScheduleActivity extends AppCompatActivity implements ScheduleContract.View {

@BindView(R.id.wv_schedule)
Expand Down Expand Up @@ -65,32 +64,23 @@ protected void onCreate(Bundle savedInstanceState) {
loadCurrentDay();
}

private void initActionBar() {
setTitle(getString(R.string.schedule_label));
}

private void loadCurrentDay(){
presenter.loadCurrentWeekScrollToCurrentDay();
}

@Override
protected void onResume() {
super.onResume();
presenter.onResume();
}

SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(this);
boolean themeChanged = s.getBoolean(getString(R.string.prefkey_themechanged), false);

if(themeChanged){
s.edit().putBoolean(getString(R.string.prefkey_themechanged), false).apply();
recreate();
} else {
boolean loadOnResume = s.getBoolean(getString(R.string.prefkey_loadonresume), false);
boolean settingsModified = s.getBoolean(getString(R.string.prefkey_settings_modified), false);
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}

if (loadOnResume || settingsModified) {
loadCurrentDay();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
handleSelectedMenuItem(item.getItemId());
return super.onOptionsItemSelected(item);
}

@Override
Expand All @@ -111,16 +101,12 @@ public String getLoadedUrl() {
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
public void refreshUi() {
recreate();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
handleSelectedMenuItem(item.getItemId());
return super.onOptionsItemSelected(item);
private void loadCurrentDay(){
presenter.loadCurrentWeekOrScrollToDay();
}

private void handleSelectedMenuItem(int itemId) {
Expand All @@ -136,15 +122,6 @@ private void handleSelectedMenuItem(int itemId) {
}
}

private void initWebView() {
wvSchedule.setWebViewClient(new ScheduleClient());
wvSchedule.getSettings().setJavaScriptEnabled(true);
}

private void initNavbar(){
navbar.enableAnimation(false);
}

@OnClick({R.id.item_navitems_current, R.id.item_navitems_next, R.id.item_navitems_previous})
void navItemClicked(View v){
switch(v.getId()){
Expand All @@ -155,18 +132,38 @@ void navItemClicked(View v){
}
}

private void setLoading(boolean isLoading){
swipeRefresh.setRefreshing(isLoading);
private void initActionBar() {
setTitle(getString(R.string.schedule_label));
}

private void initWebView() {
wvSchedule.setWebViewClient(new ScheduleClient());
wvSchedule.getSettings().setJavaScriptEnabled(true);
}

private void initNavbar(){
navbar.enableAnimation(false);
}

private void initSwipeRefresh() {
swipeRefresh.setOnRefreshListener(() -> wvSchedule.reload());
}

private void setLoading(boolean isLoading){
swipeRefresh.setRefreshing(isLoading);
}

private void openUrlInExternalBrowser(String url){
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}

private void setTheme(){
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(this);
boolean darkTheme = s.getBoolean(getString(R.string.prefkey_darktheme), false);

setTheme(darkTheme ? R.style.DarkTheme : R.style.LightTheme);
}

private class ScheduleClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Expand All @@ -189,22 +186,9 @@ public void onPageStarted(WebView view, String url, Bitmap favicon) {
public void onPageFinished(WebView view, String url) {
setLoading(false);
if(url.contains(getString(R.string.ferit_scheduleurl))) {
applyJavascript();
presenter.applyJavascript();
}
}
}

private void applyJavascript() {
presenter.hideElementsOtherThanSchedule();
presenter.scrollToCurrentDay();
presenter.highlightSelectedGroups();
presenter.changeToDarkBackground();
}

private void setTheme(){
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(this);
boolean darkTheme = s.getBoolean(getString(R.string.prefkey_darktheme), false);

setTheme(darkTheme ? R.style.DarkTheme : R.style.LightTheme);
}
}

0 comments on commit 0125c52

Please sign in to comment.