package com.mcxiaoke.apptoolkit.menu; import android.app.Dialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import com.mcxiaoke.apptoolkit.AppConfig; import com.mcxiaoke.apptoolkit.AppContext; import com.mcxiaoke.apptoolkit.R; import com.mcxiaoke.apptoolkit.adapter.AppActionsAdapter; import com.mcxiaoke.apptoolkit.adapter.BaseArrayAdapter; import com.mcxiaoke.apptoolkit.fragment.BaseDialogFragment; import com.mcxiaoke.apptoolkit.model.AppInfo; import com.mcxiaoke.apptoolkit.task.SimpleCommandTask; import com.mcxiaoke.apptoolkit.task.TaskMessage; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Project: filemanager * Package: com.mcxiaoke.appmanager.fragment * User: mcxiaoke * Date: 13-6-12 * Time: 下午10:57 */ public class PopupMenuFragment extends BaseDialogFragment implements AdapterView.OnItemClickListener { private ListView mListView; private BaseArrayAdapter<PopupMenuItem> mArrayAdapter; private AppInfo app; private int type; public static PopupMenuFragment newInstance(AppInfo app, int type) { Bundle args = new Bundle(); args.putParcelable(AppConfig.EXTRA_APPINFO, app); args.putInt(AppConfig.EXTRA_TYPE, type); PopupMenuFragment fragment = new PopupMenuFragment(); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { app = args.getParcelable(AppConfig.EXTRA_APPINFO); type = args.getInt(AppConfig.EXTRA_TYPE, AppConfig.TYPE_USER_APP_MANAGER); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mArrayAdapter = new AppActionsAdapter(getActivity(), buildAppActions(type)); View root = inflater.inflate(R.layout.fm_appactions, null); mListView = (ListView) root.findViewById(android.R.id.list); mListView.setAdapter(mArrayAdapter); mListView.setOnItemClickListener(this); return root; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); // dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setTitle(app.appName); dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(true); return dialog; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (app == null) { return; } dismiss(); final PopupMenuItem action = mArrayAdapter.getItem(position); if (action != null) { switch (action.id) { case R.id.action_view_appsetting: { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + app.packageName)); startActivity(intent); } break; case R.id.action_backup_apk: { TaskMessage tm = new TaskMessage(AppConfig.CMD_BACKUP_APP_ONE, true); tm.object = app; new SimpleCommandTask(AppContext.getApp()).start(tm); } break; case R.id.action_backup_data: { TaskMessage tm = new TaskMessage(AppConfig.CMD_BACKUP_DATA_ONE, true); tm.object = app; new SimpleCommandTask(AppContext.getApp()).start(tm); } break; case R.id.action_restore_data: { TaskMessage tm = new TaskMessage(AppConfig.CMD_RESTORE_DATA_ONE, true); tm.object = app; new SimpleCommandTask(AppContext.getApp()).start(tm); } break; case R.id.action_install: { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(app.sourceDir)), "application/vnd.android.package-archive"); startActivity(intent); } break; case R.id.action_uninstall: { Uri packageUri = Uri.parse("package:" + app.packageName); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageUri); startActivity(uninstallIntent); } break; case R.id.action_slient_install: break; case R.id.action_silent_uninstall: break; case R.id.action_install_system: break; case R.id.action_uninstall_system: break; case R.id.action_clear_data: break; case R.id.action_clear_cache: break; case R.id.action_restart_package: break; case R.id.action_kill_process: break; } } } private List<PopupMenuItem> buildAppActions(int type) { List<PopupMenuItem> actions = new ArrayList<PopupMenuItem>(); switch (type) { case AppConfig.TYPE_USER_APP_MANAGER: { PopupMenuItem action = new PopupMenuItem(R.id.action_view_appsetting, getString(R.string.action_view_appsetting)); actions.add(action); action = new PopupMenuItem(R.id.action_backup_apk, getString(R.string.action_backup_apk)); actions.add(action); action = new PopupMenuItem(R.id.action_backup_data, getString(R.string.action_backup_data)); actions.add(action); if (app.dataBackup) { action = new PopupMenuItem(R.id.action_restore_data, getString(R.string.action_restore_data)); actions.add(action); } action = new PopupMenuItem(R.id.action_uninstall, getString(R.string.action_uninstall)); actions.add(action); } break; case AppConfig.TYPE_SYSTEM_APP_MANAGER: { PopupMenuItem action = new PopupMenuItem(R.id.action_view_appsetting, getString(R.string.action_view_appsetting)); actions.add(action); action = new PopupMenuItem(R.id.action_backup_apk, getString(R.string.action_backup_apk)); actions.add(action); action = new PopupMenuItem(R.id.action_backup_data, getString(R.string.action_backup_data)); actions.add(action); action = new PopupMenuItem(R.id.action_clear_data, getString(R.string.action_clear_data)); actions.add(action); action = new PopupMenuItem(R.id.action_uninstall_system, getString(R.string.action_uninstall_system)); actions.add(action); } break; case AppConfig.TYPE_PROCESS_MANAGER: break; case AppConfig.TYPE_CACHE_MANAGER: break; case AppConfig.TYPE_DATA_MANAGER: break; case AppConfig.TYPE_COMPONENT_MANAGER: break; case AppConfig.TYPE_FILE_MANAGER: break; } return actions; } }