Skip to content

Commit fb71766

Browse files
committed
Add a link to Add-ons in the Settings
Add a button to open the Add-ons page from the Settings, since that is a pretty obvious place to find this functionality. To avoid messing up the layout of the honeycomb buttons, I've moved the "What's New" button closer to the version details. After some experimentation, I've placed two small buttons on the right side of the Settings window, linking to the Feedback and News pages. The background of the What's New button becomes highlighted when the details of the new version are available (this replaces the little blue dot that we had before). I have also simplified the implementation of the hidden shortcut to show the version details. Now it is just a matter of clicking on the app logo or the app name. Finally, I have also simplified the layout in the Settings window by removing an unneeded LinearLayout and using the parent ConstraintLayout instead.
1 parent 5e0f7a8 commit fb71766

File tree

5 files changed

+140
-125
lines changed

5 files changed

+140
-125
lines changed

app/src/common/shared/com/igalia/wolvic/ui/widgets/settings/SettingsWidget.java

+29-27
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@
1515
import android.text.Html;
1616
import android.util.AttributeSet;
1717
import android.util.Log;
18-
import android.view.GestureDetector;
18+
import android.util.Pair;
1919
import android.view.LayoutInflater;
20-
import android.view.MotionEvent;
2120
import android.view.View;
2221
import android.view.ViewGroup;
2322
import android.widget.FrameLayout;
@@ -42,6 +41,7 @@
4241
import com.igalia.wolvic.ui.widgets.UIWidget;
4342
import com.igalia.wolvic.ui.widgets.WidgetPlacement;
4443
import com.igalia.wolvic.ui.widgets.WindowWidget;
44+
import com.igalia.wolvic.ui.widgets.Windows;
4545
import com.igalia.wolvic.ui.widgets.dialogs.ClearUserDataDialogWidget;
4646
import com.igalia.wolvic.ui.widgets.dialogs.RestartDialogWidget;
4747
import com.igalia.wolvic.ui.widgets.dialogs.UIDialog;
@@ -74,22 +74,11 @@ public class SettingsWidget extends UIDialog implements SettingsView.Delegate {
7474
private SettingsView.SettingViewType mOpenDialog;
7575
private SettingsViewModel mSettingsViewModel;
7676
private boolean mAreMozillaAccountsDisabled;
77+
private final Pair<String, String> mVersionDetail = new Pair<>(
78+
"versionCode " + BuildConfig.VERSION_CODE,
79+
BuildConfig.GIT_HASH + " (AC " + Build.version + ")");
80+
private boolean mIsFirstVersionDetail;
7781

78-
class VersionGestureListener extends GestureDetector.SimpleOnGestureListener {
79-
80-
private boolean mIsHash;
81-
82-
@Override
83-
public boolean onDown (MotionEvent e) {
84-
mBinding.buildText.setText(mIsHash ?
85-
"versionCode " + BuildConfig.VERSION_CODE :
86-
BuildConfig.GIT_HASH + " (AC " + Build.version + ")");
87-
88-
mIsHash = !mIsHash;
89-
90-
return true;
91-
}
92-
}
9382

9483
public SettingsWidget(Context aContext) {
9584
super(aContext);
@@ -193,18 +182,19 @@ public void updateUI() {
193182
Html.FROM_HTML_MODE_LEGACY));
194183

195184
} catch (PackageManager.NameNotFoundException e) {
196-
e.printStackTrace();
185+
Log.e(LOGTAG, "Error when getting package info:" + e.getMessage());
186+
mBinding.versionText.setText(R.string.app_name);
197187
}
198188

199-
mBinding.buildText.setText("versionCode " + BuildConfig.VERSION_CODE);
189+
mIsFirstVersionDetail = false;
190+
mBinding.buildText.setText(mVersionDetail.first);
200191

201-
final GestureDetector gd = new GestureDetector(getContext(), new VersionGestureListener());
202-
mBinding.settingsMasthead.setOnTouchListener((view, motionEvent) -> {
203-
if (gd.onTouchEvent(motionEvent)) {
204-
return true;
205-
}
206-
return view.performClick();
207-
});
192+
OnClickListener updateVersionDetail = v -> {
193+
mIsFirstVersionDetail = !mIsFirstVersionDetail;
194+
mBinding.buildText.setText(mIsFirstVersionDetail ? mVersionDetail.first : mVersionDetail.second);
195+
};
196+
mBinding.ffLogoSettings.setOnClickListener(updateVersionDetail);
197+
mBinding.versionText.setOnClickListener(updateVersionDetail);
208198

209199
if (DeviceType.getStoreType() == DeviceType.StoreType.MAINLAND_CHINA) {
210200
mBinding.chinaLicenseNumber.setOnClickListener(v -> {
@@ -225,6 +215,14 @@ public void updateUI() {
225215
});
226216
}
227217

218+
mBinding.addonsButton.setOnClickListener(view -> {
219+
if (mAudio != null) {
220+
mAudio.playSound(AudioEngine.Sound.CLICK);
221+
}
222+
mWidgetManager.getFocusedWindow().showPanel(Windows.ContentType.ADDONS);
223+
onDismiss();
224+
});
225+
228226
mBinding.helpButton.setOnClickListener(view -> {
229227
if (mAudio != null) {
230228
mAudio.playSound(AudioEngine.Sound.CLICK);
@@ -264,9 +262,13 @@ public void updateUI() {
264262

265263
SettingsStore.getInstance(getContext()).setRemotePropsVersionName(BuildConfig.VERSION_NAME);
266264
RemoteProperties props = mSettingsViewModel.getProps().getValue().get(BuildConfig.VERSION_NAME);
265+
String whatsNewUrl;
267266
if (props != null) {
268-
mWidgetManager.openNewTabForeground(props.getWhatsNewUrl());
267+
whatsNewUrl = props.getWhatsNewUrl();
268+
} else {
269+
whatsNewUrl = getContext().getString(R.string.home_page_url);
269270
}
271+
mWidgetManager.openNewTabForeground(whatsNewUrl);
270272
onDismiss();
271273
});
272274

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

+93-98
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<layout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto">
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools">
45

56
<data>
67
<variable
@@ -28,90 +29,98 @@
2829
android:layout_marginTop="50dp"
2930
android:src="@drawable/ic_icon_back"
3031
android:drawableTint="@color/fog_void_tint"
31-
android:tint="@color/fog_void_tint"
3232
android:background="@drawable/media_button"
3333
app:layout_constraintStart_toStartOf="parent"
3434
app:layout_constraintTop_toTopOf="parent" />
3535

36-
<LinearLayout
37-
android:id="@+id/settingsMasthead"
36+
<ImageView
37+
android:id="@+id/ff_logo_settings"
38+
android:layout_width="130dp"
39+
android:layout_height="84dp"
40+
android:layout_gravity="center"
41+
android:layout_marginTop="23dp"
42+
android:clickable="true"
43+
android:scaleType="fitCenter"
44+
android:src="@drawable/ff_logo"
45+
app:layout_constraintEnd_toEndOf="parent"
46+
app:layout_constraintStart_toStartOf="parent"
47+
app:layout_constraintTop_toTopOf="parent" />
48+
49+
<TextView
50+
android:id="@+id/versionText"
3851
android:layout_width="wrap_content"
3952
android:layout_height="wrap_content"
40-
android:layout_gravity="center_horizontal"
41-
android:layout_marginTop="23dp"
4253
android:clickable="true"
43-
android:contextClickable="false"
44-
android:focusable="true"
45-
android:gravity="center_horizontal"
46-
android:orientation="vertical"
47-
android:contentDescription="Wolvic logo"
54+
android:fontFamily="sans-serif"
55+
android:gravity="center"
56+
android:minHeight="@dimen/settings_outline_button_height"
57+
android:text="@string/app_name"
58+
android:textColor="@color/white"
59+
android:textSize="@dimen/text_big_size"
4860
app:layout_constraintEnd_toEndOf="parent"
4961
app:layout_constraintStart_toStartOf="parent"
50-
app:layout_constraintTop_toTopOf="parent">
51-
52-
<ImageView
53-
android:id="@+id/ff_logo_settings"
54-
android:layout_width="130dp"
55-
android:layout_height="84dp"
56-
android:layout_gravity="center"
57-
android:clickable="false"
58-
android:scaleType="fitCenter"
59-
android:src="@drawable/ff_logo" />
60-
61-
<TextView
62-
android:id="@+id/versionText"
63-
android:layout_width="wrap_content"
64-
android:layout_height="wrap_content"
65-
android:layout_marginTop="5dp"
66-
android:clickable="false"
67-
android:fontFamily="sans-serif"
68-
android:gravity="center"
69-
android:textColor="@color/white"
70-
android:text="@string/app_name"
71-
android:textSize="@dimen/text_big_size" />
72-
73-
<TextView
74-
android:id="@+id/surveyLink"
75-
android:layout_width="wrap_content"
76-
android:layout_height="wrap_content"
77-
android:clickable="false"
78-
android:fontFamily="sans-serif"
79-
android:gravity="center"
80-
android:text="@string/settings_send_your_feedback"
81-
android:textColorHighlight="@android:color/transparent"
82-
android:textColorLink="@color/azure"
83-
android:textColor="@color/azure"
84-
android:autoLink="all"
85-
android:textStyle="bold"
86-
android:textSize="@dimen/text_smaller_size"
87-
app:visibleGone="@{DeviceType.getStoreType() != DeviceType.StoreType.MAINLAND_CHINA}" />
88-
89-
<TextView
90-
android:id="@+id/chinaLicenseNumber"
91-
android:layout_width="wrap_content"
92-
android:layout_height="wrap_content"
93-
android:clickable="false"
94-
android:fontFamily="sans-serif"
95-
android:gravity="center"
96-
android:text="@string/rCN_license_number"
97-
android:textColor="@color/azure"
98-
android:textColorHighlight="@android:color/transparent"
99-
android:textColorLink="@color/azure"
100-
android:textSize="@dimen/text_medium_size"
101-
android:textStyle="bold"
102-
app:visibleGone="@{DeviceType.getStoreType() == DeviceType.StoreType.MAINLAND_CHINA}" />
103-
104-
<TextView
105-
android:id="@+id/buildText"
106-
android:layout_width="wrap_content"
107-
android:layout_height="wrap_content"
108-
android:clickable="false"
109-
android:fontFamily="sans-serif"
110-
android:gravity="center"
111-
android:text="@string/settings_version_developer"
112-
android:textColor="@color/white"
113-
android:textSize="@dimen/text_smaller_size" />
114-
</LinearLayout>
62+
app:layout_constraintTop_toBottomOf="@id/ff_logo_settings" />
63+
64+
<TextView
65+
android:id="@+id/chinaLicenseNumber"
66+
android:layout_width="wrap_content"
67+
android:layout_height="wrap_content"
68+
android:clickable="false"
69+
android:fontFamily="sans-serif"
70+
android:gravity="center"
71+
android:text="@string/rCN_license_number"
72+
android:textColor="@color/azure"
73+
android:textColorHighlight="@android:color/transparent"
74+
android:textColorLink="@color/azure"
75+
android:textSize="@dimen/text_medium_size"
76+
android:textStyle="bold"
77+
android:visibility="gone"
78+
app:layout_constraintEnd_toEndOf="parent"
79+
app:layout_constraintStart_toStartOf="parent"
80+
app:layout_constraintTop_toBottomOf="@id/versionText"
81+
app:visibleGone="@{DeviceType.getStoreType() == DeviceType.StoreType.MAINLAND_CHINA}"
82+
tools:text="(China license number)" />
83+
84+
<com.google.android.material.button.MaterialButton
85+
android:id="@+id/surveyLink"
86+
style="@style/SettingsLinkButtonStyle"
87+
android:src="@drawable/baseline_contact_support_24"
88+
android:text="@string/settings_send_your_feedback"
89+
android:theme="@style/FxR.Dark"
90+
app:icon="@drawable/baseline_contact_support_24"
91+
app:layout_constraintEnd_toEndOf="@id/scrollView2"
92+
app:layout_constraintBottom_toBottomOf="@id/whatsNewButton"
93+
app:visibleGone="@{DeviceType.getStoreType() != DeviceType.StoreType.MAINLAND_CHINA}" />
94+
95+
<TextView
96+
android:id="@+id/buildText"
97+
android:layout_width="wrap_content"
98+
android:layout_height="wrap_content"
99+
android:clickable="false"
100+
android:fontFamily="sans-serif"
101+
android:gravity="center"
102+
android:minHeight="@dimen/settings_outline_button_height"
103+
android:text="@string/settings_version_developer"
104+
android:textColor="@color/white"
105+
android:textSize="@dimen/text_smaller_size"
106+
app:layout_constraintEnd_toEndOf="parent"
107+
app:layout_constraintStart_toStartOf="parent"
108+
app:layout_constraintTop_toBottomOf="@id/chinaLicenseNumber" />
109+
110+
<com.google.android.material.button.MaterialButton
111+
android:id="@+id/whatsNewButton"
112+
style="@style/SettingsLinkButtonStyle"
113+
android:layout_marginStart="8dp"
114+
android:layout_marginBottom="8dp"
115+
android:backgroundTint="@{settingsmodel.isWhatsNewVisible?@color/azure:@color/asphalt}"
116+
android:src="@drawable/ic_whats_new"
117+
android:text="@string/settings_whats_new"
118+
android:theme="@style/FxR.Dark"
119+
android:layout_marginTop="10dp"
120+
app:icon="@drawable/ic_whats_new"
121+
app:layout_constraintEnd_toEndOf="@id/ff_logo_settings"
122+
app:layout_constraintStart_toStartOf="@id/ff_logo_settings"
123+
app:layout_constraintTop_toBottomOf="@id/scrollView2" />
115124

116125
<ScrollView
117126
android:id="@+id/scrollView2"
@@ -124,7 +133,7 @@
124133
android:scrollbars="none"
125134
app:layout_constraintEnd_toEndOf="parent"
126135
app:layout_constraintStart_toStartOf="parent"
127-
app:layout_constraintTop_toBottomOf="@+id/settingsMasthead">
136+
app:layout_constraintTop_toBottomOf="@id/buildText">
128137

129138
<HorizontalScrollView
130139
android:layout_width="wrap_content"
@@ -207,33 +216,19 @@
207216
app:honeycombButtonText="@string/settings_controller_options"
208217
app:honeycombButtonTextSize="@dimen/settings_main_button_text_width" />
209218

219+
<com.igalia.wolvic.ui.views.HoneycombButton
220+
android:id="@+id/addonsButton"
221+
style="?attr/honeycombButtonStyle"
222+
app:honeycombButtonIcon="@drawable/ic_icon_addons"
223+
app:honeycombButtonText="@string/url_addons_title"
224+
app:honeycombButtonTextSize="@dimen/settings_main_button_text_width" />
225+
210226
<com.igalia.wolvic.ui.views.HoneycombButton
211227
android:id="@+id/helpButton"
212228
style="?attr/honeycombButtonStyle"
213229
app:honeycombButtonIcon="@drawable/ic_settings_help"
214230
app:honeycombButtonText="@string/settings_help"
215231
app:honeycombButtonTextSize="@dimen/settings_main_button_text_width" />
216-
217-
<RelativeLayout
218-
android:layout_width="136dp"
219-
android:layout_height="136dp"
220-
android:layout_marginEnd="-10dp">
221-
<com.igalia.wolvic.ui.views.HoneycombButton
222-
android:id="@+id/whatsNewButton"
223-
style="?attr/honeycombButtonStyle"
224-
app:honeycombButtonIcon="@drawable/ic_whats_new"
225-
app:honeycombButtonText="@string/settings_whats_new"
226-
app:honeycombButtonTextSize="@dimen/settings_main_button_text_width" />
227-
<com.google.android.material.textview.MaterialTextView
228-
android:layout_width="6dp"
229-
android:layout_height="6dp"
230-
android:layout_marginTop="48dp"
231-
android:layout_marginEnd="58dp"
232-
android:layout_alignParentTop="true"
233-
android:layout_alignParentEnd="true"
234-
android:background="@drawable/downloads_badge"
235-
app:visibleGone="@{settingsmodel.isWhatsNewVisible}"/>
236-
</RelativeLayout>
237232
</LinearLayout>
238233
</RelativeLayout>
239234
</HorizontalScrollView>

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

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
<dimen name="settings_width">680dp</dimen>
7676
<dimen name="settings_height">490dp</dimen>
7777
<dimen name="settings_main_button_text_width">125dp</dimen>
78+
<dimen name="settings_outline_button_height">24dp</dimen>
7879

7980
<!-- Lang Selector -->
8081
<dimen name="lang_selector_narrow_col_item_width">100dp</dimen>

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

+3
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,9 @@
225225
<string name="keyboard_nl_NL_popup_u" translatable="false">uúüûùūůų</string>
226226
<string name="keyboard_nl_NL_popup_i" translatable="false">ìíiïîįī</string>
227227

228+
<!-- Homepage link -->
229+
<string name="home_page_url" translatable="false">https://wolvic.com/</string>
230+
228231
<!-- Settings Survey link -->
229232
<string name="feedback_link" translatable="false">https://wolvic.com/en/feedback/index.html?version=%1$s&amp;device=%2$d</string>
230233

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

+14
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,20 @@
305305
<item name="android:clickable">true</item>
306306
</style>
307307

308+
<style name="SettingsLinkButtonStyle" parent="Widget.Material3.Button.Icon">
309+
<item name="android:insetBottom">0dp</item>
310+
<item name="android:insetTop">0dp</item>
311+
<item name="android:layout_height">@dimen/settings_outline_button_height</item>
312+
<item name="android:layout_width">wrap_content</item>
313+
<item name="android:minWidth">116dp</item>
314+
<item name="android:paddingBottom">0dp</item>
315+
<item name="android:paddingTop">0dp</item>
316+
<item name="android:textAllCaps">false</item>
317+
<item name="android:textSize">@dimen/text_smaller_size</item>
318+
<item name="iconSize">14dp</item>
319+
<item name="textAllCaps">false</item>
320+
</style>
321+
308322
<style name="tabsButton">
309323
<item name="android:layout_width">wrap_content</item>
310324
<item name="android:layout_height">wrap_content</item>

0 commit comments

Comments
 (0)