released 3.0.0

This commit is contained in:
Kosh 2017-06-04 21:52:55 +08:00
parent b27e6abbd5
commit fb96c4f333
15 changed files with 171 additions and 140 deletions

View File

@ -61,11 +61,14 @@ public class ColorsProvider {
}
@NonNull public static ArrayList<String> languages() {
return Stream.of(colors)
ArrayList<String> lang = new ArrayList<>();
lang.add("All Language");
lang.addAll(Stream.of(colors)
.filter(value -> value != null && !InputHelper.isEmpty(value.getKey()))
.map(Map.Entry::getKey)
.sortBy(s -> !popularLanguages.contains(s))
.collect(Collectors.toCollection(ArrayList::new));
.collect(Collectors.toCollection(ArrayList::new)));
return lang;
}
@Nullable public static LanguageColorModel getColor(@NonNull String lang) {

View File

@ -11,7 +11,6 @@ import com.fastaccess.R;
import com.fastaccess.data.dao.PayloadModel;
import com.fastaccess.data.dao.model.Event;
import com.fastaccess.data.dao.types.EventsType;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.provider.markdown.MarkDownProvider;
import com.fastaccess.ui.widgets.AvatarLayout;
@ -82,12 +81,13 @@ public class FeedsViewHolder extends BaseViewHolder<Event> {
spannableBuilder.bold(action != null ? action.toLowerCase() : "")
.append(eventsModel.getPayload() != null && eventsModel.getPayload().getAction() != null ? " " : "");
if (type != EventsType.WatchEvent) {
if (type == EventsType.CreateEvent && !InputHelper.isEmpty(eventsModel.getPayload().getRef())) {
if (type == EventsType.CreateEvent && eventsModel.getPayload() != null && eventsModel.getPayload().getRefType() != null) {
spannableBuilder
.bold(itemView.getResources().getString(type.getType()).toLowerCase())
.append(" ")
.bold(eventsModel.getPayload().getRefType())
.append(" ")
.append(eventsModel.getPayload().getRef() != null ? eventsModel.getPayload().getRef() + " " : "")
.append(in)
.append(" ");
} else if ((type == EventsType.PushEvent || type == EventsType.DeleteEvent) && eventsModel.getPayload() != null) {

View File

@ -10,6 +10,7 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.BundleConstant;
@ -22,7 +23,6 @@ import com.fastaccess.ui.widgets.StateLayout;
import com.prettifier.pretty.PrettifyWebView;
import butterknife.BindView;
import com.evernote.android.state.State;
/**
* Created by Kosh on 28 Nov 2016, 9:27 PM
@ -143,7 +143,7 @@ public class ViewerFragment extends BaseFragment<ViewerMvp.View, ViewerPresenter
getPresenter().onHandleIntent(getArguments());
} else {
if (getPresenter().isMarkDown()) {
onSetMdText(getPresenter().downloadedStream(), getArguments().getString(BundleConstant.EXTRA));
onSetMdText(getPresenter().downloadedStream(), getPresenter().url());
} else {
onSetCode(getPresenter().downloadedStream());
}

View File

@ -5,10 +5,12 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.model.User;
import com.fastaccess.helper.BundleConstant;
@ -27,7 +29,6 @@ import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import com.evernote.android.state.State;
/**
* Created by Kosh on 22 Feb 2017, 7:23 PM
@ -38,6 +39,7 @@ public class AssigneesDialogFragment extends BaseDialogFragment<AssigneesMvp.Vie
@BindView(R.id.title) FontTextView title;
@BindView(R.id.recycler) DynamicRecyclerView recycler;
@BindView(R.id.stateLayout) StateLayout stateLayout;
@BindView(R.id.refresh) SwipeRefreshLayout refresh;
@State HashMap<Integer, User> selectionMap;
private AssigneesAdapter adapter;
@ -75,16 +77,13 @@ public class AssigneesDialogFragment extends BaseDialogFragment<AssigneesMvp.Vie
@Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (savedInstanceState == null) {
if (getArguments() != null) {
//noinspection ConstantConditions
getPresenter().onCallApi(getArguments().getString(BundleConstant.EXTRA),
getArguments().getString(BundleConstant.ID),
getArguments().getBoolean(BundleConstant.EXTRA_TWO));
}
callApi();
}
refresh.setOnRefreshListener(this::callApi);
stateLayout.setOnReloadListener(v -> callApi());
boolean isAssinees = getArguments().getBoolean(BundleConstant.EXTRA_TWO);
stateLayout.setEmptyText(isAssinees ? R.string.no_assignees : R.string.no_reviewers);
recycler.setEmptyView(stateLayout);
recycler.setEmptyView(stateLayout, refresh);
recycler.addKeyLineDivider();
title.setText(isAssinees ? R.string.assignees : R.string.reviewers);
adapter = new AssigneesAdapter(getPresenter().getList(), this);
@ -137,10 +136,12 @@ public class AssigneesDialogFragment extends BaseDialogFragment<AssigneesMvp.Vie
@Override public void showProgress(@StringRes int resId) {
stateLayout.showProgress();
refresh.setRefreshing(true);
}
@Override public void hideProgress() {
stateLayout.hideProgress();
refresh.setRefreshing(false);
}
@Override public void showErrorMessage(@NonNull String message) {
@ -164,4 +165,11 @@ public class AssigneesDialogFragment extends BaseDialogFragment<AssigneesMvp.Vie
}
return selectionMap;
}
private void callApi() {
//noinspection ConstantConditions
getPresenter().onCallApi(getArguments().getString(BundleConstant.EXTRA),
getArguments().getString(BundleConstant.ID),
getArguments().getBoolean(BundleConstant.EXTRA_TWO));
}
}

View File

@ -5,10 +5,12 @@ import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.data.dao.LabelListModel;
import com.fastaccess.data.dao.LabelModel;
@ -30,7 +32,6 @@ import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import com.evernote.android.state.State;
/**
* Created by Kosh on 22 Feb 2017, 7:23 PM
@ -40,6 +41,7 @@ public class LabelsDialogFragment extends BaseDialogFragment<LabelsMvp.View, Lab
@BindView(R.id.title) FontTextView title;
@BindView(R.id.recycler) DynamicRecyclerView recycler;
@BindView(R.id.refresh) SwipeRefreshLayout refresh;
@BindView(R.id.add) View add;
@BindView(R.id.stateLayout) StateLayout stateLayout;
@State HashMap<Integer, LabelModel> selectionMap;
@ -87,8 +89,9 @@ public class LabelsDialogFragment extends BaseDialogFragment<LabelsMvp.View, Lab
}
@Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
refresh.setEnabled(false);
stateLayout.setEmptyText(R.string.no_labels);
recycler.setEmptyView(stateLayout);
recycler.setEmptyView(stateLayout, refresh);
recycler.addKeyLineDivider();
title.setText(R.string.labels);
add.setVisibility(View.VISIBLE);

View File

@ -9,6 +9,8 @@ import android.widget.ListView;
import com.fastaccess.R;
import com.fastaccess.data.dao.SettingsModel;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Bundler;
import com.fastaccess.ui.adapter.SettingsAdapter;
import com.fastaccess.ui.base.BaseActivity;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
@ -17,7 +19,6 @@ import com.fastaccess.ui.modules.settings.category.SettingsCategoryActivity;
import net.grandcentrix.thirtyinch.TiPresenter;
import butterknife.BindView;
import butterknife.OnItemClick;
public class SettingsActivity extends BaseActivity {
@ -26,23 +27,6 @@ public class SettingsActivity extends BaseActivity {
private static int THEME_CHANGE = 32;
private SettingsModel[] settings;
@OnItemClick(R.id.settingsList) void onItemClick(int position) {
Intent intent = new Intent(this, SettingsCategoryActivity.class);
intent.putExtra("settings", position);
intent.putExtra("title", settings[position].getTitle());
switch (position) {
case 1:
ActivityHelper.startReveal(this, intent, settingsList, THEME_CHANGE);
break;
case 4:
showLanguageList();
break;
default:
ActivityHelper.startReveal(this, intent, settingsList);
break;
}
}
@Override protected int layout() {
return R.layout.activity_settings;
}
@ -72,6 +56,24 @@ public class SettingsActivity extends BaseActivity {
SettingsModel.newInstance(R.drawable.ic_language, getString(R.string.app_language), "")
};
settingsList.setAdapter(new SettingsAdapter(this, settings));
settingsList.setOnItemClickListener((parent, view, position, id) -> {
Intent intent = new Intent(this, SettingsCategoryActivity.class);
intent.putExtras(Bundler.start()
.put(BundleConstant.ITEM, position)
.put(BundleConstant.EXTRA, settings[position].getTitle())
.end());
switch (position) {
case 1:
ActivityHelper.startReveal(this, intent, settingsList, THEME_CHANGE);
break;
case 4:
showLanguageList();
break;
default:
ActivityHelper.startReveal(this, intent, settingsList);
break;
}
});
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

View File

@ -5,13 +5,15 @@ import android.support.annotation.NonNull;
import com.evernote.android.state.State;
import com.fastaccess.R;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.ui.base.BaseActivity;
import net.grandcentrix.thirtyinch.TiPresenter;
public class SettingsCategoryActivity extends BaseActivity {
public class SettingsCategoryActivity extends BaseActivity implements SettingsCategoryFragment.SettingsCallback {
@State String title;
@State int settingsIndex;
@Override protected int layout() {
return R.layout.activity_settings_category;
@ -33,13 +35,12 @@ public class SettingsCategoryActivity extends BaseActivity {
super.onCreate(savedInstanceState);
setResult(RESULT_CANCELED);
if (savedInstanceState == null) {
title = getIntent() != null ? getIntent().getStringExtra("title") : getString(R.string.settings);
SettingsCategoryFragment settingsCategoryFragment = SettingsCategoryFragment.
newInstance(getIntent().getIntExtra("settings", 0));
Bundle bundle = getIntent().getExtras();
title = bundle.getString(BundleConstant.EXTRA);
settingsIndex = bundle.getInt(BundleConstant.ITEM);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settingsContainer, settingsCategoryFragment)
.replace(R.id.settingsContainer, new SettingsCategoryFragment())
.commit();
}
setTitle(title);
@ -48,4 +49,8 @@ public class SettingsCategoryActivity extends BaseActivity {
@NonNull @Override public TiPresenter providePresenter() {
return new SettingsCategoryPresenter();
}
@Override public int getSettingsType() {
return settingsIndex;
}
}

View File

@ -11,12 +11,9 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.fastaccess.R;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.PrefGetter;
import com.fastaccess.helper.PrefHelper;
@ -39,14 +36,15 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
import butterknife.BindView;
import es.dmoral.toasty.Toasty;
import static android.app.Activity.RESULT_OK;
public class SettingsCategoryFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
@BindView(R.id.settingsContainer) FrameLayout settingsContainer;
public interface SettingsCallback {
int getSettingsType();
}
private static int PERMISSION_REQUEST_CODE = 128;
private static int RESTORE_REQUEST_CODE = 256;
@ -60,26 +58,30 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
private Preference notificationTime;
private Preference notificationRead;
private Preference notificationSound;
private SettingsCallback settingsCallback;
@NonNull public static SettingsCategoryFragment newInstance(int settings) {
SettingsCategoryFragment fragment = new SettingsCategoryFragment();
fragment.setArguments(Bundler.start()
.put(BundleConstant.EXTRA, settings)
.end());
return fragment;
}
@Override public void onAttach(Context context) {
super.onAttach(context);
this.callback = (BaseMvp.FAView) context;
this.settingsCallback = (SettingsCallback) context;
appTheme = PrefHelper.getString("appTheme");
appColor = PrefHelper.getString("appColor");
app_lauguage = PrefHelper.getString("app_language");
}
@Override public void onDetach() {
callback = null;
settingsCallback = null;
super.onDetach();
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
int settings = getArguments().getInt("settings", 0);
switch (settings) {
switch (settingsCallback.getSettingsType()) {
case 0:
addPreferencesFromResource(R.xml.notification_settings);
notificationTime = findPreference("notificationTime");
@ -158,9 +160,6 @@ public class SettingsCategoryFragment extends PreferenceFragmentCompat implement
return true;
});
break;
default:
addPreferencesFromResource(R.xml.fasthub_settings);
break;
}
}

View File

@ -32,7 +32,7 @@ class TrendingActivity : BaseActivity<TrendingMvp.View, TrendingPresenter>(), Tr
val monthly by lazy { findViewById(R.id.monthly) as TextView }
val drawerLayout by lazy { findViewById(R.id.drawer) as DrawerLayout }
@State var selectedTitle: String = ""
@State var selectedTitle: String = "All Language"
companion object {
fun getTrendingIntent(context: Context, lang: String?, query: String?): Intent {
@ -129,12 +129,15 @@ class TrendingActivity : BaseActivity<TrendingMvp.View, TrendingPresenter>(), Tr
}
private fun onItemClicked(item: MenuItem?): Boolean {
selectedTitle = item?.title.toString()
when (item?.title.toString()) {
"All Language" -> selectedTitle = ""
else -> selectedTitle = item?.title.toString()
}
Logger.e(selectedTitle)
setValues()
return true
}
private fun closeDrawerLayout() {
drawerLayout.closeDrawer(Gravity.END)
}

View File

@ -3,7 +3,9 @@ package com.fastaccess.ui.widgets;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.style.BackgroundColorSpan;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StyleSpan;
@ -108,5 +110,19 @@ public class SpannableBuilder extends SpannableStringBuilder {
return this;
}
public SpannableBuilder clickable(final CharSequence text, final View.OnClickListener listener) {
if (!InputHelper.isEmpty(text)) return append(text, new ClickableSpan() {
@Override public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false);
}
@Override public void onClick(View widget) {
listener.onClick(widget);
}
});
return this;
}
}

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -80,12 +80,19 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView
android:id="@+id/recycler"
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
app:layoutManager="@string/linear_layout_manager"/>
android:layout_height="wrap_content">
<com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
app:layoutManager="@string/linear_layout_manager"/>
</android.support.v4.widget.SwipeRefreshLayout>
<include layout="@layout/state_layout"/>
</FrameLayout>

View File

@ -1,76 +1,62 @@
<!DOCTYPE html>
<html>
<body id="preview">
<h2><a id="FastHub_changelog_0"></a>FastHub changelog</h2>
<h3><a id="Version__250_2"></a>Version 2.5.0</h3>
<blockquote>
<p><strong>P.S: Im not asking for to much, if you are facing a problem in FastHub please report it at the issue tracker in GitHub either via
FastHub app or from GitHub website, your reviews are what keeps me motivated to further improve FastHub.<br>
Keep in mind that FastHub is free &amp; open source.</strong></p>
</blockquote>
<h4><a id="Bugs__Enhancements__new_Features_7"></a>Bugs , Enhancements &amp; new Features</h4>
<ul>
<li>(FIX) Oauth login for good!</li>
<li>(FIX) Notifications gets triggered every few seconds</li>
<li>(New) Reply, edit, delete &amp; add PR review comment</li>
<li>(New) Long click on Issue &amp; PR to peak details &amp; add comments faster</li>
<li>(New) Github emoji support in comments &amp; profile bio</li>
<li>(New) Reply, edit, delete &amp; add PR review comment</li>
<li>(New) Reply, edit, delete &amp; add PR review comment</li>
<li>(New) Second click on any top tab will scrollTop.</li>
<li>(New) FastHub Signature</li>
<li>(New) Backup settings option (Pinned Items are coming soon)</li>
<li>(New) Ability to see the Orgs. a person is part of in their profile</li>
<li>(New) Profile contribution Graph</li>
<li>(New) Ability to choose theme accent color</li>
<li>(New) Mentioning @ in comments.</li>
<li>(New) Repo topics</li>
<li>(New) Reply, now shows the message youre replying too</li>
<li>(New) Many android “O” items</li>
<li>(New) Language bar on login where default lang is not supported</li>
<li>(New) Created a share option for comments</li>
<li>(New) More notification interval options</li>
<li>(New) Opening repo directories from deep links</li>
<li>(New) Opening releases links</li>
<li>(New) Japanese language</li>
<li>(New) Clicking user details in profile should open image in full</li>
<li>(Enhancement) Redid profile layout</li>
<li>(Enhancement) Redid the layout of the settings</li>
<li>(Enhancement) Truncate PR review files to max 3 lines</li>
<li>(Enhancement) Moved FastHub Repo from <code>DrawerLayout</code> to Pinned Items</li>
<li>(Enhancement) Lowered the white color tone</li>
<li>(Enhancement) More Efficient Markdown</li>
<li>(Enhancement) Merged Gists into one tab</li>
<li>(Enhancement) Issues and Pull Requests now display the repo theyre in</li>
<li>(Enhancement) Reconfigured the Notification Options</li>
<li>(Enhancement) Added the Issue Number to the feed and personal Issues</li>
<li>(Enhancement) Removed the scrollbar for Reactions</li>
<li>(Enhancement) Notifications on a comment now show the profile picture</li>
<li>(Enhancement) You can now dismiss all hints at once</li>
<li>(Enhancement) Removed color accent from <code>DrawerLayout</code></li>
<li>(Enhancement) Code snippets now show in monospace font</li>
<li>(Enhancement) Comments layout</li>
<li>(Enhancement) Lists &amp; tasks lists in comments.</li>
<li>(Fix) Showing more than 100 comments.</li>
<li>(Fix) Fixed creating new issue link</li>
<li>(Fix) Assignee in issues</li>
<li>(Fix) Ability to react on the first comment</li>
<li>(Fix) Tablet pictures not inline with text</li>
<li>(Fix) Profile icon not updating</li>
<li>(Fix) Changed the color of “Private” label to gray</li>
<li>(Fix) Double progress bar.</li>
<li>(Fix) Fix bolding and italic in the feed</li>
<li>(Fix) Some spelling mistakes</li>
<li>(Fix) Attempt to fix where FastHub would not re-load when muti-tasking</li>
<li>(Fix) Reply editor would not initially focus</li>
<li>(Fix) Hide Mark all as read if there are no unread items</li>
<li>There are more stuff are not mentioned, find them out :p</li>
<li>Lots of bug fixes</li>
</ul>
<blockquote>
<p>Thanks to @JediBurrell, @yakov116 &amp; everyone who contributed either via reporting bugs or via code contribution</p>
</blockquote>
<p><strong>Thank you very much</strong></p>
</body>
<head>
<meta charset="utf-8">
<title>Untitled Document.md</title>
<style></style>
</head>
<body id="preview">
<h2><a id="FastHub_changelog_0"></a>FastHub changelog
</h2>
<h3><a id="Version__300_Trending_Finally_2"></a>Version 3.0.0 (Trending Finally!)
</h3>
<blockquote>
<p>
<strong>P.S: Im not asking for to much, if you are facing a problem in FastHub please report it at the issue tracker in GitHub either
via FastHub app or from GitHub website, your reviews are what keeps me motivated to further improve FastHub.
<br>
Keep in mind that FastHub is free &amp; open source.
</strong>
</p>
</blockquote>
<h4><a id="Bugs__Enhancements__new_Features_7"></a>Bugs , Enhancements &amp; new Features
</h4>
<ul>
<li>(New) Explore trending with all the languages out there.</li>
<li>(New) Filter Repos (Thanks to @aadithyabk)</li>
<li>(New) See specific user feed.</li>
<li>(New) Display amount of starred repos.</li>
<li>(New) Copy Repo URL to clipboard</li>
<li>(New) Added participated issue sorting to personal issue list</li>
<li>(New) Showing multiple build statues.</li>
<li>(New) Lithuanian language (Thanks to @mistermantas)</li>
<li>(New) no new line at end of file now shows a picture</li>
<li>(Enhancement/Fix) Sort issues by reaction</li>
<li>(Fix) Issues/PRs editing, was semi-broken in preview release</li>
<li>(Fix) Showing missing repo (broken in previous version)</li>
<li>(Fix) Support development now works,
<em>please use it.</em>
</li>
<li>(Fix) Issue count not updating.</li>
<li>(Fix) Emojis were joining :crossed_swords:</li>
<li>(Fix) Back button when opening FastHub from an external link</li>
<li>(Fix) Issue comment were only showing up to 100 comments</li>
<li>(Fix) Dropdown menus not closing</li>
<li>(Fix) Some tablets had text wrapping issues</li>
<li>(Fix) Pictures not loading in PRs/commits</li>
<li>(Fix) Fixed crash when adding a react</li>
<li>(Fix) Some tooltips were incorrect</li>
<li>(Fix) Stargazers are now updated in pinned repos</li>
<li>(Fix) Gist links (edited)</li>
<li>There are more stuff are not mentioned, find them out :p</li>
<li>Lots of bug fixes</li>
</ul>
<blockquote>
<p>Thanks to everyone who contributed either via reporting bugs or via code contribution</p>
</blockquote>
<p>
<strong>Thank you very much</strong>
</p>
</html>
</body>
</html>

View File

@ -124,7 +124,7 @@
<item>@string/all</item>
</string-array>
<string-array name="trending_days_array">
<string-array name="trending_days_array" translatable="false">
<item>Daily</item>
<item>Weekly</item>
<item>Monthly</item>