Commit be1e1159 authored by Sajal Narang's avatar Sajal Narang Committed by GitHub

Merge pull request #227 from wncc/generify-fragments

Generify RecyclerViewFragment
parents fad9b717 d8f175b1
package app.insti; package app.insti;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
...@@ -19,24 +22,27 @@ import app.insti.fragment.EventFragment; ...@@ -19,24 +22,27 @@ import app.insti.fragment.EventFragment;
import app.insti.fragment.UserFragment; import app.insti.fragment.UserFragment;
public final class Utils { public final class Utils {
public static UpdatableList<Event> eventCache = new UpdatableList<>();
private static String sessionId; private static String sessionId;
private static RetrofitInterface retrofitInterface; private static RetrofitInterface retrofitInterface;
public static UpdatableList<Event> eventCache = new UpdatableList<>();
public static final void loadImageWithPlaceholder(final ImageView imageView, final String url) { public static final void loadImageWithPlaceholder(final ImageView imageView, final String url) {
Picasso.get() Picasso.get()
.load(resizeImageUrl(url)) .load(resizeImageUrl(url))
.into(imageView, new Callback() { .into(imageView, new Callback() {
@Override @Override
public void onSuccess() { public void onSuccess() {
Picasso.get() Picasso.get()
.load(url) .load(url)
.placeholder(imageView.getDrawable()) .placeholder(imageView.getDrawable())
.into(imageView); .into(imageView);
} }
@Override
public void onError(Exception ex) {} @Override
}); public void onError(Exception ex) {
// Do nothing
}
});
} }
public static final String resizeImageUrl(String url) { public static final String resizeImageUrl(String url) {
...@@ -44,11 +50,15 @@ public final class Utils { ...@@ -44,11 +50,15 @@ public final class Utils {
} }
public static final String resizeImageUrl(String url, Integer dim) { public static final String resizeImageUrl(String url, Integer dim) {
if (url == null) { return url; } if (url == null) {
return url;
}
return url.replace("api.insti.app/static/", "img.insti.app/static/" + dim.toString() + "/"); return url.replace("api.insti.app/static/", "img.insti.app/static/" + dim.toString() + "/");
} }
/** Update the open fragment */ /**
* Update the open fragment
*/
public static final void updateFragment(Fragment fragment, FragmentActivity fragmentActivity) { public static final void updateFragment(Fragment fragment, FragmentActivity fragmentActivity) {
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction(); FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right); ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
...@@ -97,4 +107,11 @@ public final class Utils { ...@@ -97,4 +107,11 @@ public final class Utils {
public static void setRetrofitInterface(RetrofitInterface retrofitInterface) { public static void setRetrofitInterface(RetrofitInterface retrofitInterface) {
Utils.retrofitInterface = retrofitInterface; Utils.retrofitInterface = retrofitInterface;
} }
public static void openWebURL(Context context, String URL) {
if (URL != null && !URL.isEmpty()) {
Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse(URL));
context.startActivity(browse);
}
}
} }
package app.insti.api.model; package app.insti.api.model;
import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.view.View;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.sql.Timestamp; import java.sql.Timestamp;
import app.insti.interfaces.Browsable; import app.insti.interfaces.Clickable;
public class NewsArticle implements Browsable { import static app.insti.Utils.openWebURL;
public class NewsArticle implements Clickable {
@NonNull() @NonNull()
@SerializedName("id") @SerializedName("id")
private String articleID; private String articleID;
...@@ -84,4 +88,14 @@ public class NewsArticle implements Browsable { ...@@ -84,4 +88,14 @@ public class NewsArticle implements Browsable {
public void setBody(Body body) { public void setBody(Body body) {
this.body = body; this.body = body;
} }
@Override
public View.OnClickListener getOnClickListener(final Context context) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
openWebURL(context, link);
}
};
}
} }
package app.insti.api.model; package app.insti.api.model;
import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.view.View;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.sql.Timestamp; import java.sql.Timestamp;
import app.insti.interfaces.Browsable; import app.insti.interfaces.Clickable;
public class PlacementBlogPost implements Browsable { import static app.insti.Utils.openWebURL;
public class PlacementBlogPost implements Clickable {
@NonNull() @NonNull()
@SerializedName("id") @SerializedName("id")
private String postID; private String postID;
...@@ -72,4 +76,14 @@ public class PlacementBlogPost implements Browsable { ...@@ -72,4 +76,14 @@ public class PlacementBlogPost implements Browsable {
public void setPublished(Timestamp published) { public void setPublished(Timestamp published) {
this.published = published; this.published = published;
} }
@Override
public View.OnClickListener getOnClickListener(final Context context) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
openWebURL(context, link);
}
};
}
} }
package app.insti.api.model; package app.insti.api.model;
import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.view.View;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.sql.Timestamp; import java.sql.Timestamp;
import app.insti.interfaces.Browsable; import app.insti.interfaces.Clickable;
public class TrainingBlogPost implements Browsable { import static app.insti.Utils.openWebURL;
public class TrainingBlogPost implements Clickable {
@NonNull() @NonNull()
@SerializedName("id") @SerializedName("id")
private String postID; private String postID;
...@@ -72,4 +76,14 @@ public class TrainingBlogPost implements Browsable { ...@@ -72,4 +76,14 @@ public class TrainingBlogPost implements Browsable {
public void setPublished(Timestamp published) { public void setPublished(Timestamp published) {
this.published = published; this.published = published;
} }
@Override
public View.OnClickListener getOnClickListener(final Context context) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
openWebURL(context, link);
}
};
}
} }
...@@ -22,7 +22,7 @@ import app.insti.R; ...@@ -22,7 +22,7 @@ import app.insti.R;
import app.insti.Utils; import app.insti.Utils;
import app.insti.activity.MainActivity; import app.insti.activity.MainActivity;
import app.insti.api.RetrofitInterface; import app.insti.api.RetrofitInterface;
import app.insti.interfaces.Browsable; import app.insti.interfaces.Clickable;
import app.insti.interfaces.ItemClickListener; import app.insti.interfaces.ItemClickListener;
import app.insti.interfaces.Readable; import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable; import app.insti.interfaces.Writable;
...@@ -32,7 +32,7 @@ import retrofit2.Response; ...@@ -32,7 +32,7 @@ import retrofit2.Response;
import static android.view.View.GONE; import static android.view.View.GONE;
public abstract class RecyclerViewFragment<T extends Browsable, S extends RecyclerView.Adapter<RecyclerView.ViewHolder> & Readable<T> & Writable<T>> extends BaseFragment { public abstract class RecyclerViewFragment<T extends Clickable, S extends RecyclerView.Adapter<RecyclerView.ViewHolder> & Readable<T> & Writable<T>> extends BaseFragment {
public static boolean showLoader = true; public static boolean showLoader = true;
protected RecyclerView recyclerView; protected RecyclerView recyclerView;
protected Class<T> postType; protected Class<T> postType;
...@@ -103,9 +103,7 @@ public abstract class RecyclerViewFragment<T extends Browsable, S extends Recycl ...@@ -103,9 +103,7 @@ public abstract class RecyclerViewFragment<T extends Browsable, S extends Recycl
adapter = adapterType.getDeclaredConstructor(List.class, ItemClickListener.class).newInstance(result, new ItemClickListener() { adapter = adapterType.getDeclaredConstructor(List.class, ItemClickListener.class).newInstance(result, new ItemClickListener() {
@Override @Override
public void onItemClick(View v, int position) { public void onItemClick(View v, int position) {
String link = result.get(position).getLink(); result.get(position).getOnClickListener(getContext()).onClick(v);
if (link != null && !link.isEmpty())
openWebURL(link);
} }
}); });
initRecyclerView(); initRecyclerView();
...@@ -167,11 +165,6 @@ public abstract class RecyclerViewFragment<T extends Browsable, S extends Recycl ...@@ -167,11 +165,6 @@ public abstract class RecyclerViewFragment<T extends Browsable, S extends Recycl
return adapter.getPosts().size(); return adapter.getPosts().size();
} }
private void openWebURL(String URL) {
Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse(URL));
startActivity(browse);
}
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search_view_menu, menu); inflater.inflate(R.menu.search_view_menu, menu);
......
package app.insti.interfaces;
public interface Browsable {
String getLink();
}
package app.insti.interfaces;
import android.content.Context;
import android.view.View.OnClickListener;
public interface Clickable {
OnClickListener getOnClickListener(Context context);
}
File mode changed from 100755 to 100644
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment