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&#8230;</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

Reply via email to