aboutsummaryrefslogtreecommitdiff
path: root/src/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java')
-rwxr-xr-xsrc/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java222
1 files changed, 222 insertions, 0 deletions
diff --git a/src/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java b/src/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java
new file mode 100755
index 0000000..fe072ce
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/DownloadLevelsMenuScreen.java
@@ -0,0 +1,222 @@
+package org.happysanta.gd.Menu;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.view.View;
+import android.widget.RelativeLayout;
+import android.widget.Toast;
+import org.happysanta.gd.API.*;
+import org.happysanta.gd.GDActivity;
+import org.happysanta.gd.Menu.Views.MenuImageView;
+import org.happysanta.gd.R;
+import org.happysanta.gd.API.Response;
+import org.happysanta.gd.Settings;
+import org.happysanta.gd.WaitForNetworkConnection;
+
+import static org.happysanta.gd.Helpers.*;
+import static org.happysanta.gd.Helpers.getDp;
+
+public class DownloadLevelsMenuScreen extends LevelsMenuScreen {
+
+ protected final static int API_LIMIT = 100;
+ public static API.LevelsSortType sort;
+
+ protected MenuImageView sortImage;
+ // protected API api;
+ protected Request request;
+ protected int offset = 0;
+ protected boolean isLoading = false;
+ protected boolean fullLoaded = false;
+ protected WaitForNetworkConnection waitForNetworkConnection = null;
+ protected Toast toast;
+
+ public DownloadLevelsMenuScreen(String title, MenuScreen navTarget) {
+ super(title, navTarget);
+
+ // api = new API();
+ // api.setSort(sort);
+
+ Context context = getGDActivity();
+
+ // Sort icon
+ sortImage = new MenuImageView(context);
+ sortImage.setImageResource(R.drawable.ic_sort);
+ sortImage.setAdjustViewBounds(true);
+ sortImage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showSortDialog();
+ }
+ });
+ sortImage.setVisibility(View.GONE);
+ sortImage.setPadding(getDp(10), 0, 0, 0);
+
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ getDp(40)
+ );
+ params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
+
+ sortImage.setLayoutParams(params);
+ }
+
+ @Override
+ protected void loadLevels() {
+ try {
+ if (!checkNetwork())
+ return;
+
+ showLoading();
+ isLoading = true;
+ request = API.getLevels(offset, API_LIMIT, sort, new ResponseHandler() {
+ @Override
+ public void onResponse(final Response response) {
+ final LevelsResponse levelsResponse = new LevelsResponse(response);
+ if (status != Statuses.NORMAL) {
+ clearList();
+ setStatus(Statuses.NORMAL);
+ }
+
+ hideLoading();
+
+ addElements = new AsyncAddElements() {
+ @Override
+ protected void onPostExecute(Void v) {
+ logDebug("offset = " + offset + ", totalCount = " + levelsResponse.getTotalCount());
+ fullLoaded = offset >= levelsResponse.getTotalCount();
+ if (!fullLoaded)
+ showLoading();
+
+ isLoading = false;
+ }
+ };
+ addElements.execute(levelsResponse.getLevels());
+ }
+
+ @Override
+ public void onError(APIException error) {
+ showError(error.getMessage());
+ isLoading = false;
+ }
+ });
+
+ offset += API_LIMIT;
+ } catch (Exception e) {
+ e.printStackTrace();
+ showError(getString(R.string.download_error));
+
+ isLoading = false;
+ }
+ }
+
+ @Override
+ public void reloadLevels() {
+ if (request != null) request.cancel();
+ offset = 0;
+ isLoading = false;
+ fullLoaded = false;
+
+ super.reloadLevels();
+ }
+
+ protected void showSortDialog() {
+ final CharSequence[] items = getStringArray(R.array.sort_variants);
+
+ AlertDialog dialog = new AlertDialog.Builder(getGDActivity())
+ .setTitle(getString(R.string.sort_by))
+ .setSingleChoiceItems(items, API.getIdBySortType(sort), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int item) {
+ API.LevelsSortType newSort = API.getSortTypeById(item);
+
+ if (newSort != sort) {
+ sort = newSort;
+ // api.setSort(newSort);
+ Settings.setLevelsSort(sort);
+ reloadLevels();
+ }
+
+ dialog.dismiss();
+ }
+ })
+ .create();
+
+ dialog.show();
+ }
+
+ protected boolean checkNetwork() {
+ if (!isOnline()) {
+ if (elements.isEmpty()) {
+ showError(getString(R.string.waiting_for_network));
+
+ if (waitForNetworkConnection != null)
+ waitForNetworkConnection.cancel(true);
+
+ waitForNetworkConnection = new WaitForNetworkConnection();
+ waitForNetworkConnection.execute(null, new Runnable() {
+ @Override
+ public void run() {
+ reloadLevels();
+ }
+ });
+ } else {
+ if (toast != null) {
+ toast.cancel();
+ }
+
+ toast = Toast.makeText(getGDActivity().getApplicationContext(), getString(R.string.no_internet_connection), Toast.LENGTH_SHORT);
+ toast.show();
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onHide(MenuScreen newMenu) {
+ logDebug("onHide");
+ super.onHide(newMenu);
+
+ GDActivity activity = getGDActivity();
+
+ if (newMenu != getGameMenu().levelScreen) {
+ offset = 0;
+ isLoading = false;
+ fullLoaded = false;
+
+ if (request != null) request.cancel();
+ // api.cancelRequest();
+ if (waitForNetworkConnection != null)
+ waitForNetworkConnection.cancel(true);
+ }
+
+ activity.titleLayout.removeView(sortImage);
+ sortImage.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onShow() {
+ super.onShow();
+
+ GDActivity activity = getGDActivity();
+
+ activity.titleLayout.addView(sortImage);
+ sortImage.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onScroll(double percent) {
+ if (percent >= 97 && !isLoading && !fullLoaded) {
+ loadLevels();
+ }
+ }
+
+ @Override
+ public void deleteElement(LevelMenuElement el) {
+ super.deleteElement(el);
+ offset--;
+ }
+
+}