package com.steamcommunity.siplus.steamscreenshots;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;
import android.app.Fragment;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class ScreenshotsGamesFragment extends Fragment {
static final String FRAGMENT_TAG = Utility.PACKAGE + ".ScreenshotsGamesFragment";
SteamshotsAccount mAccount;
ScreenshotsActivity mActivity;
ScreenshotsGamesAdapter mAdapter;
PackageManager mPackageManager;
TextView widgetEmpty;
ListView widgetList;
void fillGamesList() {
ScreenshotsActivity activity = mActivity;
String path = String.format("%s/Steamshots/%d",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath(),
mAccount.mSteamID);
File gamesDirectory = new File(path);
if (!Utility.makeDirectories(gamesDirectory)) {
return;
}
File[] games = gamesDirectory.listFiles(new ScreenshotsGamesFileFilter());
String gameNames[] = new String[games.length];
int i;
for (i = 0; i < games.length; ++i) {
gameNames[i] = games[i].getName();
}
Arrays.sort(gameNames, new ScreenshotsGamesComparator(mPackageManager));
activity.mGames = gameNames;
mAdapter.notifyDataSetChanged();
if (gameNames.length == 0) {
widgetEmpty.setVisibility(View.VISIBLE);
widgetList.setVisibility(View.GONE);
} else {
widgetEmpty.setVisibility(View.GONE);
widgetList.setVisibility(View.VISIBLE);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_screenshots_games, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ScreenshotsActivity activity = (ScreenshotsActivity)(getActivity());
mActivity = activity;
mAccount = activity.mAccount;
mPackageManager = activity.getPackageManager();
View view = getView();
widgetEmpty = (TextView)(view.findViewById(R.id.fragment_screenshots_games_empty));
widgetList = (ListView)(view.findViewById(R.id.fragment_screenshots_games_list));
mAdapter = new ScreenshotsGamesAdapter(activity);
fillGamesList();
widgetList.setAdapter(mAdapter);
widgetList.setOnItemClickListener(new ScreenshotsGamesOnItemClick(activity));
}
}
class ScreenshotsGamesAdapter extends BaseAdapter {
ScreenshotsActivity mActivity;
LayoutInflater mLayoutInflater;
ScreenshotsGamesAdapter(ScreenshotsActivity activity) {
mActivity = activity;
mLayoutInflater = mActivity.getLayoutInflater();
}
@Override
public int getCount() {
return mActivity.mGames.length;
}
@Override
public Object getItem(int position) {
return mActivity.mGames[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ScreenshotsActivity activity = mActivity;
PackageManager packageManager = activity.getPackageManager();
String game = activity.mGames[position];
Drawable icon;
CharSequence label;
try {
ApplicationInfo info = packageManager.getApplicationInfo(game, 0);
icon = packageManager.getApplicationIcon(info);
label = packageManager.getApplicationLabel(info);
if (label == null) {
label = game;
}
} catch (NameNotFoundException e) {
icon = activity.getResources().getDrawable(android.R.drawable.sym_def_app_icon);
label = game;
}
View view = Utility.inflateImageTextListItem(mLayoutInflater, parent, icon, label);
if (game.equals(activity.mGame)) {
view.setBackgroundResource(android.R.color.holo_blue_dark);
}
return view;
}
}
class ScreenshotsGamesComparator implements Comparator<String> {
PackageManager mPackageManager;
ScreenshotsGamesComparator(PackageManager packageManager) {
mPackageManager = packageManager;
}
@Override
public int compare(String lhs, String rhs) {
return Utility.applicationLabel(mPackageManager, lhs).compareToIgnoreCase(
Utility.applicationLabel(mPackageManager, rhs));
}
}
class ScreenshotsGamesFileFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
if (!(pathname.isDirectory() && pathname.getName().matches("\\A[\\.0-9A-Z_a-z]+\\z"))) {
return false;
}
return pathname.listFiles(new ScreenshotFileFilter(0)).length != 0;
}
}
class ScreenshotsGamesOnItemClick implements OnItemClickListener {
ScreenshotsActivity mActivity;
ScreenshotsGamesOnItemClick(ScreenshotsActivity activity) {
mActivity = activity;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mActivity.selectGame(mActivity.mGames[position]);
}
}