| @@ -0,0 +1 @@ | |||||
| /build | |||||
| @@ -0,0 +1,40 @@ | |||||
| plugins { | |||||
| id 'com.android.application' | |||||
| } | |||||
| android { | |||||
| compileSdkVersion 30 | |||||
| defaultConfig { | |||||
| applicationId "com.nsgk.ruralWeb" | |||||
| minSdkVersion 24 | |||||
| targetSdkVersion 30 | |||||
| versionCode 1 | |||||
| versionName "1.0" | |||||
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |||||
| } | |||||
| buildTypes { | |||||
| release { | |||||
| minifyEnabled false | |||||
| proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | |||||
| } | |||||
| } | |||||
| compileOptions { | |||||
| sourceCompatibility JavaVersion.VERSION_1_8 | |||||
| targetCompatibility JavaVersion.VERSION_1_8 | |||||
| } | |||||
| buildFeatures { | |||||
| viewBinding true | |||||
| } | |||||
| } | |||||
| dependencies { | |||||
| implementation 'androidx.appcompat:appcompat:1.2.0' | |||||
| implementation 'com.google.android.material:material:1.2.1' | |||||
| testImplementation 'junit:junit:4.+' | |||||
| androidTestImplementation 'androidx.test.ext:junit:1.1.2' | |||||
| androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' | |||||
| } | |||||
| @@ -0,0 +1,21 @@ | |||||
| # Add project specific ProGuard rules here. | |||||
| # You can control the set of applied configuration files using the | |||||
| # proguardFiles setting in build.gradle. | |||||
| # | |||||
| # For more details, see | |||||
| # http://developer.android.com/guide/developing/tools/proguard.html | |||||
| # 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 *; | |||||
| #} | |||||
| # Uncomment this to preserve the line number information for | |||||
| # debugging stack traces. | |||||
| #-keepattributes SourceFile,LineNumberTable | |||||
| # If you keep the line number information, uncomment this to | |||||
| # hide the original source file name. | |||||
| #-renamesourcefileattribute SourceFile | |||||
| @@ -0,0 +1,26 @@ | |||||
| package com.nsgk.ruralWeb; | |||||
| import android.content.Context; | |||||
| import androidx.test.platform.app.InstrumentationRegistry; | |||||
| import androidx.test.ext.junit.runners.AndroidJUnit4; | |||||
| import org.junit.Test; | |||||
| import org.junit.runner.RunWith; | |||||
| import static org.junit.Assert.*; | |||||
| /** | |||||
| * Instrumented test, which will execute on an Android device. | |||||
| * | |||||
| * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | |||||
| */ | |||||
| @RunWith(AndroidJUnit4.class) | |||||
| public class ExampleInstrumentedTest { | |||||
| @Test | |||||
| public void useAppContext() { | |||||
| // Context of the app under test. | |||||
| Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); | |||||
| assertEquals("com.nsgk.ruralWeb", appContext.getPackageName()); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,27 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| package="com.nsgk.ruralWeb"> | |||||
| <uses-permission android:name="android.permission.INTERNET"/> | |||||
| <application | |||||
| android:allowBackup="true" | |||||
| android:icon="@mipmap/ic_launcher" | |||||
| android:label="@string/app_name" | |||||
| android:roundIcon="@mipmap/ic_launcher_round" | |||||
| android:supportsRtl="true" | |||||
| android:usesCleartextTraffic="true" | |||||
| android:theme="@style/Theme.Nsgk_rural_web"> | |||||
| <activity | |||||
| android:name=".FullscreenActivity" | |||||
| android:configChanges="orientation|keyboardHidden|screenSize" | |||||
| android:label="@string/app_name" | |||||
| android:theme="@style/Theme.Nsgk_rural_web.Fullscreen"> | |||||
| <intent-filter> | |||||
| <action android:name="android.intent.action.MAIN" /> | |||||
| <category android:name="android.intent.category.LAUNCHER" /> | |||||
| </intent-filter> | |||||
| </activity> | |||||
| </application> | |||||
| </manifest> | |||||
| @@ -0,0 +1,52 @@ | |||||
| package com.nsgk.ruralWeb; | |||||
| import android.annotation.SuppressLint; | |||||
| import androidx.appcompat.app.AppCompatActivity; | |||||
| import android.os.Bundle; | |||||
| import android.view.KeyEvent; | |||||
| import android.webkit.WebResourceRequest; | |||||
| import android.webkit.WebSettings; | |||||
| import android.webkit.WebView; | |||||
| import android.webkit.WebViewClient; | |||||
| import com.nsgk.ruralWeb.databinding.ActivityFullscreenBinding; | |||||
| /** | |||||
| * An example full-screen activity that shows and hides the system UI (i.e. | |||||
| * status bar and navigation/system bar) with user interaction. | |||||
| */ | |||||
| public class FullscreenActivity extends AppCompatActivity { | |||||
| private WebView mWebView; | |||||
| @SuppressLint("SetJavaScriptEnabled") | |||||
| @Override | |||||
| protected void onCreate(Bundle savedInstanceState) { | |||||
| super.onCreate(savedInstanceState); | |||||
| setContentView(R.layout.activity_fullscreen); | |||||
| mWebView = findViewById(R.id.mWebView); | |||||
| WebSettings settings = mWebView.getSettings(); | |||||
| settings.setJavaScriptEnabled(true); | |||||
| mWebView.setWebViewClient(new WebViewClient(){ | |||||
| @Override | |||||
| public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { | |||||
| return false; | |||||
| } | |||||
| }); | |||||
| mWebView.loadUrl("http://www.baidu.com"); | |||||
| } | |||||
| @Override | |||||
| public boolean onKeyDown(int keyCode, KeyEvent event) { | |||||
| if(keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()){ | |||||
| mWebView.goBack(); | |||||
| return true; | |||||
| } | |||||
| return super.onKeyDown(keyCode, event); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| xmlns:aapt="http://schemas.android.com/aapt" | |||||
| android:width="108dp" | |||||
| android:height="108dp" | |||||
| android:viewportWidth="108" | |||||
| android:viewportHeight="108"> | |||||
| <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> | |||||
| <aapt:attr name="android:fillColor"> | |||||
| <gradient | |||||
| android:endX="85.84757" | |||||
| android:endY="92.4963" | |||||
| android:startX="42.9492" | |||||
| android:startY="49.59793" | |||||
| android:type="linear"> | |||||
| <item | |||||
| android:color="#44000000" | |||||
| android:offset="0.0" /> | |||||
| <item | |||||
| android:color="#00000000" | |||||
| android:offset="1.0" /> | |||||
| </gradient> | |||||
| </aapt:attr> | |||||
| </path> | |||||
| <path | |||||
| android:fillColor="#FFFFFF" | |||||
| android:fillType="nonZero" | |||||
| android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" | |||||
| android:strokeWidth="1" | |||||
| android:strokeColor="#00000000" /> | |||||
| </vector> | |||||
| @@ -0,0 +1,170 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <vector xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| android:width="108dp" | |||||
| android:height="108dp" | |||||
| android:viewportWidth="108" | |||||
| android:viewportHeight="108"> | |||||
| <path | |||||
| android:fillColor="#3DDC84" | |||||
| android:pathData="M0,0h108v108h-108z" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M9,0L9,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,0L19,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M29,0L29,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M39,0L39,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M49,0L49,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M59,0L59,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M69,0L69,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M79,0L79,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M89,0L89,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M99,0L99,108" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,9L108,9" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,19L108,19" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,29L108,29" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,39L108,39" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,49L108,49" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,59L108,59" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,69L108,69" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,79L108,79" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,89L108,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M0,99L108,99" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,29L89,29" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,39L89,39" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,49L89,49" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,59L89,59" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,69L89,69" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M19,79L89,79" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M29,19L29,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M39,19L39,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M49,19L49,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M59,19L59,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M69,19L69,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| <path | |||||
| android:fillColor="#00000000" | |||||
| android:pathData="M79,19L79,89" | |||||
| android:strokeWidth="0.8" | |||||
| android:strokeColor="#33FFFFFF" /> | |||||
| </vector> | |||||
| @@ -0,0 +1,15 @@ | |||||
| <?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:background="?attr/fullscreenBackgroundColor" | |||||
| android:theme="@style/ThemeOverlay.Nsgk_rural_web.FullscreenContainer" | |||||
| tools:context=".FullscreenActivity"> | |||||
| <WebView | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| android:id="@+id/mWebView"/> | |||||
| </FrameLayout> | |||||
| @@ -0,0 +1,5 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
| <background android:drawable="@drawable/ic_launcher_background" /> | |||||
| <foreground android:drawable="@drawable/ic_launcher_foreground" /> | |||||
| </adaptive-icon> | |||||
| @@ -0,0 +1,5 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
| <background android:drawable="@drawable/ic_launcher_background" /> | |||||
| <foreground android:drawable="@drawable/ic_launcher_foreground" /> | |||||
| </adaptive-icon> | |||||
| @@ -0,0 +1,21 @@ | |||||
| <resources xmlns:tools="http://schemas.android.com/tools"> | |||||
| <!-- Base application theme. --> | |||||
| <style name="Theme.Nsgk_rural_web" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> | |||||
| <!-- Primary brand color. --> | |||||
| <item name="colorPrimary">@color/purple_200</item> | |||||
| <item name="colorPrimaryVariant">@color/purple_700</item> | |||||
| <item name="colorOnPrimary">@color/black</item> | |||||
| <!-- Secondary brand color. --> | |||||
| <item name="colorSecondary">@color/teal_200</item> | |||||
| <item name="colorSecondaryVariant">@color/teal_200</item> | |||||
| <item name="colorOnSecondary">@color/black</item> | |||||
| <!-- Status bar color. --> | |||||
| <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> | |||||
| <!-- Customize your theme here. --> | |||||
| </style> | |||||
| <style name="ThemeOverlay.Nsgk_rural_web.FullscreenContainer" parent=""> | |||||
| <item name="fullscreenBackgroundColor">@color/light_blue_900</item> | |||||
| <item name="fullscreenTextColor">@color/light_blue_A400</item> | |||||
| </style> | |||||
| </resources> | |||||
| @@ -0,0 +1,6 @@ | |||||
| <resources> | |||||
| <declare-styleable name="FullscreenAttrs"> | |||||
| <attr name="fullscreenBackgroundColor" format="color" /> | |||||
| <attr name="fullscreenTextColor" format="color" /> | |||||
| </declare-styleable> | |||||
| </resources> | |||||
| @@ -0,0 +1,15 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <resources> | |||||
| <color name="purple_200">#FFBB86FC</color> | |||||
| <color name="purple_500">#FF6200EE</color> | |||||
| <color name="purple_700">#FF3700B3</color> | |||||
| <color name="teal_200">#FF03DAC5</color> | |||||
| <color name="teal_700">#FF018786</color> | |||||
| <color name="black">#FF000000</color> | |||||
| <color name="white">#FFFFFFFF</color> | |||||
| <color name="light_blue_600">#FF039BE5</color> | |||||
| <color name="light_blue_900">#FF01579B</color> | |||||
| <color name="light_blue_A200">#FF40C4FF</color> | |||||
| <color name="light_blue_A400">#FF00B0FF</color> | |||||
| <color name="black_overlay">#66000000</color> | |||||
| </resources> | |||||
| @@ -0,0 +1,5 @@ | |||||
| <resources> | |||||
| <string name="app_name">nsgk_rural_web</string> | |||||
| <string name="dummy_button">Dummy Button</string> | |||||
| <string name="dummy_content">DUMMY\nCONTENT</string> | |||||
| </resources> | |||||
| @@ -0,0 +1,11 @@ | |||||
| <resources> | |||||
| <style name="Widget.Theme.Nsgk_rural_web.ActionBar.Fullscreen" parent="Widget.AppCompat.ActionBar"> | |||||
| <item name="android:background">@color/black_overlay</item> | |||||
| </style> | |||||
| <style name="Widget.Theme.Nsgk_rural_web.ButtonBar.Fullscreen" parent=""> | |||||
| <item name="android:background">@color/black_overlay</item> | |||||
| <item name="android:buttonBarStyle">?android:attr/buttonBarStyle</item> | |||||
| </style> | |||||
| </resources> | |||||
| @@ -0,0 +1,29 @@ | |||||
| <resources xmlns:tools="http://schemas.android.com/tools"> | |||||
| <!-- Base application theme. --> | |||||
| <style name="Theme.Nsgk_rural_web" parent="Theme.MaterialComponents.DayNight.NoActionBar"> | |||||
| <!-- Primary brand color. --> | |||||
| <item name="colorPrimary">@color/purple_500</item> | |||||
| <item name="colorPrimaryVariant">@color/purple_700</item> | |||||
| <item name="colorOnPrimary">@color/white</item> | |||||
| <!-- Secondary brand color. --> | |||||
| <item name="colorSecondary">@color/teal_200</item> | |||||
| <item name="colorSecondaryVariant">@color/teal_700</item> | |||||
| <item name="colorOnSecondary">@color/black</item> | |||||
| <!-- Status bar color. --> | |||||
| <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> | |||||
| <!-- Customize your theme here. --> | |||||
| </style> | |||||
| <style name="Theme.Nsgk_rural_web.Fullscreen" parent="Theme.Nsgk_rural_web"> | |||||
| <item name="android:actionBarStyle"> | |||||
| @style/Widget.Theme.Nsgk_rural_web.ActionBar.Fullscreen | |||||
| </item> | |||||
| <item name="android:windowActionBarOverlay">true</item> | |||||
| <item name="android:windowBackground">@null</item> | |||||
| </style> | |||||
| <style name="ThemeOverlay.Nsgk_rural_web.FullscreenContainer" parent=""> | |||||
| <item name="fullscreenBackgroundColor">@color/light_blue_600</item> | |||||
| <item name="fullscreenTextColor">@color/light_blue_A200</item> | |||||
| </style> | |||||
| </resources> | |||||
| @@ -0,0 +1,17 @@ | |||||
| package com.nsgk.ruralWeb; | |||||
| import org.junit.Test; | |||||
| import static org.junit.Assert.*; | |||||
| /** | |||||
| * Example local unit test, which will execute on the development machine (host). | |||||
| * | |||||
| * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | |||||
| */ | |||||
| public class ExampleUnitTest { | |||||
| @Test | |||||
| public void addition_isCorrect() { | |||||
| assertEquals(4, 2 + 2); | |||||
| } | |||||
| } | |||||