package com.heyzap.sdk; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; import com.heyzap.http.RequestParams; import android.app.Activity; import android.content.Context; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; public class AchievementDialogFull extends ClickableToast { private Context context; private FeedView feedView; private TextView titleView; private Button saveButton; FrameLayout feedFrame; FrameLayout loadingSpinner; private long shownAt; public AchievementDialogFull(final Context context, final boolean seeAllAchievements, JSONObject response) { super(context); this.context = context; this.setContentView(Rzap.layout("achievement_dialog_full")); this.setFocusable(true); this.setFocusableInTouchMode(true); feedFrame = (FrameLayout) findViewById(Rzap.id("feed_frame")); loadingSpinner = (FrameLayout) findViewById(Rzap.id("spinner")); saveButton = (Button) this.findViewById(Rzap.id("save_button")); titleView = (TextView) this.findViewById(Rzap.id("title")); if (seeAllAchievements) { setTitle("Achievements"); } feedFrame.setVisibility(View.GONE); loadingSpinner.setVisibility(View.VISIBLE); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Launch the android market and close this dialog new AchievementsFullOverlay(context).show(); AchievementDialogFull.this.hide(); } }); this.findViewById(Rzap.id("close_button")).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AchievementDialogFull.this.hide(); } }); if (response != null) { populateAchievementFeedlettes(response); } else { retrieveData(seeAllAchievements); } // Use portrait width, regardless of orientation FrameLayout container = (FrameLayout) findViewById(Rzap.id("wrapper")); FrameLayout.LayoutParams p = (FrameLayout.LayoutParams) container.getLayoutParams(); WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); p.width = Math.min(metrics.widthPixels, metrics.heightPixels); p.gravity = Gravity.CENTER; container.setLayoutParams(p); } public void setTitle(String value) { titleView.setText(value); } private void retrieveData(final boolean seeAllAchievements) { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { feedFrame.setVisibility(View.GONE); loadingSpinner.setVisibility(View.VISIBLE); final RequestParams requestParams = new RequestParams(); requestParams.put("game_context_package", context.getPackageName()); SDKRestClient.post(context, "/in_game_api/achievements/get_achievements", requestParams, new SDKResponseHandler() { @Override public void onSuccess(JSONObject response) { Logger.log("bbb get achievements success"); populateAchievementFeedlettes(response); } @Override public void onFailure(Throwable e) { Logger.log("bbb get achievements failure", e); } }); } }); } public void populateAchievementFeedlettes(JSONObject response) { feedView = new FeedView(context); loadingSpinner.setVisibility(View.GONE); feedFrame.setVisibility(View.VISIBLE); feedFrame.removeAllViews(); final List<Feedlette> fs = new ArrayList<Feedlette>(); if (response != null && response.has("achievements")) { JSONArray stream; try { stream = response.getJSONArray("achievements"); for (int i = 0; i < stream.length(); i++) { JSONObject obj = stream.getJSONObject(i); fs.add(new AchievementFeedlette(obj)); } feedView.connectFastAdapter(fs); } catch (org.json.JSONException e) { e.printStackTrace(); } } feedFrame.addView(feedView); } @Override public WindowManager.LayoutParams getWmParams() { WindowManager.LayoutParams params = super.getWmParams(); params.gravity = Gravity.CENTER; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.verticalMargin = 0.0f; params.horizontalMargin = 0.0f; params.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; return params; } @Override public void show() { shownAt = System.currentTimeMillis(); super.show(); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE && System.currentTimeMillis() > shownAt + 1000) { this.hide(); return false; } else { return super.onTouchEvent(event); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { this.hide(); return true; } else { return super.onKeyDown(keyCode, event); } } }