From ce82a81f0ef005be8a5990145c49d3b153d76172 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 14 Mar 2017 19:24:38 +0100 Subject: [PATCH] Fixed view media fragment behaviour, reblogs/favs of reblogs --- .../tusky/MyFirebaseMessagingService.java | 28 ++++++++----- .../com/keylesspalace/tusky/SFragment.java | 41 +++++++++++-------- .../tusky/ViewMediaFragment.java | 31 ++++++++++---- .../main/res/layout/fragment_view_media.xml | 7 ++-- app/src/main/res/values/styles.xml | 5 +++ 5 files changed, 75 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java b/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java index 3449f3f9..9455a805 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java +++ b/app/src/main/java/com/keylesspalace/tusky/MyFirebaseMessagingService.java @@ -166,17 +166,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { builder.setLargeIcon(bitmap); - if (preferences.getBoolean("notificationAlertSound", true)) { - builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); - } - - if (preferences.getBoolean("notificationStyleVibrate", false)) { - builder.setVibrate(new long[] { 500, 500 }); - } - - if (preferences.getBoolean("notificationStyleLight", false)) { - builder.setLights(0xFF00FF8F, 300, 1000); - } + setupPreferences(preferences, builder); ((NotificationManager) (getSystemService(NOTIFICATION_SERVICE))).notify(NOTIFY_ID, builder.build()); } @@ -198,6 +188,8 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { .transform(new RoundedTransformation(7, 0)) .into(mTarget); } else { + setupPreferences(preferences, builder); + try { builder.setContentTitle(String.format(getString(R.string.notification_title_summary), currentNotifications.length())) .setContentText(truncateWithEllipses(joinNames(currentNotifications), 40)); @@ -214,6 +206,20 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService { ((NotificationManager) (getSystemService(NOTIFICATION_SERVICE))).notify(NOTIFY_ID, builder.build()); } + private void setupPreferences(SharedPreferences preferences, NotificationCompat.Builder builder) { + if (preferences.getBoolean("notificationAlertSound", true)) { + builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); + } + + if (preferences.getBoolean("notificationStyleVibrate", false)) { + builder.setVibrate(new long[] { 500, 500 }); + } + + if (preferences.getBoolean("notificationStyleLight", false)) { + builder.setLights(0xFF00FF8F, 300, 1000); + } + } + private String joinNames(JSONArray array) throws JSONException { if (array.length() > 3) { return String.format(getString(R.string.notification_summary_large), array.get(0), array.get(1), array.get(2), array.length() - 3); diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index 10e5864d..976797c8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -20,8 +20,9 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.text.Spanned; @@ -47,7 +48,6 @@ import retrofit2.Callback; public class SFragment extends Fragment { protected String loggedInAccountId; protected String loggedInUsername; - private MastodonAPI api; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -57,7 +57,10 @@ public class SFragment extends Fragment { getString(R.string.preferences_file_key), Context.MODE_PRIVATE); loggedInAccountId = preferences.getString("loggedInAccountId", null); loggedInUsername = preferences.getString("loggedInAccountUsername", null); - api = ((BaseActivity) getActivity()).mastodonAPI; + } + + public MastodonAPI getApi() { + return ((BaseActivity) getActivity()).mastodonAPI; } protected void reply(Status status) { @@ -85,6 +88,11 @@ public class SFragment extends Fragment { public void onResponse(Call call, retrofit2.Response response) { if (response.isSuccessful()) { status.reblogged = reblog; + + if (status.reblog != null) { + status.reblog.reblogged = reblog; + } + adapter.notifyItemChanged(position); } } @@ -96,9 +104,9 @@ public class SFragment extends Fragment { }; if (reblog) { - api.reblogStatus(id).enqueue(cb); + getApi().reblogStatus(id).enqueue(cb); } else { - api.unreblogStatus(id).enqueue(cb); + getApi().unreblogStatus(id).enqueue(cb); } } @@ -111,6 +119,11 @@ public class SFragment extends Fragment { public void onResponse(Call call, retrofit2.Response response) { if (response.isSuccessful()) { status.favourited = favourite; + + if (status.reblog != null) { + status.reblog.favourited = favourite; + } + adapter.notifyItemChanged(position); } } @@ -122,14 +135,14 @@ public class SFragment extends Fragment { }; if (favourite) { - api.favouriteStatus(id).enqueue(cb); + getApi().favouriteStatus(id).enqueue(cb); } else { - api.unfavouriteStatus(id).enqueue(cb); + getApi().unfavouriteStatus(id).enqueue(cb); } } private void block(String id) { - api.blockAccount(id).enqueue(new Callback() { + getApi().blockAccount(id).enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) { @@ -143,7 +156,7 @@ public class SFragment extends Fragment { } private void delete(String id) { - api.deleteStatus(id).enqueue(new Callback() { + getApi().deleteStatus(id).enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) { @@ -206,13 +219,9 @@ public class SFragment extends Fragment { protected void viewMedia(String url, Status.MediaAttachment.Type type) { switch (type) { case IMAGE: { - Fragment newFragment = ViewMediaFragment.newInstance(url); - - FragmentManager manager = getFragmentManager(); - manager.beginTransaction() - .add(R.id.overlay_fragment_container, newFragment) - .addToBackStack(null) - .commit(); + DialogFragment newFragment = ViewMediaFragment.newInstance(url); + FragmentTransaction ft = getFragmentManager().beginTransaction(); + newFragment.show(ft, "view_media"); break; } case GIFV: diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java index dd17c131..433bdf27 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/ViewMediaFragment.java @@ -16,21 +16,27 @@ package com.keylesspalace.tusky; import android.os.Bundle; -import android.support.v4.app.Fragment; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; +import butterknife.BindView; +import butterknife.ButterKnife; import uk.co.senab.photoview.PhotoView; import uk.co.senab.photoview.PhotoViewAttacher; -public class ViewMediaFragment extends Fragment { +public class ViewMediaFragment extends DialogFragment { private PhotoViewAttacher attacher; + @BindView(R.id.view_media_image) PhotoView photoView; + public static ViewMediaFragment newInstance(String url) { Bundle arguments = new Bundle(); ViewMediaFragment fragment = new ViewMediaFragment(); @@ -39,14 +45,29 @@ public class ViewMediaFragment extends Fragment { return fragment; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setStyle(DialogFragment.STYLE_NORMAL, R.style.Dialog_FullScreen); + } + + @Override + public void onResume() { + ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes(); + params.width = WindowManager.LayoutParams.MATCH_PARENT; + params.height = WindowManager.LayoutParams.MATCH_PARENT; + getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); + super.onResume(); + } + @Override public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_view_media, container, false); + ButterKnife.bind(this, rootView); Bundle arguments = getArguments(); String url = arguments.getString("url"); - PhotoView photoView = (PhotoView) rootView.findViewById(R.id.view_media_image); attacher = new PhotoViewAttacher(photoView); @@ -84,8 +105,4 @@ public class ViewMediaFragment extends Fragment { attacher.cleanup(); super.onDestroyView(); } - - private void dismiss() { - getFragmentManager().popBackStack(); - } } diff --git a/app/src/main/res/layout/fragment_view_media.xml b/app/src/main/res/layout/fragment_view_media.xml index d3b84def..ea1918fc 100644 --- a/app/src/main/res/layout/fragment_view_media.xml +++ b/app/src/main/res/layout/fragment_view_media.xml @@ -1,11 +1,12 @@ - + android:layout_gravity="center" + android:background="@android:color/black"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4e651e20..e3855284 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -92,6 +92,11 @@ true + +