├── Ingetin.iml ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── app │ │ └── daeng │ │ └── ingetin │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── app │ │ │ └── daeng │ │ │ └── ingetin │ │ │ ├── Adapter │ │ │ └── ItemAdapter.java │ │ │ ├── Interfaces │ │ │ ├── ClickedListener.java │ │ │ └── DataListener.java │ │ │ ├── MainActivity.java │ │ │ ├── Models │ │ │ └── DataItemModel.java │ │ │ ├── Presenter │ │ │ ├── DataProcesses.java │ │ │ ├── ItemClicked.java │ │ │ └── Realm │ │ │ │ ├── DataRealm.java │ │ │ │ └── HelperRealm.java │ │ │ └── View │ │ │ └── DataView.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ └── layout_item.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── app │ └── daeng │ └── ingetin │ └── ExampleUnitTest.java ├── build.gradle ├── build ├── generated │ └── mockable-android-25.jar └── intermediates │ ├── dex-cache │ └── cache.xml │ └── jack-cache │ └── cache.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle /Ingetin.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ingetin (Note-App) 2 | ## MVP, with Realm and Lambda Implementation. 3 | 4 | My plan, I wanna create Note-App, but not yet completed. next, I will be updating in a new branch. 5 | 6 | TODO: 7 | 8 | - [x] Insert data 9 | - [x] Show data 10 | - [ ] Delete data 11 | - [ ] Update data 12 | - [ ] User Interface 13 | - [ ] Note for (Image and free drawing) 14 | 15 | Library: 16 | - [Realm Java](https://github.com/realm/realm-java) 17 | - [Retrolambda](https://github.com/orfjackal/retrolambda) 18 | 19 | enjoy! 20 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'me.tatarka.retrolambda' 3 | apply plugin: 'realm-android' 4 | 5 | android { 6 | compileSdkVersion 25 7 | buildToolsVersion "25.0.0" 8 | defaultConfig { 9 | applicationId "app.daeng.ingetin" 10 | minSdkVersion 18 11 | targetSdkVersion 25 12 | versionCode 1 13 | versionName "1.0" 14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 15 | } 16 | android { 17 | compileOptions { 18 | sourceCompatibility JavaVersion.VERSION_1_8 19 | targetCompatibility JavaVersion.VERSION_1_8 20 | } 21 | } 22 | buildTypes { 23 | release { 24 | minifyEnabled false 25 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 26 | } 27 | } 28 | } 29 | 30 | dependencies { 31 | compile fileTree(include: ['*.jar'], dir: 'libs') 32 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 33 | exclude group: 'com.android.support', module: 'support-annotations' 34 | }) 35 | compile 'com.android.support:appcompat-v7:25.1.0' 36 | testCompile 'junit:junit:4.12' 37 | compile 'com.android.support:cardview-v7:25.1.0' 38 | compile 'com.android.support:recyclerview-v7:25.1.0' 39 | compile 'com.android.support:design:25.1.0' 40 | compile 'com.jakewharton:butterknife:8.4.0' 41 | annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' 42 | } 43 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/isfa/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -dontwarn java.lang.invoke.* -------------------------------------------------------------------------------- /app/src/androidTest/java/app/daeng/ingetin/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("app.daeng.ingetin", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Adapter/ItemAdapter.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Adapter; 2 | 3 | import android.content.Context; 4 | import android.support.v7.widget.CardView; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.TextView; 10 | 11 | import java.util.List; 12 | 13 | import app.daeng.ingetin.Interfaces.ClickedListener; 14 | import app.daeng.ingetin.Models.DataItemModel; 15 | import app.daeng.ingetin.R; 16 | import butterknife.BindView; 17 | import butterknife.ButterKnife; 18 | 19 | /** 20 | * Created by isfaaghyth on 15/1/17. 21 | */ 22 | 23 | public class ItemAdapter extends RecyclerView.Adapter { 24 | 25 | Context context; 26 | List dataItems; 27 | ClickedListener clickedListener; 28 | 29 | public ItemAdapter(Context context, ClickedListener clickedListener, List dataItems) { 30 | this.clickedListener = clickedListener; 31 | this.context = context; 32 | this.dataItems = dataItems; 33 | } 34 | 35 | @Override 36 | public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 37 | return new ItemHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item, parent, false)); 38 | } 39 | 40 | @Override 41 | public void onBindViewHolder(ItemHolder holder, final int position) { 42 | holder.txtName.setText(dataItems.get(position).getName()); 43 | holder.txtId.setText(String.valueOf(dataItems.get(position).getId())); 44 | holder.cardItem.setOnClickListener(view -> clickedListener.clicked(dataItems.get(position).getId())); 45 | } 46 | 47 | @Override 48 | public int getItemCount() { 49 | return dataItems.size(); 50 | } 51 | 52 | class ItemHolder extends RecyclerView.ViewHolder { 53 | 54 | @BindView(R.id.card_item) 55 | CardView cardItem; 56 | 57 | @BindView(R.id.txt_id) 58 | TextView txtId; 59 | 60 | @BindView(R.id.txt_name) 61 | TextView txtName; 62 | 63 | ItemHolder(View itemView) { 64 | super(itemView); 65 | ButterKnife.bind(this, itemView); 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Interfaces/ClickedListener.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Interfaces; 2 | 3 | /** 4 | * Created by isfaaghyth on 15/1/17. 5 | */ 6 | 7 | public interface ClickedListener { 8 | 9 | /* 10 | * onClick 11 | * @param id 12 | */ 13 | void clicked(int id); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Interfaces/DataListener.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Interfaces; 2 | 3 | import java.util.ArrayList; 4 | 5 | import app.daeng.ingetin.Models.DataItemModel; 6 | 7 | /** 8 | * Created by isfaaghyth on 15/1/17. 9 | */ 10 | 11 | public interface DataListener { 12 | /* 13 | * Add a new data. 14 | * @param id 15 | * @param name 16 | */ 17 | void dataAdd(String name); 18 | 19 | /* 20 | * Delete by Id 21 | * @param id 22 | */ 23 | void dataDelete(int id); 24 | 25 | /* 26 | * Modify by Id and modify a new data 27 | * @param id 28 | * @param name 29 | */ 30 | void dataModify(int id, String name); 31 | 32 | /* 33 | * show all data 34 | */ 35 | ArrayList showData(); 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/MainActivity.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.support.v7.widget.LinearLayoutManager; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.util.Log; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.EditText; 11 | 12 | import app.daeng.ingetin.Adapter.ItemAdapter; 13 | import app.daeng.ingetin.Interfaces.ClickedListener; 14 | import app.daeng.ingetin.Interfaces.DataListener; 15 | import app.daeng.ingetin.Presenter.DataProcesses; 16 | import app.daeng.ingetin.Presenter.ItemClicked; 17 | import butterknife.BindView; 18 | import butterknife.ButterKnife; 19 | import butterknife.OnClick; 20 | 21 | public class MainActivity extends AppCompatActivity { 22 | 23 | @BindView(R.id.edt_name) 24 | EditText edtName; 25 | 26 | @BindView(R.id.btn_insert) 27 | Button btnInsert; 28 | 29 | @BindView(R.id.lst_item) 30 | RecyclerView lstItem; 31 | 32 | private DataListener presenter; 33 | 34 | @Override 35 | protected void onCreate(Bundle savedInstanceState) { 36 | super.onCreate(savedInstanceState); 37 | setContentView(R.layout.activity_main); 38 | ButterKnife.bind(this); 39 | presenter = new DataProcesses(getApplicationContext()); 40 | initialize(); 41 | } 42 | 43 | @OnClick(R.id.btn_insert) 44 | public void InsertData() { 45 | presenter.dataAdd(edtName.getText().toString()); 46 | initialize(); 47 | } 48 | 49 | private void initialize() { 50 | lstItem.setLayoutManager(new LinearLayoutManager(this)); 51 | lstItem.setAdapter(new ItemAdapter(this, new ItemClicked(this), presenter.showData())); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Models/DataItemModel.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Models; 2 | 3 | /** 4 | * Created by isfaaghyth on 15/1/17. 5 | */ 6 | 7 | public class DataItemModel { 8 | private int id; 9 | private String name; 10 | 11 | public DataItemModel(int id, String name) { 12 | this.id = id; 13 | this.name = name; 14 | } 15 | 16 | public void setId(int id) { 17 | this.id = id; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | 24 | public int getId() { 25 | return id; 26 | } 27 | 28 | public String getName() { 29 | return name; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Presenter/DataProcesses.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Presenter; 2 | 3 | import android.content.Context; 4 | 5 | import java.util.ArrayList; 6 | 7 | import app.daeng.ingetin.Interfaces.DataListener; 8 | import app.daeng.ingetin.Models.DataItemModel; 9 | import app.daeng.ingetin.Presenter.Realm.HelperRealm; 10 | 11 | /** 12 | * Created by isfaaghyth on 15/1/17. 13 | */ 14 | 15 | public class DataProcesses implements DataListener { 16 | 17 | private HelperRealm helperRealm; 18 | 19 | public DataProcesses(Context context) { 20 | helperRealm = new HelperRealm(context); 21 | } 22 | 23 | @Override 24 | public void dataAdd(String name) { 25 | helperRealm.add(name); 26 | } 27 | 28 | @Override 29 | public void dataDelete(int id) { 30 | helperRealm.delete(id); 31 | } 32 | 33 | @Override 34 | public void dataModify(int id, String name) { 35 | helperRealm.modify(id, name); 36 | } 37 | 38 | @Override 39 | public ArrayList showData() { 40 | return helperRealm.show(); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Presenter/ItemClicked.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Presenter; 2 | 3 | import android.app.AlertDialog; 4 | import android.content.Context; 5 | import android.widget.Toast; 6 | 7 | import app.daeng.ingetin.Interfaces.ClickedListener; 8 | import app.daeng.ingetin.R; 9 | 10 | /** 11 | * Created by isfaaghyth on 17/1/17. 12 | */ 13 | 14 | public class ItemClicked implements ClickedListener { 15 | 16 | private Context context; 17 | 18 | public ItemClicked(Context context) { 19 | this.context = context; 20 | } 21 | 22 | @Override 23 | public void clicked(int id) { 24 | AlertDialog.Builder builder = new AlertDialog.Builder(context); 25 | builder.setTitle(context.getString(R.string.select_for)); 26 | builder.setItems(new CharSequence[]{context.getString(R.string.mn_delete), "test2"}, (dialogInterface, i) -> { 27 | switch (i) { 28 | case 0:Toast.makeText(context, "menu 1", Toast.LENGTH_SHORT).show();break; 29 | case 1:Toast.makeText(context, "menu 2", Toast.LENGTH_SHORT).show();break; 30 | } 31 | }); 32 | builder.show(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Presenter/Realm/DataRealm.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Presenter.Realm; 2 | 3 | import io.realm.RealmObject; 4 | import io.realm.annotations.PrimaryKey; 5 | import io.realm.annotations.RealmClass; 6 | 7 | /** 8 | * Created by isfaaghyth on 15/1/17. 9 | */ 10 | 11 | @RealmClass 12 | public class DataRealm extends RealmObject { 13 | 14 | @PrimaryKey 15 | private int id; 16 | 17 | private String name; 18 | 19 | public int getId() { 20 | return id; 21 | } 22 | 23 | public void setId(int id) { 24 | this.id = id; 25 | } 26 | 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setName(String name) { 32 | this.name = name; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/Presenter/Realm/HelperRealm.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.Presenter.Realm; 2 | 3 | import android.content.Context; 4 | 5 | import java.util.ArrayList; 6 | 7 | import app.daeng.ingetin.Models.DataItemModel; 8 | import io.realm.Realm; 9 | import io.realm.RealmConfiguration; 10 | import io.realm.RealmResults; 11 | 12 | /** 13 | * Created by isfaaghyth on 15/1/17. 14 | */ 15 | 16 | public class HelperRealm { 17 | private Realm realm; 18 | private RealmResults realmResults; 19 | private Context context; 20 | 21 | /* 22 | * Constructor 23 | * @param context 24 | */ 25 | public HelperRealm(Context context) { 26 | Realm.init(context); 27 | this.context = context; 28 | RealmConfiguration config = new RealmConfiguration 29 | .Builder() 30 | .deleteRealmIfMigrationNeeded() 31 | .build(); 32 | realm = Realm.getInstance(config); 33 | } 34 | 35 | /* 36 | * get size 37 | */ 38 | private int getCount() { 39 | realmResults = realm.where(DataRealm.class).findAll(); 40 | realmResults.sort("id"); 41 | return realmResults.size(); 42 | } 43 | 44 | public ArrayList show() { 45 | int id; 46 | String name; 47 | ArrayList data = new ArrayList<>(); 48 | 49 | realmResults = realm.where(DataRealm.class).findAll(); 50 | realmResults.sort("id"); 51 | 52 | if (realmResults.size() > 0) { 53 | for (int i = 0; i < realmResults.size(); i++) { 54 | id = realmResults.get(i).getId(); 55 | name = realmResults.get(i).getName(); 56 | data.add(new DataItemModel(id, name)); 57 | } 58 | } 59 | 60 | return data; 61 | } 62 | 63 | /* 64 | * Add a new data 65 | * @param name 66 | */ 67 | public void add(String name) { 68 | DataRealm data = new DataRealm(); 69 | data.setId(getCount() + 1); 70 | data.setName(name); 71 | 72 | realm.beginTransaction(); 73 | realm.copyToRealm(data); 74 | realm.commitTransaction(); 75 | } 76 | 77 | /* 78 | * Delete by id 79 | * @param id 80 | */ 81 | public void delete(int id) { 82 | RealmResults dataRealms = realm.where(DataRealm.class).equalTo("id", id).findAll(); 83 | realm.beginTransaction(); 84 | dataRealms.remove(0); 85 | // dataRealms.removeLast(); 86 | dataRealms.clear(); 87 | realm.commitTransaction(); 88 | } 89 | 90 | /* 91 | * Modify by Id with a new data 92 | * @param id 93 | * @param name 94 | */ 95 | public void modify(int id, String name) { 96 | realm.beginTransaction(); 97 | DataRealm dataRealm = realm.where(DataRealm.class).equalTo("id", id).findFirst(); 98 | dataRealm.setName(name); 99 | realm.commitTransaction(); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /app/src/main/java/app/daeng/ingetin/View/DataView.java: -------------------------------------------------------------------------------- 1 | package app.daeng.ingetin.View; 2 | 3 | /** 4 | * Created by isfaaghyth on 15/1/17. 5 | */ 6 | 7 | public interface DataView { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 19 | 20 | 27 | 28 |