mirror of
https://github.com/FatttSnake/OxygenToolbox.git
synced 2026-04-05 16:51:25 +08:00
Removed ip tool. Renamed package of base convert tool.
This commit is contained in:
@@ -21,8 +21,6 @@ android {
|
||||
multiDexEnabled true
|
||||
|
||||
Properties buildPro = loadBuildPro()
|
||||
buildConfigField "String", "ROLL_APP_ID", buildPro['rollAppId']
|
||||
buildConfigField "String", "ROLL_APP_SECRET", buildPro['rollAppSecret']
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@@ -107,8 +105,8 @@ dependencies {
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.preference:preference:1.2.0'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.6.0'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.6.0'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
|
||||
implementation 'androidx.core:core-splashscreen:1.0.1'
|
||||
implementation 'com.google.android.material:material:1.9.0'
|
||||
|
||||
|
||||
@@ -61,17 +61,7 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".tools.ip.MainActivity"
|
||||
android:exported="false"
|
||||
android:theme="@style/Theme.OxygenToolbox.Default">
|
||||
<intent-filter>
|
||||
<action android:name="oxygentoolbox.ip" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".tools.converter.MainActivity"
|
||||
android:name=".tools.baseconverter.MainActivity"
|
||||
android:exported="false"
|
||||
android:theme="@style/Theme.OxygenToolbox.Default">
|
||||
<intent-filter>
|
||||
|
||||
@@ -30,19 +30,12 @@
|
||||
},
|
||||
"activity": "com.fatapp.oxygentoolbox.tools.translation.MainActivity"
|
||||
},
|
||||
{
|
||||
"text": {
|
||||
"cn": "\u0049\u0050\u0020\u67e5\u8be2",
|
||||
"en": "IP Query"
|
||||
},
|
||||
"activity": "com.fatapp.oxygentoolbox.tools.ip.MainActivity"
|
||||
},
|
||||
{
|
||||
"text": {
|
||||
"cn": "\u8fdb\u5236\u8f6c\u6362",
|
||||
"en": "Base Converter"
|
||||
},
|
||||
"activity": "com.fatapp.oxygentoolbox.tools.converter.MainActivity"
|
||||
"activity": "com.fatapp.oxygentoolbox.tools.baseconverter.MainActivity"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.fatapp.oxygentoolbox.tools.converter;
|
||||
package com.fatapp.oxygentoolbox.tools.baseconverter;
|
||||
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.os.Bundle;
|
||||
@@ -1,169 +0,0 @@
|
||||
package com.fatapp.oxygentoolbox.tools.ip;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.fatapp.oxygentoolbox.BuildConfig;
|
||||
import com.fatapp.oxygentoolbox.R;
|
||||
import com.fatapp.oxygentoolbox.util.ResourceUtil;
|
||||
import com.fatapp.oxygentoolbox.util.http.HttpHelper;
|
||||
import com.fatapp.oxygentoolbox.util.http.ResponseListener;
|
||||
import com.fatapp.oxygentoolbox.util.tool.BaseActivityNormal;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class MainActivity extends BaseActivityNormal {
|
||||
final String URL_SELF = "https://www.mxnzp.com/api/ip/self?app_id=%s&app_secret=%s";
|
||||
final String URL_QUERY = "https://www.mxnzp.com/api/ip/aim_ip?ip=%s&app_id=%s&app_secret=%s";
|
||||
|
||||
private TextView textViewCurrentIP;
|
||||
private EditText editTextIpAddress;
|
||||
private ImageView imageViewQuery;
|
||||
private TextView textViewResultIP;
|
||||
private TextView textViewResultProvince;
|
||||
private TextView textViewResultCity;
|
||||
private TextView textViewResultIsp;
|
||||
|
||||
private void initView() {
|
||||
textViewCurrentIP = findViewById(R.id.text_view_current_ip);
|
||||
editTextIpAddress = findViewById(R.id.edit_text_ipaddress);
|
||||
imageViewQuery = findViewById(R.id.image_view_query);
|
||||
textViewResultIP = findViewById(R.id.text_view_result_ip);
|
||||
textViewResultProvince = findViewById(R.id.text_view_result_province);
|
||||
textViewResultCity = findViewById(R.id.text_view_result_city);
|
||||
textViewResultIsp = findViewById(R.id.text_view_result_isp);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
super.loadView(this, R.layout.activity_tool_ip);
|
||||
|
||||
initView();
|
||||
getCurrentIP();
|
||||
initQuery();
|
||||
}
|
||||
|
||||
private void getCurrentIP() {
|
||||
final HttpHelper httpHelper = new HttpHelper(this, URL_SELF, new ResponseListener() {
|
||||
@Override
|
||||
public void onResponse(int code, String responseBody) {
|
||||
if (code == 200) {
|
||||
try {
|
||||
if (new JSONObject(responseBody).getInt("code") == 1) {
|
||||
final JSONObject data = new JSONObject(responseBody).getJSONObject("data");
|
||||
String ip = data.getString("ip");
|
||||
String desc = data.getString("desc");
|
||||
textViewCurrentIP.setText(String.format("%s %s", ip, desc));
|
||||
} else {
|
||||
onFailure();
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
onFailure();
|
||||
}
|
||||
} else {
|
||||
onFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
textViewCurrentIP.setText(ResourceUtil.getString(R.string.tool_ip_Unknown));
|
||||
}
|
||||
});
|
||||
|
||||
httpHelper.request(BuildConfig.ROLL_APP_ID, BuildConfig.ROLL_APP_SECRET);
|
||||
}
|
||||
|
||||
private void initQuery() {
|
||||
editTextIpAddress.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
imageViewQuery.setEnabled(charSequence.length() != 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
|
||||
}
|
||||
});
|
||||
editTextIpAddress.setOnEditorActionListener((textView, actionId, keyEvent) -> {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
|
||||
query();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
imageViewQuery.setEnabled(false);
|
||||
imageViewQuery.setOnClickListener(view -> query());
|
||||
}
|
||||
|
||||
private void query() {
|
||||
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(editTextIpAddress.getWindowToken(), 0);
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
|
||||
alertDialogBuilder.setTitle(ResourceUtil.getString(R.string.tool_ip_querying));
|
||||
alertDialogBuilder.setMessage(ResourceUtil.getString(R.string.tool_ip_wait));
|
||||
alertDialogBuilder.setCancelable(false);
|
||||
AlertDialog alertDialog = alertDialogBuilder.show();
|
||||
final HttpHelper httpHelper = new HttpHelper(this, URL_QUERY, new ResponseListener() {
|
||||
@Override
|
||||
public void onResponse(int code, String responseBody) {
|
||||
alertDialog.cancel();
|
||||
if (code == 200) {
|
||||
try {
|
||||
if (new JSONObject(responseBody).getInt("code") == 1) {
|
||||
final JSONObject data = new JSONObject(responseBody).getJSONObject("data");
|
||||
String ip = data.getString("ip");
|
||||
String province = data.getString("province");
|
||||
String city = data.getString("city");
|
||||
String isp = data.getString("isp");
|
||||
textViewResultIP.setText(ip.isEmpty() ? ResourceUtil.getString(R.string.tool_ip_Unknown) : ip);
|
||||
textViewResultProvince.setText(province.isEmpty() ? ResourceUtil.getString(R.string.tool_ip_Unknown) : province);
|
||||
textViewResultCity.setText(city.isEmpty() ? ResourceUtil.getString(R.string.tool_ip_Unknown) : city);
|
||||
textViewResultIsp.setText(isp.isEmpty() ? ResourceUtil.getString(R.string.tool_ip_Unknown) : isp);
|
||||
} else {
|
||||
setUnknown();
|
||||
Snackbar.make(getConstraintLayoutRoot(), new JSONObject(responseBody).getString("msg"), Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
onFailure();
|
||||
}
|
||||
} else {
|
||||
onFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
alertDialog.cancel();
|
||||
setUnknown();
|
||||
Snackbar.make(getConstraintLayoutRoot(), ResourceUtil.getString(R.string.tool_ip_query_failed), Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
httpHelper.request(editTextIpAddress.getText().toString(), BuildConfig.ROLL_APP_ID, BuildConfig.ROLL_APP_SECRET);
|
||||
}
|
||||
|
||||
private void setUnknown() {
|
||||
textViewResultIP.setText(ResourceUtil.getString(R.string.tool_ip_Unknown));
|
||||
textViewResultProvince.setText(ResourceUtil.getString(R.string.tool_ip_Unknown));
|
||||
textViewResultCity.setText(ResourceUtil.getString(R.string.tool_ip_Unknown));
|
||||
textViewResultIsp.setText(ResourceUtil.getString(R.string.tool_ip_Unknown));
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".tools.converter.MainActivity">
|
||||
tools:context=".tools.baseconverter.MainActivity">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/linear_layout_base"
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout 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"
|
||||
tools:context=".tools.ip.MainActivity">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/constraint_layout_current_ip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_current_ip_tip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/tool_ip_current_IP"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/text_view_current_ip"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_current_ip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/tool_ip_Unknown"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/text_view_current_ip_tip"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/constraint_layout_query"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:padding="@dimen/tool_ip_layout_padding"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/constraint_layout_current_ip">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/edit_text_ipaddress"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/tool_ip_query_bar_size"
|
||||
android:autofillHints="ip"
|
||||
android:background="@drawable/background_left_radius_border"
|
||||
android:hint="@string/tool_ip_ipaddress"
|
||||
android:imeOptions="actionSearch"
|
||||
android:inputType="text"
|
||||
android:padding="@dimen/tool_ip_layout_padding"
|
||||
app:layout_constraintEnd_toStartOf="@id/image_view_query"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image_view_query"
|
||||
android:layout_width="@dimen/tool_ip_query_bar_size"
|
||||
android:layout_height="@dimen/tool_ip_query_bar_size"
|
||||
android:background="@drawable/foreground_right_radius"
|
||||
android:clickable="true"
|
||||
android:contentDescription="Query"
|
||||
android:focusable="true"
|
||||
android:foreground="@drawable/foreground_ripple"
|
||||
android:padding="@dimen/tool_ip_layout_padding"
|
||||
android:src="@drawable/ic_search"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/edit_text_ipaddress"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/tool_ip_layout_padding"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/constraint_layout_query">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_ipaddress" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_result_ip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_Unknown" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_province" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_result_province"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_Unknown" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_city" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_result_city"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_Unknown" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_isp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_result_isp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/tool_ip_layout_margin"
|
||||
android:text="@string/tool_ip_Unknown" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -78,16 +78,6 @@
|
||||
<string name="tool_translation_please_enter_text">请输入内容……</string>
|
||||
<string name="tool_translation_translation_failed">翻译失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_ip_current_IP">当前 IP:</string>
|
||||
<string name="tool_ip_Unknown">未知</string>
|
||||
<string name="tool_ip_ipaddress">IP 地址</string>
|
||||
<string name="tool_ip_querying">查询中</string>
|
||||
<string name="tool_ip_wait">请耐心等待……</string>
|
||||
<string name="tool_ip_city">城市</string>
|
||||
<string name="tool_ip_province">省份</string>
|
||||
<string name="tool_ip_isp">网络提供商</string>
|
||||
<string name="tool_ip_query_failed">查询失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_converter_choose_base">选择进制</string>
|
||||
<string name="tool_converter_from_base">源进制</string>
|
||||
<string name="tool_converter_to_base">目标进制</string>
|
||||
|
||||
@@ -78,16 +78,6 @@
|
||||
<string name="tool_translation_please_enter_text">请输入内容……</string>
|
||||
<string name="tool_translation_translation_failed">翻译失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_ip_current_IP">当前 IP:</string>
|
||||
<string name="tool_ip_Unknown">未知</string>
|
||||
<string name="tool_ip_ipaddress">IP 地址</string>
|
||||
<string name="tool_ip_querying">查询中</string>
|
||||
<string name="tool_ip_wait">请耐心等待……</string>
|
||||
<string name="tool_ip_city">城市</string>
|
||||
<string name="tool_ip_province">省份</string>
|
||||
<string name="tool_ip_isp">网络提供商</string>
|
||||
<string name="tool_ip_query_failed">查询失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_converter_choose_base">选择进制</string>
|
||||
<string name="tool_converter_from_base">源进制</string>
|
||||
<string name="tool_converter_to_base">目标进制</string>
|
||||
|
||||
@@ -78,16 +78,6 @@
|
||||
<string name="tool_translation_please_enter_text">请输入内容……</string>
|
||||
<string name="tool_translation_translation_failed">翻译失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_ip_current_IP">当前 IP:</string>
|
||||
<string name="tool_ip_Unknown">未知</string>
|
||||
<string name="tool_ip_ipaddress">IP 地址</string>
|
||||
<string name="tool_ip_querying">查询中</string>
|
||||
<string name="tool_ip_wait">请耐心等待……</string>
|
||||
<string name="tool_ip_city">城市</string>
|
||||
<string name="tool_ip_province">省份</string>
|
||||
<string name="tool_ip_isp">网络提供商</string>
|
||||
<string name="tool_ip_query_failed">查询失败,请检查网络连接。</string>
|
||||
|
||||
<string name="tool_converter_choose_base">选择进制</string>
|
||||
<string name="tool_converter_from_base">源进制</string>
|
||||
<string name="tool_converter_to_base">目标进制</string>
|
||||
|
||||
@@ -45,10 +45,6 @@
|
||||
<dimen name="tool_translation_layout_margin">@dimen/common_layout_margin</dimen>
|
||||
<dimen name="tool_translation_edit_text_view_height">200dp</dimen>
|
||||
|
||||
<dimen name="tool_ip_layout_padding">10dp</dimen>
|
||||
<dimen name="tool_ip_layout_margin">@dimen/common_layout_margin</dimen>
|
||||
<dimen name="tool_ip_query_bar_size">48dp</dimen>
|
||||
|
||||
<dimen name="tool_converter_text_size">16sp</dimen>
|
||||
<dimen name="tool_converter_clickable_padding">5dp</dimen>
|
||||
<dimen name="tool_converter_layout_margin">@dimen/common_layout_margin</dimen>
|
||||
|
||||
@@ -115,16 +115,6 @@
|
||||
<string name="tool_translation_language_korean" translatable="false">한국인</string>
|
||||
<string name="tool_translation_please_enter_text">Please enter text…</string>
|
||||
<string name="tool_translation_translation_failed">Translation failed, please check network connection.</string>
|
||||
|
||||
<string name="tool_ip_current_IP">Current IP: </string>
|
||||
<string name="tool_ip_Unknown">Unknown</string>
|
||||
<string name="tool_ip_ipaddress">IP address</string>
|
||||
<string name="tool_ip_querying">Querying</string>
|
||||
<string name="tool_ip_wait">Please wait patiently…</string>
|
||||
<string name="tool_ip_city">City</string>
|
||||
<string name="tool_ip_province">Province</string>
|
||||
<string name="tool_ip_isp">ISP</string>
|
||||
<string name="tool_ip_query_failed">Query failed, please check network connection.</string>
|
||||
|
||||
<string name="tool_converter_base_2" translatable="false">2 (binary)</string>
|
||||
<string name="tool_converter_base_8" translatable="false">8 (octal)</string>
|
||||
|
||||
Reference in New Issue
Block a user