@Override public void run() { String TAG = StaticBlob.TAG(); // Set the effects for if the episode has been downloaded or is in queue, etc boolean inDLQueue = StaticBlob.databaseConnector.isInActiveDownloadQueueAtAll(id); boolean mp3exists = (music_file_location != null && music_file_location.exists()); boolean mp3complete = mp3exists && music_file_location.length() == mp3size; boolean videxists = (video_file_location != null && video_file_location.exists()); boolean vidcomplete = videxists && video_file_location.length() == vidsize; if (inDLQueue || mp3exists || videxists) { if (mp3complete || vidcomplete) { ((TextView) v.findViewById(R.id.rowTextView)).setTypeface(null, Typeface.BOLD); ((TextView) v.findViewById(R.id.rowSubTextView)).setTypeface(null, Typeface.BOLD); } else { ((TextView) v.findViewById(R.id.rowTextView)).setTypeface(null, Typeface.ITALIC); ((TextView) v.findViewById(R.id.rowSubTextView)).setTypeface(null, Typeface.ITALIC); } } else // No typeface { ((TextView) v.findViewById(R.id.rowTextView)).setTypeface(null, 0); ((TextView) v.findViewById(R.id.rowSubTextView)).setTypeface(null, 0); } }
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String TAG = StaticBlob.TAG(); current_episode = view; Intent viewEpisode = new Intent(ShowList.this, EpisodeDesc.class); long clickedID = Long.parseLong((String) ((TextView) view.findViewById(R.id.hiddenId)).getText()); viewEpisode.putExtra("id", clickedID); Log.v(TAG, "Selected ID: " + clickedID); setProgressBarIndeterminateVisibility(true); startActivity(viewEpisode); }
@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { String TAG = StaticBlob.TAG(); Long id = Long.parseLong( (String) ((TextView) ((View) buttonView.getParent()).findViewById(R.id.hiddenId)) .getText()); StaticBlob.databaseConnector.markNew(id, isChecked); Log.v(TAG, "Toggling new for:" + id + " is " + isChecked); Cursor c = StaticBlob.databaseConnector.getOneEpisode(id); c.moveToFirst(); }
@Override public void handleMessage(Message msg) { String TAG = StaticBlob.TAG(); if (msg.arg1 != 0) { Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); ShowList.this.showAdapter.changeCursor(r); ShowList.this.showAdapter.notifyDataSetChanged(); Log.i(TAG, "Changing cursor"); } else { Log.i(TAG, "Not Changing cursor"); loading.setText(ShowList.this.getResources().getString(R.string.list_empty)); } }
@Override protected void onPostExecute(Message result) { String TAG = StaticBlob.TAG(); TextView loading = (TextView) ShowList.this.findViewById(android.R.id.empty); loading.setText(ShowList.this.getResources().getString(R.string.list_empty)); if (result.arg1 == -1) { Log.w(TAG, "An error occurred while updating the show " + currentShow); Toast.makeText( ShowList.this, getResources().getString(R.string.show_update_error) + ":\n\n" + result.getData().getString("ERROR"), Toast.LENGTH_LONG) .show(); } else if (mainListView != null) ShowList.this.updateHandler.sendMessage((Message) result); setProgressBarIndeterminateVisibility(false); }
/** * Called when the activity is first created. Sets up the view. * * @param savedInstanceState Um I don't even know. Read the Android documentation. */ @Override public void onCreate(Bundle savedInstanceState) { String TAG = StaticBlob.TAG(); if (android.os.Build.VERSION.SDK_INT >= 11) setTheme(R.style.Default_New); // General create stuff super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); Log.v(TAG, "Launching Activity"); mainListView = new ListView(this); Callisto.build_layout(this, mainListView); // Get the settings for this show currentShow = getIntent().getExtras().getString("current_show"); currentShowAudio = getIntent().getExtras().getString("current_show_audio"); currentShowVideo = getIntent().getExtras().getString("current_show_video"); showSettings = getSharedPreferences(currentShow, 0); filter = showSettings.getBoolean("filter", false); loading = (TextView) findViewById(android.R.id.empty); // If it has been checked before but there are no episodes, show that it is empty, not just // loading. if (StaticBlob.databaseConnector.getShow(currentShow, filter).getCount() == 0) loading.setText(this.getResources().getString(R.string.list_empty)); else loading.setText(this.getResources().getString(R.string.loading)); loading.setGravity(Gravity.CENTER_HORIZONTAL); // If it has never been checked before add a refresh button if (showSettings.getString("last_checked", null) == null) { refresh = new Button(this); refresh.setText(this.getResources().getString(R.string.refresh)); refresh.setTextColor(this.getResources().getColor(R.color.txtClr)); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); p.setMargins(20, 10, 20, 10); refresh.setLayoutParams(p); ((LinearLayout) loading.getParent()).setGravity(Gravity.CENTER_HORIZONTAL); refresh.setPadding(100, 10, 100, 10); refresh.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { reload(); } }); ((LinearLayout) mainListView.getParent()).addView(refresh, 1); ((LinearLayout) mainListView.getParent()) .setBackgroundColor(this.getResources().getColor(R.color.backClr)); mainListView.setEmptyView(refresh); loading.setVisibility(View.INVISIBLE); } else { mainListView.setEmptyView(loading); } // Finish setting up the listview mainListView.setOnItemClickListener(selectEpisode); mainListView.setBackgroundColor(getResources().getColor(R.color.backClr)); mainListView.setCacheColorHint(getResources().getColor(R.color.backClr)); setTitle(currentShow); // Get the shows from the SQL; make it async because of reasons new GetShowTask().execute((Object[]) null); Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); showAdapter = new ShowListCursorAdapter(ShowList.this, R.layout.row, r); mainListView.setAdapter(showAdapter); return; }
public View getView(int pos, View inView, ViewGroup parent) { String TAG = StaticBlob.TAG(); View v = inView; if (v == null) { LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.row, null); } this.c = getCursor(); this.c.moveToPosition(pos); Date tempDate = new Date(); // We use this variable to get thisYear as well as parsing the actual date // later int thisYear = tempDate.getYear(); // If the date for the show is this year, no need to show the year // Set the data From->To // Get info for selected episode long id = this.c.getLong(this.c.getColumnIndex("_id")); this.c = StaticBlob.databaseConnector.getOneEpisode(id); this.c.moveToFirst(); String date = this.c.getString(this.c.getColumnIndex("date")); String title = this.c.getString(this.c.getColumnIndex("title")); String mp3_link = this.c.getString(this.c.getColumnIndex("mp3link")); String vid_link = this.c.getString(this.c.getColumnIndex("vidlink")); // _id ((TextView) v.findViewById(R.id.hiddenId)).setText(Long.toString(id)); // title ((TextView) v.findViewById(R.id.rowTextView)).setText(title); LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) v.findViewById(R.id.rowTextView).getLayoutParams(); lp.setMargins((int) (10 * StaticBlob.DP), lp.topMargin, lp.rightMargin, lp.bottomMargin); ; // date String d = date; try { tempDate = StaticBlob.sdfRaw.parse(d); if (tempDate.getYear() == thisYear) d = StaticBlob.sdfHuman.format(tempDate); else d = StaticBlob.sdfHumanLong.format(tempDate); // d = Callisto.sdfDestination.format(); } catch (ParseException e) { Log.e(TAG + ":ParseException", "Error parsing a date from the SQLite db: "); Log.e(TAG + ":ParseException", d); Log.e(TAG + ":ParseException", "(This should never happen)."); e.printStackTrace(); } ((TextView) v.findViewById(R.id.rowSubTextView)).setText(d); File music_file_location = null, video_file_location = null; try { music_file_location = new File(StaticBlob.storage_path + File.separator + currentShow); music_file_location = new File( music_file_location, StaticBlob.sdfFile.format(tempDate) + "__" + StaticBlob.makeFileFriendly(title) + EpisodeDesc.getExtension(mp3_link)); } catch (NullPointerException npe) { Log.e(TAG, "Null pointer when determining file status: Audio"); } try { video_file_location = new File(StaticBlob.storage_path + File.separator + currentShow); video_file_location = new File( video_file_location, StaticBlob.sdfFile.format(tempDate) + "__" + StaticBlob.makeFileFriendly(title) + EpisodeDesc.getExtension(vid_link)); } catch (NullPointerException npe) { Log.e(TAG, "Null pointer when determining file status: Video"); } runOnUiThread( new updateBoldOrItalic( id, v, music_file_location, video_file_location, this.c.getLong(this.c.getColumnIndex("mp3size")), this.c.getLong(this.c.getColumnIndex("vidsize")))); // Mark current queue item Cursor c = StaticBlob.databaseConnector.currentQueueItem(); if (currentQueueItem == null || currentQueueItem == v) { if (c.getCount() > 0) { c.moveToFirst(); if (c.getLong(c.getColumnIndex("identity")) == id) currentQueueItem = v; else currentQueueItem = null; } else currentQueueItem = null; } // Mark current download item c = StaticBlob.databaseConnector.getActiveDownloads(); if (currentDownloadItem == null || currentDownloadItem == v) { if (c.getCount() > 0) { c.moveToFirst(); Log.i( TAG, " currentDownloadItem =? " + currentDownloadItem + " " + c.getLong(c.getColumnIndex("identity")) + " == " + id); if (c.getLong(c.getColumnIndex("identity")) == id) currentDownloadItem = v; else currentDownloadItem = null; } else currentDownloadItem = null; } Log.i(TAG, "currentDownloadItem == " + currentDownloadItem); // Hide the specific views int[] hide = new int[] {R.id.remove, R.id.progress, R.id.grabber, R.id.rightTextView}; for (int i = 0; i < hide.length; i++) v.findViewById(hide[i]).setVisibility(View.GONE); // Check the Jupiter icon if it is new boolean is_new = this.c.getInt(this.c.getColumnIndex("new")) > 0; CheckBox rb = ((CheckBox) v.findViewById(R.id.img)); rb.setChecked(is_new); rb.setOnCheckedChangeListener(toggleNew); return (v); }
/** * Called when an item in the menu is pressed. * * @param item The menu item ID that was pressed */ @Override public boolean onOptionsItemSelected(MenuItem item) { AlertDialog d; switch (item.getItemId()) { case STOP_ID: // Stop playing PlayerControls.stop(this); return true; case RELOAD_ID: // Check for new episodes reload(); return true; case CLEAR_ID: // Show a dialog to clear all items of this show from the SQL database d = new AlertDialog.Builder(this) .setTitle(this.getResources().getString(R.string.confirm)) .setMessage(this.getResources().getString(R.string.confirm_clear)) .setIcon(android.R.drawable.ic_dialog_alert) .setPositiveButton( android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { loading.setText( ShowList.this.getResources().getString(R.string.list_empty)); StaticBlob.databaseConnector.clearShow(ShowList.this, currentShow); Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); ShowList.this.showAdapter.changeCursor(r); ShowList.this.showAdapter.notifyDataSetChanged(); SharedPreferences.Editor editor = showSettings.edit(); editor.putString("last_checked", null); editor.commit(); } }) .setNegativeButton(android.R.string.no, null) .show(); StaticBlob.formatAlertDialogButtons(d); return true; case FILTER_ID: // Filter or unfilter the results showing only new or all filter = !filter; if (filter) item.setTitle(this.getResources().getString(R.string.unfilter)); else item.setTitle(this.getResources().getString(R.string.filter)); Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); ShowList.this.showAdapter.changeCursor(r); ShowList.this.showAdapter.notifyDataSetChanged(); SharedPreferences.Editor editor = showSettings.edit(); editor.putBoolean("filter", filter); editor.commit(); return true; case MARK_ID: // Mark all in the show as new or old d = new AlertDialog.Builder(this) .setTitle(this.getResources().getString(R.string.mark_all)) .setPositiveButton( this.getResources().getString(R.string.new_), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { StaticBlob.databaseConnector.markAllNew(currentShow, true); Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); ShowList.this.showAdapter.changeCursor(r); ShowList.this.showAdapter.notifyDataSetChanged(); } }) .setNegativeButton( this.getResources().getString(R.string.old), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { StaticBlob.databaseConnector.markAllNew(currentShow, false); Cursor r = StaticBlob.databaseConnector.getShow(currentShow, filter); ShowList.this.showAdapter.changeCursor(r); ShowList.this.showAdapter.notifyDataSetChanged(); } }) .show(); d.getButton(Dialog.BUTTON_POSITIVE).setBackgroundResource(R.drawable.blue_button); d.getButton(Dialog.BUTTON_POSITIVE) .setPadding( (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP)); d.getButton(Dialog.BUTTON_NEGATIVE).setBackgroundResource(R.drawable.blue_button); d.getButton(Dialog.BUTTON_NEGATIVE) .setPadding( (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP), (int) (15 * StaticBlob.DP)); ((View) d.getButton(Dialog.BUTTON_POSITIVE).getParent()) .setBackgroundResource(R.color.backClr); return true; default: return super.onOptionsItemSelected(item); } }
/** Called when the activity is going to be destroyed. */ @Override public void onDestroy() { String TAG = StaticBlob.TAG(); super.onDestroy(); thisInstance = null; }
/** * Called when the activity is resumed, like when you return from another activity or also when it * is first created. */ @Override public void onResume() { String TAG = StaticBlob.TAG(); super.onResume(); thisInstance = this; setProgressBarIndeterminateVisibility(false); StaticBlob.playerInfo.update(ShowList.this); // Update player controls if (StaticBlob.audioFocus != null) StaticBlob.audioFocus.setContext(this); if (CallistoService.audioJackReceiver != null) CallistoService.audioJackReceiver.setContext(this); if (current_episode == null) // If we aren't returning from an EpisodeDesc, we're done. return; try { long id = Long.parseLong( (String) ((TextView) current_episode.findViewById(R.id.hiddenId)) .getText()); // Get the id of the episode that was visited in an EpisodeDesc Cursor c = StaticBlob.databaseConnector.getOneEpisode(id); c.moveToFirst(); // New marker boolean is_new = c.getInt(c.getColumnIndex("new")) > 0; ((CheckBox) current_episode.findViewById(R.id.img)).setChecked(is_new); Date tempDate = StaticBlob.sdfRaw.parse( c.getString(c.getColumnIndex("date"))); // Need this for file location String title = c.getString(c.getColumnIndex("title")), mp3_link = c.getString(c.getColumnIndex("mp3link")), // Need this for file extension vid_link = c.getString(c.getColumnIndex("vidlink")); // ^ File music_file_location = new File(StaticBlob.storage_path + File.separator + currentShow); music_file_location = new File( music_file_location, StaticBlob.sdfFile.format(tempDate) + "__" + StaticBlob.makeFileFriendly(title) + EpisodeDesc.getExtension(mp3_link)); File video_file_location = new File(StaticBlob.storage_path + File.separator + currentShow); video_file_location = new File( video_file_location, StaticBlob.sdfFile.format(tempDate) + "__" + StaticBlob.makeFileFriendly(title) + EpisodeDesc.getExtension(vid_link)); runOnUiThread( new updateBoldOrItalic( id, current_episode, music_file_location, video_file_location, c.getLong(c.getColumnIndex("mp3size")), c.getLong(c.getColumnIndex("vidsize")))); c = StaticBlob.databaseConnector.currentQueueItem(); if (currentQueueItem == null || currentQueueItem == current_episode) { if (c.getCount() > 0) { c.moveToFirst(); if (c.getLong(c.getColumnIndex("identity")) == id) currentQueueItem = current_episode; else currentQueueItem = null; } else currentQueueItem = null; } // Mark current download item c = StaticBlob.databaseConnector.getActiveDownloads(); if (currentDownloadItem == null || currentDownloadItem == current_episode) { if (c.getCount() > 0) { c.moveToFirst(); Log.i( TAG, " currentDownloadItem =? " + currentDownloadItem + " " + c.getLong(c.getColumnIndex("identity")) + " == " + id); if (c.getLong(c.getColumnIndex("identity")) == id) currentDownloadItem = current_episode; else currentDownloadItem = null; } else currentDownloadItem = null; } } catch (Exception e) { Log.e( TAG, "Error: " + e.getClass() + " - " + e.getMessage() + "(this should never happen...?)"); } current_episode = null; }