package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
import com.iwedia.comm.content.applications.AppItem;
import com.iwedia.comm.enums.AppListType;
import com.iwedia.comm.system.application.IApplicationDetails;
import com.iwedia.comm.system.application.IApplicationSettings;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVAlertDialog;
import com.iwedia.gui.components.A4TVButton;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.components.A4TVSpinner;
import com.iwedia.gui.components.A4TVSpinner.OnSelectA4TVSpinnerListener;
import com.iwedia.gui.components.A4TVTextView;
import com.iwedia.gui.mainmenu.DialogCreatorClass;
import com.iwedia.gui.mainmenu.DialogManager;
import com.iwedia.gui.mainmenu.MainMenuContent;
import java.util.ArrayList;
/**
* Applications dialog
*
* @author Branimir Pavlovic
*/
public class ApplicationsManageManageAppsDialog extends A4TVDialog implements
A4TVDialogInterface, android.view.View.OnClickListener,
OnItemClickListener {
/** IDs for spinner in this dialog */
public static final int TV_MENU_APPLICATIONS_SETTINGS_MANAGE_APPS_SPINNER = 313;
// fields for creating dialogs
private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(),
contentListIDs = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> titleIDs = new ArrayList<Integer>();
private ArrayList<AppItem> manageApplicationsListContent = new ArrayList<AppItem>();
private Context ctx;
private ManageAppsAdapter listAdapter;
private ListView listViewApplications;
private A4TVSpinner spinner;
public ApplicationsManageManageAppsDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
// fill lists
returnArrayListsWithDialogContents(contentList, contentListIDs,
titleIDs);
// set content to dialog
fillDialog();
// set attributes
setDialogAttributes();
// get reference of listview
listViewApplications = (ListView) findViewById(DialogCreatorClass.LIST_VIEW_IN_DIALOG_ID);
listViewApplications.setOnItemClickListener(this);
// get spinner reference
spinner = (A4TVSpinner) findViewById(TV_MENU_APPLICATIONS_SETTINGS_MANAGE_APPS_SPINNER);
spinner.setSelection(0);
spinner.setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() {
@Override
public void onSelect(A4TVSpinner spinner, int index,
String[] contents) {
Log.d(TAG, "Choosen from running services: " + contents[index]);
changedSourceOfApplicationsToShow(index);
}
});
}
@Override
public void show() {
changedSourceOfApplicationsToShow(spinner.getCHOOSEN_ITEM_INDEX());
super.show();
}
public void changedSourceOfApplicationsToShow(int index) {
int appsType = 0;
switch (index) {
case 0:
appsType = AppListType.INSTALLED;
break;
case 1:
appsType = AppListType.RUNNING;
break;
case 2:
appsType = AppListType.ALL;
break;
case 3:
appsType = AppListType.EXTERNAL;
break;
default:
break;
}
IApplicationSettings appSettings = null;
try {
appSettings = MainActivity.service.getSystemControl()
.getApplicationControl();
} catch (Exception e1) {
e1.printStackTrace();
}
if (appSettings != null) {
int numberOfApps = 0;
try {
if (appsType != AppListType.RUNNING) {
numberOfApps = appSettings.getAppListSize(appsType);
}
// ////////////////////////////////////////////
// Running services
// ////////////////////////////////////////////
else {
manageApplicationsListContent = (ArrayList<AppItem>) appSettings
.getRunningServices();
}
} catch (RemoteException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
}
if (appsType != AppListType.RUNNING) {
manageApplicationsListContent.clear();
for (int i = 0; i < numberOfApps; i++) {
AppItem appItem = null;
try {
appItem = appSettings.getApplication(i);
} catch (RemoteException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
}
manageApplicationsListContent.add(appItem);
}
}
listAdapter.notifyDataSetChanged();
}
}
/** List on item click listener */
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, final int position,
long arg3) {
if (spinner.getCHOOSEN_ITEM_INDEX() != 1) {
ApplicationsAppControlDialog appDialog = MainActivity.activity
.getDialogManager().getApplicationsAppControlDialog();
if (appDialog != null)
appDialog.showDialog(manageApplicationsListContent
.get(position));
} else {
final A4TVAlertDialog alert = new A4TVAlertDialog(ctx);
alert.setTitleOfAlertDialog(ctx
.getString(R.string.tv_menu_applications_settings_manage_applications_force_stop)
+ "?");
alert.setCancelable(true);
alert.setNegativeButton(R.string.button_text_no,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
alert.cancel();
}
});
alert.setPositiveButton(R.string.button_text_yes,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
try {
MainActivity.service
.getSystemControl()
.getApplicationControl()
.stopService(
manageApplicationsListContent
.get(position)
.getAppPackage(),
manageApplicationsListContent
.get(position)
.getAppClass());
// refresh list
changedSourceOfApplicationsToShow(spinner
.getCHOOSEN_ITEM_INDEX());
} catch (Exception e) {
e.printStackTrace();
}
alert.cancel();
}
});
alert.show();
}
}
@Override
public void fillDialog() {
listAdapter = new ManageAppsAdapter();
View view = DialogManager.dialogCreator.fillDialogWithContents(
contentList, contentListIDs, titleIDs, null, this, listAdapter);// ,
setContentView(view);
}
@Override
public void setDialogAttributes() {
getWindow().getAttributes().width = MainActivity.dialogWidth;
getWindow().getAttributes().height = MainActivity.dialogHeight;
}
/**
* Function that load theme
*
* @param ctx
* @return
*/
private static int checkTheme(Context ctx) {
TypedArray atts = ctx.getTheme().obtainStyledAttributes(
new int[] { R.attr.A4TVDialog });
int i = atts.getResourceId(0, 0);
atts.recycle();
return i;
}
@Override
public void onClick(View v) {
}
@Override
public void returnArrayListsWithDialogContents(
ArrayList<ArrayList<Integer>> contentList,
ArrayList<ArrayList<Integer>> contentListIDs,
ArrayList<Integer> titleIDs) {
// clear old data in lists
contentList.clear();
contentListIDs.clear();
titleIDs.clear();
// title
titleIDs.add(R.drawable.settings_icon);
// titleIDs.add(R.drawable.applications_settings);
titleIDs.add(R.string.tv_menu_applications_settings_manage_applications);
// manage apps spinner******************************************
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVSpinner);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_applications_settings_manage_applications_choose_by_type);
list.add(TV_MENU_APPLICATIONS_SETTINGS_MANAGE_APPS_SPINNER);
contentListIDs.add(list);
}
private class ManageAppsAdapter extends BaseAdapter {
private final int LIST_ITEM_WEIGHT_SUM = 5, TEXT_WEIGHT = 4,
IMAGE_WEIGHT = 1;
@Override
public int getCount() {
return manageApplicationsListContent.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = new LinearLayout(ctx);
holder = new ViewHolder();
holder.textView = new A4TVTextView(ctx);
holder.image = new ImageView(ctx);
((LinearLayout) convertView).addView(holder.image);
((LinearLayout) convertView).addView(holder.textView);
((LinearLayout) convertView)
.setOrientation(LinearLayout.HORIZONTAL);
((LinearLayout) convertView)
.setGravity(Gravity.CENTER_VERTICAL);
((LinearLayout) convertView).setWeightSum(LIST_ITEM_WEIGHT_SUM);
convertView.setLayoutParams(new ListView.LayoutParams(
LayoutParams.MATCH_PARENT,
MainActivity.dialogListElementHeight));
convertView
.setBackgroundResource(R.drawable.list_view_selector);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
setRow(holder, position);
return convertView;
}
/** Function that connects list views child with view holder */
private void setRow(ViewHolder holder, int position) {
IApplicationDetails appDetails = null;
try {
appDetails = MainActivity.service
.getSystemControl()
.getApplicationControl()
.getApplicationDeatails(
manageApplicationsListContent.get(position)
.getAppPackage());
} catch (Exception e) {
e.printStackTrace();
}
if (appDetails != null) {
try {
appDetails.getAppSizeInfo();
} catch (Exception e) {
e.printStackTrace();
}
}
holder.textView.setText(manageApplicationsListContent.get(position)
.getAppname());
holder.textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
holder.textView.setPadding(
(int) ctx.getResources()
.getDimension(R.dimen.padding_large), 0, 0, 0);
Drawable appDrawable = null;
try {
appDrawable = ctx.getPackageManager().getApplicationIcon(
manageApplicationsListContent.get(position)
.getAppPackage());
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (appDrawable != null) {
holder.image.setImageDrawable(appDrawable);
}
holder.image.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.WRAP_CONTENT, IMAGE_WEIGHT));
holder.textView.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.WRAP_CONTENT, TEXT_WEIGHT));
}
private class ViewHolder {
ImageView image;
TextView textView;
}
}
}