diff options
author | Daniel Weipert <code@drogueronin.de> | 2023-04-29 10:07:00 +0200 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2023-04-29 10:07:00 +0200 |
commit | 2259ae916239a3e6a84226583edc610a578cb98e (patch) | |
tree | fe439e1985b795832d4cad62c583b21dc6cfc832 /app |
initial commit
Diffstat (limited to 'app')
-rw-r--r-- | app/java/AndroidManifest.xml | 41 | ||||
-rw-r--r-- | app/java/BUILD | 14 | ||||
-rw-r--r-- | app/java/res/layout/main.xml | 29 | ||||
-rw-r--r-- | app/java/res/values/dimens.xml | 4 | ||||
-rw-r--r-- | app/java/res/values/strings.xml | 10 | ||||
-rw-r--r-- | app/java/src/DNSService.java | 33 | ||||
-rw-r--r-- | app/java/src/MainActivity.java | 68 |
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"); + } + } +} |