Skip to content

Commit

Permalink
Statistics dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
sockeqwe committed May 9, 2015
1 parent 4bd89b3 commit af0dc63
Show file tree
Hide file tree
Showing 21 changed files with 567 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import android.os.Bundle;
import com.hannesdorfmann.mosby.sample.mail.details.DetailsActivity;
import com.hannesdorfmann.mosby.sample.mail.login.LoginActivity;
import com.hannesdorfmann.mosby.sample.mail.model.contact.Person;
import com.hannesdorfmann.mosby.sample.mail.model.mail.Label;
import com.hannesdorfmann.mosby.sample.mail.model.mail.Mail;
import com.hannesdorfmann.mosby.sample.mail.model.contact.Person;
import com.hannesdorfmann.mosby.sample.mail.model.mail.service.SendMailService;
import com.hannesdorfmann.mosby.sample.mail.profile.ProfileActivity;
import com.hannesdorfmann.mosby.sample.mail.search.SearchActivity;
Expand Down Expand Up @@ -87,4 +87,5 @@ public void showProfile(Context context, Person person) {
i.putExtra(ProfileActivity.KEY_PERSON, person);
context.startActivity(i);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@
*/
public class MenuAdapter extends ListAdapter<List<Label>> implements MenuAdapterBinder {

public interface LabelClickListener{
public void onLabelClicked(Label label);
}
public interface LabelClickListener {
public void onLabelClicked(Label label);

public void onStatisticsClicked();
}

@ViewType(layout = R.layout.list_menu_item,
initMethod = true,
Expand All @@ -46,16 +47,32 @@ public interface LabelClickListener{
@Field(id = R.id.unreadCount, name = "unread", type = TextView.class)
}) public final int menuItem = 0;

@ViewType(layout = R.layout.list_menu_statistics,
initMethod = true,
fields = @Field(id = R.id.icon, name = "icon", type = ImageView.class)) public final int
statisticsItem = 1;

private Context context;
private LabelClickListener listener;


public MenuAdapter(Context context, LabelClickListener listener) {
super(context);
this.context = context;
this.listener = listener;
}

@Override public int getItemCount() {
if (items == null || items.size() == 0) {
return 0;
} else {
return items.size() + 1; // +1 because of statistics item
}
}

@Override public int getItemViewType(int position) {
return position == getItemCount() - 1 ? statisticsItem : menuItem;
}

@Override public void initViewHolder(MenuAdapterHolders.MenuItemViewHolder vh, View view,
ViewGroup parent) {
vh.icon.setColorFilter(context.getResources().getColor(R.color.secondary_text));
Expand All @@ -79,4 +96,19 @@ public MenuAdapter(Context context, LabelClickListener listener) {
}
});
}

@Override public void initViewHolder(MenuAdapterHolders.StatisticsItemViewHolder vh, View view,
ViewGroup parent) {
vh.icon.setColorFilter(context.getResources().getColor(R.color.secondary_text));
vh.itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onStatisticsClicked();
}
});
}

@Override
public void bindViewHolder(MenuAdapterHolders.StatisticsItemViewHolder vh, int position) {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.hannesdorfmann.mosby.sample.mail.dagger.NavigationModule;
import com.hannesdorfmann.mosby.sample.mail.model.account.Account;
import com.hannesdorfmann.mosby.sample.mail.model.mail.Label;
import com.hannesdorfmann.mosby.sample.mail.statistics.StatisticsDialog;
import de.greenrobot.event.EventBus;
import java.util.List;
import javax.inject.Inject;
Expand Down Expand Up @@ -102,6 +103,13 @@ public class MenuFragment extends AuthRefreshRecyclerFragment<List<Label>, MenuV
intentStarter.showMailsOfLabel(getActivity(), label);
}

@Override public void onStatisticsClicked() {
getActivity().getSupportFragmentManager()
.beginTransaction()
.add(new StatisticsDialog(), null)
.commit();
}

@Override public void decrementUnreadCount(String label) {

for (Label l : adapter.getItems()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public class DefaultAccountManager implements AccountManager {
}

@Override public boolean isUserAuthenticated() {
// return true; // TODO remove for testing
return currentAccount != null;
return true; // TODO remove for testing
//return currentAccount != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,14 @@
import com.hannesdorfmann.mosby.sample.mail.R;
import com.hannesdorfmann.mosby.sample.mail.model.account.AccountManager;
import com.hannesdorfmann.mosby.sample.mail.model.account.NotAuthenticatedException;
import com.hannesdorfmann.mosby.sample.mail.model.mail.statistics.MailStatistics;
import com.hannesdorfmann.mosby.sample.mail.model.mail.statistics.MailsCount;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import rx.Observable;
import rx.functions.Action2;
Expand Down Expand Up @@ -267,6 +271,34 @@ public Observable<List<Mail>> getMailsSentBy(final int personId) {
});
}

public Observable<MailStatistics> getStatistics() {
return Observable.defer(new Func0<Observable<MailStatistics>>() {
@Override public Observable<MailStatistics> call() {

delay();
Observable o = checkExceptions();
if (o != null) {
return o;
}

Map<String, MailsCount> mailsCountMap = new HashMap<String, MailsCount>();

for (Mail m : mails) {
MailsCount count = mailsCountMap.get(m.getLabel());
if (count == null) {
count = new MailsCount(m.getLabel(), 0);
mailsCountMap.put(m.getLabel(), count);
}

count.incrementCount();
}

return Observable.just(
new MailStatistics(new ArrayList<MailsCount>(mailsCountMap.values())));
}
});
}

/**
* Filters the list of mails by the given criteria
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.hannesdorfmann.mosby.sample.mail.model.mail.statistics;

import android.os.Parcel;
import android.os.Parcelable;
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
import java.util.ArrayList;

/**
* @author Hannes Dorfmann
*/
@ParcelablePlease
public class MailStatistics implements Parcelable {

ArrayList<MailsCount> mailsCounts;

public MailStatistics(ArrayList<MailsCount> mailsCounts) {
this.mailsCounts = mailsCounts;
}

public MailStatistics() {
}

@Override public int describeContents() {
return 0;
}

@Override public void writeToParcel(Parcel dest, int flags) {
MailStatisticsParcelablePlease.writeToParcel(this, dest, flags);
}

public static final Creator<MailStatistics> CREATOR = new Creator<MailStatistics>() {
public MailStatistics createFromParcel(Parcel source) {
MailStatistics target = new MailStatistics();
MailStatisticsParcelablePlease.readFromParcel(target, source);
return target;
}

public MailStatistics[] newArray(int size) {
return new MailStatistics[size];
}
};

public ArrayList<MailsCount> getMailsCounts() {
return mailsCounts;
}

public void setMailsCounts(ArrayList<MailsCount> mailsCounts) {
this.mailsCounts = mailsCounts;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.hannesdorfmann.mosby.sample.mail.model.mail.statistics;

import android.os.Parcel;
import android.os.Parcelable;
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;

/**
* @author Hannes Dorfmann
*/
@ParcelablePlease public class MailsCount implements Parcelable {

String label;
int mailsCount;

public MailsCount(String label, int mailsCount) {
this.label = label;
this.mailsCount = mailsCount;
}

private MailsCount() {
}

public String getLabel() {
return label;
}

public int getMailsCount() {
return mailsCount;
}

public void incrementCount(){
mailsCount++;
}

@Override public int describeContents() {
return 0;
}

@Override public void writeToParcel(Parcel dest, int flags) {
MailsCountParcelablePlease.writeToParcel(this, dest, flags);
}


public static final Creator<MailsCount> CREATOR = new Creator<MailsCount>() {
public MailsCount createFromParcel(Parcel source) {
MailsCount target = new MailsCount();
MailsCountParcelablePlease.readFromParcel(target, source);
return target;
}

public MailsCount[] newArray(int size) {
return new MailsCount[size];
}
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.hannesdorfmann.mosby.sample.mail.statistics;

import android.content.Context;
import android.widget.TextView;
import com.hannesdorfmann.annotatedadapter.annotation.Field;
import com.hannesdorfmann.annotatedadapter.annotation.ViewType;
import com.hannesdorfmann.mosby.sample.mail.R;
import com.hannesdorfmann.mosby.sample.mail.base.view.ListAdapter;
import com.hannesdorfmann.mosby.sample.mail.model.mail.statistics.MailsCount;
import java.util.List;

/**
* @author Hannes Dorfmann
*/
public class StatisticsAdapter extends ListAdapter<List<MailsCount>>
implements StatisticsAdapterBinder {

@ViewType(
layout = R.layout.list_statistics,
fields = @Field(id = R.id.text, name = "text", type = TextView.class)) public final int
statisticItem = 0;

public StatisticsAdapter(Context context) {
super(context);
}

@Override
public void bindViewHolder(StatisticsAdapterHolders.StatisticItemViewHolder vh, int position) {
MailsCount count = items.get(position);
vh.text.setText(count.getMailsCount() + " mails in " + count.getLabel());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.hannesdorfmann.mosby.sample.mail.statistics;

import com.hannesdorfmann.mosby.sample.mail.dagger.MailAppComponent;
import com.hannesdorfmann.mosby.sample.mail.dagger.MailModule;
import dagger.Component;
import javax.inject.Singleton;

/**
* @author Hannes Dorfmann
*/
@Singleton
@Component(
modules = MailModule.class,
dependencies = MailAppComponent.class)
public interface StatisticsComponent {

public StatisticsPresenter presenter();
}
Loading

0 comments on commit af0dc63

Please sign in to comment.