summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDaniel Weipert <code@drogueronin.de>2023-04-29 10:07:00 +0200
committerDaniel Weipert <code@drogueronin.de>2023-04-29 10:07:00 +0200
commit2259ae916239a3e6a84226583edc610a578cb98e (patch)
treefe439e1985b795832d4cad62c583b21dc6cfc832 /app
initial commit
Diffstat (limited to 'app')
-rw-r--r--app/java/AndroidManifest.xml41
-rw-r--r--app/java/BUILD14
-rw-r--r--app/java/res/layout/main.xml29
-rw-r--r--app/java/res/values/dimens.xml4
-rw-r--r--app/java/res/values/strings.xml10
-rw-r--r--app/java/src/DNSService.java33
-rw-r--r--app/java/src/MainActivity.java68
7 files changed, 199 insertions, 0 deletions
diff --git a/app/java/AndroidManifest.xml b/app/java/AndroidManifest.xml
new file mode 100644
index 0000000..ef81463
--- /dev/null
+++ b/app/java/AndroidManifest.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="org.pihole.dnsproxy"
+ android:versionCode="1"
+ android:versionName="1.0"
+>
+ <uses-sdk
+ android:minSdkVersion="16"
+ android:targetSdkVersion="28"
+ />
+
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <application
+ android:usesCleartextTraffic="true"
+ >
+ <service
+ android:name=".DNSService"
+ android:permission="android.permission.BIND_VPN_SERVICE"
+ >
+ <intent-filter>
+ <action android:name="android.net.VpnService" />
+ </intent-filter>
+ </service>
+
+ <activity
+ android:name=".MainActivity"
+ android:label="@string/label"
+ android:screenOrientation="portrait"
+ >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/app/java/BUILD b/app/java/BUILD
new file mode 100644
index 0000000..c19473f
--- /dev/null
+++ b/app/java/BUILD
@@ -0,0 +1,14 @@
+load("@build_bazel_rules_android//android:rules.bzl", "android_library", "android_binary")
+
+android_library(
+ name = "main",
+ srcs = glob(["src/*.java"]),
+ manifest = "AndroidManifest.xml",
+ resource_files = glob(["res/**"]),
+)
+
+android_binary(
+ name = "dnsproxy",
+ manifest = "AndroidManifest.xml",
+ deps = [":main"],
+)
diff --git a/app/java/res/layout/main.xml b/app/java/res/layout/main.xml
new file mode 100644
index 0000000..4a644b6
--- /dev/null
+++ b/app/java/res/layout/main.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ android:orientation="vertical"
+ tools:context=".MainActivity"
+>
+
+ <TextureView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/surface_view"
+ />
+
+ <Button
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:id="@+id/button_start"
+ android:layout_gravity="center"
+ android:onClick="onStartClick"
+ android:text="@string/btnStart"
+ />
+</FrameLayout>
diff --git a/app/java/res/values/dimens.xml b/app/java/res/values/dimens.xml
new file mode 100644
index 0000000..fe991af
--- /dev/null
+++ b/app/java/res/values/dimens.xml
@@ -0,0 +1,4 @@
+<resources>
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/app/java/res/values/strings.xml b/app/java/res/values/strings.xml
new file mode 100644
index 0000000..beab6c5
--- /dev/null
+++ b/app/java/res/values/strings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="label">
+ Pihole DNS Proxy
+ </string>
+
+ <string name="btnStart">
+ Start Proxy
+ </string>
+</resources>
diff --git a/app/java/src/DNSService.java b/app/java/src/DNSService.java
new file mode 100644
index 0000000..4f760a5
--- /dev/null
+++ b/app/java/src/DNSService.java
@@ -0,0 +1,33 @@
+package org.pihole.dnsproxy;
+
+import android.app.AlertDialog;
+import android.app.Service;
+
+import android.content.Intent;
+
+import android.net.VpnService;
+
+public class DNSService extends VpnService {
+
+ private static boolean isRunning = false;
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ //VpnService.prepare();
+
+ DNSService.isRunning = true;
+
+ return Service.START_STICKY;
+ }
+
+ @Override
+ public void onDestroy() {
+ DNSService.isRunning = false;
+ super.onDestroy();
+ }
+
+ public static boolean isRunning()
+ {
+ return DNSService.isRunning;
+ }
+}
diff --git a/app/java/src/MainActivity.java b/app/java/src/MainActivity.java
new file mode 100644
index 0000000..9fd99f6
--- /dev/null
+++ b/app/java/src/MainActivity.java
@@ -0,0 +1,68 @@
+package org.pihole.dnsproxy;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+
+import android.content.Intent;
+
+import android.net.VpnService;
+
+import android.os.Bundle;
+
+import android.view.TextureView;
+import android.view.View;
+
+import android.widget.Button;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+
+ private Button buttonStart;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ this.buttonStart = (Button) findViewById(R.id.button_start);
+ this.buttonStart.setText(DNSService.isRunning() ? "Stop" : "Start");
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ this.buttonStart.setText("on RESSSSUME");
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {}
+
+ public void onStartClick(View view) {
+ Intent intent = VpnService.prepare(this);
+ if (intent != null) {
+ startActivityForResult(intent, 0);
+ }
+ //Intent intent = new Intent(this, DNSService.class);
+
+ if (!DNSService.isRunning()) {
+ startService(intent);
+
+ new AlertDialog.Builder(this)
+ .setTitle("PROXY START")
+ .setMessage("BRRR")
+ .show();
+ Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+ this.buttonStart.setText("Stop");
+ }
+ else {
+ stopService(intent);
+
+ new AlertDialog.Builder(this)
+ .setTitle("PROXY STOP")
+ .setMessage("RRRB")
+ .show();
+ Toast.makeText(this, "service stopping", Toast.LENGTH_SHORT).show();
+ this.buttonStart.setText("Start");
+ }
+ }
+}