diff options
Diffstat (limited to 'app/src')
9 files changed, 232 insertions, 25 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 0c8aea223..211b895d0 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -8,6 +8,7 @@ import android.content.SharedPreferences; import android.content.res.Configuration; import android.database.DataSetObserver; import android.media.AudioManager; +import android.media.Rating; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; @@ -53,6 +54,7 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.StorageUtils; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; +import de.danoeh.antennapod.dialog.RatingDialog; import de.danoeh.antennapod.fragment.AddFeedFragment; import de.danoeh.antennapod.fragment.DownloadsFragment; import de.danoeh.antennapod.fragment.EpisodesFragment; @@ -449,6 +451,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity super.onStart(); EventDistributor.getInstance().register(contentUpdate); EventBus.getDefault().register(this); + RatingDialog.init(this); } @Override @@ -466,8 +469,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity (intent.hasExtra(EXTRA_NAV_INDEX) || intent.hasExtra(EXTRA_FRAGMENT_TAG))) { handleNavIntent(); } - loadData(); + RatingDialog.check(); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java index bda70ba6a..f120aa1d5 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java @@ -1,6 +1,5 @@ package de.danoeh.antennapod.adapter; -import android.content.Context; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.v7.widget.RecyclerView; @@ -13,8 +12,10 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -32,6 +33,7 @@ import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.glide.ApGlideSettings; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.NetworkUtils; @@ -45,27 +47,34 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR private static final String TAG = AllEpisodesRecycleAdapter.class.getSimpleName(); - private final Context context; + private final WeakReference<MainActivity> mainActivityRef; private final ItemAccess itemAccess; private final ActionButtonCallback actionButtonCallback; private final ActionButtonUtils actionButtonUtils; private final boolean showOnlyNewEpisodes; - private final WeakReference<MainActivity> mainActivityRef; private int position = -1; - public AllEpisodesRecycleAdapter(Context context, - MainActivity mainActivity, + private final int playingBackGroundColor; + private final int normalBackGroundColor; + + public AllEpisodesRecycleAdapter(MainActivity mainActivity, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback, boolean showOnlyNewEpisodes) { super(); this.mainActivityRef = new WeakReference<>(mainActivity); - this.context = context; this.itemAccess = itemAccess; - this.actionButtonUtils = new ActionButtonUtils(context); + this.actionButtonUtils = new ActionButtonUtils(mainActivity); this.actionButtonCallback = actionButtonCallback; this.showOnlyNewEpisodes = showOnlyNewEpisodes; + + if(UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) { + playingBackGroundColor = mainActivity.getResources().getColor(R.color.highlight_dark); + } else { + playingBackGroundColor = mainActivity.getResources().getColor(R.color.highlight_light); + } + normalBackGroundColor = mainActivity.getResources().getColor(android.R.color.transparent); } @Override @@ -73,6 +82,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.new_episodes_listitem, parent, false); Holder holder = new Holder(view); + holder.container = (FrameLayout) view.findViewById(R.id.container); holder.placeholder = (TextView) view.findViewById(R.id.txtvPlaceholder); holder.title = (TextView) view.findViewById(R.id.txtvTitle); holder.pubDate = (TextView) view @@ -108,7 +118,8 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR holder.placeholder.setVisibility(View.VISIBLE); holder.placeholder.setText(item.getFeed().getTitle()); holder.title.setText(item.getTitle()); - holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); + holder.pubDate.setText(DateUtils.formatDateTime(mainActivityRef.get(), + item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); if (showOnlyNewEpisodes || false == item.isNew()) { holder.statusUnread.setVisibility(View.INVISIBLE); } else { @@ -158,6 +169,11 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR holder.progress.setVisibility(View.GONE); } + if(media.isCurrentlyPlaying()) { + holder.container.setBackgroundColor(playingBackGroundColor); + } else { + holder.container.setBackgroundColor(normalBackGroundColor); + } } else { holder.progress.setVisibility(View.GONE); holder.txtvDuration.setVisibility(View.GONE); @@ -175,7 +191,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR holder.butSecondary.setTag(item); holder.butSecondary.setOnClickListener(secondaryActionListener); - Glide.with(context) + Glide.with(mainActivityRef.get()) .load(item.getImageUri()) .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) .fitCenter() @@ -222,7 +238,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR TextView txtvPlaceholder = placeholder.get(); ImageView imgvCover = cover.get(); if(fallbackUri != null && txtvPlaceholder != null && imgvCover != null) { - Glide.with(context) + Glide.with(mainActivityRef.get()) .load(fallbackUri) .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) .fitCenter() @@ -253,6 +269,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR implements View.OnClickListener, View.OnCreateContextMenuListener, ItemTouchHelperViewHolder { + FrameLayout container; TextView placeholder; TextView title; TextView pubDate; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index c6c158943..1972e675e 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -11,6 +11,7 @@ import android.widget.Adapter; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -39,6 +40,9 @@ public class FeedItemlistAdapter extends BaseAdapter { public static final int SELECTION_NONE = -1; + private final int playingBackGroundColor; + private final int normalBackGroundColor; + public FeedItemlistAdapter(Context context, ItemAccess itemAccess, ActionButtonCallback callback, @@ -52,6 +56,9 @@ public class FeedItemlistAdapter extends BaseAdapter { this.selectedItemIndex = SELECTION_NONE; this.actionButtonUtils = new ActionButtonUtils(context); this.makePlayedItemsTransparent = makePlayedItemsTransparent; + + playingBackGroundColor = context.getResources().getColor(R.color.highlight_light); + normalBackGroundColor = context.getResources().getColor(android.R.color.transparent); } @Override @@ -80,6 +87,8 @@ public class FeedItemlistAdapter extends BaseAdapter { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.feeditemlist_item, parent, false); + holder.container = (LinearLayout) convertView + .findViewById(R.id.container); holder.title = (TextView) convertView .findViewById(R.id.txtvItemname); holder.lenSize = (TextView) convertView @@ -174,6 +183,14 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.type.setImageBitmap(null); holder.type.setVisibility(View.GONE); } + + if(media.isCurrentlyPlaying()) { + if(media.isCurrentlyPlaying()) { + holder.container.setBackgroundColor(playingBackGroundColor); + } else { + holder.container.setBackgroundColor(normalBackGroundColor); + } + } } boolean isInQueue = itemAccess.isInQueue(item); @@ -197,6 +214,7 @@ public class FeedItemlistAdapter extends BaseAdapter { }; static class Holder { + LinearLayout container; TextView title; TextView published; TextView lenSize; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java index 3326cc859..3e4dd4deb 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java @@ -15,6 +15,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ProgressBar; @@ -59,6 +60,9 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap private FeedItem selectedItem; + private final int playingBackGroundColor; + private final int normalBackGroundColor; + public QueueRecyclerAdapter(MainActivity mainActivity, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback, @@ -70,6 +74,13 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap this.actionButtonCallback = actionButtonCallback; this.itemTouchHelper = itemTouchHelper; locked = UserPreferences.isQueueLocked(); + + if(UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) { + playingBackGroundColor = mainActivity.getResources().getColor(R.color.highlight_dark); + } else { + playingBackGroundColor = mainActivity.getResources().getColor(R.color.highlight_light); + } + normalBackGroundColor = mainActivity.getResources().getColor(android.R.color.transparent); } public void setLocked(boolean locked) { @@ -105,6 +116,7 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap View.OnCreateContextMenuListener, ItemTouchHelperViewHolder { + private final FrameLayout container; private final ImageView dragHandle; private final TextView placeholder; private final ImageView cover; @@ -119,6 +131,7 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap public ViewHolder(View v) { super(v); + container = (FrameLayout) v.findViewById(R.id.container); dragHandle = (ImageView) v.findViewById(R.id.drag_handle); placeholder = (TextView) v.findViewById(R.id.txtvPlaceholder); cover = (ImageView) v.findViewById(R.id.imgvCover); @@ -246,6 +259,12 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap progressRight.setText(Converter.getDurationStringLong(media.getDuration())); progressBar.setVisibility(View.GONE); } + + if(media.isCurrentlyPlaying()) { + container.setBackgroundColor(playingBackGroundColor); + } else { + container.setBackgroundColor(normalBackGroundColor); + } } actionButtonUtils.configureActionButton(butSecondary, item, true); @@ -261,7 +280,6 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap .into(new CoverTarget(item.getFeed().getImageUri(), placeholder, cover)); } - } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java new file mode 100644 index 000000000..ed0db92a4 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java @@ -0,0 +1,136 @@ +package de.danoeh.antennapod.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.afollestad.materialdialogs.MaterialDialog; + +import java.lang.ref.WeakReference; +import java.util.concurrent.TimeUnit; + +import de.danoeh.antennapod.R; + +public class RatingDialog { + + private static final String TAG = RatingDialog.class.getSimpleName(); + private static final int AFTER_DAYS = 7; + + private static WeakReference<Context> mContext; + private static SharedPreferences mPreferences; + private static Dialog mDialog; + + private static final String PREFS_NAME = "RatingPrefs"; + private static final String KEY_RATED = "KEY_WAS_RATED"; + private static final String KEY_FIRST_START_DATE = "KEY_FIRST_HIT_DATE"; + + public static void init(Context context) { + mContext = new WeakReference<>(context); + mPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + + long firstDate = mPreferences.getLong(KEY_FIRST_START_DATE, 0); + if (firstDate == 0) { + resetStartDate(); + } + } + + public static void check() { + if (mDialog != null && mDialog.isShowing()) { + return; + } + if (shouldShow()) { + try { + mDialog = createDialog(); + if (mDialog != null) { + mDialog.show(); + } + } catch (Exception e) { + Log.e(TAG, Log.getStackTraceString(e)); + } + } + } + + public static void rateNow() { + Context context = mContext.get(); + if(context == null) { + return; + } + final String appPackage = "de.danoeh.antennapod"; + final Uri uri = Uri.parse("https://play.google.com/store/apps/details?id=" + appPackage); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + saveRated(); + } + + public static boolean rated() { + return mPreferences.getBoolean(KEY_RATED, false); + } + + public static void saveRated() { + mPreferences + .edit() + .putBoolean(KEY_RATED, true) + .apply(); + } + + private static void resetStartDate() { + mPreferences + .edit() + .putLong(KEY_FIRST_START_DATE, System.currentTimeMillis()) + .apply(); + } + + private static boolean shouldShow() { + if (rated()) { + return false; + } + + long now = System.currentTimeMillis(); + long firstDate = mPreferences.getLong(KEY_FIRST_START_DATE, now); + long diff = now - firstDate; + long diffDays = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); + if (diffDays >= AFTER_DAYS) { + return true; + } else { + return false; + } + } + + @Nullable + private static MaterialDialog createDialog() { + Context context = mContext.get(); + if(context == null) { + return null; + } + MaterialDialog dialog = new MaterialDialog.Builder(context) + .title(R.string.rating_title) + .content(R.string.rating_message) + .positiveText(R.string.rating_now_label) + .negativeText(R.string.rating_never_label) + .neutralText(R.string.rating_later_label) + .callback(new MaterialDialog.ButtonCallback() { + @Override + public void onPositive(MaterialDialog dialog) { + rateNow(); + } + + @Override + public void onNegative(MaterialDialog dialog) { + saveRated(); + } + + @Override + public void onNeutral(MaterialDialog dialog) { + resetStartDate(); + } + }) + .cancelListener(dialog1 -> resetStartDate()) + .build(); + return dialog; + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 422d56314..23b5be25a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -321,8 +321,9 @@ public class AllEpisodesFragment extends Fragment { private void onFragmentLoaded() { if (listAdapter == null) { - listAdapter = new AllEpisodesRecycleAdapter(activity.get(), activity.get(), itemAccess, - new DefaultActionButtonCallback(activity.get()), showOnlyNewEpisodes()); + MainActivity mainActivity = activity.get(); + listAdapter = new AllEpisodesRecycleAdapter(mainActivity, itemAccess, + new DefaultActionButtonCallback(mainActivity), showOnlyNewEpisodes()); recyclerView.setAdapter(listAdapter); } listAdapter.notifyDataSetChanged(); diff --git a/app/src/main/res/layout/feeditemlist_item.xml b/app/src/main/res/layout/feeditemlist_item.xml index 6b7c45978..d2b85e7df 100644 --- a/app/src/main/res/layout/feeditemlist_item.xml +++ b/app/src/main/res/layout/feeditemlist_item.xml @@ -1,14 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/container" android:layout_width="match_parent" android:layout_height="@dimen/listitem_threeline_height" android:orientation="horizontal" tools:background="@android:color/darker_gray"> <RelativeLayout - android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginLeft="@dimen/listitem_threeline_horizontalpadding" @@ -103,12 +104,10 @@ android:indeterminate="false" /> - - </RelativeLayout> <include layout="@layout/vertical_list_divider"/> <include layout="@layout/secondary_action"/> -</LinearLayout>
\ No newline at end of file +</LinearLayout> diff --git a/app/src/main/res/layout/new_episodes_listitem.xml b/app/src/main/res/layout/new_episodes_listitem.xml index 7a5652c45..cde1b4aa6 100644 --- a/app/src/main/res/layout/new_episodes_listitem.xml +++ b/app/src/main/res/layout/new_episodes_listitem.xml @@ -1,11 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<FrameLayout + android:id="@+id/container" + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:layout_height="wrap_content"> + +<LinearLayout + android:layout_width="match_parent" android:layout_height="@dimen/listitem_threeline_height" - android:orientation="horizontal" android:background="?attr/selectableItemBackground" + android:orientation="horizontal" tools:background="@android:color/darker_gray"> <RelativeLayout @@ -127,4 +133,6 @@ <include layout="@layout/secondary_action" /> -</LinearLayout>
\ No newline at end of file +</LinearLayout> + +</FrameLayout> diff --git a/app/src/main/res/layout/queue_listitem.xml b/app/src/main/res/layout/queue_listitem.xml index 8572f5e05..d950f11d2 100644 --- a/app/src/main/res/layout/queue_listitem.xml +++ b/app/src/main/res/layout/queue_listitem.xml @@ -1,14 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout +<FrameLayout + android:id="@+id/container" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:layout_height="wrap_content"> + +<LinearLayout + android:layout_width="match_parent" android:layout_height="@dimen/listitem_threeline_height" + android:background="?attr/selectableItemBackground" android:orientation="horizontal" android:paddingLeft="8dp" android:gravity="center_vertical" - android:background="?attr/selectableItemBackground" tools:background="@android:color/darker_gray" > <ImageView @@ -135,4 +140,6 @@ <include layout="@layout/secondary_action"/> -</LinearLayout>
\ No newline at end of file +</LinearLayout> + +</FrameLayout> |