Skip to content

Commit a1adc41

Browse files
Revamp help contact section with support card
1 parent ac30a5f commit a1adc41

File tree

4 files changed

+97
-86
lines changed

4 files changed

+97
-86
lines changed

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

Lines changed: 18 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,11 @@
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;
13-
14-
import androidx.annotation.Nullable;
1511
import androidx.annotation.NonNull;
1612
import androidx.annotation.StringRes;
1713
import androidx.appcompat.app.AlertDialog;
1814
import androidx.appcompat.widget.LinearLayoutCompat;
1915
import androidx.core.view.ViewCompat;
20-
import androidx.lifecycle.ViewModelProvider;
21-
import androidx.preference.Preference;
22-
import androidx.preference.PreferenceFragmentCompat;
23-
import androidx.recyclerview.widget.RecyclerView;
2416

2517
import com.d4rk.androidtutorials.java.BuildConfig;
2618
import com.d4rk.androidtutorials.java.R;
@@ -29,10 +21,8 @@
2921
import com.d4rk.androidtutorials.java.databinding.DialogVersionInfoBinding;
3022
import com.d4rk.androidtutorials.java.databinding.ItemHelpFaqBinding;
3123
import com.d4rk.androidtutorials.java.ui.components.navigation.BaseActivity;
32-
import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;
3324
import com.d4rk.androidtutorials.java.utils.OpenSourceLicensesUtils;
3425
import com.google.android.material.snackbar.Snackbar;
35-
import com.google.android.play.core.review.ReviewInfo;
3626

3727
import dagger.hilt.android.AndroidEntryPoint;
3828
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
@@ -43,7 +33,7 @@
4333
@AndroidEntryPoint
4434
public class HelpActivity extends BaseActivity {
4535

46-
private HelpViewModel helpViewModel;
36+
private ActivityHelpBinding binding;
4737
private static final List<FaqItem> FAQ_ITEMS = Arrays.asList(
4838
new FaqItem(R.string.question_1, R.string.summary_preference_faq_1),
4939
new FaqItem(R.string.question_2, R.string.summary_preference_faq_2),
@@ -59,22 +49,14 @@ public class HelpActivity extends BaseActivity {
5949
@Override
6050
protected void onCreate(Bundle savedInstanceState) {
6151
super.onCreate(savedInstanceState);
62-
ActivityHelpBinding binding = ActivityHelpBinding.inflate(getLayoutInflater());
52+
binding = ActivityHelpBinding.inflate(getLayoutInflater());
6353
setContentView(binding.getRoot());
6454
AdUtils.loadBanner(binding.faqNativeAd);
65-
helpViewModel = new ViewModelProvider(this).get(HelpViewModel.class);
6655
new FastScrollerBuilder(binding.scrollView)
6756
.useMd2Style()
6857
.build();
6958
bindFaqItems(binding);
70-
71-
getSupportFragmentManager().beginTransaction()
72-
.replace(R.id.frame_layout_feedback, new FeedbackFragment())
73-
.commit();
74-
}
75-
76-
public HelpViewModel getHelpViewModel() {
77-
return helpViewModel;
59+
setupContactSupportCard();
7860
}
7961

8062
@Override
@@ -141,70 +123,23 @@ private void openLink(String url) {
141123
startActivity(browserIntent);
142124
}
143125

144-
public static class FeedbackFragment extends PreferenceFragmentCompat {
145-
146-
@Override
147-
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
148-
setPreferencesFromResource(R.xml.preferences_feedback, rootKey);
149-
150-
Preference feedbackPreference = findPreference(getString(R.string.key_feedback));
151-
if (feedbackPreference != null) {
152-
feedbackPreference.setOnPreferenceClickListener(preference -> {
153-
if (requireActivity() instanceof HelpActivity helpActivity) {
154-
HelpViewModel vm = helpActivity.getHelpViewModel();
155-
156-
vm.requestReviewFlow(new HelpRepository.OnReviewInfoListener() {
157-
@Override
158-
public void onSuccess(ReviewInfo info) {
159-
vm.launchReviewFlow(helpActivity, info);
160-
}
161-
162-
@Override
163-
public void onFailure(Exception e) {
164-
launchGooglePlayReviews();
165-
}
166-
});
167-
}
168-
return true;
169-
});
170-
}
171-
}
172-
173-
@Override
174-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
175-
super.onViewCreated(view, savedInstanceState);
176-
RecyclerView listView = getListView();
177-
listView.setNestedScrollingEnabled(false);
178-
listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
179-
listView.setClipToPadding(false);
126+
private void setupContactSupportCard() {
127+
binding.contactSupportCard.setOnClickListener(v -> openSupportEmail());
128+
}
180129

181-
ViewGroup.LayoutParams layoutParams = listView.getLayoutParams();
182-
FrameLayout.LayoutParams frameLayoutParams;
183-
if (layoutParams instanceof FrameLayout.LayoutParams) {
184-
frameLayoutParams = (FrameLayout.LayoutParams) layoutParams;
185-
} else {
186-
frameLayoutParams = new FrameLayout.LayoutParams(
187-
ViewGroup.LayoutParams.MATCH_PARENT,
188-
ViewGroup.LayoutParams.WRAP_CONTENT
189-
);
190-
}
191-
frameLayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
192-
frameLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
193-
listView.setLayoutParams(frameLayoutParams);
194-
}
130+
private void openSupportEmail() {
131+
Intent intent = new Intent(Intent.ACTION_SENDTO);
132+
String supportEmail = getString(R.string.contact_support_email);
133+
intent.setData(Uri.parse("mailto:" + supportEmail));
134+
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{supportEmail});
135+
intent.putExtra(Intent.EXTRA_SUBJECT,
136+
getString(R.string.contact_support_email_subject, getString(R.string.app_name)));
137+
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.contact_support_email_body));
195138

196-
private void launchGooglePlayReviews() {
197-
Uri uri = Uri.parse("https://play.google.com/store/apps/details?id=" + requireActivity().getPackageName() + "&showAllReviews=true");
198-
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
199-
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
200-
try {
201-
startActivity(intent);
202-
} catch (ActivityNotFoundException e) {
203-
Snackbar.make(requireView(),
204-
R.string.snack_unable_to_open_google_play_store,
205-
Snackbar.LENGTH_SHORT)
206-
.show();
207-
}
139+
try {
140+
startActivity(Intent.createChooser(intent, getString(R.string.contact_support_title)));
141+
} catch (ActivityNotFoundException e) {
142+
Snackbar.make(binding.getRoot(), R.string.support_link_unavailable, Snackbar.LENGTH_SHORT).show();
208143
}
209144
}
210145

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:shape="oval">
4+
<solid android:color="?attr/colorSecondaryContainer" />
5+
</shape>

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

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,76 @@
5454
android:layout_marginBottom="24dp"
5555
app:nativeAdLayout="@layout/ad_help" />
5656

57-
<FrameLayout
58-
android:id="@+id/frame_layout_feedback"
57+
<com.google.android.material.card.MaterialCardView
58+
android:id="@+id/contact_support_card"
59+
style="@style/Widget.Material3.CardView.Filled"
5960
android:layout_width="match_parent"
60-
android:layout_height="wrap_content" />
61+
android:layout_height="wrap_content"
62+
android:layout_marginBottom="16dp"
63+
android:clickable="true"
64+
android:focusable="true"
65+
android:foreground="?attr/selectableItemBackground"
66+
app:cardBackgroundColor="?attr/colorSurfaceVariant"
67+
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardView">
68+
69+
<androidx.appcompat.widget.LinearLayoutCompat
70+
android:layout_width="match_parent"
71+
android:layout_height="wrap_content"
72+
android:gravity="center_vertical"
73+
android:orientation="horizontal"
74+
android:paddingStart="20dp"
75+
android:paddingTop="20dp"
76+
android:paddingEnd="20dp"
77+
android:paddingBottom="20dp">
78+
79+
<FrameLayout
80+
android:layout_width="48dp"
81+
android:layout_height="48dp"
82+
android:background="@drawable/bg_contact_support_icon"
83+
android:padding="12dp">
84+
85+
<androidx.appcompat.widget.AppCompatImageView
86+
android:layout_width="match_parent"
87+
android:layout_height="match_parent"
88+
android:contentDescription="@null"
89+
android:src="@drawable/ic_feedback" />
90+
91+
</FrameLayout>
92+
93+
<androidx.appcompat.widget.LinearLayoutCompat
94+
android:layout_width="0dp"
95+
android:layout_height="wrap_content"
96+
android:layout_marginStart="16dp"
97+
android:layout_weight="1"
98+
android:orientation="vertical">
99+
100+
<com.google.android.material.textview.MaterialTextView
101+
android:id="@+id/contact_support_title"
102+
android:layout_width="wrap_content"
103+
android:layout_height="wrap_content"
104+
android:text="@string/contact_support_title"
105+
android:textAppearance="@style/TextAppearance.Material3.TitleMedium" />
106+
107+
<com.google.android.material.textview.MaterialTextView
108+
android:id="@+id/contact_support_description"
109+
android:layout_width="wrap_content"
110+
android:layout_height="wrap_content"
111+
android:layout_marginTop="4dp"
112+
android:text="@string/contact_support_description"
113+
android:textAppearance="@style/TextAppearance.Material3.BodyMedium" />
114+
115+
</androidx.appcompat.widget.LinearLayoutCompat>
116+
117+
<androidx.appcompat.widget.AppCompatImageView
118+
android:layout_width="wrap_content"
119+
android:layout_height="wrap_content"
120+
android:contentDescription="@null"
121+
android:src="@drawable/ic_arrow_forward"
122+
android:tint="?attr/colorOnSurfaceVariant" />
123+
124+
</androidx.appcompat.widget.LinearLayoutCompat>
125+
126+
</com.google.android.material.card.MaterialCardView>
61127

62128
</androidx.appcompat.widget.LinearLayoutCompat>
63129

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,11 @@
298298
<string name="help">Help</string>
299299
<string name="faq">FAQs</string>
300300
<string name="send_feedback">Send feedback</string>
301+
<string name="contact_support_title">Contact support</string>
302+
<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>
304+
<string name="contact_support_email_subject">Support request for %1$s</string>
305+
<string name="contact_support_email_body">Hi team,\n\nPlease describe your goal and any issues you are encountering so we can help.</string>
301306
<string name="license">License</string>
302307
<string name="share">Share</string>
303308
<string name="share_subject">Try it now</string>

0 commit comments

Comments
 (0)