1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2024-09-19 22:59:08 -05:00

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

@ -1,5 +1,5 @@
exclude:
- /app/src/main/java/io/github/wulkanowy/dao/entities/.*
- /app/src/main/java/io/github/wulkanowy/db/dao/entities/.*
component_depth: 1
languages:
- java

View File

@ -63,11 +63,14 @@ dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'joda-time:joda-time:2.9.9'
implementation 'com.github.javiersantos:AppUpdater:2.6.4'
implementation 'com.google.dagger:dagger-android:2.14.1'
implementation 'com.google.dagger:dagger-android-support:2.14.1'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.14.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
debugImplementation 'com.amitshekhar.android:debug-db:1.0.1'
debugImplementation 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
debugImplementation 'net.zetetic:android-database-sqlcipher:3.5.9'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.11.0'

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao;
package io.github.wulkanowy.db.dao;
import android.support.test.InstrumentationRegistry;
@ -9,9 +9,9 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Grade;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Grade;
public class DatabaseAccessTest extends DatabaseAccess {
@ -20,7 +20,7 @@ public class DatabaseAccessTest extends DatabaseAccess {
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext()
, "wulkanowyTest-database");
, "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();

View File

@ -1,10 +1,7 @@
package io.github.wulkanowy.dao.entities;
import android.support.test.filters.SmallTest;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;
@SmallTest
public class AccountTest extends AbstractDaoTestLongPk<AccountDao, Account> {
public AccountTest() {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;

View File

@ -1,10 +1,7 @@
package io.github.wulkanowy.dao.entities;
import android.support.test.filters.SmallTest;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;
@SmallTest
public class GradeTest extends AbstractDaoTestLongPk<GradeDao, Grade> {
public GradeTest() {
@ -16,6 +13,7 @@ public class GradeTest extends AbstractDaoTestLongPk<GradeDao, Grade> {
Grade entity = new Grade();
entity.setId(key);
entity.setIsNew(false);
entity.setRead(false);
return entity;
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;

View File

@ -1,10 +1,7 @@
package io.github.wulkanowy.dao.entities;
import android.support.test.filters.SmallTest;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;
@SmallTest
public class SubjectTest extends AbstractDaoTestLongPk<SubjectDao, Subject> {
public SubjectTest() {

View File

@ -1,10 +1,7 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.greenrobot.greendao.test.AbstractDaoTestLongPk;
import io.github.wulkanowy.dao.entities.Week;
import io.github.wulkanowy.dao.entities.WeekDao;
public class WeekTest extends AbstractDaoTestLongPk<WeekDao, Week> {
public WeekTest() {

View File

@ -1,30 +0,0 @@
package io.github.wulkanowy.services;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
@RunWith(AndroidJUnit4.class)
public class VulcanSynchronizationTest {
@Test(expected = IOException.class)
public void syncNoLoginSessionSubjectTest() throws IOException {
VulcanSynchronization vulcanSynchronization = new VulcanSynchronization(new LoginSession());
vulcanSynchronization.syncSubjectsAndGrades();
}
@Test(expected = IOException.class)
public void syncNoLoginSessionGradeTest() throws IOException {
VulcanSynchronization vulcanSynchronization = new VulcanSynchronization(new LoginSession());
vulcanSynchronization.syncGrades();
}
@Test(expected = IOException.class)
public void syncNoLoginSessionTimetableTest() throws IOException {
VulcanSynchronization vulcanSynchronization = new VulcanSynchronization(new LoginSession());
vulcanSynchronization.syncTimetable();
}
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronization;
package io.github.wulkanowy.services.sync;
import android.content.Context;
import android.content.SharedPreferences;
@ -21,14 +21,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.DaoMaster;
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.services.synchronisation.CurrentAccountLogin;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.AccountDao;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.utils.security.CryptoException;
import io.github.wulkanowy.utils.security.Safety;
@RunWith(AndroidJUnit4.class)
public class CurrentAccountLoginTest {
@ -41,11 +39,12 @@ public class CurrentAccountLoginTest {
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-database");
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();
DaoMaster.dropAllTables(database, true);
DaoMaster.createAllTables(database, true);
}
@Before

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronization;
package io.github.wulkanowy.services.sync;
import android.content.Context;
import android.content.SharedPreferences;
@ -16,12 +16,10 @@ import io.github.wulkanowy.api.StudentAndParent;
import io.github.wulkanowy.api.Vulcan;
import io.github.wulkanowy.api.user.BasicInformation;
import io.github.wulkanowy.api.user.PersonalData;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.security.Safety;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.synchronisation.FirstAccountLogin;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.utils.security.Safety;
public class FirstAccountLoginTest {
@ -31,11 +29,12 @@ public class FirstAccountLoginTest {
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-database");
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();
DaoMaster.dropAllTables(database, true);
DaoMaster.createAllTables(database, true);
}
@Before

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronization;
package io.github.wulkanowy.services.sync;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
@ -18,24 +18,24 @@ import java.util.List;
import io.github.wulkanowy.api.Vulcan;
import io.github.wulkanowy.api.grades.Grade;
import io.github.wulkanowy.api.grades.GradesList;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.synchronisation.GradesSynchronisation;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Subject;
@RunWith(AndroidJUnit4.class)
public class GradeSynchronizationTest {
public class GradeSyncTest {
private static DaoSession daoSession;
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-database");
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();
DaoMaster.dropAllTables(database, true);
DaoMaster.createAllTables(database, true);
}
@Before
@ -65,10 +65,10 @@ public class GradeSynchronizationTest {
Mockito.doReturn(daoSession).when(loginSession).getDaoSession();
Mockito.doReturn(userId).when(loginSession).getUserId();
GradesSynchronisation gradesSynchronisation = new GradesSynchronisation();
gradesSynchronisation.sync(loginSession);
GradesSync gradesSync = new GradesSync();
gradesSync.sync(loginSession);
io.github.wulkanowy.dao.entities.Grade grade = daoSession.getGradeDao().load(1L);
io.github.wulkanowy.db.dao.entities.Grade grade = daoSession.getGradeDao().load(1L);
Assert.assertNotNull(grade);
Assert.assertEquals(userId, grade.getUserId());

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronization;
package io.github.wulkanowy.services.sync;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
@ -17,23 +17,23 @@ import java.util.List;
import io.github.wulkanowy.api.Vulcan;
import io.github.wulkanowy.api.grades.SubjectsList;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.dao.entities.Subject;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.synchronisation.SubjectsSynchronisation;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import io.github.wulkanowy.db.dao.entities.Subject;
@RunWith(AndroidJUnit4.class)
public class SubjectSynchronizationTest {
public class SubjectSyncTest {
private static DaoSession daoSession;
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-database");
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();
DaoMaster.dropAllTables(database, true);
DaoMaster.createAllTables(database, true);
}
@Before
@ -61,8 +61,8 @@ public class SubjectSynchronizationTest {
Mockito.doReturn(2L).when(loginSession).getUserId();
Mockito.doReturn(daoSession).when(loginSession).getDaoSession();
SubjectsSynchronisation subjectsSynchronisation = new SubjectsSynchronisation();
subjectsSynchronisation.sync(loginSession);
SubjectsSync subjectsSync = new SubjectsSync();
subjectsSync.sync(loginSession);
Subject subject = daoSession.getSubjectDao().load(1L);

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.services.synchronization;
package io.github.wulkanowy.services.sync;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
@ -6,7 +6,6 @@ import android.support.test.runner.AndroidJUnit4;
import org.greenrobot.greendao.database.Database;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -19,27 +18,27 @@ import io.github.wulkanowy.api.timetable.Day;
import io.github.wulkanowy.api.timetable.Lesson;
import io.github.wulkanowy.api.timetable.Timetable;
import io.github.wulkanowy.api.timetable.Week;
import io.github.wulkanowy.dao.entities.Account;
import io.github.wulkanowy.dao.entities.DaoMaster;
import io.github.wulkanowy.dao.entities.DaoSession;
import io.github.wulkanowy.services.LoginSession;
import io.github.wulkanowy.services.synchronisation.TimetableSynchronization;
import io.github.wulkanowy.db.dao.entities.Account;
import io.github.wulkanowy.db.dao.entities.DaoMaster;
import io.github.wulkanowy.db.dao.entities.DaoSession;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@RunWith(AndroidJUnit4.class)
public class TimetableSynchronizationTest {
public class TimetableSyncTest {
private static DaoSession daoSession;
@BeforeClass
public static void setUpClass() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-database");
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(InstrumentationRegistry.getTargetContext(), "wulkanowyTest-db");
Database database = devOpenHelper.getWritableDb();
daoSession = new DaoMaster(database).newSession();
DaoMaster.dropAllTables(database, true);
DaoMaster.createAllTables(database, true);
}
@Test
@ -70,11 +69,11 @@ public class TimetableSynchronizationTest {
doReturn(daoSession).when(loginSession).getDaoSession();
doReturn(userId).when(loginSession).getUserId();
TimetableSynchronization timetableSynchronization = new TimetableSynchronization();
timetableSynchronization.sync(loginSession, null);
TimetableSync timetableSync = new TimetableSync();
timetableSync.sync(loginSession, null);
List<io.github.wulkanowy.dao.entities.Day> dayEntityList = daoSession.getDayDao().loadAll();
List<io.github.wulkanowy.dao.entities.Lesson> lessonEntityList = dayEntityList.get(0).getLessons();
List<io.github.wulkanowy.db.dao.entities.Day> dayEntityList = daoSession.getDayDao().loadAll();
List<io.github.wulkanowy.db.dao.entities.Lesson> lessonEntityList = dayEntityList.get(0).getLessons();
Assert.assertNotNull(dayEntityList.get(0));
Assert.assertEquals(userId, dayEntityList.get(0).getUserId());
@ -85,19 +84,12 @@ public class TimetableSynchronizationTest {
}
@Before
public void setUp() {
daoSession.getAccountDao().deleteAll();
daoSession.getDayDao().deleteAll();
daoSession.getLessonDao().deleteAll();
daoSession.clear();
}
@AfterClass
public static void cleanUp() {
daoSession.getAccountDao().deleteAll();
daoSession.getDayDao().deleteAll();
daoSession.getLessonDao().deleteAll();
daoSession.getWeekDao().deleteAll();
daoSession.clear();
}
}

View File

@ -0,0 +1,30 @@
package io.github.wulkanowy.services.sync;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
@RunWith(AndroidJUnit4.class)
public class VulcanSyncTest {
@Test(expected = IOException.class)
public void syncNoLoginSessionSubjectTest() throws IOException {
VulcanSync vulcanSync = new VulcanSync(new LoginSession());
vulcanSync.syncSubjectsAndGrades();
}
@Test(expected = IOException.class)
public void syncNoLoginSessionGradeTest() throws IOException {
VulcanSync vulcanSync = new VulcanSync(new LoginSession());
vulcanSync.syncGrades();
}
@Test(expected = IOException.class)
public void syncNoLoginSessionTimetableTest() throws IOException {
VulcanSync vulcanSync = new VulcanSync(new LoginSession());
vulcanSync.syncTimetable();
}
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.security;
package io.github.wulkanowy.utils.security;
import android.content.Context;
import android.support.test.InstrumentationRegistry;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.security;
package io.github.wulkanowy.utils.security;
import android.content.Context;
import android.os.Build;

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();
if (BuildConfig.DEBUG) {
enableDebugLog();
}
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "wulkanowy-database");
Database database = devOpenHelper.getWritableDb();
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "wulkanowy-db");
daoSession = new DaoMaster(database).newSession();
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;

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao.entities;
package io.github.wulkanowy.db.dao.entities;
import org.junit.Assert;
import org.junit.Test;

View File

@ -7,7 +7,7 @@ import org.junit.Test;
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 SubjectWithGradesTest {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import org.junit.Assert;
import org.junit.Test;
@ -6,7 +6,7 @@ import org.junit.Test;
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 AverageCalculatorTest {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import org.junit.Assert;
import org.junit.Test;
@ -11,14 +11,14 @@ import io.github.wulkanowy.api.grades.Subject;
import io.github.wulkanowy.api.timetable.Day;
import io.github.wulkanowy.api.timetable.Lesson;
public class ConversionVulcanObjectTest {
public class DataObjectConverterTest {
@Test
public void subjectConversionTest() {
List<Subject> subjectList = new ArrayList<>();
subjectList.add(new Subject().setName("Matematyka"));
List<io.github.wulkanowy.dao.entities.Subject> subjectEntitiesList =
ConversionVulcanObject.subjectsToSubjectEntities(subjectList);
List<io.github.wulkanowy.db.dao.entities.Subject> subjectEntitiesList =
DataObjectConverter.subjectsToSubjectEntities(subjectList);
Assert.assertEquals("Matematyka", subjectEntitiesList.get(0).getName());
}
@ -26,15 +26,15 @@ public class ConversionVulcanObjectTest {
@Test
public void subjectConversionEmptyTest() {
Assert.assertEquals(new ArrayList<>(),
ConversionVulcanObject.subjectsToSubjectEntities(new ArrayList<Subject>()));
DataObjectConverter.subjectsToSubjectEntities(new ArrayList<Subject>()));
}
@Test
public void gradesConversionTest() {
List<Grade> gradeList = new ArrayList<>();
gradeList.add(new Grade().setDescription("Lorem ipsum"));
List<io.github.wulkanowy.dao.entities.Grade> gradeEntitiesList =
ConversionVulcanObject.gradesToGradeEntities(gradeList);
List<io.github.wulkanowy.db.dao.entities.Grade> gradeEntitiesList =
DataObjectConverter.gradesToGradeEntities(gradeList);
Assert.assertEquals("Lorem ipsum", gradeEntitiesList.get(0).getDescription());
}
@ -42,21 +42,21 @@ public class ConversionVulcanObjectTest {
@Test
public void gradeConversionEmptyTest() {
Assert.assertEquals(new ArrayList<>(),
ConversionVulcanObject.gradesToGradeEntities(new ArrayList<Grade>()));
DataObjectConverter.gradesToGradeEntities(new ArrayList<Grade>()));
}
@Test
public void dayConversionEmptyTest() {
Assert.assertEquals(new ArrayList<>(),
ConversionVulcanObject.daysToDaysEntities(new ArrayList<Day>()));
DataObjectConverter.daysToDaysEntities(new ArrayList<Day>()));
}
@Test
public void dayConversionTest() {
List<Day> dayList = new ArrayList<>();
dayList.add(new Day().setDate("20.12.2012"));
List<io.github.wulkanowy.dao.entities.Day> dayEntityList =
ConversionVulcanObject.daysToDaysEntities(dayList);
List<io.github.wulkanowy.db.dao.entities.Day> dayEntityList =
DataObjectConverter.daysToDaysEntities(dayList);
Assert.assertEquals("20.12.2012", dayEntityList.get(0).getDate());
}
@ -64,15 +64,15 @@ public class ConversionVulcanObjectTest {
@Test
public void lessonConversionEmptyTest() {
Assert.assertEquals(new ArrayList<>(),
ConversionVulcanObject.lessonsToLessonsEntities(new ArrayList<Lesson>()));
DataObjectConverter.lessonsToLessonsEntities(new ArrayList<Lesson>()));
}
@Test
public void lessonConversionTest() {
List<Lesson> lessonList = new ArrayList<>();
lessonList.add(new Lesson().setRoom("20"));
List<io.github.wulkanowy.dao.entities.Lesson> lessonEntityList =
ConversionVulcanObject.lessonsToLessonsEntities(lessonList);
List<io.github.wulkanowy.db.dao.entities.Lesson> lessonEntityList =
DataObjectConverter.lessonsToLessonsEntities(lessonList);
Assert.assertEquals("20", lessonEntityList.get(0).getRoom());
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.dao;
package io.github.wulkanowy.utils;
import org.junit.Assert;
import org.junit.Before;
@ -7,7 +7,7 @@ import org.junit.Test;
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 EntitiesCompareTest {

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import android.content.Context;
import android.net.ConnectivityManager;
@ -10,7 +10,7 @@ import org.junit.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ConnectionUtilitiesTest {
public class NetworkUtilsTest {
@Test
public void isOnlineTrueTest() {
@ -23,7 +23,7 @@ public class ConnectionUtilitiesTest {
Context context = mock(Context.class);
when(context.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivityManager);
Assert.assertTrue(ConnectionUtilities.isOnline(context));
Assert.assertTrue(NetworkUtils.isOnline(context));
}
@Test
@ -37,6 +37,6 @@ public class ConnectionUtilitiesTest {
Context context = mock(Context.class);
when(context.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivityManager);
Assert.assertFalse(ConnectionUtilities.isOnline(context));
Assert.assertFalse(NetworkUtils.isOnline(context));
}
}

View File

@ -1,4 +1,4 @@
package io.github.wulkanowy.utilities;
package io.github.wulkanowy.utils;
import org.junit.Assert;
import org.junit.Test;
@ -11,7 +11,7 @@ import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class TimeUtilitiesTest {
public class TimeUtilsTest {
@Test
public void getTicksDateObjectTest() throws Exception {
@ -19,32 +19,32 @@ public class TimeUtilitiesTest {
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse("31.07.2017");
Assert.assertEquals(636370560000000000L, TimeUtilities.getNetTicks(date));
Assert.assertEquals(636370560000000000L, TimeUtils.getNetTicks(date));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, -14);
Date dateTwoWeekBefore = calendar.getTime();
Assert.assertEquals(636358464000000000L, TimeUtilities.getNetTicks(dateTwoWeekBefore));
Assert.assertEquals(636358464000000000L, TimeUtils.getNetTicks(dateTwoWeekBefore));
}
@Test(expected = ParseException.class)
public void getTicsStringInvalidFormatTest() throws Exception {
Assert.assertEquals(636370560000000000L, TimeUtilities.getNetTicks("31.07.2017", "dd.MMM.yyyy"));
Assert.assertEquals(636370560000000000L, TimeUtils.getNetTicks("31.07.2017", "dd.MMM.yyyy"));
}
@Test
public void getTicsStringFormatTest() throws Exception {
Assert.assertEquals(636370560000000000L, TimeUtilities.getNetTicks("31.07.2017", "dd.MM.yyyy"));
Assert.assertEquals(636370560000000000L, TimeUtils.getNetTicks("31.07.2017", "dd.MM.yyyy"));
}
@Test
public void getTicsStringTest() throws Exception {
Assert.assertEquals(636370560000000000L, TimeUtilities.getNetTicks("31.07.2017"));
Assert.assertEquals(636334272000000000L, TimeUtilities.getNetTicks("19.06.2017"));
Assert.assertEquals(636189120000000000L, TimeUtilities.getNetTicks("02.01.2017"));
Assert.assertEquals(636080256000000000L, TimeUtilities.getNetTicks("29.08.2016"));
Assert.assertEquals(636370560000000000L, TimeUtils.getNetTicks("31.07.2017"));
Assert.assertEquals(636334272000000000L, TimeUtils.getNetTicks("19.06.2017"));
Assert.assertEquals(636189120000000000L, TimeUtils.getNetTicks("02.01.2017"));
Assert.assertEquals(636080256000000000L, TimeUtils.getNetTicks("29.08.2016"));
}
@Test
@ -53,6 +53,6 @@ public class TimeUtilitiesTest {
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse("31.07.2017");
Assert.assertEquals(date, TimeUtilities.getDate(636370560000000000L));
Assert.assertEquals(date, TimeUtils.getDate(636370560000000000L));
}
}