Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 070e755

Browse files
author
Evgenii
committed
Merge pull request #73 from evgenii-kanivets/cache
Cache
2 parents c69d9ad + 09d9315 commit 070e755

File tree

5 files changed

+165
-5
lines changed

5 files changed

+165
-5
lines changed

app/src/main/java/com/blogspot/e_kanivets/moneytracker/MtApp.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import com.blogspot.e_kanivets.moneytracker.di.AppComponent;
66
import com.blogspot.e_kanivets.moneytracker.di.DaggerAppComponent;
77
import com.blogspot.e_kanivets.moneytracker.di.module.ControllerModule;
8-
import com.blogspot.e_kanivets.moneytracker.di.module.RepoModule;
8+
import com.blogspot.e_kanivets.moneytracker.di.module.repo.CachedRepoModule;
9+
import com.blogspot.e_kanivets.moneytracker.di.module.repo.RepoModule;
910

1011
/**
1112
* Custom application implementation.
@@ -37,7 +38,7 @@ public AppComponent getAppComponent() {
3738

3839
private AppComponent buildComponent() {
3940
return DaggerAppComponent.builder()
40-
.repoModule(new RepoModule(get()))
41+
.cachedRepoModule(new CachedRepoModule(get()))
4142
.controllerModule(new ControllerModule())
4243
.build();
4344
}

app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import com.blogspot.e_kanivets.moneytracker.activity.exchange_rate.ExchangeRatesActivity;
1111
import com.blogspot.e_kanivets.moneytracker.activity.record.AddRecordActivity;
1212
import com.blogspot.e_kanivets.moneytracker.activity.record.MainActivity;
13+
import com.blogspot.e_kanivets.moneytracker.di.module.repo.CachedRepoModule;
1314
import com.blogspot.e_kanivets.moneytracker.di.module.ControllerModule;
14-
import com.blogspot.e_kanivets.moneytracker.di.module.RepoModule;
1515
import com.blogspot.e_kanivets.moneytracker.ui.presenter.AccountsSummaryPresenter;
1616

1717
import javax.inject.Singleton;
@@ -24,7 +24,7 @@
2424
*
2525
* @author Evgenii Kanivets
2626
*/
27-
@Component(modules = {RepoModule.class, ControllerModule.class})
27+
@Component(modules = {CachedRepoModule.class, ControllerModule.class})
2828
@Singleton
2929
public interface AppComponent {
3030
void inject(MainActivity mainActivity);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.blogspot.e_kanivets.moneytracker.di.module.repo;
2+
3+
import android.content.Context;
4+
import android.support.annotation.NonNull;
5+
6+
import com.blogspot.e_kanivets.moneytracker.entity.Account;
7+
import com.blogspot.e_kanivets.moneytracker.entity.Category;
8+
import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate;
9+
import com.blogspot.e_kanivets.moneytracker.entity.Record;
10+
import com.blogspot.e_kanivets.moneytracker.entity.Transfer;
11+
import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo;
12+
import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo;
13+
import com.blogspot.e_kanivets.moneytracker.repo.DbHelper;
14+
import com.blogspot.e_kanivets.moneytracker.repo.ExchangeRateRepo;
15+
import com.blogspot.e_kanivets.moneytracker.repo.RecordRepo;
16+
import com.blogspot.e_kanivets.moneytracker.repo.TransferRepo;
17+
import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo;
18+
import com.blogspot.e_kanivets.moneytracker.repo.cache.BaseCache;
19+
20+
import javax.inject.Singleton;
21+
22+
import dagger.Module;
23+
import dagger.Provides;
24+
25+
/**
26+
* Dagger 2 module to provide {@link IRepo} dependencies.
27+
* Created on 3/29/16.
28+
*
29+
* @author Evgenii Kanivets
30+
*/
31+
@Module
32+
public class CachedRepoModule {
33+
private Context context;
34+
35+
public CachedRepoModule(Context context) {
36+
this.context = context;
37+
}
38+
39+
@Provides
40+
@NonNull
41+
@Singleton
42+
public DbHelper providesDbHelper() {
43+
return new DbHelper(context);
44+
}
45+
46+
@Provides
47+
@NonNull
48+
@Singleton
49+
public IRepo<Account> providesAccountRepo(DbHelper dbHelper) {
50+
return new BaseCache<>(new AccountRepo(dbHelper));
51+
}
52+
53+
@Provides
54+
@NonNull
55+
@Singleton
56+
public IRepo<Category> providesCategoryRepo(DbHelper dbHelper) {
57+
return new BaseCache<>(new CategoryRepo(dbHelper));
58+
}
59+
60+
@Provides
61+
@NonNull
62+
@Singleton
63+
public IRepo<ExchangeRate> providesExchangeRateRepo(DbHelper dbHelper) {
64+
return new BaseCache<>(new ExchangeRateRepo(dbHelper));
65+
}
66+
67+
@Provides
68+
@NonNull
69+
@Singleton
70+
public IRepo<Record> providesRecordRepo(DbHelper dbHelper) {
71+
return new BaseCache<>(new RecordRepo(dbHelper));
72+
}
73+
74+
@Provides
75+
@NonNull
76+
@Singleton
77+
public IRepo<Transfer> providesTransferRepo(DbHelper dbHelper) {
78+
return new BaseCache<>(new TransferRepo(dbHelper));
79+
}
80+
}

app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/RepoModule.java renamed to app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/repo/RepoModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.blogspot.e_kanivets.moneytracker.di.module;
1+
package com.blogspot.e_kanivets.moneytracker.di.module.repo;
22

33
import android.content.Context;
44
import android.support.annotation.NonNull;
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.blogspot.e_kanivets.moneytracker.repo.cache;
2+
3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.util.LruCache;
6+
7+
import com.blogspot.e_kanivets.moneytracker.entity.base.IEntity;
8+
import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo;
9+
10+
import java.util.List;
11+
12+
/**
13+
* Cache for {@link IRepo} instances. Use Decorator pattern.
14+
* Created on 4/19/16.
15+
*
16+
* @author Evgenii Kanivets
17+
*/
18+
public class BaseCache<T extends IEntity> implements IRepo<T> {
19+
@SuppressWarnings("unused")
20+
private static final String TAG = "BaseCache";
21+
22+
private static final int CACHE_SIZE = 1024 * 1024; // 1MiB
23+
24+
private LruCache<Long, T> lruCache;
25+
26+
@NonNull
27+
private IRepo<T> repo;
28+
29+
public BaseCache(@NonNull IRepo<T> repo) {
30+
this.repo = repo;
31+
lruCache = new LruCache<>(CACHE_SIZE);
32+
}
33+
34+
@Nullable
35+
@Override
36+
public T create(@Nullable T instance) {
37+
T createdT = repo.create(instance);
38+
if (createdT != null) lruCache.put(createdT.getId(), createdT);
39+
return createdT;
40+
}
41+
42+
@Nullable
43+
@Override
44+
public T read(long id) {
45+
T cachedT = lruCache.get(id);
46+
if (cachedT == null) {
47+
T readT = repo.read(id);
48+
if (readT != null) lruCache.put(readT.getId(), readT);
49+
return readT;
50+
} else return cachedT;
51+
}
52+
53+
@Nullable
54+
@Override
55+
public T update(@Nullable T instance) {
56+
T updatedT = repo.update(instance);
57+
if (updatedT != null) lruCache.put(updatedT.getId(), updatedT);
58+
return updatedT;
59+
}
60+
61+
@Override
62+
public boolean delete(@Nullable T instance) {
63+
boolean deleted = repo.delete(instance);
64+
if (instance != null && deleted) lruCache.remove(instance.getId());
65+
return deleted;
66+
}
67+
68+
@NonNull
69+
@Override
70+
public List<T> readAll() {
71+
return repo.readAll();
72+
}
73+
74+
@NonNull
75+
@Override
76+
public List<T> readWithCondition(@Nullable String condition, @Nullable String[] args) {
77+
return repo.readWithCondition(condition, args);
78+
}
79+
}

0 commit comments

Comments
 (0)