package com.dwdesign.tweetings.fragment;
import static com.dwdesign.tweetings.util.Utils.showErrorToast;
import java.util.List;
import com.dwdesign.popupmenu.PopupMenu;
import com.dwdesign.popupmenu.PopupMenu.OnMenuItemClickListener;
import com.dwdesign.tweetings.Constants;
import com.dwdesign.tweetings.R;
import com.dwdesign.tweetings.adapter.ExtensionsAdapter;
import com.dwdesign.tweetings.loader.ExtensionsListLoader;
import com.dwdesign.tweetings.model.Panes;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
public class ExtensionsListFragment extends BaseListFragment implements Constants, LoaderCallbacks<List<ResolveInfo>>,
OnItemClickListener, OnItemLongClickListener, OnMenuItemClickListener, Panes.Right {
private ExtensionsAdapter mAdapter;
private PackageManager mPackageManager;
private ResolveInfo mSelectedResolveInfo;
private ListView mListView;
private PopupMenu mPopupMenu;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mPackageManager = getActivity().getPackageManager();
mAdapter = new ExtensionsAdapter(getActivity(), mPackageManager);
setListAdapter(mAdapter);
mListView = getListView();
mListView.setOnItemClickListener(this);
mListView.setOnItemLongClickListener(this);
getLoaderManager().initLoader(0, null, this);
setListShown(false);
}
@Override
public Loader<List<ResolveInfo>> onCreateLoader(int id, Bundle args) {
return new ExtensionsListLoader(getActivity(), mPackageManager);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ResolveInfo info = mAdapter.getItem(position);
if (info == null || info.activityInfo == null) return;
final Intent intent = new Intent(INTENT_ACTION_EXTENSIONS);
intent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
try {
startActivity(intent);
} catch (final ActivityNotFoundException e) {
showErrorToast(getActivity(), null, e, false);
}
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
mSelectedResolveInfo = null;
mSelectedResolveInfo = mAdapter.getItem(position);
mPopupMenu = PopupMenu.getInstance(getActivity(), view);
mPopupMenu.inflate(R.menu.action_extension);
mPopupMenu.setOnMenuItemClickListener(this);
mPopupMenu.show();
return true;
}
@Override
public void onLoaderReset(Loader<List<ResolveInfo>> loader) {
mAdapter.setData(null);
}
@Override
public void onLoadFinished(Loader<List<ResolveInfo>> loader, List<ResolveInfo> data) {
mAdapter.setData(data);
setListShown(true);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
if (mSelectedResolveInfo == null) return false;
switch (item.getItemId()) {
case MENU_SETTINGS: {
final Intent intent = new Intent(INTENT_ACTION_EXTENSIONS);
intent.setClassName(mSelectedResolveInfo.activityInfo.packageName,
mSelectedResolveInfo.activityInfo.name);
try {
startActivity(intent);
} catch (final ActivityNotFoundException e) {
showErrorToast(getActivity(), null, e, false);
}
break;
}
case MENU_DELETE: {
final Uri packageUri = Uri.parse("package:" + mSelectedResolveInfo.activityInfo.packageName);
final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
startActivity(uninstallIntent);
break;
}
}
return false;
}
@Override
public void onStop() {
if (mPopupMenu != null) {
mPopupMenu.dismiss();
}
super.onStop();
}
}