Skip to content

Commit 5b5e39f

Browse files
Restore feedback fragment and refine contact support card
1 parent a1adc41 commit 5b5e39f

File tree

3 files changed

+98
-5
lines changed

3 files changed

+98
-5
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/help/HelpActivity.java

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@
88
import android.view.Menu;
99
import android.view.MenuItem;
1010
import android.view.View;
11+
import android.view.ViewGroup;
12+
import android.widget.FrameLayout;
1113
import androidx.annotation.NonNull;
14+
import androidx.annotation.Nullable;
1215
import androidx.annotation.StringRes;
1316
import androidx.appcompat.app.AlertDialog;
1417
import androidx.appcompat.widget.LinearLayoutCompat;
1518
import androidx.core.view.ViewCompat;
19+
import androidx.lifecycle.ViewModelProvider;
20+
import androidx.preference.Preference;
21+
import androidx.preference.PreferenceFragmentCompat;
22+
import androidx.recyclerview.widget.RecyclerView;
1623

1724
import com.d4rk.androidtutorials.java.BuildConfig;
1825
import com.d4rk.androidtutorials.java.R;
@@ -21,8 +28,10 @@
2128
import com.d4rk.androidtutorials.java.databinding.DialogVersionInfoBinding;
2229
import com.d4rk.androidtutorials.java.databinding.ItemHelpFaqBinding;
2330
import com.d4rk.androidtutorials.java.ui.components.navigation.BaseActivity;
31+
import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;
2432
import com.d4rk.androidtutorials.java.utils.OpenSourceLicensesUtils;
2533
import com.google.android.material.snackbar.Snackbar;
34+
import com.google.android.play.core.review.ReviewInfo;
2635

2736
import dagger.hilt.android.AndroidEntryPoint;
2837
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
@@ -34,6 +43,7 @@
3443
public class HelpActivity extends BaseActivity {
3544

3645
private ActivityHelpBinding binding;
46+
private HelpViewModel helpViewModel;
3747
private static final List<FaqItem> FAQ_ITEMS = Arrays.asList(
3848
new FaqItem(R.string.question_1, R.string.summary_preference_faq_1),
3949
new FaqItem(R.string.question_2, R.string.summary_preference_faq_2),
@@ -52,11 +62,18 @@ protected void onCreate(Bundle savedInstanceState) {
5262
binding = ActivityHelpBinding.inflate(getLayoutInflater());
5363
setContentView(binding.getRoot());
5464
AdUtils.loadBanner(binding.faqNativeAd);
65+
helpViewModel = new ViewModelProvider(this).get(HelpViewModel.class);
5566
new FastScrollerBuilder(binding.scrollView)
5667
.useMd2Style()
5768
.build();
5869
bindFaqItems(binding);
5970
setupContactSupportCard();
71+
72+
if (savedInstanceState == null) {
73+
getSupportFragmentManager().beginTransaction()
74+
.replace(R.id.frame_layout_feedback, new FeedbackFragment())
75+
.commit();
76+
}
6077
}
6178

6279
@Override
@@ -128,21 +145,25 @@ private void setupContactSupportCard() {
128145
}
129146

130147
private void openSupportEmail() {
131-
Intent intent = new Intent(Intent.ACTION_SENDTO);
132148
String supportEmail = getString(R.string.contact_support_email);
133-
intent.setData(Uri.parse("mailto:" + supportEmail));
149+
Intent intent = new Intent(Intent.ACTION_SENDTO);
150+
intent.setData(Uri.fromParts("mailto", supportEmail, null));
134151
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{supportEmail});
135152
intent.putExtra(Intent.EXTRA_SUBJECT,
136153
getString(R.string.contact_support_email_subject, getString(R.string.app_name)));
137154
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.contact_support_email_body));
138155

139-
try {
156+
if (intent.resolveActivity(getPackageManager()) != null) {
140157
startActivity(Intent.createChooser(intent, getString(R.string.contact_support_title)));
141-
} catch (ActivityNotFoundException e) {
158+
} else {
142159
Snackbar.make(binding.getRoot(), R.string.support_link_unavailable, Snackbar.LENGTH_SHORT).show();
143160
}
144161
}
145162

163+
public HelpViewModel getHelpViewModel() {
164+
return helpViewModel;
165+
}
166+
146167
private void bindFaqItems(ActivityHelpBinding binding) {
147168
LinearLayoutCompat faqList = binding.faqList;
148169
faqList.removeAllViews();
@@ -185,6 +206,73 @@ private void toggleFaqItem(ItemHelpFaqBinding binding) {
185206
ViewCompat.setStateDescription(binding.questionContainer, stateDescription);
186207
}
187208

209+
public static class FeedbackFragment extends PreferenceFragmentCompat {
210+
211+
@Override
212+
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
213+
setPreferencesFromResource(R.xml.preferences_feedback, rootKey);
214+
215+
Preference feedbackPreference = findPreference(getString(R.string.key_feedback));
216+
if (feedbackPreference != null) {
217+
feedbackPreference.setOnPreferenceClickListener(preference -> {
218+
if (requireActivity() instanceof HelpActivity helpActivity) {
219+
HelpViewModel vm = helpActivity.getHelpViewModel();
220+
221+
vm.requestReviewFlow(new HelpRepository.OnReviewInfoListener() {
222+
@Override
223+
public void onSuccess(ReviewInfo info) {
224+
vm.launchReviewFlow(helpActivity, info);
225+
}
226+
227+
@Override
228+
public void onFailure(Exception e) {
229+
launchGooglePlayReviews();
230+
}
231+
});
232+
}
233+
return true;
234+
});
235+
}
236+
}
237+
238+
@Override
239+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
240+
super.onViewCreated(view, savedInstanceState);
241+
RecyclerView listView = getListView();
242+
listView.setNestedScrollingEnabled(false);
243+
listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
244+
listView.setClipToPadding(false);
245+
246+
ViewGroup.LayoutParams layoutParams = listView.getLayoutParams();
247+
FrameLayout.LayoutParams frameLayoutParams;
248+
if (layoutParams instanceof FrameLayout.LayoutParams) {
249+
frameLayoutParams = (FrameLayout.LayoutParams) layoutParams;
250+
} else {
251+
frameLayoutParams = new FrameLayout.LayoutParams(
252+
ViewGroup.LayoutParams.MATCH_PARENT,
253+
ViewGroup.LayoutParams.WRAP_CONTENT
254+
);
255+
}
256+
frameLayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
257+
frameLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
258+
listView.setLayoutParams(frameLayoutParams);
259+
}
260+
261+
private void launchGooglePlayReviews() {
262+
Uri uri = Uri.parse("https://play.google.com/store/apps/details?id=" + requireActivity().getPackageName() + "&showAllReviews=true");
263+
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
264+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
265+
try {
266+
startActivity(intent);
267+
} catch (ActivityNotFoundException e) {
268+
Snackbar.make(requireView(),
269+
R.string.snack_unable_to_open_google_play_store,
270+
Snackbar.LENGTH_SHORT)
271+
.show();
272+
}
273+
}
274+
}
275+
188276
private static final class FaqItem {
189277
@StringRes
190278
private final int questionResId;

app/src/main/res/layout/activity_help.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@
125125

126126
</com.google.android.material.card.MaterialCardView>
127127

128+
<FrameLayout
129+
android:id="@+id/frame_layout_feedback"
130+
android:layout_width="match_parent"
131+
android:layout_height="wrap_content" />
132+
128133
</androidx.appcompat.widget.LinearLayoutCompat>
129134

130135
</me.zhanghai.android.fastscroll.FastScrollScrollView>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@
300300
<string name="send_feedback">Send feedback</string>
301301
<string name="contact_support_title">Contact support</string>
302302
<string name="contact_support_description">Share details to get help reaching your goal</string>
303-
<string name="contact_support_email">contact.mihaicristiancondrea@gmail.com</string>
303+
<string name="contact_support_email" translatable="false">contact.mihaicristiancondrea@gmail.com</string>
304304
<string name="contact_support_email_subject">Support request for %1$s</string>
305305
<string name="contact_support_email_body">Hi team,\n\nPlease describe your goal and any issues you are encountering so we can help.</string>
306306
<string name="license">License</string>

0 commit comments

Comments
 (0)