package com.tierep.notificationanalyser.ui;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.tierep.notificationanalyser.R;
import com.tierep.notificationanalyser.models.Application;
import com.tierep.notificationanalyser.models.ApplicationDao;
import com.tierep.notificationanalyser.models.DatabaseHelper;
import java.sql.SQLException;
import java.util.List;
import de.timroes.android.listview.EnhancedListView;
/**
* An activity that will display all the ignored applications in the statistics.
*/
public class IgnoredApps extends Activity {
private DatabaseHelper databaseHelper = null;
private ApplicationIgnoreAdapter ignoredAppsAdapter = null;
private EnhancedListView listView = null;
public DatabaseHelper getDatabaseHelper() {
if (databaseHelper == null) {
databaseHelper = OpenHelperManager.getHelper(this, DatabaseHelper.class);
}
return databaseHelper;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ignored_apps);
getActionBar().setDisplayHomeAsUpEnabled(true);
listView = (EnhancedListView) findViewById(R.id.list_ignored_apps);
try {
List<Application> applicationList = getDatabaseHelper().getApplicationDao().getIgnoredApps();
applicationList.add(0, new Application()); // Insert empty element for header
ignoredAppsAdapter = new ApplicationIgnoreAdapter(this, applicationList);
listView.setAdapter(ignoredAppsAdapter);
} catch (SQLException e) {
e.printStackTrace();
}
listView.setDismissCallback(new EnhancedListView.OnDismissCallback() {
@Override
public EnhancedListView.Undoable onDismiss(EnhancedListView enhancedListView, final int i) {
final Application item = ignoredAppsAdapter.getItem(i);
ignoredAppsAdapter.remove(item);
return new EnhancedListView.Undoable() {
@Override
public void undo() {
ignoredAppsAdapter.insert(item, i);
}
@Override
public void discard() {
try {
ApplicationDao dao = getDatabaseHelper().getApplicationDao();
item.setIgnore(false);
dao.update(item);
} catch (SQLException e) {
e.printStackTrace();
}
}
};
}
});
listView.setRequireTouchBeforeDismiss(false);
}
@Override
protected void onPause() {
super.onPause();
listView.discardUndo();
}
@Override
public void onDestroy() {
super.onDestroy();
if (databaseHelper != null) {
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}
private class ApplicationIgnoreAdapter extends ArrayAdapter<Application> {
public ApplicationIgnoreAdapter(Context context, List<Application> objects) {
super(context, 0, objects);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (position == 0) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listViewHeader = inflater.inflate(R.layout.list_ignored_apps_header, null, false);
if (ignoredAppsAdapter.getCount() == 1) {
TextView ignoredAppsDescription = (TextView) listViewHeader.findViewById(R.id.ignored_apps_description);
ignoredAppsDescription.setText(R.string.ignored_apps_no_items);
}
return listViewHeader;
} else {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.list_ignored_apps_el, parent, false);
TextView appName = (TextView) view.findViewById(R.id.ignored_app_name);
ImageView appImage = (ImageView) view.findViewById(R.id.ignored_app_image);
Application app = this.getItem(position);
PackageManager packageManager = getContext().getPackageManager();
String str_appName = null;
Drawable icon = null;
try {
ApplicationInfo appInfo = packageManager.getApplicationInfo(app.getPackageName(), 0);
str_appName = packageManager.getApplicationLabel(appInfo).toString();
icon = packageManager.getApplicationIcon(appInfo);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (str_appName != null) appName.setText(str_appName);
else appName.setText(app.getPackageName());
if (icon != null) appImage.setImageDrawable(icon);
view.findViewById(R.id.ignored_app_delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listView.delete(position);
}
});
return view;
}
}
@Override
public boolean isEnabled(int position) {
return false;
}
}
}