Added LeakCanary

This commit is contained in:
Karim Abou Zeid 2015-08-06 18:27:15 +02:00
commit 2564b99fa5
26 changed files with 301 additions and 137 deletions

View file

@ -5,7 +5,6 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.TextUtils;
import com.afollestad.materialdialogs.MaterialDialog;
@ -14,7 +13,17 @@ import com.kabouzeid.gramophone.R;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class AboutDialog extends DialogFragment {
public class AboutDialog extends LeakDetectDialogFragment {
private static String getCurrentVersionName(@NonNull final Context context) {
String versionName;
try {
versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
return "Unknown";
}
return versionName;
}
@NonNull
@Override
@ -30,14 +39,4 @@ public class AboutDialog extends DialogFragment {
.positiveText(android.R.string.ok)
.build();
}
private static String getCurrentVersionName(@NonNull final Context context) {
String versionName;
try {
versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
return "Unknown";
}
return versionName;
}
}

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.View;
import com.afollestad.materialdialogs.MaterialDialog;
@ -19,7 +18,7 @@ import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class AddToPlaylistDialog extends DialogFragment {
public class AddToPlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static AddToPlaylistDialog create(Song song) {

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
@ -13,7 +12,7 @@ import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ClearSmartPlaylistDialog extends DialogFragment {
public class ClearSmartPlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) {

View file

@ -2,7 +2,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
@ -16,6 +15,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -30,12 +30,33 @@ import com.kabouzeid.gramophone.views.ColorView;
/**
* @author Aidan Follestad (afollestad)
*/
public class ColorChooserDialog extends DialogFragment implements View.OnClickListener {
public class ColorChooserDialog extends LeakDetectDialogFragment implements View.OnClickListener {
private ColorCallback mCallback;
private int[] mColors;
private GridView mGrid;
public ColorChooserDialog() {
}
private static int translucentColor(int color) {
final float factor = 0.7f;
int alpha = Math.round(Color.alpha(color) * factor);
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
return Color.argb(alpha, red, green, blue);
}
@NonNull
private static Drawable createSelector(int color) {
ShapeDrawable darkerCircle = new ShapeDrawable(new OvalShape());
darkerCircle.getPaint().setColor(translucentColor(ColorUtil.shiftColorDown(color)));
StateListDrawable stateListDrawable = new StateListDrawable();
stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, darkerCircle);
return stateListDrawable;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@ -51,13 +72,6 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
}
}
public interface ColorCallback {
void onColorSelection(int title, int color);
}
public ColorChooserDialog() {
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
MaterialDialog dialog = new MaterialDialog.Builder(getActivity())
@ -111,6 +125,18 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
} else ((BaseAdapter) mGrid.getAdapter()).notifyDataSetChanged();
}
public void show(@NonNull AppCompatActivity activity, int title, int preselect) {
Bundle args = new Bundle();
args.putInt("preselect", preselect);
args.putInt("title", title);
setArguments(args);
show(activity.getSupportFragmentManager(), "COLOR_SELECTOR");
}
public interface ColorCallback {
void onColorSelection(int title, int color);
}
private class ColorGridAdapter extends BaseAdapter implements View.OnClickListener {
public ColorGridAdapter() {
@ -166,30 +192,4 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
invalidateGrid();
}
}
private static int translucentColor(int color) {
final float factor = 0.7f;
int alpha = Math.round(Color.alpha(color) * factor);
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
return Color.argb(alpha, red, green, blue);
}
@NonNull
private static Drawable createSelector(int color) {
ShapeDrawable darkerCircle = new ShapeDrawable(new OvalShape());
darkerCircle.getPaint().setColor(translucentColor(ColorUtil.shiftColorDown(color)));
StateListDrawable stateListDrawable = new StateListDrawable();
stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, darkerCircle);
return stateListDrawable;
}
public void show(@NonNull Activity context, int title, int preselect) {
Bundle args = new Bundle();
args.putInt("preselect", preselect);
args.putInt("title", title);
setArguments(args);
show(context.getFragmentManager(), "COLOR_SELECTOR");
}
}

View file

@ -4,7 +4,6 @@ import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.text.InputType;
import com.afollestad.materialdialogs.MaterialDialog;
@ -17,7 +16,7 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class CreatePlaylistDialog extends DialogFragment {
public class CreatePlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static CreatePlaylistDialog create() {

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
@ -16,7 +15,7 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class DeletePlaylistDialog extends DialogFragment {
public class DeletePlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static DeletePlaylistDialog create(Playlist playlist) {

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
@ -16,7 +15,7 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class DeleteSongsDialog extends DialogFragment {
public class DeleteSongsDialog extends LeakDetectDialogFragment {
@NonNull
public static DeleteSongsDialog create(Song song) {

View file

@ -0,0 +1,21 @@
package com.kabouzeid.gramophone.dialogs;
import android.support.v4.app.DialogFragment;
import com.kabouzeid.gramophone.App;
import com.squareup.leakcanary.RefWatcher;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class LeakDetectDialogFragment extends DialogFragment {
@Override
public void onDestroy() {
super.onDestroy();
if (getActivity() != null) {
RefWatcher refWatcher = App.getRefWatcher(getActivity());
refWatcher.watch(this);
}
}
}

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
@ -20,7 +19,7 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class PlayingQueueDialog extends DialogFragment {
public class PlayingQueueDialog extends LeakDetectDialogFragment {
public static PlayingQueueDialog create() {
final ArrayList<Song> playingQueue = MusicPlayerRemote.getPlayingQueue();

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.Html;
import com.afollestad.materialdialogs.MaterialDialog;
@ -16,7 +15,7 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class RemoveFromPlaylistDialog extends DialogFragment {
public class RemoveFromPlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static RemoveFromPlaylistDialog create(PlaylistSong song) {

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.InputType;
import com.afollestad.materialdialogs.MaterialDialog;
@ -13,7 +12,7 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class RenamePlaylistDialog extends DialogFragment {
public class RenamePlaylistDialog extends LeakDetectDialogFragment {
@NonNull
public static RenamePlaylistDialog create(long playlistId) {

View file

@ -13,7 +13,6 @@ import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;
@ -35,7 +34,7 @@ import butterknife.ButterKnife;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SleepTimerDialog extends DialogFragment {
public class SleepTimerDialog extends LeakDetectDialogFragment {
@Bind(R.id.seek_arc)
SeekArc seekArc;
@Bind(R.id.timer_display)

View file

@ -5,7 +5,6 @@ import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.text.Html;
import android.text.Spanned;
import android.util.Log;
@ -31,7 +30,7 @@ import java.io.IOException;
/**
* @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class SongDetailDialog extends DialogFragment {
public class SongDetailDialog extends LeakDetectDialogFragment {
public static final String TAG = SongDetailDialog.class.getSimpleName();
@ -44,6 +43,16 @@ public class SongDetailDialog extends DialogFragment {
return dialog;
}
private static Spanned makeTextWithTitle(@NonNull Context context, int titleResId, String text) {
return Html.fromHtml("<b>" + context.getResources().getString(titleResId) + ": " + "</b>" + text);
}
private static String getFileSizeString(long sizeInBytes) {
long fileSizeInKB = sizeInBytes / 1024;
long fileSizeInMB = fileSizeInKB / 1024;
return fileSizeInMB + " MB";
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
@ -94,14 +103,4 @@ public class SongDetailDialog extends DialogFragment {
}
return dialog;
}
private static Spanned makeTextWithTitle(@NonNull Context context, int titleResId, String text) {
return Html.fromHtml("<b>" + context.getResources().getString(titleResId) + ": " + "</b>" + text);
}
private static String getFileSizeString(long sizeInBytes) {
long fileSizeInKB = sizeInBytes / 1024;
long fileSizeInMB = fileSizeInKB / 1024;
return fileSizeInMB + " MB";
}
}

View file

@ -4,7 +4,6 @@ import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.View;
import com.afollestad.materialdialogs.MaterialDialog;
@ -15,7 +14,7 @@ import com.kabouzeid.gramophone.util.MusicUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SongShareDialog extends DialogFragment {
public class SongShareDialog extends LeakDetectDialogFragment {
@NonNull
public static SongShareDialog create(final Song song) {
final SongShareDialog dialog = new SongShareDialog();