From 68c4b260314be6d7c722640b4f463a7b8df952e6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 22 Feb 2016 07:56:12 -0500 Subject: [PATCH] Implement hints --- .../java/org/isoron/helpers/DialogHelper.java | 16 +++++ .../java/org/isoron/uhabits/MainActivity.java | 15 +++-- .../uhabits/fragments/ListHabitsFragment.java | 65 +++++++++++++++++-- .../main/res/layout/list_habits_fragment.xml | 28 ++++++++ app/src/main/res/values/strings.xml | 9 +++ 5 files changed, 123 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/isoron/helpers/DialogHelper.java b/app/src/main/java/org/isoron/helpers/DialogHelper.java index 97d55bd4a..04e99d65d 100644 --- a/app/src/main/java/org/isoron/helpers/DialogHelper.java +++ b/app/src/main/java/org/isoron/helpers/DialogHelper.java @@ -19,8 +19,10 @@ package org.isoron.helpers; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; +import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Vibrator; +import android.preference.PreferenceManager; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; @@ -49,4 +51,18 @@ public abstract class DialogHelper Vibrator vb = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vb.vibrate(duration); } + + + public static void incrementLaunchCount(Context context) + { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + int count = prefs.getInt("launch_count", 0); + prefs.edit().putInt("launch_count", count + 1).apply(); + } + + public static int getLaunchCount(Context context) + { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + return prefs.getInt("launch_count", 0); + } } diff --git a/app/src/main/java/org/isoron/uhabits/MainActivity.java b/app/src/main/java/org/isoron/uhabits/MainActivity.java index 4159e2c86..205735ef6 100644 --- a/app/src/main/java/org/isoron/uhabits/MainActivity.java +++ b/app/src/main/java/org/isoron/uhabits/MainActivity.java @@ -24,6 +24,7 @@ import android.preference.PreferenceManager; import android.view.Menu; import android.view.MenuItem; +import org.isoron.helpers.DialogHelper; import org.isoron.helpers.ReplayableActivity; import org.isoron.uhabits.fragments.ListHabitsFragment; import org.isoron.uhabits.helpers.ReminderHelper; @@ -33,6 +34,7 @@ public class MainActivity extends ReplayableActivity implements ListHabitsFragment.OnHabitClickListener { private ListHabitsFragment listHabitsFragment; + SharedPreferences prefs; @Override protected void onCreate(Bundle savedInstanceState) @@ -40,20 +42,23 @@ public class MainActivity extends ReplayableActivity super.onCreate(savedInstanceState); setContentView(R.layout.list_habits_activity); - PreferenceManager.setDefaultValues(this, R.xml.preferences, false); - + prefs = PreferenceManager.getDefaultSharedPreferences(this); listHabitsFragment = (ListHabitsFragment) getFragmentManager().findFragmentById(R.id.fragment1); - ReminderHelper.createReminderAlarms(MainActivity.this); + onStartup(); + } + private void onStartup() + { + PreferenceManager.setDefaultValues(this, R.xml.preferences, false); + ReminderHelper.createReminderAlarms(MainActivity.this); + DialogHelper.incrementLaunchCount(this); showTutorial(); - } private void showTutorial() { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); Boolean firstRun = prefs.getBoolean("pref_first_run", true); if (firstRun) diff --git a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java index 8be2580cd..5086e8a5f 100644 --- a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java +++ b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java @@ -16,6 +16,8 @@ package org.isoron.uhabits.fragments; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.app.Fragment; import android.content.Context; @@ -68,6 +70,9 @@ public class ListHabitsFragment extends Fragment { public static final int INACTIVE_COLOR = Color.rgb(230, 230, 230); + public static final int HINT_INTERVAL = 5; + public static final int HINT_INTERVAL_OFFSET = 2; + public interface OnHabitClickListener { void onHabitClicked(Habit habit); @@ -82,12 +87,14 @@ public class ListHabitsFragment extends Fragment private int tvNameWidth; private int buttonCount; private View llEmpty; + private View llHint; private OnHabitClickListener habitClickListener; private boolean isShortToggleEnabled; private HabitListLoader loader; - boolean showArchived; + private boolean showArchived; + private SharedPreferences prefs; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -106,7 +113,6 @@ public class ListHabitsFragment extends Fragment tvNameHeader = (TextView) view.findViewById(R.id.tvNameHeader); ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar); - progressBar.setVisibility(View.INVISIBLE); loader.setProgressBar(progressBar); adapter = new ListHabitsAdapter(getActivity()); @@ -126,6 +132,9 @@ public class ListHabitsFragment extends Fragment listView.setOnTouchListener(controller); listView.setDragEnabled(true); + llHint = view.findViewById(R.id.llHint); + llHint.setOnClickListener(this); + Typeface fontawesome = Typeface.createFromAsset(getActivity().getAssets(), "fontawesome-webfont.ttf"); ((TextView) view.findViewById(R.id.tvStarEmpty)).setTypeface(fontawesome); @@ -134,6 +143,8 @@ public class ListHabitsFragment extends Fragment loader.updateAllHabits(true); setHasOptionsMenu(true); + + return view; } @@ -142,8 +153,10 @@ public class ListHabitsFragment extends Fragment public void onAttach(Activity activity) { super.onAttach(activity); - habitClickListener = (OnHabitClickListener) activity; this.activity = (ReplayableActivity) activity; + + habitClickListener = (OnHabitClickListener) activity; + prefs = PreferenceManager.getDefaultSharedPreferences(activity); } @Override @@ -157,9 +170,9 @@ public class ListHabitsFragment extends Fragment updateEmptyMessage(); updateHeader(); - adapter.notifyDataSetChanged(); + showNextHint(); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); + adapter.notifyDataSetChanged(); isShortToggleEnabled = prefs.getBoolean("pref_short_toggle", false); } @@ -346,6 +359,44 @@ public class ListHabitsFragment extends Fragment activity.executeCommand(c, refreshKey); } + private void hideHint() + { + llHint.animate().alpha(0f).setDuration(500).setListener(new AnimatorListenerAdapter() + { + @Override + public void onAnimationEnd(Animator animation) + { + llHint.setVisibility(View.GONE); + } + }); + } + + private void showNextHint() + { + int launchCount = DialogHelper.getLaunchCount(activity); + if(launchCount % HINT_INTERVAL == HINT_INTERVAL_OFFSET) + { + int lastHint = prefs.getInt("last_shown_hint", -1); + showHint(lastHint + 1); + } + + } + + private void showHint(int number) + { + String[] hints = activity.getResources().getStringArray(R.array.hints); + if(number >= hints.length) return; + + prefs.edit().putInt("last_shown_hint", number).apply(); + + TextView tvContent = (TextView) llHint.findViewById(R.id.hintContent); + tvContent.setText(hints[number]); + + llHint.setAlpha(0.0f); + llHint.setVisibility(View.VISIBLE); + llHint.animate().alpha(1f).setDuration(500); + } + @Override public void drop(int from, int to) { @@ -363,6 +414,10 @@ public class ListHabitsFragment extends Fragment if (isShortToggleEnabled) toggleCheck(v); else activity.showToast(R.string.long_press_to_toggle); break; + + case R.id.llHint: + hideHint(); + break; } } diff --git a/app/src/main/res/layout/list_habits_fragment.xml b/app/src/main/res/layout/list_habits_fragment.xml index e3970fc48..d845cccf2 100644 --- a/app/src/main/res/layout/list_habits_fragment.xml +++ b/app/src/main/res/layout/list_habits_fragment.xml @@ -60,4 +60,32 @@ android:layout_marginTop="37dp" /> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 13a58218a..40b1d2df3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,4 +101,13 @@ Settings Snooze interval + Did you know? + To rearrange the entries, you can drag them by the star. + You can see more days by putting your phone in landscape mode. + + + @string/hint_drag + @string/hint_landscape + + \ No newline at end of file