Skip to content

Commit

Permalink
1. classes list moved to sqlite database
Browse files Browse the repository at this point in the history
2. check android 4.4 compatibility on all files
3. backup and restore done
  • Loading branch information
ali77gh committed Mar 1, 2019
1 parent 8695735 commit cc84811
Show file tree
Hide file tree
Showing 27 changed files with 550 additions and 111 deletions.
115 changes: 115 additions & 0 deletions app/src/main/java/com/github/ali77gh/unitools/core/Backup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package com.github.ali77gh.unitools.core;

import com.github.ali77gh.unitools.R;
import com.github.ali77gh.unitools.data.FileManager.FilePackProvider;
import com.github.ali77gh.unitools.data.model.BackupModel;
import com.github.ali77gh.unitools.data.model.Event;
import com.github.ali77gh.unitools.data.model.Friend;
import com.github.ali77gh.unitools.data.model.UClass;
import com.github.ali77gh.unitools.data.repo.EventRepo;
import com.github.ali77gh.unitools.data.repo.FriendRepo;
import com.github.ali77gh.unitools.data.repo.UClassRepo;
import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

public class Backup {

public static String backupFilePath = FilePackProvider.AppPath + "/" + "backup.json";

public static void DoBackup(boolean classes , boolean events , boolean friends){

//make savable object
List<UClass> classesList = new ArrayList<>();
List<Event> eventsList = new ArrayList<>();
List<Friend> friendsList = new ArrayList<>();

if (classes) classesList = UClassRepo.getAll();
if (events) eventsList = EventRepo.getAll();
if (friends) friendsList = FriendRepo.getAll();

BackupModel bm = new BackupModel(
ContextHolder.getAppContext().getString(R.string.app_version),
classesList,
eventsList,
friendsList
);

//write to file
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(backupFilePath)));
outputStreamWriter.write(new Gson().toJson(bm));
outputStreamWriter.close();
}catch (IOException e){
throw new RuntimeException(e.getMessage());
}
}

public static void Restore(boolean classes , boolean events , boolean friends){
try {
FileInputStream inputStream = new FileInputStream(new File(backupFilePath));

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString;
StringBuilder stringBuilder = new StringBuilder();

while ((receiveString = bufferedReader.readLine()) != null) {
stringBuilder.append(receiveString);
}

inputStream.close();

BackupModel bm = new Gson().fromJson(stringBuilder.toString(),BackupModel.class);

if (classes)
for (UClass uClass : bm.classes){
UClassRepo.Insert(uClass);
}

if (events)
for (Event event : bm.events){
EventRepo.Insert(event);
}

if (friends)
for (Friend friend : bm.friends){
FriendRepo.Insert(friend);
}

} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}

public static void ClearCurrentAndRestore(boolean classes , boolean events , boolean friends){

if(classes) UClassRepo.RemoveAll();
if(events) EventRepo.RemoveAll();
if(friends) FriendRepo.RemoveAll();
Restore(classes,events,friends);
}

public static boolean IsBackupPossible(){

if (FriendRepo.getAll().size() != 0) return true;
if (EventRepo.getAll().size() != 0) return true;
if (UClassRepo.getAll().size() != 0) return true;
return false;
}

public static boolean IsRestorePossible(){
File backupFile = new File(backupFilePath);
if (backupFile.exists()) return true;
else return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import com.github.ali77gh.unitools.data.repo.EventRepo;
import com.github.ali77gh.unitools.data.repo.FriendRepo;
import com.github.ali77gh.unitools.data.repo.UClassRepo;
import com.github.ali77gh.unitools.data.repo.UserInfoRepo;

/**
Expand All @@ -14,14 +15,15 @@ public class ContextHolder {

private static Context AppContext;


public static Context getAppContext(){
return AppContext;
}

public static void initStatics(Context context) {
UClassRepo.init(context);
EventRepo.init(context);
FriendRepo.init(context);

UserInfoRepo.init(context);
AppContext = context;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.github.ali77gh.unitools.core.tools.DateTimeTools;
import com.github.ali77gh.unitools.data.model.UClass;
import com.github.ali77gh.unitools.data.model.UserInfo;
import com.github.ali77gh.unitools.data.repo.UClassRepo;
import com.github.ali77gh.unitools.data.repo.UserInfoRepo;

import java.util.Date;
Expand Down Expand Up @@ -55,7 +56,7 @@ public void onReceive(Context context, Intent intent) {
String id = intent.getStringExtra(CLASS_ID);
if (id == null) throw new IllegalStateException("class id should provide");
if (ui.NotificationMode != UserInfo.NOTIFICATION_NOTHING)
PushNotify(context, Translator.getUClassReadable(UserInfoRepo.getById(id)));
PushNotify(context, Translator.getUClassReadable(UClassRepo.getById(id)));
break;

case MODE_SILENT:
Expand All @@ -77,9 +78,9 @@ public static void Reset(Context context) {
if (ContextHolder.getAppContext() == null) ContextHolder.initStatics(context);
UserInfo userInfo = UserInfoRepo.getUserInfo();

if (userInfo.Classes.size()==0) return;
if (UClassRepo.getAll().size()==0) return;
//setup alarms
for (UClass uclass : userInfo.Classes){
for (UClass uclass : UClassRepo.getAll()){

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Expand All @@ -88,7 +89,7 @@ public static void Reset(Context context) {
Intent notifyIntent = new Intent(context , ReminderAndAutoSilent.class);
notifyIntent.putExtra(MODE , MODE_SILENT);
PendingIntent pendingIntent = PendingIntent.getBroadcast
(context, userInfo.Classes.indexOf(uclass) * 2 , notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
(context, UClassRepo.getAll().indexOf(uclass) * 2 , notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(
Expand All @@ -111,7 +112,7 @@ public static void Reset(Context context) {
notifyIntent2.putExtra(MODE , MODE_ALERT);
notifyIntent2.putExtra(CLASS_ID , uclass.id);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast
(context, (userInfo.Classes.indexOf(uclass) * 2 ) - 1 , notifyIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
(context, (UClassRepo.getAll().indexOf(uclass) * 2 ) - 1 , notifyIntent2, PendingIntent.FLAG_UPDATE_CURRENT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.github.ali77gh.unitools.data.model;

import java.util.List;

public class BackupModel {

public String version;
public List<UClass> classes;
public List<Event> events;
public List<Friend> friends;

public BackupModel(String version,List<UClass> classes , List<Event> events,List<Friend> friends){
this.version = version;
this.classes = classes;
this.events = events;
this.friends = friends;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ public class UserInfo {

public boolean DarkTheme;
public String LangId; // "fa" , "en" ,...
public List<UClass> Classes;
public int NotificationMode;
public int FirstDayOfUni; // is like unix time but in days
public int ReminderInMins;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static List<Event> getAll() {
return (list);
}

public static void insert(Event newEvent) {
public static void Insert(Event newEvent) {
newEvent.id = UUID.randomUUID().toString();
db.insert(newEvent.id, newEvent);
}
Expand All @@ -49,4 +49,10 @@ public static boolean IsEmpty() {
public static void Remove(String id) {
db.Remove(id);
}

public static void RemoveAll(){
for (Event event:getAll())
Remove(event.id);
if (!IsEmpty()) new RuntimeException("remove all not works");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.content.Context;

import com.example.easyrepolib.KeyValDb;
import com.github.ali77gh.unitools.data.model.Event;
import com.github.ali77gh.unitools.data.model.Friend;

import java.util.ArrayList;
Expand All @@ -29,7 +30,7 @@ public static List<Friend> getAll() {
return (list);
}

public static void insert(Friend newFriend) {
public static void Insert(Friend newFriend) {
newFriend.id = UUID.randomUUID().toString();
db.insert(newFriend.id, newFriend);
}
Expand All @@ -50,4 +51,10 @@ public static boolean IsEmpty() {
public static void Remove(String id) {
db.Remove(id);
}

public static void RemoveAll(){
for (Friend friend:getAll())
Remove(friend.id);
if (!IsEmpty()) new RuntimeException("remove all not works");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.github.ali77gh.unitools.data.repo;

import android.content.Context;

import com.example.easyrepolib.KeyValDb;
import com.github.ali77gh.unitools.data.model.UClass;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class UClassRepo {

private static KeyValDb db;
private static String table = "classes";

public static void init(Context context) {
db = new KeyValDb(context, table);
}

public static List<UClass> getAll() {
ArrayList<UClass> list = new ArrayList<>();
for (Object o : db.ReadAllOfType(UClass.class))
list.add((UClass) o);
return (list);
}

public static void Insert(UClass uClass) {
uClass.id = UUID.randomUUID().toString();
db.insert(uClass.id, uClass);
}

public static void Update(UClass uClass) {
db.Update(uClass.id, uClass);
}

public static UClass getById(String id) {
return (UClass) db.Read(id, UClass.class);
}


public static boolean IsEmpty() {
return db.IsEmpty();
}

public static void Remove(String id) {
db.Remove(id);
}

public static void RemoveAll(){
for (UClass uClass:getAll())
Remove(uClass.id);
if (!IsEmpty()) new RuntimeException("remove all not works");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,53 +44,6 @@ public static void Drop() {

//classes

public static UClass getById(String id){
UserInfo ui = getUserInfo();
int index = -1;
//find
for (UClass uClass : ui.Classes) {
if (uClass.id.equals(id))
index = ui.Classes.indexOf(uClass);
}
if (index == -1) throw new RuntimeException("class not found on RemoveClass");

return ui.Classes.get(index);
}

public static void AddClass(UClass uClass) {
UserInfo ui = getUserInfo();
uClass.id = UUID.randomUUID().toString();
ui.Classes.add(uClass);
setUserInfo(ui);
}

public static void RemoveClass(String id) {

UserInfo ui = getUserInfo();
UClass uClass = getById(id);
ui.Classes.remove(uClass);
setUserInfo(ui);
}

public static void UpdateClass(UClass uClass){
UserInfo userInfo = getUserInfo();
List<UClass> uClasses =userInfo.Classes;
for (UClass i : uClasses){
if (i.id .equals(uClass.id)){
uClasses.set(uClasses.indexOf(i),uClass);
break;
}
}
setUserInfo(userInfo);
}

public static void RemoveAllClasses() {

UserInfo ui = getUserInfo();
ui.Classes = new ArrayList<>();
setUserInfo(ui);
}

public static void setWeekNumber(int weekNumber) {
UserInfo ui = getUserInfo();
ui.FirstDayOfUni = DateTimeTools.WeekTools.getFirstDayOfUni(weekNumber);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.github.ali77gh.unitools.data.repo.UserInfoRepo;
import com.github.ali77gh.unitools.uI.NavToViewPagerBinder;
import com.github.ali77gh.unitools.uI.adapter.ViewPagerAdapter;
import com.github.ali77gh.unitools.uI.dialogs.BackupDialog;
import com.github.ali77gh.unitools.uI.fragments.Backable;
import com.github.ali77gh.unitools.uI.fragments.DocsFragment;
import com.github.ali77gh.unitools.uI.fragments.SettingsFragment;
Expand All @@ -29,6 +30,7 @@
import com.google.zxing.integration.android.IntentResult;

import java.util.Locale;
import java.util.Set;

public class HomeActivity extends AppCompatActivity {

Expand Down Expand Up @@ -79,7 +81,6 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
if (result.getContents() != null)
if (currentFrag instanceof WallFragment)
((WallFragment) currentFrag).OnBarcodeReaded(result.getContents());

} else {
super.onActivityResult(requestCode, resultCode, data);
}
Expand Down
Loading

0 comments on commit cc84811

Please sign in to comment.