package com.steamcommunity.siplus.steamscreenshots;
import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.GridView;
import android.widget.ShareActionProvider;
public final class ScreenshotsActivity extends Activity {
static final String EXTRASTATE_ACCOUNT = Utility.PACKAGE + ".GamesActivity.EXTRASTATE_ACCOUNT";
static final String STATE_DELETE = Utility.PACKAGE + ".GamesActivity.STATE_DELETE";
static final String STATE_GAME = Utility.PACKAGE + ".GamesActivity.STATE_GAME";
SteamshotsAccount mAccount;
ActionMode mActionMode;
Context mApplicationContext;
AlertDialog mDelete;
FragmentManager mFragmentManager;
String mGame;
String[] mGames;
boolean mNeedDelete;
String mOnlineAddress;
Uri mOnlineURI;
Resources mResources;
Bundle mSavedInstanceState;
boolean mTablet;
void deselectGame() {
mGame = null;
FragmentManager fragmentManager = mFragmentManager;
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (mTablet) {
transaction.replace(R.id.view_screenshots_fragment_images, new ScreenshotsImagesFragment(),
ScreenshotsImagesFragment.FRAGMENT_TAG);
Fragment fragment = fragmentManager.findFragmentByTag(ScreenshotsGamesFragment.FRAGMENT_TAG);
if (fragment != null) {
((ScreenshotsGamesFragment)(fragment)).fillGamesList();
}
} else {
fragmentManager.popBackStack();
transaction.replace(android.R.id.content, new ScreenshotsGamesFragment(), ScreenshotsGamesFragment.FRAGMENT_TAG);
}
transaction
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)
.commit();
refreshActionBar();
}
ScreenshotsImagesFragment getImagesFragment() {
if (!mTablet && (mGame == null)) {
return null;
}
Fragment fragment = mFragmentManager.findFragmentByTag(ScreenshotsImagesFragment.FRAGMENT_TAG);
if (fragment == null) {
return null;
}
ScreenshotsImagesFragment imagesFragment = (ScreenshotsImagesFragment)(fragment);
if (imagesFragment.mGame == null) {
return null;
}
return imagesFragment;
}
void hideDelete() {
if (mDelete != null) {
mDelete.dismiss();
mDelete = null;
}
}
@Override
public void onBackPressed() {
if (mTablet || (mGame == null)) {
super.onBackPressed();
} else {
deselectGame();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mAccount = savedInstanceState.getParcelable(EXTRASTATE_ACCOUNT);
mGame = savedInstanceState.getString(STATE_GAME);
}
if (mAccount == null) {
mAccount = getIntent().getParcelableExtra(EXTRASTATE_ACCOUNT);
}
if ((mAccount == null) || !mAccount.mValid) {
finish();
return;
}
mOnlineAddress = String.format("http://steamcommunity.com/profiles/%d/screenshots", mAccount.mSteamID);
mOnlineURI = Uri.parse(mOnlineAddress);
mApplicationContext = getApplicationContext();
mFragmentManager = getFragmentManager();
mResources = getResources();
Utility.enableActionBarBack(this);
setContentView(R.layout.view_screenshots);
mTablet = findViewById(R.id.view_screenshots_fragment_images) != null;
if (savedInstanceState == null) {
FragmentTransaction transaction = mFragmentManager.beginTransaction();
if (mTablet) {
transaction.add(R.id.view_screenshots_fragment_games, new ScreenshotsGamesFragment(),
ScreenshotsGamesFragment.FRAGMENT_TAG);
transaction.add(R.id.view_screenshots_fragment_images, new ScreenshotsImagesFragment(),
ScreenshotsImagesFragment.FRAGMENT_TAG);
} else {
transaction.add(android.R.id.content, new ScreenshotsGamesFragment(), ScreenshotsGamesFragment.FRAGMENT_TAG);
}
transaction.commit();
startService(new Intent(mApplicationContext, TakeService.class)
.putExtra(TakeService.EXTRA_ACCOUNT, mAccount));
} else {
mNeedDelete = savedInstanceState.getBoolean(STATE_DELETE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.screenshots, menu);
((ShareActionProvider)(menu.findItem(R.id.action_screenshots_share).getActionProvider()))
.setShareIntent((new Intent(Intent.ACTION_SEND))
.setType("text/plain")
.putExtra(Intent.EXTRA_TEXT, mOnlineAddress));
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
hideDelete();
if (!isChangingConfigurations()) {
stopService(new Intent(mApplicationContext, TakeService.class));
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (mTablet || (mGame == null)) {
finish();
return true;
}
deselectGame();
return true;
case R.id.action_screenshots_view:
startActivity((new Intent(Intent.ACTION_VIEW)).setData(mOnlineURI));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onRestart() {
super.onRestart();
refreshEverything();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(EXTRASTATE_ACCOUNT, mAccount);
if (mDelete != null) {
outState.putBoolean(STATE_DELETE, true);
}
outState.putString(STATE_GAME, mGame);
}
@Override
protected void onStart() {
super.onStart();
if (!mNeedDelete) {
return;
}
mNeedDelete = false;
hideDelete();
showDelete();
}
void refreshActionBar() {
int selected = selectedCount();
if (selected == 0) {
if (mActionMode == null) {
return;
}
mActionMode.finish();
mActionMode = null;
return;
}
if (mActionMode != null) {
mActionMode.invalidate();
} else {
mActionMode = startActionMode(new ScreenshotsActionMode(this));
}
mActionMode.setTitle(Integer.toString(selected));
}
void refreshEverything() {
ScreenshotsImagesFragment imagesFragment = getImagesFragment();
if (imagesFragment != null) {
imagesFragment.loadScreenshots();
imagesFragment.filterDeadSelected();
}
if (mTablet || (mGame == null)) {
Fragment fragment = mFragmentManager.findFragmentByTag(ScreenshotsGamesFragment.FRAGMENT_TAG);
if (fragment != null) {
((ScreenshotsGamesFragment)(fragment)).fillGamesList();
}
}
if (mDelete != null) {
hideDelete();
showDelete();
}
}
int selectedCount() {
if (mGame == null) {
return 0;
}
ScreenshotsImagesFragment fragment = getImagesFragment();
if (fragment == null) {
return 0;
}
return fragment.mSelected.size();
}
void selectGame(String game) {
if (game == mGame) {
return;
}
mGame = game;
FragmentManager fragmentManager = mFragmentManager;
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (mTablet) {
transaction.replace(R.id.view_screenshots_fragment_images, new ScreenshotsImagesFragment(),
ScreenshotsImagesFragment.FRAGMENT_TAG);
} else {
transaction
.addToBackStack(null)
.replace(android.R.id.content, new ScreenshotsImagesFragment(), ScreenshotsImagesFragment.FRAGMENT_TAG);
}
transaction
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
if (mTablet) {
Fragment fragment = fragmentManager.findFragmentByTag(ScreenshotsGamesFragment.FRAGMENT_TAG);
if (fragment != null) {
((ScreenshotsGamesFragment)(fragment)).mAdapter.notifyDataSetChanged();
}
}
}
void showDelete() {
if (mDelete != null) {
return;
}
ScreenshotsImagesFragment fragment = getImagesFragment();
if (fragment == null) {
return;
}
ArrayList<Integer> selected = fragment.mSelected;
if (selected.isEmpty()) {
return;
}
ScreenshotsDeleteOnClick listener = new ScreenshotsDeleteOnClick(this);
AlertDialog.Builder builder = (new AlertDialog.Builder(this))
.setNegativeButton(R.string.delete_cancel, listener)
.setOnCancelListener(new ScreenshotsDeleteOnCancel(this))
.setPositiveButton(R.string.delete_ok, listener);
if (selected.size() == 1) {
builder.setMessage(R.string.screenshots_images_delete_single);
} else {
builder.setMessage(R.string.screenshots_images_delete);
}
mDelete = builder.show();
}
}
class ScreenshotsActionMode implements ActionMode.Callback {
ScreenshotsActivity mActivity;
MenuInflater mMenuInflater;
ScreenshotsActionMode(ScreenshotsActivity activity) {
mActivity = activity;
if (activity.mGame == null) {
return;
}
mMenuInflater = activity.getMenuInflater();
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
ScreenshotsActivity activity = mActivity;
ScreenshotsImagesFragment fragment = activity.getImagesFragment();
if (fragment == null) {
return false;
}
ArrayList<Integer> selected = fragment.mSelected;
int length = selected.size();
if (length == 0) {
return false;
}
switch (item.getItemId()) {
case R.id.action_screenshots_new_delete:
case R.id.action_screenshots_uploaded_delete:
case R.id.action_screenshots_uploaded_multi_delete:
activity.showDelete();
return true;
case R.id.action_screenshots_new_upload:
{
int i = 0;
Iterator<Integer> iterator;
int[] screenshots = new int[length];
for (iterator = selected.iterator(); iterator.hasNext(); ) {
screenshots[i++] = iterator.next();
}
activity.startActivity(new Intent(activity.mApplicationContext, UploadActivity.class)
.putExtra(UploadActivity.EXTRASTATE_ACCOUNT, activity.mAccount)
.putExtra(UploadActivity.EXTRASTATE_GAME, activity.mGame)
.putExtra(UploadActivity.EXTRASTATE_SCREENSHOTS, screenshots));
return true;
}
case R.id.action_screenshots_uploaded_view:
{
ArrayList<UploadedCaption> captions = fragment.mCaptions;
if (captions == null) {
return true;
}
UploadedCaption caption;
Iterator<UploadedCaption> iterator;
int screenshot = selected.get(0);
for (iterator = captions.iterator(); iterator.hasNext(); ) {
caption = iterator.next();
if (caption.mScreenshot == screenshot) {
caption.openInBrowser(activity, activity.mAccount.mSteamID);
return true;
}
}
return true;
}
}
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
ScreenshotsActivity activity = mActivity;
activity.mActionMode = null;
if (activity.mGame == null) {
return;
}
ScreenshotsImagesFragment fragment = activity.getImagesFragment();
if (fragment == null) {
return;
}
fragment.mSelected = new ArrayList<Integer>(fragment.mScreenshots.length);
GridView grid = fragment.widgetGrid;
int i;
int length = grid.getChildCount();
View view;
for (i = 0; i < length; ++i) {
view = grid.getChildAt(i);
view.setBackgroundResource(0);
view.findViewById(R.id.grid_screenshot_selected).setVisibility(View.GONE);
}
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.clear();
ScreenshotsImagesFragment fragment = mActivity.getImagesFragment();
if (fragment == null) {
return true;
}
ArrayList<UploadedCaption> captions = fragment.mCaptions;
if (captions == null) {
mMenuInflater.inflate(R.menu.screenshots_new, menu);
return true;
}
int item;
ArrayList<Integer> selected = fragment.mSelected;
if (selected.size() == 1) {
UploadedCaption caption;
item = selected.get(0);
Iterator<UploadedCaption> captionIterator;
for (captionIterator = captions.iterator(); captionIterator.hasNext(); ) {
caption = captionIterator.next();
if (caption.mScreenshot != item) {
continue;
}
mMenuInflater.inflate(R.menu.screenshots_uploaded, menu);
((ShareActionProvider)(menu.findItem(R.id.action_screenshots_uploaded_share).getActionProvider()))
.setShareIntent(caption.createShareIntent(mActivity.mAccount.mSteamID));
return true;
}
mMenuInflater.inflate(R.menu.screenshots_new, menu);
return true;
}
UploadedCaption[] captionsArray = fragment.mCaptionsAtPositions;
int i = 0;
Iterator<Integer> iterator;
int[] screenshots = fragment.mScreenshots;
int length = screenshots.length;
for (iterator = selected.iterator(); iterator.hasNext(); ) {
item = iterator.next();
for (; i < length; ++i) {
if (screenshots[i] != item) {
continue;
}
if (captionsArray[i] != null) {
mMenuInflater.inflate(R.menu.screenshots_uploaded_multi, menu);
return true;
}
++i;
break;
}
if (i >= length) {
break;
}
}
mMenuInflater.inflate(R.menu.screenshots_new, menu);
return true;
}
}
class ScreenshotsDeleteOnCancel implements DialogInterface.OnCancelListener {
ScreenshotsActivity mActivity;
ScreenshotsDeleteOnCancel(ScreenshotsActivity activity) {
mActivity = activity;
}
@Override
public void onCancel(DialogInterface dialog) {
mActivity.mDelete = null;
}
}
class ScreenshotsDeleteOnClick implements DialogInterface.OnClickListener {
ScreenshotsActivity mActivity;
ScreenshotsDeleteOnClick(ScreenshotsActivity activity) {
mActivity = activity;
}
@Override
public void onClick(DialogInterface dialog, int which) {
ScreenshotsActivity activity = mActivity;
activity.hideDelete();
if (which != AlertDialog.BUTTON_POSITIVE) {
return;
}
ScreenshotsImagesFragment fragment = activity.getImagesFragment();
if (fragment == null) {
return;
}
ArrayList<Integer> selected = fragment.mSelected;
if (selected.isEmpty()) {
return;
}
String game = activity.mGame;
Iterator<Integer> iterator;
long steamID = activity.mAccount.mSteamID;
for (iterator = selected.iterator(); iterator.hasNext(); ) {
ScreenshotName.deleteScreenshot(activity, iterator.next(), steamID, game);
}
activity.refreshEverything();
}
}