diff --git a/app/build.gradle b/app/build.gradle index ef90bd2..5fd0f14 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,8 @@ dependencies { testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + //room + implementation "android.arch.persistence.room:runtime:1.1.1" + annotationProcessor "android.arch.persistence.room:compiler:1.1.1" } \ No newline at end of file diff --git a/app/src/main/java/com/geeks4ever/counter_app/model/CountModel.java b/app/src/main/java/com/geeks4ever/counter_app/model/CountModel.java index 01235c1..d567df3 100644 --- a/app/src/main/java/com/geeks4ever/counter_app/model/CountModel.java +++ b/app/src/main/java/com/geeks4ever/counter_app/model/CountModel.java @@ -1,14 +1,33 @@ package com.geeks4ever.counter_app.model; +import android.util.Log; + +import androidx.lifecycle.LiveData; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "countmodel") public class CountModel { + @PrimaryKey + public int key; + + @ColumnInfo(name = "count") private String count; - public String getCount() { - return count; + public CountModel(int key, String count){ + this.key = key; + this.count = count; } - public void setCount(String count) { - this.count = count; + public String getCount(){ + Log.e("db", "getCount"+this.count); + return this.count; } + + public void setCount(String count){ + + Log.e("db", "setCount"+count); + this.count = count;} } diff --git a/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDao.java b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDao.java new file mode 100644 index 0000000..29b7e59 --- /dev/null +++ b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDao.java @@ -0,0 +1,22 @@ +package com.geeks4ever.counter_app.model.repository; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import com.geeks4ever.counter_app.model.CountModel; + +import java.util.List; + +@Dao +public interface CountDao { + + @Query("Select * from countmodel where `key`= 0") + LiveData> getCount(); + + @Update + void setCount(CountModel count); + +} diff --git a/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDatabase.java b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDatabase.java new file mode 100644 index 0000000..8c9e2ac --- /dev/null +++ b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountDatabase.java @@ -0,0 +1,33 @@ +package com.geeks4ever.counter_app.model.repository; + +import android.content.Context; +import android.util.Log; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.geeks4ever.counter_app.model.CountModel; + +import java.util.concurrent.Executors; + +@Database(entities = {CountModel.class}, version = 1, exportSchema = false) +public abstract class CountDatabase extends RoomDatabase { + + private static CountDatabase db; + + public abstract CountDao countDao(); + + public static synchronized CountDatabase getInstance(Context context){ + + if(db == null){ + Log.e("db", "created"); + db = Room.databaseBuilder(context.getApplicationContext(), + CountDatabase.class, "count_db") + .fallbackToDestructiveMigration() + .build(); + } + return db; + } + +} diff --git a/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountRepository.java b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountRepository.java index f57d720..0e9d400 100644 --- a/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountRepository.java +++ b/app/src/main/java/com/geeks4ever/counter_app/model/repository/CountRepository.java @@ -1,43 +1,54 @@ package com.geeks4ever.counter_app.model.repository; +import android.app.Application; +import android.os.AsyncTask; import android.os.Handler; +import android.os.Looper; +import android.util.Log; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.Observer; import com.geeks4ever.counter_app.model.CountModel; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + public class CountRepository { - public static CountRepository repository; - private final CountModel countModel; + private CountDao countDao; + private LiveData> countModelLiveData; - final MutableLiveData data = new MutableLiveData<>(); + public CountRepository(Application application){ - private CountRepository(){ - countModel = new CountModel(); - countModel.setCount("0"); - } + countDao = CountDatabase.getInstance(application).countDao(); + countModelLiveData = countDao.getCount(); - //Singleton Implementation - public static CountRepository getInstance(){ + } + public LiveData> getCount(){ + return countModelLiveData; + } - if(repository == null) - repository = new CountRepository(); - return repository; + public void setCount(int count){ + new SetCountAsyncTask(countDao).execute(new CountModel(0, String.valueOf(count))); } + private static class SetCountAsyncTask extends AsyncTask{ - public LiveData getCount(){ - data.setValue(countModel); - return data; - } + private CountDao countDao; - public void setCount(int count){ + private SetCountAsyncTask(CountDao countDao){ + this.countDao = countDao; + } - countModel.setCount(String.valueOf(count)); - data.postValue(countModel); + @Override + protected Void doInBackground(CountModel... countModels) { + countDao.setCount(countModels[0]); + return null; + } } } diff --git a/app/src/main/java/com/geeks4ever/counter_app/view/HomeScreen.java b/app/src/main/java/com/geeks4ever/counter_app/view/HomeScreen.java index 9cc1d9e..4f345fd 100644 --- a/app/src/main/java/com/geeks4ever/counter_app/view/HomeScreen.java +++ b/app/src/main/java/com/geeks4ever/counter_app/view/HomeScreen.java @@ -12,7 +12,6 @@ import com.geeks4ever.counter_app.R; import com.geeks4ever.counter_app.databinding.HomeScreenBinding; import com.geeks4ever.counter_app.viewmodel.CounterViewModel; -import com.geeks4ever.counter_app.viewmodel.viewModelFactory; public class HomeScreen extends AppCompatActivity implements Listener { @@ -28,7 +27,8 @@ protected void onCreate(Bundle savedInstanceState) { binding.setListeners(this); - viewModel = new ViewModelProvider(this, new viewModelFactory()).get(CounterViewModel.class); + viewModel = new ViewModelProvider(this, new ViewModelProvider + .AndroidViewModelFactory(getApplication())).get(CounterViewModel.class); count = viewModel.getCount(); diff --git a/app/src/main/java/com/geeks4ever/counter_app/viewmodel/CounterViewModel.java b/app/src/main/java/com/geeks4ever/counter_app/viewmodel/CounterViewModel.java index 8c965d1..76124e2 100644 --- a/app/src/main/java/com/geeks4ever/counter_app/viewmodel/CounterViewModel.java +++ b/app/src/main/java/com/geeks4ever/counter_app/viewmodel/CounterViewModel.java @@ -1,37 +1,47 @@ package com.geeks4ever.counter_app.viewmodel; +import android.app.Application; +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModel; import com.geeks4ever.counter_app.model.CountModel; +import com.geeks4ever.counter_app.model.repository.CountDatabase; import com.geeks4ever.counter_app.model.repository.CountRepository; +import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -public class CounterViewModel extends ViewModel { +public class CounterViewModel extends AndroidViewModel { private final CountRepository countRepository; ExecutorService executorService; final MutableLiveData count = new MutableLiveData<>(); - final LiveData data; - public CounterViewModel() { - countRepository = CountRepository.getInstance(); - data = countRepository.getCount(); - data.observeForever( new Observer() { + public CounterViewModel(@NonNull Application application) { + super(application); + + count.setValue("0"); + + countRepository = new CountRepository(application); + countRepository.getCount().observeForever( new Observer>() { @Override - public void onChanged(CountModel countModel) { - count.setValue(countModel.getCount()); + public void onChanged(List countModel) { + count.setValue(countModel.get(0).getCount()); } }); } + public LiveData getCount(){ return count; } diff --git a/app/src/main/java/com/geeks4ever/counter_app/viewmodel/viewModelFactory.java b/app/src/main/java/com/geeks4ever/counter_app/viewmodel/viewModelFactory.java deleted file mode 100644 index 119582f..0000000 --- a/app/src/main/java/com/geeks4ever/counter_app/viewmodel/viewModelFactory.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.geeks4ever.counter_app.viewmodel; - -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModel; -import androidx.lifecycle.ViewModelProvider; - -public class viewModelFactory implements ViewModelProvider.Factory { - @NonNull - @Override - public T create(@NonNull Class modelClass) { - try { - return modelClass.newInstance(); - } catch (IllegalAccessException | InstantiationException e) { - e.printStackTrace(); - } - return null; - } -}