package com.victorvieux.livedroid.fragments; import java.io.IOException; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.app.WallpaperManager; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.GridView; import android.widget.Spinner; import android.widget.Toast; import com.androidquery.AQuery; import com.devspark.appmsg.AppMsg; import com.google.gson.Gson; import com.victorvieux.livedroid.R; import com.victorvieux.livedroid.activities.OnRefreshListener; import com.victorvieux.livedroid.adapters.AchAdapter; import com.victorvieux.livedroid.api.RestClient; import com.victorvieux.livedroid.api.data.Achievement.ACH_TYPE; import com.victorvieux.livedroid.api.endpoints.Achievements; import com.victorvieux.livedroid.api.endpoints.Catalog; import com.victorvieux.livedroid.tools.CachedAsyncHttpResponseHandler; import com.victorvieux.livedroid.tools.Misc; public class GameFragment extends Fragment implements OnClickListener, OnItemSelectedListener { private AQuery aq = null; AchAdapter mAdapter; public static GameFragment newInstance(int index, String url, String title, String box_small, String box_large, String catalog) { GameFragment f = new GameFragment(); Bundle args = new Bundle(); args.putInt("index", index); args.putString("url", url); args.putString("title", title); args.putString("box_small", box_small); args.putString("box_large", box_large); args.putString("catalog", catalog); f.setArguments(args); return f; } @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { switch (arg2) { case 2: mAdapter.filter(ACH_TYPE.MISSING); break; case 1: mAdapter.filter(ACH_TYPE.WON); break; default: mAdapter.filter(ACH_TYPE.ALL); break; } } @Override public void onNothingSelected(AdapterView<?> arg0) { } public String getShownUrl() { return getArguments().getString("url"); } public int getShownIndex() { return getArguments().getInt("index"); } public String getShownTitle() { return getArguments().getString("title"); } public String getShownSmallBox() { return getArguments().getString("box_small"); } public String getShownLargeBox() { return getArguments().getString("box_large"); } public String getShownCatalogUrl() { return getArguments().getString("catalog"); } public String getx360aUrl() { return "http://www.xbox360achievements.org/game/"+ getShownTitle().replace(' ', '-').replace(":", "").toLowerCase() + "/guide/"; } @Override public void onActivityCreated(Bundle savedState) { super.onActivityCreated(savedState); aq = new AQuery(getActivity()); if (getView().findViewById(R.id.MainImageViewBox) != null) { aq.id(R.id.MainImageViewBox).image(getShownSmallBox()); getView().findViewById(R.id.MainImageViewBox).setOnClickListener(this); } onRefresh(false); RestClient.get(getActivity(), new CachedAsyncHttpResponseHandler() { @Override public void onSuccess(String response) { if (GameFragment.this.getView() != null) { if (response.length() > 1000) GameFragment.this.getView().findViewById(R.id.ButtonGuide).setVisibility(View.VISIBLE); GameFragment.this.getView().findViewById(R.id.ButtonGuide).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(getx360aUrl())); GameFragment.this.startActivity(i); } }); } } }, getx360aUrl()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) return null; View root = inflater.inflate(R.layout.fragment_game, container, false); GridView gal = (GridView) root.findViewById(R.id.gridView); gal.setEmptyView(root.findViewById(R.id.loading_ref)); return root; } private ACH_TYPE getFilter() { switch (((Spinner)getView().findViewById(R.id.spinnerType)).getSelectedItemPosition()) { case 1: return ACH_TYPE.WON; case 2: return ACH_TYPE.MISSING; default: return ACH_TYPE.ALL; } } public void onRefresh(final boolean b) { RestClient.get(getActivity(), new CachedAsyncHttpResponseHandler() { @Override public void onStart() { if (getActivity() instanceof OnRefreshListener) ((OnRefreshListener) getActivity()).setRefresh(true); if (!b) { String cache = getCache(); if (cache == null) return; onWork(true, cache); } } @Override public void onSuccess(String response) { super.onSuccess(response); onWork(false, response); } @Override public void onFailure(Throwable error) { AppMsg.makeText(getActivity(), R.string.api_error, AppMsg.STYLE_ALERT).show(); } @Override public void onFinish() { if (getActivity() != null && getActivity() instanceof OnRefreshListener) ((OnRefreshListener) getActivity()).setRefresh(false); } public void onWork(boolean cached, String response) { Gson gson = new Gson(); Achievements achs = gson.fromJson(response, Achievements.class); if (getActivity() != null) PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putString("API_LIMIT", achs.API_Limit).commit(); if (achs != null && achs.Success && GameFragment.this.getView() != null) { GridView gal = (GridView) GameFragment.this.getView().findViewById(R.id.gridView); mAdapter = new AchAdapter(GameFragment.this.getActivity(), achs.Achievements, GameFragment.this.getShownTitle()); mAdapter.filter(getFilter()); gal.setAdapter(mAdapter); getView().findViewById(R.id.spinnerType).setVisibility(View.VISIBLE); ((Spinner)getView().findViewById(R.id.spinnerType)).setOnItemSelectedListener(GameFragment.this); } } }, getShownUrl()); getCatalog(); } private void getCatalog() { RestClient.get(getActivity(), new CachedAsyncHttpResponseHandler() { @Override public void onStart() { if (getActivity() instanceof OnRefreshListener) ((OnRefreshListener) getActivity()).setRefresh(true); String cache = getCache(); if (cache == null) return; Gson gson = new Gson(); Catalog catalog = gson.fromJson(cache, Catalog.class); if (catalog != null && catalog.success) { if (getView().findViewById(R.id.imageViewBanner) != null) { aq.id(R.id.imageViewBanner).image(catalog.data.images.banner); if (getView().findViewById(R.id.MainImageViewBox) == null) getView().findViewById(R.id.imageViewBanner).setOnClickListener(GameFragment.this); } if (getView().findViewById(R.id.ButtonWallpaper) != null){ getView().findViewById(R.id.ButtonWallpaper).setTag(catalog.data.images.background); getView().findViewById(R.id.ButtonWallpaper).setOnClickListener(GameFragment.this); getView().findViewById(R.id.ButtonWallpaper).setVisibility(View.VISIBLE); } } } @Override public void onSuccess(String response) { super.onSuccess(response); Gson gson = new Gson(); Catalog catalog = gson.fromJson(response, Catalog.class); if (catalog != null && catalog.success) { aq.id(R.id.imageViewBanner).image(catalog.data.images.banner); if (getView().findViewById(R.id.MainImageViewBox) == null) getView().findViewById(R.id.imageViewBanner).setOnClickListener(GameFragment.this); } if (getView().findViewById(R.id.ButtonWallpaper) != null){ getView().findViewById(R.id.ButtonWallpaper).setTag(catalog.data.images.background); getView().findViewById(R.id.ButtonWallpaper).setOnClickListener(GameFragment.this); getView().findViewById(R.id.ButtonWallpaper).setVisibility(View.VISIBLE); } } @Override public void onFailure(Throwable error) { AppMsg.makeText(getActivity(), R.string.api_error, AppMsg.STYLE_ALERT).show(); } @Override public void onFinish() { if (getActivity() != null && getActivity() instanceof OnRefreshListener) ((OnRefreshListener) getActivity()).setRefresh(false); } }, getShownCatalogUrl()); } @Override public void onClick(View arg0) { AlertDialog.Builder builder = new Builder(getActivity()); builder.setTitle(getShownTitle()); View alert = LayoutInflater.from(getActivity()).inflate(R.layout.alert_picture, null); switch (arg0.getId()) { case R.id.MainImageViewBox: case R.id.imageViewBanner: aq.id(alert.findViewById(R.id.imageViewBoxBig)).image(getShownLargeBox()); builder.setView(alert); builder.setNeutralButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); break; case R.id.ButtonWallpaper: final String url = (String)arg0.getTag(); aq.id(alert.findViewById(R.id.imageViewBoxBig)).image(url); builder.setView(alert); builder.setPositiveButton(R.string.set_wallpaper, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new getBackGroundTask().execute(url); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); break; default: break; } } class getBackGroundTask extends AsyncTask<String, Void, Void> { ProgressDialog progressDialog; @Override protected void onPreExecute() { progressDialog = new ProgressDialog(getActivity()); progressDialog.setIndeterminate(true); progressDialog.setMessage(getString(R.string.loading)); progressDialog.setCancelable(false); progressDialog.show(); } @Override protected Void doInBackground(String... params) { try { WallpaperManager.getInstance(getActivity()).setBitmap(Misc.loadBitmap(params[0])); } catch (IOException e) { AppMsg.makeText(getActivity(), R.string.wallpaper_error, AppMsg.STYLE_ALERT).show(); } return null; } @Override protected void onPostExecute(Void result) { progressDialog.dismiss(); AppMsg.makeText(getActivity(), R.string.wallpaper_updated, AppMsg.STYLE_INFO).show(); } } }