Florianschmidtwelzow has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/354720 )
Change subject: Request information from site via API ...................................................................... Request information from site via API Instead of requiring people to insert information about their site, with this change, the user can input the path to the api.php (without the api.php) and save to request the information of the wiki. Change-Id: Ie96c40413c21931a773b4082ca0934dbc0c925ca --- M app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java A app/src/main/java/org/wikipedia/settings/SiteInfo.java M app/src/main/res/values/dev_settings_strings.xml M app/src/main/res/xml/developer_preferences.xml 4 files changed, 159 insertions(+), 1 deletion(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/20/354720/1 diff --git a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java index 6d5329a3..78a034a 100644 --- a/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java +++ b/app/src/main/java/org/wikipedia/settings/DeveloperSettingsPreferenceLoader.java @@ -1,7 +1,13 @@ package org.wikipedia.settings; +import android.app.Dialog; +import android.app.ProgressDialog; import android.content.Context; +import android.content.DialogInterface; import android.support.annotation.NonNull; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AlertDialog; +import android.support.v7.preference.EditTextPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceFragmentCompat; @@ -10,10 +16,26 @@ import org.wikipedia.R; import org.wikipedia.WikipediaApp; import org.wikipedia.crash.RemoteLogException; +import org.wikipedia.dataclient.WikiSite; +import org.wikipedia.dataclient.mwapi.MwException; +import org.wikipedia.dataclient.mwapi.MwQueryResponse; +import org.wikipedia.dataclient.retrofit.RetrofitException; +import org.wikipedia.dataclient.retrofit.RetrofitFactory; +import org.wikipedia.login.LoginClient; import org.wikipedia.useroption.ui.UserOptionRowActivity; import org.wikipedia.util.log.L; +import java.io.IOException; import java.util.List; +import java.util.Map; + +import retrofit2.Call; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.POST; /*package*/ class DeveloperSettingsPreferenceLoader extends BasePreferenceLoader { @NonNull private final Context context; @@ -50,6 +72,74 @@ setUpCrashButton(findPreference(getCrashButtonKey())); setUpUserOptionButton(findPreference(getUserOptionButtonKey())); setUpRemoteLogButton(findPreference(R.string.preference_key_remote_log)); + setUpMediaWikiBaseUri((EditTextPreference) findPreference(R.string.preference_key_mediawiki_base_uri)); + } + + private void setUpMediaWikiBaseUri(final EditTextPreference pref) { + pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + private static final String API_PHP_FILENAME = "api.php"; + + @Override + public boolean onPreferenceChange(Preference preference, final Object newValue) { + String apiUrl = (String) newValue; + if (apiUrl.endsWith(API_PHP_FILENAME)) { + apiUrl = apiUrl.replace(API_PHP_FILENAME, ""); + } + final ProgressDialog dialog = ProgressDialog.show( + getActivity(), + "", + getActivity().getString(R.string.dialog_loading_siteinfo_wait), + true + ); + + Retrofit retrofitClient = RetrofitFactory.newInstance(apiUrl, new WikiSite(apiUrl)); + Service request = retrofitClient.create(Service.class); + Call<MwQueryResponse<SiteInfo>> call = request.requestSiteinfo(); + call.enqueue(new retrofit2.Callback<MwQueryResponse<SiteInfo>>() { + @Override public void onResponse(Call<MwQueryResponse<SiteInfo>> call, + Response<MwQueryResponse<SiteInfo>> response) { + if (response.isSuccessful()) { + if (response.body().query().server() != null) { + pref.setText(response.body().query().server()); + } + } else { + showAlert(getActivity().getString( + R.string.dialog_loading_siteinfo_failed, + Integer.toString(response.code()) + )); + } + dialog.hide(); + } + + @Override public void onFailure(Call<MwQueryResponse<SiteInfo>> call, Throwable t) { + showAlert(getActivity().getString( + R.string.dialog_loading_siteinfo_failed, + t.getMessage() + )); + dialog.hide(); + } + }); + return true; + } + }); + } + + private void showAlert(String message) { + AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create(); + alertDialog.setMessage(message); + alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + alertDialog.show(); + } + + private interface Service { + @NonNull + @GET("api.php?format=json&formatversion=2&action=query&meta=siteinfo|wikibase&siprop=general") + Call<MwQueryResponse<SiteInfo>> requestSiteinfo(); } private void setUpRestBaseCheckboxes() { diff --git a/app/src/main/java/org/wikipedia/settings/SiteInfo.java b/app/src/main/java/org/wikipedia/settings/SiteInfo.java new file mode 100644 index 0000000..bc812df --- /dev/null +++ b/app/src/main/java/org/wikipedia/settings/SiteInfo.java @@ -0,0 +1,65 @@ +package org.wikipedia.settings; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import java.util.Map; + +/** + * A class which can hold information about the site used in the app. The data is normally + * populated from a request to the siteinfo and wikibase query-meta api endpoint of MediaWiki. + */ +public class SiteInfo { + private static final String MAINPAGE_KEY = "mainpage"; + private static final String LANG_KEY = "lang"; + private static final String ARTICLEPATH_KEY = "articlepath"; + private static final String SCRIPTPATH_KEY = "scriptpath"; + private static final String SERVER_KEY = "server"; + + @NonNull + @SuppressWarnings("unused") + private Map<String, Object> wikibase; + @NonNull + @SuppressWarnings("unused") + private Map<String, Object> general; + + @Nullable + public String mainpage() { + if (general.containsKey(MAINPAGE_KEY)) { + return (String) general.get(MAINPAGE_KEY); + } + return null; + } + + @Nullable + public String contentLang() { + if (general.containsKey(LANG_KEY)) { + return (String) general.get(LANG_KEY); + } + return null; + } + + @Nullable + public String articlePath() { + if (general.containsKey(ARTICLEPATH_KEY)) { + return (String) general.get(ARTICLEPATH_KEY); + } + return null; + } + + @Nullable + public String scriptPath() { + if (general.containsKey(SCRIPTPATH_KEY)) { + return (String) general.get(SCRIPTPATH_KEY); + } + return null; + } + + @Nullable + public String server() { + if (general.containsKey(SERVER_KEY)) { + return (String) general.get(SERVER_KEY); + } + return null; + } +} diff --git a/app/src/main/res/values/dev_settings_strings.xml b/app/src/main/res/values/dev_settings_strings.xml index 8ad2421..31eb0f9 100644 --- a/app/src/main/res/values/dev_settings_strings.xml +++ b/app/src/main/res/values/dev_settings_strings.xml @@ -25,4 +25,6 @@ <string name="preferences_developer_user_option_summary">Tap here to show user options</string> <string name="user_option_activity_title">User options</string> <string name="menu_item_sync_all">Sync all</string> + <string name="dialog_loading_siteinfo_wait">Loading site information…</string> + <string name="dialog_loading_siteinfo_failed">Loading site information failed: %s</string> </resources> diff --git a/app/src/main/res/xml/developer_preferences.xml b/app/src/main/res/xml/developer_preferences.xml index 28a1d16..4ff3a2f 100644 --- a/app/src/main/res/xml/developer_preferences.xml +++ b/app/src/main/res/xml/developer_preferences.xml @@ -43,7 +43,8 @@ android:dialogMessage="Prod (default if blank): https://wikipedia.org \nDev: http://host:8080 \nBeta cluster (switch app language to Simple English): http://wikipedia.beta.wmflabs.org - \nAuth manager (disable language code): http://authmanager.wmflabs.org" /> + \nAuth manager (disable language code): http://authmanager.wmflabs.org + \n\n If set to a path to the api.php, the site will be queried to get information about it." /> <SwitchPreferenceCompat android:key="@string/preference_key_mediawiki_base_uri_supports_lang_code" -- To view, visit https://gerrit.wikimedia.org/r/354720 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie96c40413c21931a773b4082ca0934dbc0c925ca Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Florianschmidtwelzow <florian.schmidt.stargatewis...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits