initialize fabric / send events from viewAdapter / change AddTaskDialog to use taskId / change menu background color

This commit is contained in:
Negue 2015-07-11 20:49:09 +02:00
parent e52f10b83c
commit ee48c6adfa
10 changed files with 198 additions and 115 deletions

View file

@ -36,7 +36,8 @@
</activity>
<activity
android:name=".prefs.PrefsActivity"
android:label="@string/PS_param_title">
android:label="@string/PS_param_title"
android:theme="@style/AppThemeWithActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>

View file

@ -22,6 +22,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/task_text"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
@ -64,19 +65,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/task_note"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/ET_taskNote"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="@string/task_note_hint"
android:inputType="textCapSentences|textMultiLine"
android:minLines="2">
android:minLines="2"
</EditText>
app:met_floatingLabel="normal" />
</LinearLayout>
@ -109,6 +113,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_value"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
@ -140,6 +145,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/task_duedate"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView

View file

@ -1,31 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/relativeLayoutView"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp"
android:scrollbarThumbVertical="@color/md_grey_500"
android:scrollbars="vertical" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_margin="16dp"
app:backgroundTint="@color/brand"
app:fabSize="normal"
android:layout_alignBottom="@id/recyclerView"
android:layout_alignParentRight="true" />
</RelativeLayout>
app:layout_anchor="@id/coordinatorLayout"
app:layout_anchorGravity="bottom|right|end"
android:layout_gravity="bottom|right" />
</android.support.design.widget.CoordinatorLayout>

View file

@ -12,7 +12,6 @@
<item
android:id="@+id/action_toggle_sleep"
android:orderInCategory="103"
android:title="Toggle Sleep"
/>

View file

@ -18,7 +18,7 @@
<!-- ...and here we setting appcompats color theming attrs -->
<item name="colorPrimary">@color/brand</item>
<item name="colorPrimaryDark">@color/brand</item>
<item name="colorAccent">@color/md_amber_200</item>
<item name="colorAccent">@color/md_teal_300</item>
<!-- MaterialDrawer specific values -->
<item name="material_drawer_background">@color/material_drawer_background</item>
@ -31,6 +31,9 @@
<item name="material_drawer_selected">@color/material_drawer_selected</item>
<item name="material_drawer_selected_text">@color/brand</item>
<item name="material_drawer_header_selection_text">@color/material_drawer_header_selection_text</item>
<item name="actionOverflowMenuStyle">@style/PopupTheme</item>
</style>
<style name="AppThemeWithActionBar" parent="AppTheme">
@ -43,13 +46,10 @@
<item name="android:textColorPrimary">@android:color/black</item>
</style>
<style name="TextReservedToPremium">
<item name="android:textStyle">italic</item>
<item name="android:textAppearance">@android:style/TextAppearance.Small.Inverse</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textColor">@color/card_light_text</item>
<style name="PopupTheme" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="android:popupBackground">@color/accent_color</item>
</style>
</style>
<style name="CardText">
<item name="android:textSize">@dimen/card_small_text</item>
<item name="android:textColor">@color/card_text</item>
@ -61,7 +61,6 @@
<item name="android:textColor">@color/card_light_text</item>
</style>
<style name="CardTitle" parent="@style/CardText">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
@ -74,12 +73,7 @@
<!-- <item name="android:textAllCaps">true</item>
<item name="android:fontFamily">sans-serif-condensed</item>-->
</style>
<style name="PopupTheme" parent="android:Theme.Holo.Light.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowSoftInputMode">stateAlwaysHidden</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="Widget.ProgressBar.Horizontal" parent="@android:style/Widget.ProgressBar">
<item name="android:maxHeight">1.0dip</item>

View file

@ -151,14 +151,8 @@ public class APIHelper implements ErrorHandler, Profiler {
this.apiService.getUser(callback);
}
public void updateTaskDirection(String id, String direction, TaskScoringCallback callback) {
TaskDirection td;
if(direction.equals(TaskDirection.up.toString())) {
td = TaskDirection.up;
} else {
td = TaskDirection.down;
}
this.apiService.postTaskDirection(id, td.toString(), callback);
public void updateTaskDirection(String id, TaskDirection direction, TaskScoringCallback callback) {
this.apiService.postTaskDirection(id, direction.toString(), callback);
}
public void registerUser(View btnClicked, String username, String email, String password, String confirmPassword) {

View file

@ -38,6 +38,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ToDo;
import com.magicmicky.habitrpgwrapper.lib.utils.DaysUtils;
import com.raizlabs.android.dbflow.sql.language.Select;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.*;
import static com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitType.habit;
@ -69,7 +70,7 @@ public class AddTaskDialog extends DialogFragment implements OnDateSetListener,
private Checklist mChecklist = new Checklist() {
@Override
protected HabitType getType() {
public HabitType getType() {
return daily;
}
};
@ -106,10 +107,10 @@ public class AddTaskDialog extends DialogFragment implements OnDateSetListener,
this.taskValue = (EditText) mainView.findViewById(R.id.ET_taskValue);
Bundle b = this.getArguments();
int pos = b.getInt("pos", -1);
String taskId = b.getString("taskId", "");
String type;
String text;
if (pos != -1) {
if (!taskId.isEmpty()) {
this.mEditMode = true;
}
@ -141,25 +142,31 @@ public class AddTaskDialog extends DialogFragment implements OnDateSetListener,
} else if (hType == reward) {
LinearLayout value = (LinearLayout) mainView.findViewById(R.id.value);
value.setVisibility(View.VISIBLE);
}
if (mEditMode) {
// this.reconstructObjectFrom(json);
/*switch (hType) {
switch (hType) {
case todo:
this.populate(((MainActivityOld) getActivity()).getTodo(pos));
ToDo todo = new Select().from(ToDo.class).byIds(taskId).querySingle();
this.populate(todo);
break;
case daily:
this.populate(((MainActivityOld) getActivity()).getDaily(pos));
Daily daily = new Select().from(Daily.class).byIds(taskId).querySingle();
this.populate(daily);
break;
case reward:
this.populate(((MainActivityOld) getActivity()).getReward(pos));
Reward reward = new Select().from(Reward.class).byIds(taskId).querySingle();
this.populate(reward);
break;
case habit:
this.populate(((MainActivityOld) getActivity()).getHabit(pos));
Habit habit = new Select().from(Habit.class).byIds(taskId).querySingle();
this.populate(habit);
break;
}*/
}
}
builder.setTitle(getString(R.string.new_task, hType.toString()))
.setPositiveButton(R.string.dialog_confirm_button, new DialogInterface.OnClickListener() {

View file

@ -3,6 +3,7 @@ package com.habitrpg.android.habitica;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v7.app.ActionBar;
@ -14,16 +15,12 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.github.florent37.materialviewpager.MaterialViewPager;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.callbacks.TaskCreationCallback;
import com.habitrpg.android.habitica.callbacks.TaskDeletionCallback;
import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback;
import com.habitrpg.android.habitica.events.AddTaskTappedEvent;
import com.habitrpg.android.habitica.events.HabitScoreEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.*;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
import com.habitrpg.android.habitica.ui.EditTextDrawer;
@ -32,6 +29,7 @@ import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment;
import com.instabug.wrapper.support.activity.InstabugAppCompatActivity;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Daily;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Habit;
@ -59,13 +57,15 @@ import java.util.Map;
import butterknife.ButterKnife;
import butterknife.InjectView;
import de.greenrobot.event.EventBus;
import io.fabric.sdk.android.Fabric;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class MainActivity extends InstabugAppCompatActivity implements OnTaskCreationListener, HabitRPGUserCallback.OnUserReceived,
TaskScoringCallback.OnTaskScored, TaskCreationCallback.OnHabitCreated, TaskUpdateCallback.OnHabitUpdated, TaskDeletionCallback.OnTaskDeleted, Callback<Void>,
public class MainActivity extends InstabugAppCompatActivity implements HabitRPGUserCallback.OnUserReceived,
TaskScoringCallback.OnTaskScored, Callback<Void>, OnTaskCreationListener,
FlowContentObserver.OnSpecificModelStateChangedListener {
static final int SETTINGS = 11;
static final int ABOUT = 12;
//region View Elements
@ -105,6 +105,12 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
// Receive Events
EventBus.getDefault().register(this);
// Initialize Crashlytics
Crashlytics crashlytics = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
Fabric.with(this, crashlytics);
this.hostConfig = PrefsActivity.fromContext(this);
if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) {
startActivity(new Intent(this, LoginActivity.class));
@ -161,7 +167,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
new DividerDrawerItem(),
new SecondaryDrawerItem().withName("News"),
new SecondaryDrawerItem().withName("Settings"),
new SecondaryDrawerItem().withName("Settings").withIdentifier(SETTINGS),
new SecondaryDrawerItem().withName("About").withIdentifier(ABOUT)
)
@ -172,6 +178,10 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
// do something with the clicked item :D
switch (drawerItem.getIdentifier()) {
case SETTINGS:
startActivity(new Intent(MainActivity.this, PrefsActivity.class));
return false;
case ABOUT:
startActivity(new Intent(MainActivity.this, AboutActivity.class));
@ -235,20 +245,94 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
super.onDestroy();
}
public void onEvent(TaskTappedEvent event){
Toast.makeText(this, event.Task.text, Toast.LENGTH_SHORT).show();
private void showSnackbar(String content) {
showSnackbar(content, false);
}
public void onEvent(TaskLongPressedEvent event){
Toast.makeText(this, "LongPress: " +event.Task.text, Toast.LENGTH_SHORT).show();
private void showSnackbar(String content, boolean negative) {
Fragment f = ViewFragmentsDictionary.get(materialViewPager.getViewPager().getCurrentItem());
Snackbar snackbar = Snackbar.make(f.getView().findViewById(R.id.fab), content, Snackbar.LENGTH_LONG);
if (negative) {
View snackbarView = snackbar.getView();
//change Snackbar's background color;
snackbarView.setBackgroundColor(getResources().getColor(R.color.red));
}
snackbar.show();
}
public void onEvent(HabitScoreEvent event){
Toast.makeText(this, "Score Up="+event.Up+" " +event.Habit.text, Toast.LENGTH_SHORT).show();
public void onEvent(TaskTappedEvent event) {
Bundle b = new Bundle();
b.putString("type", event.Task.getType().toString());
b.putString("taskId", event.Task.getId());
AddTaskDialog dialog = new AddTaskDialog();
dialog.setArguments(b);
dialog.show(getSupportFragmentManager(), "AddTaskDialog");
}
public void onEvent(AddTaskTappedEvent event){
Toast.makeText(this, "Add Task " +event.ClassType.getSimpleName(), Toast.LENGTH_SHORT).show();
public void onEvent(TaskLongPressedEvent event) {
showSnackbar("LongPress: " + event.Task.text);
}
public void onEvent(TodoCheckedEvent event){
showSnackbar("ToDo Checked= "+event.ToDo.getText(), true);
}
public void onEvent(HabitScoreEvent event) {
mAPIHelper.updateTaskDirection(event.Habit.getId(), event.Up ? TaskDirection.up : TaskDirection.down, new TaskScoringCallback(this));
}
public void onEvent(AddTaskTappedEvent event) {
showSnackbar("Add Task " + event.ClassType.getSimpleName());
}
public void onEvent(BuyRewardTappedEvent event) {
showSnackbar("Buy Reward " + event.Reward.getText());
}
private void notifyUser(double xp, double hp, double gold,
double lvl, double delta) {
StringBuilder message = new StringBuilder();
boolean neg = false;
if (lvl > User.getStats().getLvl()) {
message.append(getString(R.string.lvlup));
//If user lvl up, we need to fetch again the data from the server...
this.mAPIHelper.retrieveUser(new HabitRPGUserCallback(this));
User.getStats().setLvl((int) lvl);
showSnackbar(message.toString());
} else {
com.magicmicky.habitrpgwrapper.lib.models.Stats stats = User.getStats();
if (xp > stats.getExp()) {
message.append(" + ").append(round(xp - stats.getExp(), 2)).append(" XP");
User.getStats().setExp(xp);
}
if (hp != stats.getHp()) {
neg = true;
message.append(" - ").append(round(stats.getHp() - hp, 2)).append(" HP");
User.getStats().setHp(hp);
}
if (gold > stats.getGp()) {
message.append(" + ").append(round(gold - stats.getGp(), 2)).append(" GP");
stats.setGp(gold);
} else if (gold < stats.getGp()) {
neg = true;
message.append(" - ").append(round(stats.getGp() - gold, 2)).append(" GP");
stats.setGp(gold);
}
showSnackbar(message.toString(), neg);
updateUserAvatars();
}
}
static public Double round(Double value, int n) {
double r = (Math.round(value.doubleValue() * Math.pow(10, n))) / (Math.pow(10, n));
return Double.valueOf(r);
}
public void loadTaskLists() {
@ -270,6 +354,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
case 0:
layoutOfType = R.layout.habit_item_card;
fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Habit.class, layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class, context), Habit.class);
break;
case 1:
layoutOfType = R.layout.daily_item_card;
@ -284,7 +369,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(ToDo.class, layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class, context), ToDo.class);
}
// ViewFragmentsDictionary.put(position, fragment);
ViewFragmentsDictionary.put(position, fragment);
return fragment;
}
@ -308,8 +393,6 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
}
return "";
}
});
materialViewPager.getPagerTitleStrip().setViewPager(viewPager);
@ -320,7 +403,6 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
filterDrawer.addItems(
new SectionDrawerItem().withName("Filter by Tag"),
new EditTextDrawer()
);
for (Tag t : User.getTags()) {
@ -418,49 +500,9 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
}
@Override
public void onTaskCreated(HabitItem habit) {
}
@Override
public void onTaskCreationFail() {
}
@Override
public void onTaskUpdated(HabitItem habit) {
}
@Override
public void onTaskUpdateFail() {
}
@Override
public void onTaskCreation(HabitItem task, boolean editMode) {
}
@Override
public void onTaskCreationFail(String message) {
}
@Override
public void onTaskDeleted(HabitItem deleted) {
}
@Override
public void onTaskDeletionFail() {
}
@Override
public void onTaskDataReceived(TaskDirectionData data) {
notifyUser(data.getExp(), data.getHp(), data.getGp(), data.getLvl(), data.getDelta());
}
@Override
@ -482,7 +524,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
runOnUiThread(new Runnable() {
@Override
public void run() {
if(!onlyHeader) {
if (!onlyHeader) {
taskListAlreadyAdded = true;
loadTaskLists();
FillTagFilterDrawer();
@ -492,4 +534,16 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
});
}
}
@Override
public void onTaskCreation(HabitItem task, boolean editMode) {
task.save();
// TODO update task in list
}
@Override
public void onTaskCreationFail(String message) {
showSnackbar(message, true);
}
}

View file

@ -27,7 +27,7 @@ public class HabitRPGUserCallback implements Callback<HabitRPGUser> {
@Override
public void failure(RetrofitError error) {
Crashlytics.logException(error);
Crashlytics.getInstance().core.logException(error);
Log.w("OMG", "user failed!" + error.getMessage());

View file

@ -10,15 +10,18 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.CompoundButton;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.databinding.DailyItemCardBinding;
import com.habitrpg.android.habitica.databinding.HabitItemCardBinding;
import com.habitrpg.android.habitica.databinding.RewardItemCardBinding;
import com.habitrpg.android.habitica.databinding.TodoItemCardBinding;
import com.habitrpg.android.habitica.events.BuyRewardTappedEvent;
import com.habitrpg.android.habitica.events.HabitScoreEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.TodoCheckedEvent;
import com.habitrpg.android.habitica.ui.helpers.HabitColorHelper;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Daily;
@ -268,7 +271,7 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
}
}
public class TodoViewHolder extends ViewHolder<ToDo> {
public class TodoViewHolder extends ViewHolder<ToDo> implements CompoundButton.OnCheckedChangeListener {
@InjectView(R.id.checkBox)
CheckBox checkbox;
@ -279,6 +282,8 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
super(itemView);
binding = DataBindingUtil.bind(itemView);
checkbox.setOnCheckedChangeListener(this);
}
@Override
@ -292,6 +297,14 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
ViewHelper.SetBackgroundTint(checkbox, resources.getColor(btnColorRes));
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
TodoCheckedEvent event = new TodoCheckedEvent();
event.ToDo = Item;
EventBus.getDefault().post(event);
}
}
public class RewardViewHolder extends ViewHolder<Reward> {
@ -301,6 +314,21 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
super(itemView);
binding = DataBindingUtil.bind(itemView);
binding.btnReward.setClickable(true);
binding.btnReward.setOnClickListener(this);
}
@Override
public void onClick(View v) {
BuyRewardTappedEvent event = new BuyRewardTappedEvent();
if (v == binding.btnReward) {
event.Reward = Item;
EventBus.getDefault().post(event);
} else super.onClick(v);
}
@Override