package com.tierep.notificationanalyser.ui; import android.app.Activity; 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.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.j256.ormlite.android.apptools.OpenHelperManager; import com.tierep.notificationanalyser.NotificationItemAdapter; import com.tierep.notificationanalyser.R; import com.tierep.notificationanalyser.models.Application; import com.tierep.notificationanalyser.models.ApplicationDao; import com.tierep.notificationanalyser.models.DatabaseHelper; import com.tierep.notificationanalyser.models.NotificationItem; import com.tierep.notificationanalyser.models.NotificationItemDao; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * This activity needs an intent that provides information about which application items should be * displayed, for which time period (day, week or month) and for which date. */ public class AppDetail extends Activity { public static final String EXTRA_PACKAGENAME = "com.tierep.notificationanalyser.ui.EXTRA_PACKAGENAME"; public static final String EXTRA_INTERVALTYPE = "com.tierep.notificationanalyser.ui.EXTRA_INTERVALTYPE"; public static final String EXTRA_DATESTRING = "com.tierep.notificationanalyser.ui.EXTRA_DATESTRING"; public static final int FLAG_VIEW_DAILY = 0; public static final int FLAG_VIEW_WEEKLY = 1; public static final int FLAG_VIEW_MONTHLY = 2; private DatabaseHelper databaseHelper = null; private String packageName = null; private int intervalType; private Date date; 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_app_detail); getActionBar().setDisplayHomeAsUpEnabled(true); parseAdditionalData(); ListView list = (ListView) findViewById(R.id.list_notification_items); list.addHeaderView(makeListHeader(), null, false); list.setAdapter(new NotificationItemAdapter(this, makeListObjects())); } private void parseAdditionalData() { packageName = getIntent().getStringExtra(AppDetail.EXTRA_PACKAGENAME); intervalType= getIntent().getIntExtra(AppDetail.EXTRA_INTERVALTYPE, 0); try { date = new SimpleDateFormat("yyyy-MM-dd").parse(getIntent().getStringExtra(AppDetail.EXTRA_DATESTRING)); } catch (ParseException e) { e.printStackTrace(); } } private View makeListHeader() { LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View header = inflater.inflate(R.layout.list_app_detail_he, null); ImageView appImage = (ImageView) header.findViewById(R.id.app_detail_image); TextView appName = (TextView) header.findViewById(R.id.app_detail_name); String strAppName = null; Drawable icon = null; try { ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, 0); strAppName = getPackageManager().getApplicationLabel(info).toString(); icon = getPackageManager().getApplicationIcon(info); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } appName.setText(strAppName != null ? strAppName : packageName); if (icon != null) appImage.setImageDrawable(icon); return header; } private List<NotificationItem> makeListObjects() { try { NotificationItemDao dao = getDatabaseHelper().getNotificationDao(); List<NotificationItem> objects; if (intervalType == 0) { objects = dao.getOverviewAppDay(date, packageName); } else if (intervalType == 1) { objects = dao.getOverviewAppWeek(date, packageName); } else { objects = dao.getOverviewAppMonth(date, packageName); } return objects; } catch (SQLException e) { e.printStackTrace(); return null; } } public void onCheckboxClicked(View view) { boolean isChecked = ((CheckBox) view).isChecked(); try { ApplicationDao dao = getDatabaseHelper().getApplicationDao(); Application application = dao.queryForId(packageName); application.setIgnore(isChecked); dao.update(application); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onDestroy() { super.onDestroy(); if (databaseHelper != null) { OpenHelperManager.releaseHelper(); databaseHelper = null; } } }