diff --git a/app/.gitignore b/app/.gitignore new file mode 100755 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100755 index 0000000..ab74ac0 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,30 @@ +plugins { + id 'com.android.application' +} + +android { + compileSdkVersion 29 + + defaultConfig { + applicationId "com.dymos.vitabrowser" + minSdkVersion 21 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + + implementation 'androidx.leanback:leanback:1.0.0' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100755 index 0000000..64b4a05 --- /dev/null +++ b/app/proguard-rules.pro @@ -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 \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100755 index 0000000..0f4e1f7 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/dymos/vitabrowser/Browser.java b/app/src/main/java/com/dymos/vitabrowser/Browser.java new file mode 100755 index 0000000..2b9e7fe --- /dev/null +++ b/app/src/main/java/com/dymos/vitabrowser/Browser.java @@ -0,0 +1,28 @@ +package com.dymos.vitabrowser; + +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.SearchView; + +public class Browser extends WebViewClient { + EditText searchBar; + WebView webView; + public Browser(EditText searchBar,WebView webView) { + this.searchBar = searchBar; + this.webView = webView; + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String s) { + view.loadUrl(s); + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + searchBar.setHint(webView.getUrl()); + + } +} diff --git a/app/src/main/java/com/dymos/vitabrowser/MainActivity.java b/app/src/main/java/com/dymos/vitabrowser/MainActivity.java new file mode 100755 index 0000000..55d8d3c --- /dev/null +++ b/app/src/main/java/com/dymos/vitabrowser/MainActivity.java @@ -0,0 +1,490 @@ +package com.dymos.vitabrowser; + +import android.Manifest; +import android.app.SearchManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.SystemClock; +import android.speech.RecognitionListener; +import android.speech.RecognizerIntent; +import android.speech.SpeechRecognizer; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebView; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import java.util.ArrayList; +import java.util.Locale; +import java.util.Timer; +import java.util.TimerTask; + +//android:theme="@style/Theme.VitaBrowser" +public class MainActivity extends AppCompatActivity { + private WebView webView; + private ImageView mousePointer; + private CountDownTimer pointerVisibilityTimer; + Timer pointerMoveTimer; + private int velocityX = 0,velocityY = 0,keyCode; + private int screenWidth,screenHeight; + private final int RECORD_REQUEST_CODE= 101,pointerAcceleration = 1; + private Browser browser; + private WebClient webClient; + private int x = 0, y = 0,row,column; + private SearchManager searchManager; + private EditText searchBar ; + private RelativeLayout frame,dialogBack; + private boolean firstDown = true; + private ImageButton voiceButton,forwardButton,backButton,refreshButton; + private SpeechRecognizer speechRecognizer; + private Intent speechRecognizerIntent; + private View[][] panelViews ; + private View focusTemp; + //private static final String desktop_mode = "Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Safari/537.36 Puffin/9.0.0.50278AV"; + //private static final String mobile_mode = "Mozilla/5.0 (Linux; U; Android 4.4; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 MobileSafari/534.30"; + private final int UP = 0,DOWN = 1,LEFT = 2,RIGHT = 3; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + checkPermission(); + + dialogBack = findViewById(R.id.dialog_back); + speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); + + speechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); + speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,Locale.getDefault()); + speechRecognizer.setRecognitionListener(new RecognitionListener() { + @Override + public void onReadyForSpeech(Bundle params) { + + } + + @Override + public void onBeginningOfSpeech() { + + } + + @Override + public void onRmsChanged(float rmsdB) { + + } + + @Override + public void onBufferReceived(byte[] buffer) { + + } + + @Override + public void onEndOfSpeech() { + + } + + @Override + public void onError(int error) { + if(error == 7){ + searchBar.setHint(webView.getUrl()); + voiceButton.setBackground(ContextCompat.getDrawable(MainActivity.this,R.drawable.voice_button_background_default)); + + } + } + + @Override + public void onResults(Bundle bundle) { + ArrayList matches = bundle.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); + voiceButton.setBackground(ContextCompat.getDrawable(MainActivity.this,R.drawable.voice_button_background_default)); + if (matches != null) { + doSearch(matches.get(0)); + } + } + + @Override + public void onPartialResults(Bundle partialResults) { + + } + + @Override + public void onEvent(int eventType, Bundle params) { + + } + }); + frame = findViewById(R.id.frame); + + voiceButton = findViewById(R.id.voice_button); + voiceButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + speechRecognizer.startListening(speechRecognizerIntent); + searchBar.setText(""); + searchBar.setHint("Listening..."); + voiceButton.setBackground(ContextCompat.getDrawable(MainActivity.this,R.drawable.voice_button_background_touched)); + + } + }); + backButton = findViewById(R.id.back_button); + forwardButton = findViewById(R.id.forward_button); + refreshButton = findViewById(R.id.refresh_button); + + backButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!webView.canGoBack()){ + finish(); + }else { + webView.goBack(); + hideView(dialogBack); + } + } + }); + forwardButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + webView.goForward(); + hideView(dialogBack); + } + }); + refreshButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + webView.reload(); + hideView(dialogBack); + } + }); + + mousePointer = findViewById(R.id.mouse_pointer); + searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); + searchBar = findViewById(R.id.search_bar); + //searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); + //searchView.setIconifiedByDefault(false); + searchBar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + InputMethodManager imm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + } + }); + searchBar.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if(actionId == EditorInfo.IME_ACTION_SEARCH){ + doSearch(v.getText().toString()); + //searchView.onActionViewExpanded(); + searchBar.clearFocus(); + InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + in.hideSoftInputFromWindow(v.getWindowToken(), 0); + searchBar.setText(""); + } + return false; + } + }); + searchBar.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + /*Override + public boolean onQueryTextSubmit(String query) { + doSearch(query); + searchView.onActionViewExpanded(); + searchView.clearFocus(); + return false; + } + + @Override + public boolean onQueryTextChange(String query) { + return false; + }*/ + }); + webView = findViewById(R.id.web_view); + webView.setWebViewClient(browser = new Browser(searchBar,webView)); + webView.setWebChromeClient(webClient = new WebClient(this)); + webView.loadUrl("https://www.google.com"); + webView.getSettings().setJavaScriptEnabled(true); + + //webView.getSettings().setUserAgentString("Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Safari/537.36 Puffin/9.0.0.50278AV"); + + webView.getSettings().setSupportMultipleWindows(false); + panelViews = new View[][]{{searchBar, voiceButton}, {backButton,forwardButton,refreshButton}}; + row = 0; + column = 1; + panelViews[row][column].setFocusable(true); + panelViews[row][column].requestFocus(); + panelViews[row][column].setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.voice_button_focus_background)); + + } + private void hideView(View v){ + v.setVisibility(View.GONE); + } + private void checkPermission() { + + if (ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO},RECORD_REQUEST_CODE); + } + } + public void doSearch(String query){ + if(query != null) { + webView.loadUrl("https://www.google.com/search?q=" + query); + hideView(dialogBack); + } + } + + /*@Override + protected void onNewIntent(Intent intent) { + if (Intent.ACTION_SEARCH.equals(intent.getAction())) { + String query = intent.getStringExtra(SearchManager.QUERY); + doSearch(query); + } + super.onNewIntent(intent); + }*/ + @Override + public void onWindowFocusChanged(boolean hasFocus){ + screenWidth = webView.getWidth(); + screenHeight = webView.getHeight(); + } + public void nextView(int num){ + int rowTemp,columnTemp; + rowTemp = row; + columnTemp = column; + switch (num){ + case UP: + case DOWN: + if(row == 0){ + row = 1; + column = 0; + }else if(row == 1){ + row = 0; + column = 1; + } + break; + case LEFT: + if(row == 0){ + if(column == 0){ + column = 1; + }else{ + column--; + } + }else if(row == 1){ + if(column == 0){ + column = 2; + }else{ + column --; + } + } + break; + case RIGHT: + if(row == 0){ + if(column == 1){ + column = 0; + }else{ + column ++; + } + }else if(row == 1){ + if(column == 2){ + column = 0; + }else{ + column ++; + } + } + break; + default: + break; + } + panelViews[rowTemp][columnTemp].clearFocus(); + panelViews[row][column].setFocusable(true); + panelViews[row][column].requestFocus(); + if(rowTemp == 0 ){ + if(columnTemp == 0) { + panelViews[rowTemp][columnTemp].setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.search_bar_background)); + }else{ + panelViews[rowTemp][columnTemp].setBackground(ContextCompat.getDrawable(MainActivity.this,R.drawable.voice_button_background_default)); + } + }else { + panelViews[rowTemp][columnTemp].setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.button_default_background)); + } + if(row == 0 ){ + if(column == 0) { + panelViews[row][column].setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.search_bar_focus_background)); + }else{ + panelViews[row][column].setBackground(ContextCompat.getDrawable(MainActivity.this,R.drawable.voice_button_focus_background)); + } + }else { + panelViews[row][column].setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.button_focus_background)); + } + /*if(row == 0 && column == 0){ + searchView.performClick(); + }*/ +} + public void dialogEvent(int keyCode){ + Log.e("dialogE","dialogEvent"); + //mousePointer.setVisibility(View.GONE); + switch (keyCode){ + case KeyEvent.KEYCODE_BACK: + if(focusTemp != null){ + focusTemp.requestFocus(); + } + focusTemp = getCurrentFocus(); + dialogBack.setVisibility(View.GONE); + break; + case KeyEvent.KEYCODE_DPAD_UP: + nextView(UP); + break; + case KeyEvent.KEYCODE_DPAD_DOWN: + nextView(DOWN); + break; + case KeyEvent.KEYCODE_DPAD_LEFT: + nextView(LEFT); + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + nextView(RIGHT); + break; + case KeyEvent.KEYCODE_DPAD_CENTER: + Log.e("current focus",""+getCurrentFocus()); + getCurrentFocus().performClick(); + break; + default: + break; + } + } + public void movePointer(){ + + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_DOWN: + velocityX = 0; + velocityY += pointerAcceleration; + break; + case KeyEvent.KEYCODE_DPAD_UP: + velocityX = 0; + velocityY -= pointerAcceleration; + break; + case KeyEvent.KEYCODE_DPAD_LEFT: + velocityX -= pointerAcceleration; + velocityY = 0; + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + velocityX += pointerAcceleration; + velocityY = 0; + break; + + default: + break; + } + x += velocityX; + y += velocityY; + if(x + mousePointer.getWidth() / 2 > screenWidth){ + x = screenWidth - mousePointer.getWidth() / 2; + }else if(x < 0){ + x = 0; + } + if(y + mousePointer.getHeight() > screenHeight){ + y = screenHeight - mousePointer.getHeight(); + webView.scrollBy(0, velocityY); + }else if(y < 0){ + webView.scrollBy(0,velocityY); + y = 0; + } + mousePointer.setX(x); + mousePointer.setY(y); + } + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + keyCode = event.getKeyCode(); + if(dialogBack.getVisibility() == View.VISIBLE && event.getAction() != KeyEvent.ACTION_UP){ + dialogEvent(keyCode); + }else{ + if (event.getAction() == KeyEvent.ACTION_UP){ + if(pointerMoveTimer != null) { + pointerMoveTimer.cancel(); + } + firstDown = true; + velocityX = 0; + velocityY = 0; + pointerVisibilityTimer = new CountDownTimer(3 * 1000, 1000){ + @Override + public final void onTick(final long millisUntilFinished) { + } + @Override + public final void onFinish() { + mousePointer.setVisibility(View.GONE); + } + }.start(); + return true; + }else if(event.getAction() == KeyEvent.ACTION_DOWN){ + if(pointerVisibilityTimer != null) { + pointerVisibilityTimer.cancel(); + } + if(mousePointer.getVisibility() == View.GONE) { + mousePointer.setVisibility(View.VISIBLE); + } + } + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_CENTER: + /*if(webClient.isFullScreen()){ + //super.onBackPressed(); + if(paused){ + webView.onResume(); + paused = false; + }else{ + paused = true; + webView.onPause(); + } + }*/ + final long uMillis = SystemClock.uptimeMillis(); + frame.dispatchTouchEvent(MotionEvent.obtain(uMillis, uMillis, + MotionEvent.ACTION_DOWN, x, y, 0)); + frame.dispatchTouchEvent(MotionEvent.obtain(uMillis, uMillis, + MotionEvent.ACTION_UP, x, y, 0)); + break; + case KeyEvent.KEYCODE_BACK: + if(webClient.isFullScreen()){ + webClient.onHideCustomView(); + }else{ + dialogBack.setVisibility(View.VISIBLE); + if(focusTemp != null) { + focusTemp.requestFocus(); + } + } + break; + } + if(firstDown){ + firstDown = false; + pointerMoveTimer = new Timer(); + pointerMoveTimer.schedule(new TimerTask() { + @Override + public void run() { + movePointer(); + } + },0,1000/60); + + } + } + return true; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/dymos/vitabrowser/WebClient.java b/app/src/main/java/com/dymos/vitabrowser/WebClient.java new file mode 100755 index 0000000..4044260 --- /dev/null +++ b/app/src/main/java/com/dymos/vitabrowser/WebClient.java @@ -0,0 +1,57 @@ +package com.dymos.vitabrowser; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.view.View; +import android.webkit.WebChromeClient; +import android.widget.FrameLayout; + +public class WebClient extends WebChromeClient { + private View mCustomView; + private WebChromeClient.CustomViewCallback mCustomViewCallback; + protected FrameLayout mFullscreenContainer; + private int mOriginalOrientation; + private int mOriginalSystemUiVisibility; + private MainActivity mainActivity; + private boolean fullScreen = false; + public WebClient(MainActivity mainActivity) { + this.mainActivity = mainActivity; + } + public boolean isFullScreen(){ + return fullScreen; + } + + public Bitmap getDefaultVideoPoster(){ + if (mainActivity == null) { + return null; + } + return BitmapFactory.decodeResource(mainActivity.getApplicationContext().getResources(), 2130837573); + } + + public void onHideCustomView(){ + fullScreen = false; + ((FrameLayout)mainActivity.getWindow().getDecorView()).removeView(this.mCustomView); + this.mCustomView = null; + mainActivity.getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility); + mainActivity.setRequestedOrientation(this.mOriginalOrientation); + this.mCustomViewCallback.onCustomViewHidden(); + this.mCustomViewCallback = null; + } + + public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback){ + fullScreen = true; + if (this.mCustomView != null) + { + onHideCustomView(); + return; + } + this.mCustomView = paramView; + this.mOriginalSystemUiVisibility = mainActivity.getWindow().getDecorView().getSystemUiVisibility(); + this.mOriginalOrientation = mainActivity.getRequestedOrientation(); + this.mCustomViewCallback = paramCustomViewCallback; + ((FrameLayout)mainActivity.getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1)); + mainActivity.getWindow().getDecorView().setSystemUiVisibility(3846); + this.mCustomViewCallback.onCustomViewHidden(); + + } +} diff --git a/app/src/main/res/drawable-anydpi/ic_back.xml b/app/src/main/res/drawable-anydpi/ic_back.xml new file mode 100755 index 0000000..29ef940 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_back.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_forward.xml b/app/src/main/res/drawable-anydpi/ic_forward.xml new file mode 100755 index 0000000..59a45b3 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_forward.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_mic.xml b/app/src/main/res/drawable-anydpi/ic_mic.xml new file mode 100755 index 0000000..7c7c686 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_mic.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_refresh.xml b/app/src/main/res/drawable-anydpi/ic_refresh.xml new file mode 100755 index 0000000..a4fed72 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_refresh.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_search.xml b/app/src/main/res/drawable-anydpi/ic_search.xml new file mode 100755 index 0000000..13d9163 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_search.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable-hdpi/ic_back.png b/app/src/main/res/drawable-hdpi/ic_back.png new file mode 100755 index 0000000..008935a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_forward.png b/app/src/main/res/drawable-hdpi/ic_forward.png new file mode 100755 index 0000000..d48b0ed Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_forward.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_mic.png b/app/src/main/res/drawable-hdpi/ic_mic.png new file mode 100755 index 0000000..122428d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_mic.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_refresh.png b/app/src/main/res/drawable-hdpi/ic_refresh.png new file mode 100755 index 0000000..8baacc6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_refresh.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_search.png b/app/src/main/res/drawable-hdpi/ic_search.png new file mode 100755 index 0000000..df945b3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_search.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_back.png b/app/src/main/res/drawable-mdpi/ic_back.png new file mode 100755 index 0000000..af321b0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_forward.png b/app/src/main/res/drawable-mdpi/ic_forward.png new file mode 100755 index 0000000..551d7d0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_forward.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_mic.png b/app/src/main/res/drawable-mdpi/ic_mic.png new file mode 100755 index 0000000..6be2104 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_mic.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_refresh.png b/app/src/main/res/drawable-mdpi/ic_refresh.png new file mode 100755 index 0000000..a9e95b0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_refresh.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_search.png b/app/src/main/res/drawable-mdpi/ic_search.png new file mode 100755 index 0000000..af9824a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_search.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_back.png b/app/src/main/res/drawable-xhdpi/ic_back.png new file mode 100755 index 0000000..0749b3f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_forward.png b/app/src/main/res/drawable-xhdpi/ic_forward.png new file mode 100755 index 0000000..3ae6ff1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_forward.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_mic.png b/app/src/main/res/drawable-xhdpi/ic_mic.png new file mode 100755 index 0000000..1b79255 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_mic.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_refresh.png b/app/src/main/res/drawable-xhdpi/ic_refresh.png new file mode 100755 index 0000000..be07305 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_refresh.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_search.png b/app/src/main/res/drawable-xhdpi/ic_search.png new file mode 100755 index 0000000..e1e5edc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_search.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_back.png b/app/src/main/res/drawable-xxhdpi/ic_back.png new file mode 100755 index 0000000..6febf99 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_forward.png b/app/src/main/res/drawable-xxhdpi/ic_forward.png new file mode 100755 index 0000000..2231487 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_forward.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_mic.png b/app/src/main/res/drawable-xxhdpi/ic_mic.png new file mode 100755 index 0000000..c2b9cd6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_mic.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_refresh.png b/app/src/main/res/drawable-xxhdpi/ic_refresh.png new file mode 100755 index 0000000..8ba7173 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_refresh.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_search.png b/app/src/main/res/drawable-xxhdpi/ic_search.png new file mode 100755 index 0000000..66ecb98 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_search.png differ diff --git a/app/src/main/res/drawable/button_default_background.xml b/app/src/main/res/drawable/button_default_background.xml new file mode 100755 index 0000000..ca89043 --- /dev/null +++ b/app/src/main/res/drawable/button_default_background.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/button_focus_background.xml b/app/src/main/res/drawable/button_focus_background.xml new file mode 100755 index 0000000..4cef4f5 --- /dev/null +++ b/app/src/main/res/drawable/button_focus_background.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/search_bar_background.xml b/app/src/main/res/drawable/search_bar_background.xml new file mode 100755 index 0000000..9899627 --- /dev/null +++ b/app/src/main/res/drawable/search_bar_background.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/search_bar_focus_background.xml b/app/src/main/res/drawable/search_bar_focus_background.xml new file mode 100755 index 0000000..ad69a7b --- /dev/null +++ b/app/src/main/res/drawable/search_bar_focus_background.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/voice_button_background_default.xml b/app/src/main/res/drawable/voice_button_background_default.xml new file mode 100755 index 0000000..5f622af --- /dev/null +++ b/app/src/main/res/drawable/voice_button_background_default.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/voice_button_background_touched.xml b/app/src/main/res/drawable/voice_button_background_touched.xml new file mode 100755 index 0000000..9ccd66a --- /dev/null +++ b/app/src/main/res/drawable/voice_button_background_touched.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/voice_button_focus_background.xml b/app/src/main/res/drawable/voice_button_focus_background.xml new file mode 100755 index 0000000..1dd04f9 --- /dev/null +++ b/app/src/main/res/drawable/voice_button_focus_background.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100755 index 0000000..9de84ea --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 0000000..a571e60 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100755 index 0000000..c41dd28 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100755 index 0000000..6dba46d Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_banner_vita.png b/app/src/main/res/mipmap-xxhdpi/ic_banner_vita.png new file mode 100755 index 0000000..f5d3903 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_banner_vita.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100755 index 0000000..15ac681 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vita.jpg b/app/src/main/res/mipmap-xxhdpi/ic_vita.jpg new file mode 100755 index 0000000..92f5bde Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vita.jpg differ diff --git a/app/src/main/res/mipmap-xxhdpi/mouse_pointer.png b/app/src/main/res/mipmap-xxhdpi/mouse_pointer.png new file mode 100755 index 0000000..b7c2248 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/mouse_pointer.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100755 index 0000000..f25a419 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100755 index 0000000..5c43d05 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,12 @@ + + + #3281a8 + #77D5C3 + #123456 + #00FF00 + #FF9800 + #D9D9D9 + #717171 + #FF0000 + #CC000000 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100755 index 0000000..16b1060 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,9 @@ + + Vita Browser + refresh button + back button + forward button + voice button + search bar + mouse pointer + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100755 index 0000000..040311a --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + +