package com.steamcommunity.siplus.steamscreenshots; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.ShareActionProvider; import android.widget.TextView; public class PreviewActivity extends Activity { static final String EXTRASTATE_ACCOUNT = Utility.PACKAGE + ".PreviewActivity.EXTRASTATE_ACCOUNT"; static final String EXTRASTATE_CAPTION = Utility.PACKAGE + ".PreviewActivity.EXTRASTATE_CAPTION"; static final String EXTRASTATE_GAME = Utility.PACKAGE + ".PreviewActivity.EXTRASTATE_GAME"; static final String EXTRASTATE_SCREENSHOT = Utility.PACKAGE + ".PreviewActivity.EXTRASTATE_SCREENSHOT"; static final String STATE_DELETE = Utility.PACKAGE + ".PreviewActivity.STATE_DELETE"; SteamshotsAccount mAccount; UploadedCaption mCaption; boolean mFailedToLoad; AlertDialog mDelete; String mGame; int mScreenshot; TextView widgetCaption; TextView widgetFail; LinearLayout widgetInfo; TouchImageView widgetScreenshot; TextView widgetTime; void hideDelete() { if (mDelete != null) { mDelete.dismiss(); mDelete = null; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle; if (savedInstanceState != null) { bundle = savedInstanceState; } else { bundle = getIntent().getExtras(); if (bundle == null) { finish(); return; } } SteamshotsAccount account = bundle.getParcelable(EXTRASTATE_ACCOUNT); mCaption = bundle.getParcelable(EXTRASTATE_CAPTION); mGame = bundle.getString(EXTRASTATE_GAME); mScreenshot = bundle.getInt(EXTRASTATE_SCREENSHOT); if ((account == null) || (mGame == null) || (mScreenshot <= 0)) { finish(); return; } mAccount = account; Utility.enableActionBarBack(this); setContentView(R.layout.view_preview); widgetCaption = (TextView)(findViewById(R.id.preview_caption)); widgetFail = (TextView)(findViewById(R.id.preview_fail)); widgetInfo = (LinearLayout)(findViewById(R.id.preview_info)); widgetScreenshot = (TouchImageView)(findViewById(R.id.preview_screenshot)); widgetTime = (TextView)(findViewById(R.id.preview_time)); int screenshot = mScreenshot; String game = mGame; String name = ScreenshotName.nameToString(screenshot); Resources resources = getResources(); long steamID = account.mSteamID; Bitmap bitmap = BitmapFactory.decodeFile(ScreenshotName.folderPath(steamID, game) + name); if (bitmap == null) { mFailedToLoad = true; widgetFail.setText(resources.getString(R.string.preview_fail, steamID, game, name)); widgetFail.setVisibility(View.VISIBLE); widgetInfo.setVisibility(View.GONE); widgetScreenshot.setVisibility(View.GONE); return; } widgetScreenshot.setImageBitmap(bitmap); widgetTime.setText(DateFormat.getInstance().format(new Date( ScreenshotName.creationTime(screenshot, steamID, game)))); widgetFail.setVisibility(View.GONE); widgetInfo.setVisibility(View.VISIBLE); widgetScreenshot.setVisibility(View.VISIBLE); if ((savedInstanceState != null) && (savedInstanceState.getBoolean(STATE_DELETE))) { showDelete(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { if (mFailedToLoad) { return true; } ArrayList<UploadedCaption> captions = UploadedCaption.fromFileSorted(mAccount.mSteamID, mGame); if (captions != null) { UploadedCaption item; Iterator<UploadedCaption> iterator; long screenshot = mScreenshot; for (iterator = captions.iterator(); iterator.hasNext(); ) { item = iterator.next(); if (item.mScreenshot == screenshot) { mCaption = item; break; } } } UploadedCaption caption = mCaption; if (caption == null) { getMenuInflater().inflate(R.menu.screenshots_new, menu); widgetCaption.setVisibility(View.GONE); return true; } getMenuInflater().inflate(R.menu.screenshots_uploaded, menu); ((ShareActionProvider)(menu.findItem(R.id.action_screenshots_uploaded_share).getActionProvider())) .setShareIntent(caption.createShareIntent(mAccount.mSteamID)); if (caption.mCaption.length() == 0) { widgetCaption.setVisibility(View.GONE); return true; } widgetCaption.setText(caption.mCaption); widgetCaption.setVisibility(View.VISIBLE); return true; } @Override protected void onDestroy() { super.onDestroy(); hideDelete(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.action_screenshots_new_delete: case R.id.action_screenshots_uploaded_delete: showDelete(); return true; case R.id.action_screenshots_new_upload: startActivity(new Intent(getApplicationContext(), UploadActivity.class) .putExtra(UploadActivity.EXTRASTATE_ACCOUNT, mAccount) .putExtra(UploadActivity.EXTRASTATE_GAME, mGame) .putExtra(UploadActivity.EXTRASTATE_SCREENSHOTS, new int[] {mScreenshot})); return true; case R.id.action_screenshots_uploaded_view: mCaption.openInBrowser(this, mAccount.mSteamID); return true; } return super.onOptionsItemSelected(item); } @Override protected void onRestart() { super.onRestart(); invalidateOptionsMenu(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(EXTRASTATE_ACCOUNT, mAccount); if (mCaption != null) { outState.putParcelable(EXTRASTATE_CAPTION, mCaption); } if (mDelete != null) { outState.putBoolean(STATE_DELETE, true); } outState.putString(EXTRASTATE_GAME, mGame); outState.putInt(EXTRASTATE_SCREENSHOT, mScreenshot); } void showDelete() { if (mDelete != null) { return; } PreviewDeleteOnClick listener = new PreviewDeleteOnClick(this); mDelete = (new AlertDialog.Builder(this)) .setMessage(R.string.preview_delete) .setNegativeButton(R.string.delete_cancel, listener) .setOnCancelListener(new PreviewDeleteOnCancel(this)) .setPositiveButton(R.string.delete_ok, listener) .show(); } } class PreviewDeleteOnCancel implements DialogInterface.OnCancelListener { PreviewActivity mActivity; PreviewDeleteOnCancel(PreviewActivity activity) { mActivity = activity; } @Override public void onCancel(DialogInterface dialog) { mActivity.mDelete = null; } } class PreviewDeleteOnClick implements DialogInterface.OnClickListener { PreviewActivity mActivity; PreviewDeleteOnClick(PreviewActivity activity) { mActivity = activity; } @Override public void onClick(DialogInterface dialog, int which) { PreviewActivity activity = mActivity; activity.hideDelete(); if (which == AlertDialog.BUTTON_POSITIVE) { ScreenshotName.deleteScreenshot(activity, activity.mScreenshot, activity.mAccount.mSteamID, activity.mGame); activity.finish(); } } }