diff --git a/example/app/build.gradle b/example/app/build.gradle index a79d4d6..386a8dc 100644 --- a/example/app/build.gradle +++ b/example/app/build.gradle @@ -19,14 +19,30 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + packagingOptions { + exclude 'META-INF/LICENSE' + exclude 'META-INF/NOTICE' + } + + dexOptions { + preDexLibraries = false + } } dependencies { testCompile 'junit:junit:4.12' + compile 'com.android.support:support-v4:22.2.1' compile 'com.android.support:appcompat-v7:22.2.1' - compile 'com.android.support:recyclerview-v7:22.0.+' + compile 'com.github.bumptech.glide:glide:3.6.1' + + // The library reference compile project(':library') -// compile 'com.github.thorbenprimke:realm-recyclerview:0.9.1' +// compile 'com.github.thorbenprimke:realm-recyclerview:0.9.2' + + // The date project reference + // compile project(':data') + compile 'com.github.thorbenprimke:realm-nytimes-data:0.9.0' } diff --git a/example/app/src/main/AndroidManifest.xml b/example/app/src/main/AndroidManifest.xml index 7af6e55..254e514 100644 --- a/example/app/src/main/AndroidManifest.xml +++ b/example/app/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ + + + - + + diff --git a/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/GridExampleActivity.java b/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/GridExampleActivity.java new file mode 100644 index 0000000..87f298b --- /dev/null +++ b/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/GridExampleActivity.java @@ -0,0 +1,121 @@ +package co.moonmonkeylabs.realmrecyclerview.example; + +import android.content.Context; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; + +import co.moonmonkeylabs.realmnytimesdata.NYTimesDataLoader; +import co.moonmonkeylabs.realmnytimesdata.NYTimesModule; +import co.moonmonkeylabs.realmnytimesdata.model.NYTimesMultimedium; +import co.moonmonkeylabs.realmnytimesdata.model.NYTimesStory; +import co.moonmonkeylabs.realmrecyclerview.RealmRecyclerView; +import io.realm.Realm; +import io.realm.RealmBasedRecyclerViewAdapter; +import io.realm.RealmConfiguration; +import io.realm.RealmList; +import io.realm.RealmResults; +import io.realm.RealmViewHolder; + +public class GridExampleActivity extends AppCompatActivity { + + private RealmRecyclerView realmRecyclerView; + private NYTimesStoryRecyclerViewAdapter nyTimesStoryAdapter; + private Realm realm; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main_grid_layout); + realmRecyclerView = (RealmRecyclerView) findViewById(R.id.realm_recycler_view); + + setTitle(getResources().getString( + R.string.activity_layout_name, + getIntent().getStringExtra("Type"))); + + resetRealm(); + + Realm.setDefaultConfiguration(getRealmConfig()); + realm = Realm.getDefaultInstance(); + RealmResults nyTimesStories = + realm.where(NYTimesStory.class).findAllSorted("sortTimeStamp", false); + nyTimesStoryAdapter = new NYTimesStoryRecyclerViewAdapter(this, nyTimesStories, true, true); + realmRecyclerView.setAdapter(nyTimesStoryAdapter); + + final NYTimesDataLoader nyTimesDataLoader = new NYTimesDataLoader(); + nyTimesDataLoader.loadData("home", realm, "b9989f55a0c330b0bdfea069af08b163:15:73381676"); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + realm.close(); + realm = null; + } + + public class NYTimesStoryRecyclerViewAdapter extends RealmBasedRecyclerViewAdapter { + + public NYTimesStoryRecyclerViewAdapter( + Context context, + RealmResults realmResults, + boolean automaticUpdate, + boolean animateIdType) { + super(context, realmResults, automaticUpdate, animateIdType); + } + + public class ViewHolder extends RealmViewHolder { + + public TextView title; + public TextView publishedDate; + public ImageView image; + public TextView storyAbstract; + + public ViewHolder(LinearLayout container) { + super(container); + this.title = (TextView) container.findViewById(R.id.title); + this.publishedDate = (TextView) container.findViewById(R.id.date); + this.image = (ImageView) container.findViewById(R.id.image); + this.storyAbstract = (TextView) container.findViewById(R.id.story_abstract); + } + } + + @Override + public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int viewType) { + View v = inflater.inflate(R.layout.grid_item_view, viewGroup, false); + ViewHolder vh = new ViewHolder((LinearLayout) v); + return vh; + } + + @Override + public void onBindRealmViewHolder(ViewHolder viewHolder, int position) { + final NYTimesStory nyTimesStory = realmResults.get(position); + viewHolder.title.setText(nyTimesStory.getTitle()); + viewHolder.publishedDate.setText(nyTimesStory.getPublishedDate()); + final RealmList multimedia = nyTimesStory.getMultimedia(); + if (multimedia != null && !multimedia.isEmpty()) { + Glide.with(GridExampleActivity.this).load( + multimedia.get(0).getUrl()).into(viewHolder.image); + } + viewHolder.storyAbstract.setText(nyTimesStory.getStoryAbstract()); + } + } + + private RealmConfiguration getRealmConfig() { + return new RealmConfiguration + .Builder(this) + .setModules(Realm.getDefaultModule(), new NYTimesModule()) + .build(); + } + + private void resetRealm() { + Realm.deleteRealm(getRealmConfig()); + } +} diff --git a/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/LayoutSelectorActivity.java b/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/LayoutSelectorActivity.java index 7e670fe..b2363de 100644 --- a/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/LayoutSelectorActivity.java +++ b/example/app/src/main/java/co/moonmonkeylabs/realmrecyclerview/example/LayoutSelectorActivity.java @@ -47,7 +47,8 @@ public void onClick(View v) { new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(LayoutSelectorActivity.this, MainActivity.class); + Intent intent = + new Intent(LayoutSelectorActivity.this, GridExampleActivity.class); intent.putExtra("Type", "Grid"); startActivity(intent); } diff --git a/example/app/src/main/res/layout/activity_main_grid_layout.xml b/example/app/src/main/res/layout/activity_main_grid_layout.xml index 9f575a9..7771390 100644 --- a/example/app/src/main/res/layout/activity_main_grid_layout.xml +++ b/example/app/src/main/res/layout/activity_main_grid_layout.xml @@ -1,4 +1,4 @@ - - + diff --git a/example/app/src/main/res/layout/grid_item_view.xml b/example/app/src/main/res/layout/grid_item_view.xml new file mode 100644 index 0000000..e8f4288 --- /dev/null +++ b/example/app/src/main/res/layout/grid_item_view.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + diff --git a/example/settings.gradle b/example/settings.gradle index b49f0c1..f88e6ae 100644 --- a/example/settings.gradle +++ b/example/settings.gradle @@ -1,4 +1,7 @@ include ':app' include 'library' -project(':library').projectDir = new File(settingsDir, '../library') \ No newline at end of file +project(':library').projectDir = new File(settingsDir, '../library') + +include 'data' +project(':data').projectDir = new File(settingsDir, '../../realm-nytimes-data/library') \ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index 394a30c..9dd9f56 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -22,7 +22,7 @@ dependencies { compile fileTree(dir: 'libs', include: ['diffutils-1.2.1.jar']) compile 'com.android.support:recyclerview-v7:22.0.+' - compile 'io.realm:realm-android:0.82.+' + compile 'io.realm:realm-android:0.84.1' compile 'com.github.TonicArtos:SuperSLiM:ed0ba4b4d2' }