Пример #1
0
  // Inserting or updating single note
  public Note updateNote(Note note, boolean updateLastModification) {
    SQLiteDatabase db = getDatabase(true);

    String content;
    if (note.isLocked()) {
      content = Security.encrypt(note.getContent(), prefs.getString(Constants.PREF_PASSWORD, ""));
    } else {
      content = note.getContent();
    }

    // To ensure note and attachments insertions are atomical and boost performances transaction are
    // used
    db.beginTransaction();

    ContentValues values = new ContentValues();
    values.put(KEY_TITLE, note.getTitle());
    values.put(KEY_CONTENT, content);
    values.put(
        KEY_CREATION,
        note.getCreation() != null ? note.getCreation() : Calendar.getInstance().getTimeInMillis());
    values.put(
        KEY_LAST_MODIFICATION,
        updateLastModification
            ? Calendar.getInstance().getTimeInMillis()
            : (note.getLastModification() != null
                ? note.getLastModification()
                : Calendar.getInstance().getTimeInMillis()));
    values.put(KEY_ARCHIVED, note.isArchived());
    values.put(KEY_TRASHED, note.isTrashed());
    values.put(KEY_REMINDER, note.getAlarm());
    values.put(KEY_REMINDER_FIRED, note.isReminderFired());
    values.put(KEY_RECURRENCE_RULE, note.getRecurrenceRule());
    values.put(KEY_LATITUDE, note.getLatitude());
    values.put(KEY_LONGITUDE, note.getLongitude());
    values.put(KEY_ADDRESS, note.getAddress());
    values.put(KEY_CATEGORY, note.getCategory() != null ? note.getCategory().getId() : null);
    boolean locked = note.isLocked() != null ? note.isLocked() : false;
    values.put(KEY_LOCKED, locked);
    boolean checklist = note.isChecklist() != null ? note.isChecklist() : false;
    values.put(KEY_CHECKLIST, checklist);

    db.insertWithOnConflict(TABLE_NOTES, KEY_ID, values, SQLiteDatabase.CONFLICT_REPLACE);
    Log.d(Constants.TAG, "Updated note titled '" + note.getTitle() + "'");

    // Updating attachments
    List<Attachment> deletedAttachments = note.getAttachmentsListOld();
    for (Attachment attachment : note.getAttachmentsList()) {
      updateAttachment(
          note.get_id() != null ? note.get_id() : values.getAsLong(KEY_CREATION), attachment, db);
      deletedAttachments.remove(attachment);
    }
    // Remove from database deleted attachments
    for (Attachment attachmentDeleted : deletedAttachments) {
      db.delete(
          TABLE_ATTACHMENTS,
          KEY_ATTACHMENT_ID + " = ?",
          new String[] {String.valueOf(attachmentDeleted.getId())});
    }

    db.setTransactionSuccessful();
    db.endTransaction();

    // Fill the note with correct data before returning it
    note.setCreation(
        note.getCreation() != null ? note.getCreation() : values.getAsLong(KEY_CREATION));
    note.setLastModification(values.getAsLong(KEY_LAST_MODIFICATION));

    return note;
  }
Пример #2
0
  @SuppressLint("NewApi")
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {

    Note note = notes.get(position);

    NoteAdapterViewHolder holder;
    if (convertView == null) {
      convertView = inflater.inflate(layout, parent, false);

      // Overrides font sizes with the one selected from user
      Fonts.overrideTextSize(
          mActivity,
          mActivity.getSharedPreferences(Constants.PREFS_NAME, Context.MODE_MULTI_PROCESS),
          convertView);

      holder = new NoteAdapterViewHolder();

      holder.root = convertView.findViewById(R.id.root);
      holder.cardLayout = convertView.findViewById(R.id.card_layout);
      holder.categoryMarker = convertView.findViewById(R.id.category_marker);

      holder.title = (TextView) convertView.findViewById(R.id.note_title);
      holder.content = (TextView) convertView.findViewById(R.id.note_content);
      holder.date = (TextView) convertView.findViewById(R.id.note_date);

      holder.archiveIcon = (ImageView) convertView.findViewById(R.id.archivedIcon);
      //	    	holder.trashIcon = (ImageView) convertView.findViewById(R.id.trashedIcon);
      holder.locationIcon = (ImageView) convertView.findViewById(R.id.locationIcon);
      holder.alarmIcon = (ImageView) convertView.findViewById(R.id.alarmIcon);
      holder.lockedIcon = (ImageView) convertView.findViewById(R.id.lockedIcon);
      if (!expandedView)
        holder.attachmentIcon = (ImageView) convertView.findViewById(R.id.attachmentIcon);

      holder.attachmentThumbnail =
          (SquareImageView) convertView.findViewById(R.id.attachmentThumbnail);

      convertView.setTag(holder);

    } else {
      holder = (NoteAdapterViewHolder) convertView.getTag();
    }

    try {
      //			if (note.isChecklist()) {
      TextWorkerTask task =
          new TextWorkerTask(mActivity, holder.title, holder.content, expandedView);
      if (Build.VERSION.SDK_INT >= 11) {
        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, note);
      } else {
        task.execute(note);
      }
      //			} else {
      //				Spanned[] titleAndContent = TextHelper.parseTitleAndContent(mActivity, note);
      //				holder.title.setText(titleAndContent[0]);
      //				holder.content.setText(titleAndContent[1]);
      //			}
    } catch (RejectedExecutionException e) {
      Log.w(Constants.TAG, "Oversized tasks pool to load texts!");
    }

    // Evaluates the archived state...
    holder.archiveIcon.setVisibility(note.isArchived() ? View.VISIBLE : View.GONE);
    // .. the trashed state
    //		holder.trashIcon.setVisibility(note.isTrashed() ? View.VISIBLE : View.GONE);
    // ...the location
    holder.locationIcon.setVisibility(
        note.getLongitude() != null && note.getLongitude() != 0 ? View.VISIBLE : View.GONE);
    // ...the presence of an alarm
    holder.alarmIcon.setVisibility(note.getAlarm() != null ? View.VISIBLE : View.GONE);
    // ...the locked with password state
    holder.lockedIcon.setVisibility(note.isLocked() ? View.VISIBLE : View.GONE);
    // ...the attachment icon for contracted view
    if (!expandedView) {
      holder.attachmentIcon.setVisibility(
          note.getAttachmentsList().size() > 0 ? View.VISIBLE : View.GONE);
    }

    String dateText = getDateText(mActivity, note);
    holder.date.setText(dateText);

    // Highlighted if is part of multiselection of notes. Remember to search for child with card ui
    if (selectedItems.get(position)) {
      holder.cardLayout.setBackgroundColor(
          mActivity.getResources().getColor(R.color.list_bg_selected));
    } else {
      restoreDrawable(note, holder.cardLayout, holder);
    }

    // Attachment thumbnail
    if (expandedView) {
      // If note is locked or without attachments nothing is shown
      if ((note.isLocked()
              && !mActivity
                  .getSharedPreferences(Constants.PREFS_NAME, mActivity.MODE_MULTI_PROCESS)
                  .getBoolean("settings_password_access", false))
          || note.getAttachmentsList().size() == 0) {
        holder.attachmentThumbnail.setImageResource(0);
        holder.attachmentThumbnail.setVisibility(View.GONE);
      }
      // Otherwise...
      else {
        Attachment mAttachment = note.getAttachmentsList().get(0);
        loadThumbnail(holder, mAttachment);
      }
    }

    //		Animation animation = AnimationUtils.loadAnimation(mActivity, R.animator.fade_in);
    //		animation.setDuration(60);
    //		convertView.startAnimation(animation);

    return convertView;
  }
Пример #3
0
  /** Retrieves statistics data based on app usage */
  public Stats getStats() {
    Stats mStats = new Stats();

    // Categories
    mStats.setCategories(getCategories().size());

    // Everything about notes and their text stats
    int notesActive = 0,
        notesArchived = 0,
        notesTrashed = 0,
        reminders = 0,
        remindersFuture = 0,
        checklists = 0,
        notesMasked = 0,
        tags = 0,
        locations = 0;
    int totalWords = 0, totalChars = 0, maxWords = 0, maxChars = 0, avgWords = 0, avgChars = 0;
    int words, chars;
    List<Note> notes = getAllNotes(false);
    for (Note note : notes) {
      if (note.isTrashed()) {
        notesTrashed++;
      } else if (note.isArchived()) {
        notesArchived++;
      } else {
        notesActive++;
      }
      if (note.getAlarm() != null && Long.parseLong(note.getAlarm()) > 0) {
        if (Long.parseLong(note.getAlarm()) > Calendar.getInstance().getTimeInMillis()) {
          remindersFuture++;
        } else {
          reminders++;
        }
      }
      if (note.isChecklist()) {
        checklists++;
      }
      if (note.isLocked()) {
        notesMasked++;
      }
      tags += TagsHelper.retrieveTags(note).size();
      if (note.getLongitude() != null && note.getLongitude() != 0) {
        locations++;
      }
      words = getWords(note);
      chars = getChars(note);
      if (words > maxWords) {
        maxWords = words;
      }
      if (chars > maxChars) {
        maxChars = chars;
      }
      totalWords += words;
      totalChars += chars;
    }
    mStats.setNotesActive(notesActive);
    mStats.setNotesArchived(notesArchived);
    mStats.setNotesTrashed(notesTrashed);
    mStats.setReminders(reminders);
    mStats.setRemindersFutures(remindersFuture);
    mStats.setNotesChecklist(checklists);
    mStats.setNotesMasked(notesMasked);
    mStats.setTags(tags);
    mStats.setLocation(locations);
    avgWords = totalWords / (notes.size() != 0 ? notes.size() : 1);
    avgChars = totalChars / (notes.size() != 0 ? notes.size() : 1);

    mStats.setWords(totalWords);
    mStats.setWordsMax(maxWords);
    mStats.setWordsAvg(avgWords);
    mStats.setChars(totalChars);
    mStats.setCharsMax(maxChars);
    mStats.setCharsAvg(avgChars);

    // Everything about attachments
    int attachmentsAll = 0, images = 0, videos = 0, audioRecordings = 0, sketches = 0, files = 0;
    List<Attachment> attachments = getAllAttachments();
    for (Attachment attachment : attachments) {
      if (Constants.MIME_TYPE_IMAGE.equals(attachment.getMime_type())) {
        images++;
      } else if (Constants.MIME_TYPE_VIDEO.equals(attachment.getMime_type())) {
        videos++;
      } else if (Constants.MIME_TYPE_AUDIO.equals(attachment.getMime_type())) {
        audioRecordings++;
      } else if (Constants.MIME_TYPE_SKETCH.equals(attachment.getMime_type())) {
        sketches++;
      } else if (Constants.MIME_TYPE_FILES.equals(attachment.getMime_type())) {
        files++;
      }
    }
    mStats.setAttachments(attachmentsAll);
    mStats.setImages(images);
    mStats.setVideos(videos);
    mStats.setAudioRecordings(audioRecordings);
    mStats.setSketches(sketches);
    mStats.setFiles(files);

    return mStats;
  }