1
0

Prepare app for MVP (#40)

This commit is contained in:
Rafał Borcz
2018-01-02 21:55:58 +01:00
committed by Mikołaj Pich
parent 844230956a
commit 7e6a73d1f3
69 changed files with 455 additions and 442 deletions

View File

@ -14,7 +14,7 @@
<uses-sdk tools:overrideLibrary="com.thoughtbot.expandablerecyclerview" />
<application
android:name=".ui.WulkanowyApp"
android:name=".WulkanowyApp"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"

View File

@ -1,17 +1,15 @@
package io.github.wulkanowy.ui;
package io.github.wulkanowy;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.query.QueryBuilder;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.utils.Log;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
public class WulkanowyApp extends Application {
@ -22,12 +20,14 @@ public class WulkanowyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
enableDebugLog();
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "wulkanowy-database");
Database database = devOpenHelper.getWritableDb();
if (BuildConfig.DEBUG) {
enableDebugLog();
}
daoSession = new DaoMaster(database).newSession();
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "wulkanowy-db");
daoSession = new DaoMaster(devOpenHelper.getWritableDb()).newSession();
int schemaVersion = getSharedPreferences("LoginData", Context.MODE_PRIVATE).getInt("schemaVersion", 0);

View File

@ -1,12 +1,12 @@
package io.github.wulkanowy.dao;
package io.github.wulkanowy.db.dao;
import org.greenrobot.greendao.query.Query;
import java.util.List;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.dao.entities.GradeDao;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.GradeDao;
public class DatabaseAccess {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.DaoException;
import org.greenrobot.greendao.annotation.Entity;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.DaoException;
import org.greenrobot.greendao.annotation.Entity;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import android.os.Parcel;
import android.os.Parcelable;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.DaoException;
import org.greenrobot.greendao.annotation.Entity;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.DaoException;
import org.greenrobot.greendao.annotation.Entity;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.DaoException;
import org.greenrobot.greendao.annotation.Entity;

View File

@ -0,0 +1,27 @@
package io.github.wulkanowy.di.modules;
import android.app.Application;
import android.content.Context;
import dagger.Module;
import dagger.Provides;
@Module
public class ApplicationModule {
protected final Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
Application provideApplication() {
return application;
}
@Provides
Context provideAppContext() {
return application;
}
}

View File

@ -15,15 +15,15 @@ import java.util.List;
import java.util.Random;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.DatabaseAccess;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.services.VulcanSynchronization;
import io.github.wulkanowy.WulkanowyApp;
import io.github.wulkanowy.db.dao.DatabaseAccess;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.services.notifications.NotificationBuilder;
import io.github.wulkanowy.ui.WulkanowyApp;
import io.github.wulkanowy.services.sync.VulcanSync;
import io.github.wulkanowy.ui.main.DashboardActivity;
public class FullSyncJob extends VulcanJobHelper<FullSyncJob> {
public class FullSyncJob extends VulcanJobHelper {
private static final String UNIQUE_TAG = "FullSync";
@ -51,7 +51,7 @@ public class FullSyncJob extends VulcanJobHelper<FullSyncJob> {
public void workToBePerformed() throws Exception {
DaoSession daoSession = ((WulkanowyApp) getApplication()).getDaoSession();
VulcanSynchronization synchronization = new VulcanSynchronization()
VulcanSync synchronization = new VulcanSync()
.loginCurrentUser(getApplicationContext(), daoSession);
synchronization.syncAll();
List<Grade> newGradeList = new DatabaseAccess().getNewGrades(daoSession);

View File

@ -8,16 +8,14 @@ import com.firebase.jobdispatcher.FirebaseJobDispatcher;
import com.firebase.jobdispatcher.GooglePlayDriver;
import com.firebase.jobdispatcher.Job;
public abstract class VulcanJobHelper<T extends VulcanJobHelper> {
public abstract class VulcanJobHelper {
public static final String DEBUG_TAG = "SynchronizationService";
@SuppressWarnings("unchecked")
public final T scheduledJob(Context context) {
public final void scheduledJob(Context context) {
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
dispatcher.mustSchedule(createJob(dispatcher));
Log.i(DEBUG_TAG, "Wulkanowy Job is initiation: " + this.toString());
return (T) this;
}
protected abstract Job createJob(FirebaseJobDispatcher dispatcher);

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronisation;
package io.github.wulkanowy.services.sync;
import android.content.Context;
import android.util.Log;
@ -10,13 +10,12 @@ import io.github.wulkanowy.api.login.AccountPermissionException;
import io.github.wulkanowy.api.login.BadCredentialsException;
import io.github.wulkanowy.api.login.LoginErrorException;
import io.github.wulkanowy.api.login.VulcanOfflineException;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.AccountDao;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.security.CryptoException;
import io.github.wulkanowy.security.Safety;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.AccountDao;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.utils.security.CryptoException;
import io.github.wulkanowy.utils.security.Safety;
public class CurrentAccountLogin {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronisation;
package io.github.wulkanowy.services.sync;
import android.content.Context;
import android.content.SharedPreferences;
@ -10,12 +10,11 @@ import io.github.wulkanowy.api.login.AccountPermissionException;
import io.github.wulkanowy.api.login.BadCredentialsException;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.api.login.VulcanOfflineException;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.AccountDao;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.security.CryptoException;
import io.github.wulkanowy.security.Safety;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.AccountDao;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.utils.security.CryptoException;
import io.github.wulkanowy.utils.security.Safety;
public class FirstAccountLogin {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronisation;
package io.github.wulkanowy.services.sync;
import android.util.Log;
@ -11,18 +11,17 @@ import java.util.List;
import io.github.wulkanowy.api.grades.GradesList;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.dao.EntitiesCompare;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.AccountDao;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.dao.entities.GradeDao;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.dao.entities.SubjectDao;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.AccountDao;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.GradeDao;
import io.github.wulkanowy.db.dao.entities.Subject;
import io.github.wulkanowy.db.dao.entities.SubjectDao;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.utilities.ConversionVulcanObject;
import io.github.wulkanowy.utils.DataObjectConverter;
import io.github.wulkanowy.utils.EntitiesCompare;
public class GradesSynchronisation {
public class GradesSync {
public void sync(LoginSession loginSession) throws IOException,
ParseException, NotLoggedInErrorException {
@ -39,7 +38,7 @@ public class GradesSynchronisation {
account.resetSubjectList();
List<Grade> gradesFromDb = account.getGradeList();
List<Grade> gradeEntitiesList = ConversionVulcanObject.gradesToGradeEntities(gradesList.getAll());
List<Grade> gradeEntitiesList = DataObjectConverter.gradesToGradeEntities(gradesList.getAll());
List<Grade> updatedList = EntitiesCompare.compareGradeList(gradeEntitiesList, gradesFromDb);
List<Grade> lastList = new ArrayList<>();

View File

@ -1,11 +1,12 @@
package io.github.wulkanowy.services;
package io.github.wulkanowy.services.sync;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import io.github.wulkanowy.api.Vulcan;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.DaoSession;
public class LoginSession {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronisation;
package io.github.wulkanowy.services.sync;
import android.util.Log;
@ -8,13 +8,12 @@ import java.util.List;
import io.github.wulkanowy.api.grades.SubjectsList;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.dao.entities.SubjectDao;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.db.dao.entities.Subject;
import io.github.wulkanowy.db.dao.entities.SubjectDao;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.utilities.ConversionVulcanObject;
import io.github.wulkanowy.utils.DataObjectConverter;
public class SubjectsSynchronisation {
public class SubjectsSync {
public void sync(LoginSession loginSession) throws IOException,
NotLoggedInErrorException {
@ -22,7 +21,7 @@ public class SubjectsSynchronisation {
SubjectsList subjectsList = loginSession.getVulcan().getSubjectsList();
SubjectDao subjectDao = loginSession.getDaoSession().getSubjectDao();
List<Subject> subjectEntitiesList = ConversionVulcanObject.subjectsToSubjectEntities(subjectsList.getAll());
List<Subject> subjectEntitiesList = DataObjectConverter.subjectsToSubjectEntities(subjectsList.getAll());
List<Subject> preparedList = new ArrayList<>();
for (Subject subject : subjectEntitiesList) {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronisation;
package io.github.wulkanowy.services.sync;
import android.support.annotation.NonNull;
@ -15,16 +15,15 @@ import java.util.List;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.api.timetable.Day;
import io.github.wulkanowy.api.timetable.Week;
import io.github.wulkanowy.dao.entities.DayDao;
import io.github.wulkanowy.dao.entities.Lesson;
import io.github.wulkanowy.dao.entities.LessonDao;
import io.github.wulkanowy.dao.entities.WeekDao;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.db.dao.entities.DayDao;
import io.github.wulkanowy.db.dao.entities.Lesson;
import io.github.wulkanowy.db.dao.entities.LessonDao;
import io.github.wulkanowy.db.dao.entities.WeekDao;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.utilities.ConversionVulcanObject;
import io.github.wulkanowy.utilities.TimeUtilities;
import io.github.wulkanowy.utils.DataObjectConverter;
import io.github.wulkanowy.utils.TimeUtils;
public class TimetableSynchronization {
public class TimetableSync {
public void sync(@NonNull LoginSession loginSession, @Nullable String dateOfMonday) throws NotLoggedInErrorException,
IOException, ParseException {
@ -36,17 +35,17 @@ public class TimetableSynchronization {
Week week = dateOfMonday == null ? loginSession.getVulcan().getTimetable().getWeekTable()
: loginSession.getVulcan().getTimetable()
.getWeekTable(String.valueOf(TimeUtilities.getNetTicks(dateOfMonday, "yyyy-MM-dd")));
.getWeekTable(String.valueOf(TimeUtils.getNetTicks(dateOfMonday, "yyyy-MM-dd")));
Query<io.github.wulkanowy.dao.entities.Week> weekQuery = weekDao.queryBuilder()
Query<io.github.wulkanowy.db.dao.entities.Week> weekQuery = weekDao.queryBuilder()
.where(WeekDao.Properties.UserId.eq(loginSession.getUserId()), WeekDao.Properties.StartDayDate.eq(week.getStartDayDate())).build();
io.github.wulkanowy.dao.entities.Week week1 = weekQuery.unique();
io.github.wulkanowy.db.dao.entities.Week week1 = weekQuery.unique();
if (week1 != null) {
weekId = week1.getId();
} else {
weekId = weekDao.insert(ConversionVulcanObject.weekToWeekEntitie(week).setUserId(loginSession.getUserId()));
weekId = weekDao.insert(DataObjectConverter.weekToWeekEntitie(week).setUserId(loginSession.getUserId()));
}
List<Day> dayList = week.getDays();
@ -56,29 +55,34 @@ public class TimetableSynchronization {
Log.d(VulcanJobHelper.DEBUG_TAG, "Synchronization days (amount = " + dayList.size() + ")");
List<Lesson> lessonList = new ArrayList<>();
lessonList.addAll(getPreparedLessonsList(dayList, dayDao, lessonDao));
lessonList.addAll(getPreparedLessonsList(dayList, dayDao, lessonDao, loginSession.getUserId(), weekId));
lessonDao.saveInTx(lessonList);
Log.d(VulcanJobHelper.DEBUG_TAG, "Synchronization lessons (amount = " + lessonList.size() + ")");
}
private List<Lesson> getPreparedLessonsList(List<Day> dayList, DayDao dayDao, LessonDao lessonDao) {
private List<Lesson> getPreparedLessonsList(List<Day> dayList, DayDao dayDao, LessonDao lessonDao, long userId, long weekId) {
List<Lesson> allLessonsList = new ArrayList<>();
for (Day day : dayList) {
Query<io.github.wulkanowy.dao.entities.Day> dayQuery = dayDao.queryBuilder()
.where(DayDao.Properties.Date.eq(day.getDate()))
Query<io.github.wulkanowy.db.dao.entities.Day> dayQuery = dayDao.queryBuilder()
.where(DayDao.Properties.Date.eq(day.getDate()),
DayDao.Properties.UserId.eq(userId),
DayDao.Properties.WeekId.eq(weekId))
.build();
List<Lesson> lessonEntityList = ConversionVulcanObject.lessonsToLessonsEntities(day.getLessons());
List<Lesson> lessonEntityList = DataObjectConverter.lessonsToLessonsEntities(day.getLessons());
List<Lesson> updatedLessonEntityList = new ArrayList<>();
for (Lesson lesson : lessonEntityList) {
Query<Lesson> lessonQuery = lessonDao.queryBuilder().where(LessonDao.Properties.DayId.eq(dayQuery.uniqueOrThrow().getId()), LessonDao.Properties.Date.eq(lesson.getDate()),
LessonDao.Properties.StartTime.eq(lesson.getStartTime()), LessonDao.Properties.EndTime.eq(lesson.getEndTime())).build();
Lesson lesson1 = lessonQuery.unique();
Lesson lesson1 = lessonDao.queryBuilder()
.where(LessonDao.Properties.DayId.eq(dayQuery.uniqueOrThrow().getId()),
LessonDao.Properties.Date.eq(lesson.getDate()),
LessonDao.Properties.StartTime.eq(lesson.getStartTime()),
LessonDao.Properties.EndTime.eq(lesson.getEndTime()))
.unique();
if (lesson1 != null) {
lesson.setId(lesson1.getId());
@ -94,15 +98,15 @@ public class TimetableSynchronization {
return allLessonsList;
}
private List<io.github.wulkanowy.dao.entities.Day> getPreparedDaysList(List<Day> dayList, long userId, long weekId, DayDao dayDao) {
List<io.github.wulkanowy.dao.entities.Day> updatedDayList = new ArrayList<>();
List<io.github.wulkanowy.dao.entities.Day> dayEntityList = ConversionVulcanObject
private List<io.github.wulkanowy.db.dao.entities.Day> getPreparedDaysList(List<Day> dayList, long userId, long weekId, DayDao dayDao) {
List<io.github.wulkanowy.db.dao.entities.Day> updatedDayList = new ArrayList<>();
List<io.github.wulkanowy.db.dao.entities.Day> dayEntityList = DataObjectConverter
.daysToDaysEntities(dayList);
for (io.github.wulkanowy.dao.entities.Day day : dayEntityList) {
for (io.github.wulkanowy.db.dao.entities.Day day : dayEntityList) {
Query<io.github.wulkanowy.dao.entities.Day> dayQuery = dayDao.queryBuilder().where(DayDao.Properties.UserId.eq(userId), DayDao.Properties.WeekId.eq(weekId), DayDao.Properties.Date.eq(day.getDate())).build();
Query<io.github.wulkanowy.db.dao.entities.Day> dayQuery = dayDao.queryBuilder().where(DayDao.Properties.UserId.eq(userId), DayDao.Properties.WeekId.eq(weekId), DayDao.Properties.Date.eq(day.getDate())).build();
io.github.wulkanowy.dao.entities.Day day1 = dayQuery.unique();
io.github.wulkanowy.db.dao.entities.Day day1 = dayQuery.unique();
if (day1 != null) {
day.setId(day1.getId());

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services;
package io.github.wulkanowy.services.sync;
import android.content.Context;
import android.support.annotation.Nullable;
@ -12,24 +12,19 @@ import io.github.wulkanowy.api.login.BadCredentialsException;
import io.github.wulkanowy.api.login.LoginErrorException;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.api.login.VulcanOfflineException;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.security.CryptoException;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.services.synchronisation.CurrentAccountLogin;
import io.github.wulkanowy.services.synchronisation.FirstAccountLogin;
import io.github.wulkanowy.services.synchronisation.GradesSynchronisation;
import io.github.wulkanowy.services.synchronisation.SubjectsSynchronisation;
import io.github.wulkanowy.services.synchronisation.TimetableSynchronization;
import io.github.wulkanowy.utils.security.CryptoException;
public class VulcanSynchronization {
public class VulcanSync {
private LoginSession loginSession;
public VulcanSynchronization(LoginSession loginSession) {
public VulcanSync(LoginSession loginSession) {
this.loginSession = loginSession;
}
public VulcanSynchronization() {
public VulcanSync() {
this.loginSession = new LoginSession();
}
@ -39,12 +34,12 @@ public class VulcanSynchronization {
loginSession = firstAccountLogin.login(email, password, symbol);
}
public VulcanSynchronization loginCurrentUser(Context context, DaoSession daoSession) throws CryptoException,
public VulcanSync loginCurrentUser(Context context, DaoSession daoSession) throws CryptoException,
BadCredentialsException, AccountPermissionException, LoginErrorException, IOException, VulcanOfflineException {
return loginCurrentUser(context, daoSession, new Vulcan());
}
public VulcanSynchronization loginCurrentUser(Context context, DaoSession daoSession, Vulcan vulcan)
public VulcanSync loginCurrentUser(Context context, DaoSession daoSession, Vulcan vulcan)
throws CryptoException, BadCredentialsException, AccountPermissionException,
LoginErrorException, IOException, VulcanOfflineException {
@ -60,31 +55,31 @@ public class VulcanSynchronization {
public void syncGrades() throws IOException {
if (loginSession != null) {
GradesSynchronisation gradesSynchronisation = new GradesSynchronisation();
GradesSync gradesSync = new GradesSync();
try {
gradesSynchronisation.sync(loginSession);
gradesSync.sync(loginSession);
} catch (Exception e) {
Log.e(VulcanJobHelper.DEBUG_TAG, "Synchronisation of grades failed", e);
throw new IOException(e.getCause());
}
} else {
Log.e(VulcanJobHelper.DEBUG_TAG, "Before synchronization, should login user to log",
Log.e(VulcanJobHelper.DEBUG_TAG, "Before sync, should login user to log",
new UnsupportedOperationException());
}
}
public void syncSubjectsAndGrades() throws IOException {
if (loginSession != null) {
SubjectsSynchronisation subjectsSynchronisation = new SubjectsSynchronisation();
SubjectsSync subjectsSync = new SubjectsSync();
try {
subjectsSynchronisation.sync(loginSession);
subjectsSync.sync(loginSession);
syncGrades();
} catch (Exception e) {
Log.e(VulcanJobHelper.DEBUG_TAG, "Synchronisation of subjects failed", e);
throw new IOException(e.getCause());
}
} else {
Log.e(VulcanJobHelper.DEBUG_TAG, "Before synchronization, should login user to log",
Log.e(VulcanJobHelper.DEBUG_TAG, "Before sync, should login user to log",
new UnsupportedOperationException());
}
}
@ -95,15 +90,15 @@ public class VulcanSynchronization {
public void syncTimetable(@Nullable String date) throws IOException {
if (loginSession != null) {
TimetableSynchronization timetableSynchronization = new TimetableSynchronization();
TimetableSync timetableSync = new TimetableSync();
try {
timetableSynchronization.sync(loginSession, date);
timetableSync.sync(loginSession, date);
} catch (Exception e) {
Log.e(VulcanJobHelper.DEBUG_TAG, "Synchronization of timetable failed", e);
throw new IOException(e.getCause());
}
} else {
Log.e(VulcanJobHelper.DEBUG_TAG, "Before synchronization, should login user to log",
Log.e(VulcanJobHelper.DEBUG_TAG, "Before sync, should login user to log",
new UnsupportedOperationException());
}
}

View File

@ -1,7 +1,6 @@
package io.github.wulkanowy.ui.login;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
@ -12,7 +11,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
@ -23,6 +21,7 @@ import java.util.LinkedHashMap;
import io.github.wulkanowy.R;
import io.github.wulkanowy.services.Updater;
import io.github.wulkanowy.utils.KeyboardUtils;
/**
* A login screen that offers login via email/password.
@ -178,7 +177,7 @@ public class LoginActivity extends Activity {
LoginTask authTask = new LoginTask(this, email, password, symbol);
authTask.showProgress(true);
authTask.execute();
hideSoftKeyboard();
KeyboardUtils.hideSoftInput(this);
}
}
@ -190,15 +189,6 @@ public class LoginActivity extends Activity {
return password.length() > 4;
}
private void hideSoftKeyboard() {
InputMethodManager manager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(getWindow()
.getDecorView().getApplicationWindowToken(), 0);
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
@ -220,7 +210,7 @@ public class LoginActivity extends Activity {
float y = ev.getRawY() + view.getTop() - coordinators[1];
if (x < view.getLeft() || x > view.getRight() || y < view.getTop()
|| y > view.getBottom()) {
hideSoftKeyboard();
KeyboardUtils.hideSoftInput(this);
}
}
}

View File

@ -3,7 +3,6 @@ package io.github.wulkanowy.ui.login;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
@ -11,7 +10,6 @@ import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
@ -21,18 +19,19 @@ import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import io.github.wulkanowy.R;
import io.github.wulkanowy.WulkanowyApp;
import io.github.wulkanowy.api.login.AccountPermissionException;
import io.github.wulkanowy.api.login.BadCredentialsException;
import io.github.wulkanowy.api.login.NotLoggedInErrorException;
import io.github.wulkanowy.api.login.VulcanOfflineException;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.security.CryptoException;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.VulcanSynchronization;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.services.jobs.FullSyncJob;
import io.github.wulkanowy.ui.WulkanowyApp;
import io.github.wulkanowy.services.sync.LoginSession;
import io.github.wulkanowy.services.sync.VulcanSync;
import io.github.wulkanowy.ui.main.DashboardActivity;
import io.github.wulkanowy.utilities.ConnectionUtilities;
import io.github.wulkanowy.utils.KeyboardUtils;
import io.github.wulkanowy.utils.NetworkUtils;
import io.github.wulkanowy.utils.security.CryptoException;
/**
* Represents an asynchronous login/registration task used to authenticate
@ -68,16 +67,16 @@ public class LoginTask extends AsyncTask<Void, String, Integer> {
@Override
protected Integer doInBackground(Void... params) {
if (ConnectionUtilities.isOnline(activity.get())) {
if (NetworkUtils.isOnline(activity.get())) {
DaoSession daoSession = ((WulkanowyApp) activity.get().getApplication()).getDaoSession();
VulcanSynchronization vulcanSynchronization = new VulcanSynchronization(new LoginSession());
VulcanSync vulcanSync = new VulcanSync(new LoginSession());
try {
publishProgress("1", activity.get().getResources().getString(R.string.step_login));
vulcanSynchronization.firstLoginSignInStep(activity.get(), daoSession, email, password, symbol);
vulcanSync.firstLoginSignInStep(activity.get(), daoSession, email, password, symbol);
publishProgress("2", activity.get().getResources().getString(R.string.step_synchronization));
vulcanSynchronization.syncAll();
vulcanSync.syncAll();
} catch (BadCredentialsException e) {
return R.string.login_bad_credentials_text;
} catch (AccountPermissionException e) {
@ -127,7 +126,7 @@ public class LoginTask extends AsyncTask<Void, String, Integer> {
EditText passwordView = activity.get().findViewById(R.id.password);
passwordView.setError(activity.get().getString(R.string.error_incorrect_password));
passwordView.requestFocus();
showSoftKeyboard(passwordView);
KeyboardUtils.showSoftInput(passwordView, activity.get());
break;
// if no permission
@ -139,7 +138,7 @@ public class LoginTask extends AsyncTask<Void, String, Integer> {
EditText symbolView = activity.get().findViewById(R.id.symbol);
symbolView.setError(activity.get().getString(R.string.error_bad_account_permission));
symbolView.requestFocus();
showSoftKeyboard(symbolView);
KeyboardUtils.showSoftInput(symbolView, activity.get());
break;
// if rooted and SDK < 18
@ -182,15 +181,6 @@ public class LoginTask extends AsyncTask<Void, String, Integer> {
changeProgressVisibility(show, animTime);
}
private void showSoftKeyboard(EditText editText) {
InputMethodManager manager = (InputMethodManager)
activity.get().getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.showSoftInput(editText,
InputMethodManager.SHOW_IMPLICIT);
}
}
private void changeLoginFormVisibility(final boolean show, final int animTime) {
loginFormView.get().setVisibility(show ? View.GONE : View.VISIBLE);
loginFormView.get().animate().setDuration(animTime).alpha(

View File

@ -22,9 +22,9 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.ui.WulkanowyApp;
import io.github.wulkanowy.utilities.ConnectionUtilities;
import io.github.wulkanowy.WulkanowyApp;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.utils.NetworkUtils;
public abstract class AbstractFragment<T extends AbstractExpandableHeaderItem> extends Fragment
implements AsyncResponse<T> {
@ -158,7 +158,7 @@ public abstract class AbstractFragment<T extends AbstractExpandableHeaderItem> e
return new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (ConnectionUtilities.isOnline(getContext())) {
if (NetworkUtils.isOnline(getContext())) {
new RefreshTask(AbstractFragment.this).execute();
} else {
Toast.makeText(getContext(), R.string.noInternet_text, Toast.LENGTH_SHORT).show();

View File

@ -42,7 +42,7 @@ public class RefreshTask extends AsyncTask<Void, Void, List<?>> {
return null;
} catch (Exception e) {
stringEventId = R.string.refresh_error_text;
Log.e(DEBUG_TAG, "There was a synchronization problem", e);
Log.e(DEBUG_TAG, "There was a sync problem", e);
return null;
}
}

View File

@ -18,8 +18,8 @@ import java.lang.ref.WeakReference;
import java.util.List;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.utilities.AverageCalculator;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.utils.AverageCalculator;
public class GradesAdapter extends ExpandableRecyclerViewAdapter<GradesAdapter.SubjectViewHolder, GradesAdapter.GradeViewHolder> {

View File

@ -13,7 +13,7 @@ import android.widget.Button;
import android.widget.TextView;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Grade;
public class GradesDialogFragment extends DialogFragment {

View File

@ -21,19 +21,19 @@ import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.R;
import io.github.wulkanowy.WulkanowyApp;
import io.github.wulkanowy.api.Vulcan;
import io.github.wulkanowy.api.login.VulcanOfflineException;
import io.github.wulkanowy.dao.DatabaseAccess;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.AccountDao;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.VulcanSynchronization;
import io.github.wulkanowy.db.dao.DatabaseAccess;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.AccountDao;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Subject;
import io.github.wulkanowy.services.jobs.VulcanJobHelper;
import io.github.wulkanowy.ui.WulkanowyApp;
import io.github.wulkanowy.utilities.ConnectionUtilities;
import io.github.wulkanowy.services.sync.LoginSession;
import io.github.wulkanowy.services.sync.VulcanSync;
import io.github.wulkanowy.utils.NetworkUtils;
public class GradesFragment extends Fragment {
@ -106,7 +106,7 @@ public class GradesFragment extends Fragment {
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (ConnectionUtilities.isOnline(getContext())) {
if (NetworkUtils.isOnline(getContext())) {
new RefreshTask(getActivity(), mainView, daoSession).execute();
} else {
Toast.makeText(mainView.getContext(), R.string.noInternet_text, Toast.LENGTH_SHORT).show();
@ -163,17 +163,17 @@ public class GradesFragment extends Fragment {
@Override
protected Integer doInBackground(Void... params) {
VulcanSynchronization vulcanSynchronization = new VulcanSynchronization(new LoginSession());
VulcanSync vulcanSync = new VulcanSync(new LoginSession());
try {
vulcanSynchronization.loginCurrentUser(activity.get(), daoSession, new Vulcan());
vulcanSynchronization.syncGrades();
vulcanSync.loginCurrentUser(activity.get(), daoSession, new Vulcan());
vulcanSync.syncGrades();
downloadGradesFormDatabase(daoSession);
return 1;
} catch (VulcanOfflineException e) {
Log.e(VulcanJobHelper.DEBUG_TAG, "There was a synchronization problem, because vulcan is offline", e);
Log.e(VulcanJobHelper.DEBUG_TAG, "There was a sync problem, because vulcan is offline", e);
return R.string.error_host_offline;
} catch (Exception e) {
Log.e(VulcanJobHelper.DEBUG_TAG, "There was a synchronization problem", e);
Log.e(VulcanJobHelper.DEBUG_TAG, "There was a sync problem", e);
return R.string.refresh_error_text;
}
}

View File

@ -5,7 +5,7 @@ import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.util.List;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Grade;
public class SubjectWithGrades extends ExpandableGroup<Grade> {

View File

@ -14,7 +14,7 @@ import android.widget.TextView;
import org.apache.commons.lang3.StringUtils;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Lesson;
import io.github.wulkanowy.db.dao.entities.Lesson;
public class TimetableDialogFragment extends DialogFragment {

View File

@ -18,7 +18,7 @@ import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.R;
import io.github.wulkanowy.utilities.TimeUtilities;
import io.github.wulkanowy.utils.TimeUtils;
public class TimetableFragment extends Fragment {
@ -81,7 +81,7 @@ public class TimetableFragment extends Fragment {
private void setDateStringList() {
if (dateStringList.isEmpty()) {
dateStringList = TimeUtilities.getMondaysFromCurrentSchoolYear(DATE_PATTERN);
dateStringList = TimeUtils.getMondaysFromCurrentSchoolYear(DATE_PATTERN);
}
}

View File

@ -17,11 +17,11 @@ import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Day;
import io.github.wulkanowy.dao.entities.Lesson;
import io.github.wulkanowy.dao.entities.Week;
import io.github.wulkanowy.dao.entities.WeekDao;
import io.github.wulkanowy.services.VulcanSynchronization;
import io.github.wulkanowy.db.dao.entities.Day;
import io.github.wulkanowy.db.dao.entities.Lesson;
import io.github.wulkanowy.db.dao.entities.Week;
import io.github.wulkanowy.db.dao.entities.WeekDao;
import io.github.wulkanowy.services.sync.VulcanSync;
import io.github.wulkanowy.ui.main.AbstractFragment;
public class TimetableFragmentTab extends AbstractFragment<TimetableHeaderItem> {
@ -119,7 +119,7 @@ public class TimetableFragmentTab extends AbstractFragment<TimetableHeaderItem>
@Override
public void onRefresh() throws Exception {
VulcanSynchronization synchronization = new VulcanSynchronization();
VulcanSync synchronization = new VulcanSync();
synchronization.loginCurrentUser(getContext(), getDaoSession());
synchronization.syncTimetable(date);
}

View File

@ -14,7 +14,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem;
import eu.davidea.viewholders.ExpandableViewHolder;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Day;
import io.github.wulkanowy.db.dao.entities.Day;
public class TimetableHeaderItem
extends AbstractExpandableHeaderItem<TimetableHeaderItem.HeaderViewHolder, TimetableSubItem> {

View File

@ -15,7 +15,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractSectionableItem;
import eu.davidea.viewholders.FlexibleViewHolder;
import io.github.wulkanowy.R;
import io.github.wulkanowy.dao.entities.Lesson;
import io.github.wulkanowy.db.dao.entities.Lesson;
public class TimetableSubItem extends AbstractSectionableItem<TimetableSubItem.SubItemViewHolder, TimetableHeaderItem> {

View File

@ -1,23 +0,0 @@
package io.github.wulkanowy.utilities;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class ConnectionUtilities {
private ConnectionUtilities() {
throw new IllegalStateException("Utility class");
}
public static boolean isOnline(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting();
} else {
return false;
}
}
}

View File

@ -1,41 +0,0 @@
package io.github.wulkanowy.utilities;
import android.os.Build;
import java.io.File;
public class RootUtilities {
private RootUtilities() {
throw new IllegalStateException("Utility class");
}
public static boolean isRooted() {
String buildTags = Build.TAGS;
if (buildTags != null && buildTags.contains("test-keys")) {
return true;
}
try {
File file = new File("/system/app/Superuser.apk");
if (file.exists()) {
return true;
}
} catch (Exception e) {
// ignore
}
return canExecuteCommand("/system/xbin/which su")
|| canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su");
}
private static boolean canExecuteCommand(String command) {
boolean executedSuccesfully;
try {
Runtime.getRuntime().exec(command);
executedSuccesfully = true;
} catch (Exception e) {
executedSuccesfully = false;
}
return executedSuccesfully;
}
}

View File

@ -1,10 +1,10 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import java.util.List;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Grade;
public class AverageCalculator {
public final class AverageCalculator {
private AverageCalculator() {
throw new IllegalStateException("Utility class");
@ -33,14 +33,18 @@ public class AverageCalculator {
}
private static float getMathematicalValueOfGrade(String valueOfGrade) {
if (valueOfGrade.matches("[-|+|=]{0,2}[0-6]") || valueOfGrade.matches("[0-6][-|+|=]{0,2}")) {
if (valueOfGrade.matches("[-][0-6]") || valueOfGrade.matches("[0-6][-]")) {
if (valueOfGrade.matches("[-|+|=]{0,2}[0-6]")
|| valueOfGrade.matches("[0-6][-|+|=]{0,2}")) {
if (valueOfGrade.matches("[-][0-6]")
|| valueOfGrade.matches("[0-6][-]")) {
String replacedValue = valueOfGrade.replaceAll("[-]", "");
return Float.valueOf(replacedValue) - 0.25f;
} else if (valueOfGrade.matches("[+][0-6]") || valueOfGrade.matches("[0-6][+]")) {
} else if (valueOfGrade.matches("[+][0-6]")
|| valueOfGrade.matches("[0-6][+]")) {
String replacedValue = valueOfGrade.replaceAll("[+]", "");
return Float.valueOf((replacedValue)) + 0.25f;
} else if (valueOfGrade.matches("[-|=]{1,2}[0-6]") || valueOfGrade.matches("[0-6][-|=]{1,2}")) {
} else if (valueOfGrade.matches("[-|=]{1,2}[0-6]")
|| valueOfGrade.matches("[0-6][-|=]{1,2}")) {
String replacedValue = valueOfGrade.replaceAll("[-|=]{1,2}", "");
return Float.valueOf((replacedValue)) - 0.5f;
} else {

View File

@ -1,18 +1,18 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.dao.entities.Day;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.dao.entities.Lesson;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.dao.entities.Week;
import io.github.wulkanowy.db.dao.entities.Day;
import io.github.wulkanowy.db.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Lesson;
import io.github.wulkanowy.db.dao.entities.Subject;
import io.github.wulkanowy.db.dao.entities.Week;
public class ConversionVulcanObject {
public final class DataObjectConverter {
private ConversionVulcanObject() {
private DataObjectConverter() {
throw new IllegalStateException("Utility class");
}

View File

@ -1,13 +1,13 @@
package io.github.wulkanowy.dao;
package io.github.wulkanowy.utils;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.Grade;
public class EntitiesCompare {
public final class EntitiesCompare {
private EntitiesCompare() {
throw new IllegalStateException("Utility class");
@ -29,13 +29,13 @@ public class EntitiesCompare {
updatedList.add(grade);
}
for (Grade grade : updatedList) {
for (Grade grade1 : oldList) {
if (grade.equals(grade1)) {
grade.setRead(grade1.getRead());
for (Grade updateGrade : updatedList) {
for (Grade oldGrade : oldList) {
if (updateGrade.equals(oldGrade)) {
updateGrade.setRead(oldGrade.getRead());
}
}
lastList.add(grade);
lastList.add(updateGrade);
}
return lastList;
}

View File

@ -0,0 +1,33 @@
package io.github.wulkanowy.utils;
import android.app.Activity;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public final class KeyboardUtils {
private KeyboardUtils() {
throw new IllegalStateException("Utility class");
}
public static void hideSoftInput(Activity activity) {
InputMethodManager manager = (InputMethodManager)
activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(activity.getWindow()
.getDecorView().getApplicationWindowToken(), 0);
}
}
public static void showSoftInput(EditText editText, Context context) {
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();
InputMethodManager inputMethodManager = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputMethodManager != null) {
inputMethodManager.showSoftInput(editText, 0);
}
}
}

View File

@ -0,0 +1,18 @@
package io.github.wulkanowy.utils;
import android.content.Context;
import android.net.ConnectivityManager;
public final class NetworkUtils {
private NetworkUtils() {
throw new IllegalStateException("Utility class");
}
public static boolean isOnline(Context context) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager != null && connectivityManager.getActiveNetworkInfo() != null
&& connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
}
}

View File

@ -0,0 +1,38 @@
package io.github.wulkanowy.utils;
import android.os.Build;
import java.io.File;
public final class RootChecker {
private RootChecker() {
throw new IllegalStateException("Utility class");
}
public static boolean isRooted() {
return checkOne() || checkTwo() || checkThree();
}
private static boolean checkOne() {
return Build.TAGS != null && Build.TAGS.contains("test-keys");
}
private static boolean checkTwo() {
return new File("/system/app/Superuser.apk").exists();
}
private static boolean checkThree() {
String[] commands = {"/system/xbin/which su", "/system/bin/which su", "which su"};
for (String command : commands) {
try {
Runtime.getRuntime().exec(command);
return true;
} catch (Exception e) {
// ignore
}
}
return false;
}
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
@ -13,13 +13,13 @@ import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
public class TimeUtilities {
public final class TimeUtils {
private static final long TICKS_AT_EPOCH = 621355968000000000L;
private static final long TICKS_PER_MILLISECOND = 10000;
private TimeUtilities() {
private TimeUtils() {
throw new IllegalStateException("Utility class");
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.security;
package io.github.wulkanowy.utils.security;
public class CryptoException extends Exception {

View File

@ -1,10 +1,10 @@
package io.github.wulkanowy.security;
package io.github.wulkanowy.utils.security;
import android.content.Context;
import android.os.Build;
import android.util.Base64;
import io.github.wulkanowy.utilities.RootUtilities;
import io.github.wulkanowy.utils.RootChecker;
public class Safety extends Scrambler {
@ -15,7 +15,7 @@ public class Safety extends Scrambler {
generateNewKey(email, context);
return encryptString(email, plainText);
} else {
if (RootUtilities.isRooted()) {
if (RootChecker.isRooted()) {
return new String(Base64.encode(plainText.getBytes(), Base64.DEFAULT));
} else {
throw new UnsupportedOperationException("Stored data in this devices isn't safe because android is rooted");

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.security;
package io.github.wulkanowy.utils.security;
import android.annotation.TargetApi;