[tor-commits] [orbot/master] Hidden Service dialog

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Mar 2 04:10:20 UTC 2017


commit 3f7435c90e3aa468046b1994938bf6b2b3d821a2
Author: arrase <arrase at gmail.com>
Date:   Thu Nov 17 02:57:37 2016 +0100

    Hidden Service dialog
---
 .../android/ui/hs/HiddenServicesActivity.java      |  6 +-
 .../android/ui/hs/dialogs/HSDataDialog.java        | 84 ++++++++++++++++++++++
 app/src/main/res/layout/dialog_hs_data.xml         | 63 ++++++++++++++++
 app/src/main/res/values/strings.xml                |  6 ++
 proguard-project.txt                               | 20 ++++++
 project.properties                                 |  2 +-
 6 files changed, 177 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java b/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
index 85665fb..ebf1ec3 100644
--- a/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hs/HiddenServicesActivity.java
@@ -5,7 +5,6 @@ import android.database.ContentObserver;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -14,6 +13,7 @@ import android.view.View;
 
 import org.torproject.android.R;
 import org.torproject.android.ui.hs.adapters.HSAdapter;
+import org.torproject.android.ui.hs.dialogs.HSDataDialog;
 import org.torproject.android.ui.hs.providers.HSContentProvider;
 
 public class HiddenServicesActivity extends AppCompatActivity {
@@ -37,8 +37,8 @@ public class HiddenServicesActivity extends AppCompatActivity {
         fab.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
-                        .setAction("Action", null).show();
+                HSDataDialog dialog = new HSDataDialog();
+                dialog.show(getSupportFragmentManager(), "HSDataDialog");
             }
         });
 
diff --git a/app/src/main/java/org/torproject/android/ui/hs/dialogs/HSDataDialog.java b/app/src/main/java/org/torproject/android/ui/hs/dialogs/HSDataDialog.java
new file mode 100644
index 0000000..e62d2cb
--- /dev/null
+++ b/app/src/main/java/org/torproject/android/ui/hs/dialogs/HSDataDialog.java
@@ -0,0 +1,84 @@
+package org.torproject.android.ui.hs.dialogs;
+
+
+import android.app.Dialog;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.app.AlertDialog;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import org.torproject.android.R;
+import org.torproject.android.ui.hs.providers.HSContentProvider;
+
+public class HSDataDialog extends DialogFragment {
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Get the layout
+        final View dialog_view = getActivity().getLayoutInflater().inflate(R.layout.dialog_hs_data, null);
+
+        // Use the Builder class for convenient dialog construction
+        final AlertDialog serverDataDialog = new AlertDialog.Builder(getActivity())
+                .setView(dialog_view)
+                .setTitle(R.string.hs_dialog_title)
+                .create();
+
+        // Buttons action
+        Button save = (Button) dialog_view.findViewById(R.id.HSDialogSave);
+        save.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                String serverName = ((EditText) dialog_view.findViewById(R.id.hsName)).getText().toString();
+                Integer serverPort = Integer.parseInt(
+                        ((EditText) dialog_view.findViewById(R.id.serverPort)).getText().toString()
+                );
+
+                if (checkInput(serverPort)) {
+                    saveData(serverName, serverPort);
+                    serverDataDialog.dismiss();
+                }
+            }
+        });
+
+        Button cancel = (Button) dialog_view.findViewById(R.id.HSDialogCancel);
+        cancel.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                serverDataDialog.cancel();
+            }
+        });
+
+        return serverDataDialog;
+    }
+
+    private boolean checkInput(Integer port) {
+        boolean is_ok = true;
+        Integer error_msg = 0;
+
+        if (port <= 1 || port > 65535) {
+            error_msg = R.string.invalid_port;
+            is_ok = false;
+        }
+
+        if (!is_ok) {
+            Toast.makeText(getContext(), error_msg, Toast.LENGTH_SHORT).show();
+        }
+
+        return is_ok;
+    }
+
+    private void saveData(String name, Integer port) {
+        ContentValues fields = new ContentValues();
+        fields.put("name", name);
+        fields.put("port", port);
+
+        ContentResolver cr = getContext().getContentResolver();
+
+        cr.insert(HSContentProvider.CONTENT_URI, fields);
+    }
+}
diff --git a/app/src/main/res/layout/dialog_hs_data.xml b/app/src/main/res/layout/dialog_hs_data.xml
new file mode 100644
index 0000000..2f4daa6
--- /dev/null
+++ b/app/src/main/res/layout/dialog_hs_data.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingLeft="5dp"
+    android:paddingRight="5dp"
+    android:paddingTop="5dp"
+    android:paddingBottom="5dp">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/HSNameLabel"
+        android:text="@string/name"
+        android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
+        android:paddingLeft="5dp" />
+
+    <EditText
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:inputType="text"
+        android:ems="10"
+        android:id="@+id/hsName" />
+
+    <TextView
+        android:text="@string/port"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/HSPortLabel"
+        android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"
+        android:paddingLeft="5dp" />
+
+    <EditText
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:ems="10"
+        android:id="@+id/serverPort"
+        android:inputType="number" />
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <Button
+            android:text="@string/cancel"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/HSDialogCancel"
+            android:layout_weight="1"
+            style="@style/Widget.AppCompat.Button.Borderless.Colored" />
+
+        <Button
+            android:text="@string/save"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/HSDialogSave"
+            android:layout_weight="1"
+            style="@style/Widget.AppCompat.Button.Borderless.Colored" />
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bd93d6d..333ac58 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -331,4 +331,10 @@
 
     <string name="vpn_default_world">World (Location)</string>
     <string name="title_activity_hidden_services">Hidden Services</string>
+    <string name="save">Save</string>
+    <string name="cancel">Cancel</string>
+    <string name="hs_dialog_title">Hidden Service</string>
+    <string name="port">Port</string>
+    <string name="name">Name</string>
+    <string name="invalid_port">Invalid Port</string>
 </resources>
diff --git a/proguard-project.txt b/proguard-project.txt
index e69de29..f2fe155 100644
--- a/proguard-project.txt
+++ b/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/project.properties b/project.properties
index 145c9f2..240497d 100644
--- a/project.properties
+++ b/project.properties
@@ -9,6 +9,6 @@
 #proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
 
 # Project target.
-target=android-23
+target=android-15
 android.library.reference.1=external/jsocks/jsockslib
 android.library.reference.2=external/appcompat





More information about the tor-commits mailing list