package ams.android.linkit.Fragment;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import ams.android.linkit.Activity.MainActivity;
import ams.android.linkit.Adapter.AdapterListview;
import ams.android.linkit.Adapter.AdapterListviewEmpty;
import ams.android.linkit.Model.LinkitObject;
import ams.android.linkit.R;
import ams.android.linkit.Tools.GlobalApplication;
import ams.android.linkit.Tools.customListView;
import me.leolin.shortcutbadger.ShortcutBadger;
/**
* Created by Aidin on 2/1/2015.
*/
public class FragmentLinks extends Fragment {
private static String TAG = "linkitShopper";
public static TextView txtMainTitle;
ArrayList<LinkitObject> itemsLikes = new ArrayList<>();
ArrayList<LinkitObject> itemsFeatured = new ArrayList<>();
AdapterListview adapterListview;
AdapterListviewEmpty adapterListviewEmpty;
SwipeRefreshLayout swipeLayout;
RelativeLayout layWaiting;
customListView listView;
TextView txtEmptyInfo;
LinkitObject currentItem;
Boolean callState = false;
String globalEndDate = null;
String globalStartDate = null;
String listViewType;
String userID, regID, merchantID, merchantUsername;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
((MainActivity) getActivity()).currentFragmentName = "Link";
try {
currentItem = getArguments().getParcelable("item");
} catch (Exception ex) {
}
View rootView = inflater.inflate(R.layout.fragment_links, container, false);
userID = ((GlobalApplication) getActivity().getApplication()).getUserId();
regID = ((GlobalApplication) getActivity().getApplication()).getRegistrationId();
listView = (customListView) rootView.findViewById(R.id.listView);
swipeLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_container);
txtMainTitle = (TextView) rootView.findViewById(R.id.txtMainTitle);
ImageButton btnMenuDrawer = (ImageButton) rootView.findViewById(R.id.btnMenuDrawer);
ImageButton btnInsta = (ImageButton) rootView.findViewById(R.id.btn_instagram);
layWaiting = (RelativeLayout) rootView.findViewById(R.id.lay_waiting);
txtEmptyInfo = (TextView) rootView.findViewById(R.id.txtEmptyInfo);
btnMenuDrawer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.openDrawerMenu();
}
});
btnInsta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (merchantID != null) {
Uri uri = Uri.parse("http://instagram.com/_u/" + merchantUsername);
Intent insta = new Intent(Intent.ACTION_VIEW, uri);
insta.setPackage("com.instagram.android");
if (isIntentAvailable(getActivity().getApplicationContext(), insta)) {
startActivity(insta);
} else {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/" + merchantUsername)));
}
} else {
Intent insta_intent = getActivity().getPackageManager().getLaunchIntentForPackage("com.instagram.android");
startActivity(insta_intent);
}
} catch (Exception e) {
Log.e("linkitBuyer", "can't open Instagram");
}
}
});
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
globalStartDate=null;
if (listViewType == "L") {
refreshLikesData();
} else if (listViewType == "F") {
refreshFeaturedMerchantData();
} else if (listViewType == "P") {
refreshMerchantPostedData();
} else if (listViewType == "M") {
refreshMyMerchantPostedData();
}
}
});
swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
adapterListview = new AdapterListview(getActivity(), getFragmentManager(), itemsLikes);
listView.setAdapter(adapterListview);
listView.setDescendantFocusability(ListView.FOCUS_AFTER_DESCENDANTS);
listView.setOnDetectScrollListener(new customListView.OnDetectScrollListener() {
@Override
public void onUpScrolling() {
}
@Override
public void onDownScrolling() {
if (listView.getLastVisiblePosition() == itemsLikes.size() - 1) {
if (!callState) {
//Log.i("linkit", "end list");
layWaiting.setVisibility(View.VISIBLE);
callState = true;
if (listViewType == "L") {
addDataToEndLikes();
} else if (listViewType == "F") {
//refreshFeaturedData();
} else if (listViewType == "P") {
addDataToEndMerchantPosted();
} else if (listViewType == "M") {
addDataToEndMyMerchantPosted();
}
}
}
}
});
swipeLayout.setRefreshing(true);
refreshLikesData();
// Get tracker.
Tracker t = ((GlobalApplication) getActivity().getApplication()).getTracker(GlobalApplication.TrackerName.APP_TRACKER);
t.setScreenName("LinkitShopper - List");
t.send(new HitBuilders.AppViewBuilder().build());
return rootView;
}
public void serverLogout() {
AsyncHttpClient client = new AsyncHttpClient();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
String URL = getResources().getString(R.string.BASE_URL) + "users/updateregid";
client.post(URL, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
((GlobalApplication) getActivity().getApplication()).clearAllSettings();
try {
((GlobalApplication) getActivity().getApplicationContext()).setBadgetCount(0);
ShortcutBadger.setBadge(getActivity().getApplicationContext(), 0);
} catch (Exception e) {
}
//showToast("Logout");
itemsLikes.clear();
itemsFeatured.clear();
FragmentLogin f1 = new FragmentLogin();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, f1, "Login");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
if (statusCode == 401) {
Log.e("linkit", "ERR 401");
((GlobalApplication) getActivity().getApplication()).clearAllSettings();
// showToast("Logout");
// FragmentLogin f1 = new FragmentLogin();
// FragmentTransaction ft = getFragmentManager().beginTransaction();
// ft.replace(R.id.container, f1); // f1_container is your FrameLayout container
// ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// ft.addToBackStack("Login");
// ft.commit();
} else {
Log.e("linkit", "ERR");
}
}
@Override
public void onRetry(int retryNo) {
}
});
}
public void addDataToEndLikes() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("endDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + userID + "/likedmedias";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
adapterListview.notifyDataSetChanged();
layWaiting.setVisibility(View.INVISIBLE);
callState = false;
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
callState = false;
swipeLayout.setRefreshing(false);
layWaiting.setVisibility(View.INVISIBLE);
}
});
}
public void addDataToEndMyMerchantPosted() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("endDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + userID + "/followsmedia";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
adapterListview.notifyDataSetChanged();
layWaiting.setVisibility(View.INVISIBLE);
callState = false;
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
callState = false;
swipeLayout.setRefreshing(false);
layWaiting.setVisibility(View.INVISIBLE);
}
});
}
public void addDataToEndMerchantPosted() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("endDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + merchantID + "/matchedmedia";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
adapterListview.notifyDataSetChanged();
layWaiting.setVisibility(View.INVISIBLE);
callState = false;
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
callState = false;
swipeLayout.setRefreshing(false);
layWaiting.setVisibility(View.INVISIBLE);
}
});
}
public void refreshLikesData() {
merchantID=null;
merchantUsername=null;
listViewType = "L";
itemsLikes.clear();
adapterListview.notifyDataSetChanged();
listView.setVisibility(View.GONE);
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("startDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + userID + "/likedmedias";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
itemsLikes.clear();
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (itemsLikes.isEmpty()) {
txtEmptyInfo.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
} else {
txtEmptyInfo.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
listView.setAdapter(adapterListview);
listView.setOnItemClickListener(null);
adapterListview.notifyDataSetChanged();
swipeLayout.setRefreshing(false);
if (currentItem != null) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentWebView f1 = new FragmentWebView();
Bundle bundle = new Bundle();
bundle.putParcelable("item", itemsLikes.get(0));
f1.setArguments(bundle);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.add(R.id.container, f1, "WebView");
ft.addToBackStack("WebView");
ft.commit();
currentItem = null;
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
swipeLayout.setRefreshing(false);
}
});
}
public void refreshMyMerchantPostedData() {
merchantID=null;
merchantUsername=null;
listViewType = "M";
itemsLikes.clear();
adapterListview.notifyDataSetChanged();
listView.setVisibility(View.GONE);
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("startDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + userID + "/followsmedia";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
itemsLikes.clear();
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (itemsLikes.isEmpty()) {
txtEmptyInfo.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
} else {
txtEmptyInfo.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
listView.setAdapter(adapterListview);
listView.setOnItemClickListener(null);
adapterListview.notifyDataSetChanged();
swipeLayout.setRefreshing(false);
if (currentItem != null) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentWebView f1 = new FragmentWebView();
Bundle bundle = new Bundle();
bundle.putParcelable("item", itemsLikes.get(0));
f1.setArguments(bundle);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.add(R.id.container, f1, "WebView");
ft.addToBackStack("WebView");
ft.commit();
currentItem = null;
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
swipeLayout.setRefreshing(false);
}
});
}
public void refreshMerchantPostedData() {
listViewType = "P";
itemsLikes.clear();
adapterListview.notifyDataSetChanged();
listView.setVisibility(View.GONE);
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
if (globalStartDate != null) {
requestParams.add("startDate", globalStartDate);
}
String URL = getResources().getString(R.string.BASE_URL) + "users/" + merchantID + "/matchedmedia";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
itemsLikes.clear();
try {
parseJsonLikes(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (itemsLikes.isEmpty()) {
txtEmptyInfo.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
} else {
txtEmptyInfo.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
globalStartDate = itemsLikes.get(itemsLikes.size() - 1).createdDate;
listView.setAdapter(adapterListview);
listView.setOnItemClickListener(null);
adapterListview.notifyDataSetChanged();
swipeLayout.setRefreshing(false);
if (currentItem != null) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentWebView f1 = new FragmentWebView();
Bundle bundle = new Bundle();
bundle.putParcelable("item", itemsLikes.get(0));
f1.setArguments(bundle);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.add(R.id.container, f1, "WebView");
ft.addToBackStack("WebView");
ft.commit();
currentItem = null;
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
swipeLayout.setRefreshing(false);
}
});
}
public void refreshFeaturedMerchantData() {
listViewType = "F";
txtEmptyInfo.setVisibility(View.GONE);
listView.setVisibility(View.GONE);
itemsFeatured.clear();
adapterListview.notifyDataSetChanged();
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
client.addHeader("token", regID);
client.addHeader("device", "android");
client.addHeader("userType", "buyer");
String URL = getResources().getString(R.string.BASE_URL) + "users/" + userID + "/recommendedMerchants";
client.get(URL, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
itemsFeatured.clear();
try {
parseJsonFeatured(new String(response, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
swipeLayout.setRefreshing(false);
adapterListviewEmpty = new AdapterListviewEmpty(getActivity(), getFragmentManager(), itemsFeatured);
listView.setAdapter(adapterListviewEmpty);
listView.setVisibility(View.VISIBLE);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
globalStartDate=null;
merchantID = itemsFeatured.get(position).mediaID;
merchantUsername = itemsFeatured.get(position).owner;
refreshMerchantPostedData();
// Uri uri = Uri.parse("http://instagram.com/_u/" + itemsFeatured.get(position).owner);
// Intent insta = new Intent(Intent.ACTION_VIEW, uri);
// insta.setPackage("com.instagram.android");
// if (isIntentAvailable(getActivity().getApplicationContext(), insta)) {
// startActivity(insta);
// } else {
// startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/" + itemsFeatured.get(position).owner)));
// }
}
});
adapterListviewEmpty.notifyDataSetChanged();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
swipeLayout.setRefreshing(false);
}
});
}
private void parseJsonLikes(String jsonStr) {
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray feeds = jsonObj.getJSONArray("results");
int counterStart, counterEnd, counterSeed;
counterStart = 0;
counterEnd = feeds.length();
counterSeed = 1;
for (int i = counterStart; i < counterEnd; i = i + counterSeed) {
JSONObject item = feeds.getJSONObject(i);
JSONObject xitem;
LinkitObject myobject = new LinkitObject();
if (item.has("_id")) {
myobject.mediaID = item.getString("_id");
} else {
myobject.mediaID = "";
}
if (item.has("media")) {
xitem = item.getJSONObject("media");
} else {
xitem = item;
}
if (xitem.getJSONObject("owner").has("username")) {
myobject.owner = xitem.getJSONObject("owner").getString("username");
} else {
myobject.owner = "";
}
if (xitem.getJSONObject("owner").has("profilePicture")) {
myobject.ownerProfilePic = xitem.getJSONObject("owner").getString("profilePicture");
} else {
myobject.ownerProfilePic = "";
}
if (xitem.has("created")) {
myobject.createdDate = xitem.getString("created");
} else {
myobject.createdDate = "";
}
if (xitem.has("caption")) {
myobject.caption = xitem.getString("caption");
} else {
myobject.caption = "";
}
if (xitem.has("productDescription")) {
myobject.productDescription = xitem.getString("productDescription");
} else {
myobject.productDescription = "";
}
if (xitem.has("linkToProduct")) {
myobject.productLink = xitem.getString("linkToProduct");
} else {
myobject.productLink = "";
}
if (xitem.has("productLinkScreenshot")) {
myobject.linkSrceenShot = xitem.getString("productLinkScreenshot");
} else {
myobject.linkSrceenShot = "";
}
if (xitem.getJSONObject("images").getJSONObject("standard_resolution").has("url")) {
myobject.imageUrl = xitem.getJSONObject("images").getJSONObject("standard_resolution").getString("url");
} else {
myobject.imageUrl = "";
}
itemsLikes.add(myobject);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
//Log.e(TAG, "Couldn't get any data from the url");
}
}
private void parseJsonFeatured(String jsonStr) {
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray feeds = jsonObj.getJSONArray("results");
for (int i = 0; i < feeds.length(); i++) {
JSONObject item = feeds.getJSONObject(i);
LinkitObject myobject = new LinkitObject();
if (item.has("_id")) {
myobject.mediaID = item.getString("_id");
} else {
myobject.mediaID = "";
}
if (item.has("username")) {
myobject.owner = item.getString("username");
} else {
myobject.owner = "";
}
if (item.has("profilePicture")) {
myobject.ownerProfilePic = item.getString("profilePicture");
} else {
myobject.ownerProfilePic = "";
}
if (item.has("bio")) {
myobject.productDescription = item.getString("bio");
} else {
myobject.productDescription = "";
}
if (item.has("website")) {
myobject.ownerWebsite = item.getString("website");
} else {
myobject.ownerWebsite = "";
}
//
itemsFeatured.add(myobject);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
//Log.e(TAG, "Couldn't get any data from the url");
}
}
private boolean isIntentAvailable(Context ctx, Intent intent) {
final PackageManager packageManager = ctx.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
}