Refactoring

master
Dmitry Isaenko 2020-10-02 02:54:11 +03:00
parent f867ddd699
commit 405a3c6ccb
88 changed files with 753 additions and 720 deletions

View File

@ -1,8 +1,8 @@
NoWOL
### NoWOL
![License](https://img.shields.io/badge/License-GPLv3-blue.svg)
Android application to rule PC power management. A part of NoWOL project.
[https://developersu.blogspot.com/2018/04/nowol-2.html](https://developersu.blogspot.com/2018/04/nowol-2.html)
License: GNU GPL v.3.
Dmitry Isaenko
2017, Russia
2017-2020, Russia

View File

@ -4,11 +4,11 @@ android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.blogspot.developersu.nowol.nowol"
applicationId "com.blogspot.developersu.nowol"
minSdkVersion 14
targetSdkVersion 29
versionCode 4
versionName "4.0"
versionCode 5
versionName "5.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
@ -18,6 +18,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blogspot.developersu.nowol.nowol">
package="com.blogspot.developersu.nowol">
<!--
<permission android:name="com.blogspot.developersu.nowol.nowol"
@ -12,12 +12,11 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".MainActivity">
<intent-filter>
@ -26,8 +25,8 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!---->
<receiver android:name=".com.blogspot.developersu.nowol.nowol.widget.NoWolWidget">
<receiver android:name=".widget.NoWolWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
@ -41,7 +40,7 @@
android:name=".SendRequestService"
android:exported="false" />
<activity android:name=".com.blogspot.developersu.nowol.nowol.widget.WidgetConfigurator">
<activity android:name=".widget.WidgetConfigurator">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,218 @@
/*
Copyright 2017-2020 Dmitry Isaenko
This file is part of NoWOL.
NoWOL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NoWOL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NoWOL. If not, see <https://www.gnu.org/licenses/>.
*/
package com.blogspot.developersu.nowol;
import android.app.Dialog;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.ResultReceiver;
import android.os.Bundle;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import com.blogspot.developersu.nowol.widget.NoWolWidget;
import com.google.android.material.snackbar.Snackbar;
import static com.blogspot.developersu.nowol.ServerReplies.*;
public class MainActivity extends AppCompatActivity {
private TextView hostAddress,
statusLbl;
private Intent SendRequestIntent;
private int status = -2;
private SharedPreferences settings;
private class MyResultReciever extends ResultReceiver{
MyResultReciever(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
status = resultCode;
updateServerStatusText(resultCode);
showSnackBarNotice(resultCode);
}
}
private void doRequest(String url) {
SendRequestIntent.putExtra("url", url);
startService(SendRequestIntent);
}
private void inform(String textToShow){
Snackbar.make(findViewById(android.R.id.content), textToShow, Snackbar.LENGTH_SHORT).show();
}
// provide toolbar options
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater infMenu = getMenuInflater();
infMenu.inflate(R.menu.toolbar_main, menu);
return true;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("STATE", status);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyResultReciever myReciever = new MyResultReciever(null);
SendRequestIntent = new Intent(this, SendRequestService.class);
SendRequestIntent.putExtra("receiver", myReciever);
// toolbar setup start
Toolbar toolBar = findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
getSupportActionBar();
// toolbar setup end
hostAddress = findViewById(R.id.hostNameStaticMain);
statusLbl = findViewById(R.id.statusTxtMainAct);
if (savedInstanceState != null){
status = savedInstanceState.getInt("STATE");
updateServerStatusText(status);
}
Button powerBtn = findViewById(R.id.pwrBntMainAct);
Button power5Btn = findViewById(R.id.pwr5BntMainAct);
Button resetBtn = findViewById(R.id.resBntMainAct);
// Set request queue for Volley
settings = getSharedPreferences("NoWolPreferences", MODE_PRIVATE);
hostAddress.setText(settings.getString("Host", getResources().getString(R.string.hostNameDefault)));
final Button.OnClickListener ActionButtonsListener = event -> {
switch (event.getId()) {
case R.id.pwrBntMainAct:
doRequest(hostAddress.getText().toString() + "/?POWER0=on");
break;
case R.id.pwr5BntMainAct:
doRequest(hostAddress.getText().toString() + "/?POWER1=on");
break;
case R.id.resBntMainAct:
doRequest(hostAddress.getText().toString() + "/?RESET=on");
}
};
// RequestQueue
powerBtn.setOnClickListener(ActionButtonsListener);
power5Btn.setOnClickListener(ActionButtonsListener);
resetBtn.setOnClickListener(ActionButtonsListener);
}
private void updateServerStatusText(int status){
switch (status) {
case STATE_ON:
statusLbl.setText(getResources().getString(R.string.statusOnline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimaryDark));
break;
case STATE_OFF:
statusLbl.setText(getResources().getString(R.string.statusOffline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorRed));
break;
case STATE_UNKNOWN:
statusLbl.setText(getResources().getString(R.string.noResponse));
statusLbl.setTextColor(hostAddress.getTextColors());
break;
}
}
private void showSnackBarNotice(int status) {
switch (status) {
case STATE_ON:
inform(getResources().getString(R.string.statusOnline));
break;
case STATE_OFF:
inform(getResources().getString(R.string.statusOffline));
break;
case STATE_UNKNOWN:
inform(getResources().getString(R.string.noResponse) + hostAddress.getText().toString());
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.refreshMenu: /* Button requests status */
doRequest(hostAddress.getText().toString());
break;
case R.id.changeHostMenu: /* Button requests pop-up window */
showSettingsDialog();
}
return true;
}
private void showSettingsDialog(){
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.settings_popup);
dialog.setTitle(getString(R.string.popupTitle));
EditText input = (EditText) dialog.findViewById(R.id.input);
input.setText(hostAddress.getText());
Button confirmButton = (Button) dialog.findViewById(R.id.confirm);
confirmButton.setOnClickListener(event -> {
updateAllUsingNewIp(input.getText());
dialog.dismiss();
});
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
dialog.show();
}
private void updateAllUsingNewIp(Editable newIpAddress){
hostAddress.setText(newIpAddress);
// TODO:fix
inform(getResources().getString(R.string.hostLblMain) + newIpAddress);
settings.edit().putString("Host", newIpAddress.toString()).apply();
/* Update widgets by sending broadcast intent */
Intent updateWidgetIntent = new Intent(this, NoWolWidget.class);
updateWidgetIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(this, NoWolWidget.class));
updateWidgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
sendBroadcast(updateWidgetIntent);
}
@Override
protected void onDestroy() {
super.onDestroy();
stopService(SendRequestIntent); // just in case
}
}

View File

@ -0,0 +1,98 @@
/*
Copyright 2017-2020 Dmitry Isaenko
This file is part of NoWOL.
NoWOL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NoWOL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NoWOL. If not, see <https://www.gnu.org/licenses/>.
*/
package com.blogspot.developersu.nowol;
import android.app.IntentService;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.widget.RemoteViews;
import androidx.core.content.ContextCompat;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import static com.blogspot.developersu.nowol.ServerReplies.*;
public class SendRequestService extends IntentService {
private ResultReceiver resReceiver;
public SendRequestService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle == null)
return;
String url = bundle.getString("url");
resReceiver = bundle.getParcelable("receiver");
final int appWidgetId = bundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
RequestQueue queueStd = Volley.newRequestQueue(this);
StringRequest strRequest = new StringRequest(Request.Method.GET, url, //will be 4 requests
response -> {
if (response.contains("00c600"))
sendData(STATE_ON, appWidgetId);
else
sendData(STATE_OFF, appWidgetId);
}, error -> sendData(STATE_UNKNOWN, appWidgetId));
queueStd.add(strRequest);
}
private void sendData(int state, int widgetId){
final int greenColor = ContextCompat.getColor(this, R.color.colorPrimary);
final int redColor = ContextCompat.getColor(this, R.color.colorRed);
final int orangeColor = ContextCompat.getColor(this, R.color.colorOrange);
// MainActivity requested
if (widgetId == 0){
resReceiver.send(state, null);
}
switch (state){
case STATE_ON:
setWidgetTextColorIndication(widgetId, getResources().getString(R.string.statusOnline), greenColor);
break;
case STATE_OFF:
setWidgetTextColorIndication(widgetId, getResources().getString(R.string.statusOffline), redColor);
break;
case STATE_UNKNOWN:
setWidgetTextColorIndication(widgetId, getResources().getString(R.string.noResponse), orangeColor);
break;
}
}
private void setWidgetTextColorIndication(int widgetId, String text, int color){
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.no_wol_widget);
remoteViews.setTextViewText(R.id.widgetStatusText, text);
remoteViews.setInt(R.id.widgetHeaderLayout, "setBackgroundColor", color);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}

View File

@ -0,0 +1,25 @@
/*
Copyright 2017-2020 Dmitry Isaenko
This file is part of NoWOL.
NoWOL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NoWOL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NoWOL. If not, see <https://www.gnu.org/licenses/>.
*/
package com.blogspot.developersu.nowol;
public class ServerReplies {
public static final int STATE_ON = 1;
public static final int STATE_OFF = 0;
public static final int STATE_UNKNOWN = -1;
}

View File

@ -1,205 +0,0 @@
package com.blogspot.developersu.nowol.nowol;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.ResultReceiver;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import com.blogspot.developersu.nowol.nowol.com.blogspot.developersu.nowol.nowol.widget.NoWolWidget;
import com.google.android.material.snackbar.Snackbar;
public class MainActivity extends AppCompatActivity implements popUp.pupUpRetuningValueListener {
private TextView hostAddress;
private TextView statusLbl;
Intent SendRequestIntent;
private int status = -2;
SharedPreferences.Editor settingsEditor;
// define reciever for the data we got from service
private class MyResultReciever extends ResultReceiver{
MyResultReciever(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
switch (resultCode) {
case 1:
inform(getResources().getString(R.string.statusOnline));
statusLbl.setText(getResources().getString(R.string.statusOnline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimaryDark));
break;
case 0:
inform(getResources().getString(R.string.statusOffline));
statusLbl.setText(getResources().getString(R.string.statusOffline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorRed));
break;
case -1:
inform(getResources().getString(R.string.noResponse) + hostAddress.getText().toString());
statusLbl.setText(getResources().getString(R.string.noResponse));
statusLbl.setTextColor(hostAddress.getTextColors());
break;
default: break;
}
status = resultCode;
}
}
//reciever end
private void doRequest(String url) {
SendRequestIntent.putExtra("url", url);
startService(SendRequestIntent);
}
private void inform(String textToShow){
//Toast.makeText(this, textToShow, Toast.LENGTH_SHORT).show();
// .setGravity(Gravity.TOP|Gravity.BOTTOM,0,0)
Snackbar.make(findViewById(android.R.id.content), textToShow, Snackbar.LENGTH_SHORT).show();
// SOME GOODS APPEARS SUDDENLY android.R.id.content gives you the root element of a view, without having to know its actual name/type/ID.
}
// provide toolbar options
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater infMenu = getMenuInflater();
infMenu.inflate(R.menu.toolbar_main, menu);
return true;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("STATE", status);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyResultReciever myReciever = new MyResultReciever(null);
SendRequestIntent = new Intent(this, SendRequestService.class);
SendRequestIntent.putExtra("reciever", myReciever);
// toolbar setup start
Toolbar toolBar = findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
getSupportActionBar();
// toolbar setup end
hostAddress = findViewById(R.id.hostNameStaticMain);
statusLbl = findViewById(R.id.statusTxtMainAct);
if (savedInstanceState != null){
status = savedInstanceState.getInt("STATE");
switch (status) {
case 1:
inform(getResources().getString(R.string.statusOnline));
statusLbl.setText(getResources().getString(R.string.statusOnline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimaryDark));
break;
case 0:
inform(getResources().getString(R.string.statusOffline));
statusLbl.setText(getResources().getString(R.string.statusOffline));
statusLbl.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.colorRed));
break;
case -1:
inform(getResources().getString(R.string.noResponse) + hostAddress.getText().toString());
statusLbl.setText(getResources().getString(R.string.noResponse));
statusLbl.setTextColor(hostAddress.getTextColors());
break;
}
}
Button powerBtn = findViewById(R.id.pwrBntMainAct);
Button power5Btn = findViewById(R.id.pwr5BntMainAct);
Button resetBtn = findViewById(R.id.resBntMainAct);
// Set request queue for Volley
SharedPreferences settings = getSharedPreferences("NoWolPreferences", MODE_PRIVATE);
hostAddress.setText(settings.getString("Host", getResources().getString(R.string.hostNameDefault)));
settingsEditor = settings.edit();
final Button.OnClickListener ActionButtonsListener = new Button.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pwrBntMainAct:
doRequest(hostAddress.getText().toString() + "/?POWER0=on");
break;
case R.id.pwr5BntMainAct:
doRequest(hostAddress.getText().toString() + "/?POWER1=on");
break;
case R.id.resBntMainAct:
doRequest(hostAddress.getText().toString() + "/?RESET=on");
break;
default:
break;
}
}
};
// RequestQueue
powerBtn.setOnClickListener(ActionButtonsListener);
power5Btn.setOnClickListener(ActionButtonsListener);
resetBtn.setOnClickListener(ActionButtonsListener);
}
@Override
public void onFinishEdit (String hostNameReSet){
hostAddress.setText(hostNameReSet);
inform(getResources().getString(R.string.hostLblMain) + hostNameReSet);
settingsEditor.putString("Host", hostNameReSet);
settingsEditor.commit();
/*
Update widgets by sending broadcast intent
*/
Intent updateWidgetIntent = new Intent(this, NoWolWidget.class);
updateWidgetIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
AppWidgetManager awm = AppWidgetManager.getInstance(this);
int[] IDs = awm.getAppWidgetIds(new ComponentName(this, NoWolWidget.class));
updateWidgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, IDs);
getApplicationContext().sendBroadcast(updateWidgetIntent);
/*
broadcast end
*/
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.refreshMenu: /* Button requests status */
doRequest(hostAddress.getText().toString());
break;
case R.id.changeHostMenu: /* Button requests pop-up window */
popUp N = popUp.newInstance(hostAddress.getText());
N.show(this.getSupportFragmentManager(), "tst");
break;
default:
//onOptionsItemSelected(item);
break;
}
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
stopService(SendRequestIntent); // just in case
}
}

View File

@ -1,92 +0,0 @@
package com.blogspot.developersu.nowol.nowol;
import android.app.IntentService;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.widget.RemoteViews;
import androidx.core.content.ContextCompat;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
public class SendRequestService extends IntentService {
private static final int STATE_ON = 1;
private static final int STATE_OFF = 0;
private static final int STATE_UNKNOWN = -1;
private ResultReceiver resReceiver;
public SendRequestService() {
super("MyIntentService");
}
private void sendData(int state, int awID){
// MainActivity requested
if (awID == 0) {
// Log.d("qwerty1212", "MainActivity case. Status = " + Integer.toString(state) + " awID = " + Integer.toString(awID));
resReceiver.send(state, null);
}
RemoteViews rv = new RemoteViews(getPackageName(), R.layout.no_wol_widget);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
switch (state){
case STATE_ON:
rv.setTextViewText(R.id.widgetStatusText, getResources().getString(R.string.statusOnline));
rv.setInt(R.id.widgetHeaderLayout, "setBackgroundColor", ContextCompat.getColor(this, R.color.colorPrimary));
// Log.d("qwerty1212", "case 1 widget");
break;
case STATE_OFF:
rv.setTextViewText(R.id.widgetStatusText, getResources().getString(R.string.statusOffline));
rv.setInt(R.id.widgetHeaderLayout, "setBackgroundColor", ContextCompat.getColor(this, R.color.colorRed));
// Log.d("qwerty1212", "case 0 widget");
break;
case STATE_UNKNOWN:
rv.setTextViewText(R.id.widgetStatusText, getResources().getString(R.string.noResponse));
rv.setInt(R.id.widgetHeaderLayout, "setBackgroundColor", ContextCompat.getColor(this, R.color.colorOrange));
// Log.d("qwerty1212", "case -1 widget");
break;
}
appWidgetManager.updateAppWidget(awID, rv);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent == null)
return;
// Log.d("service", "Got intent");
Bundle bndle = intent.getExtras();
String url = bndle.getString("url");
resReceiver = bndle.getParcelable("reciever");
final int awID = bndle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
// Log.d("qwerty1212", "got from " + Integer.toString(awID) +" "+ url);
RequestQueue queueStd = Volley.newRequestQueue(this);
StringRequest strRequest = new StringRequest(Request.Method.GET, url, //will be 4 requests
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.contains("00c600")){
sendData(STATE_ON, awID);
} else {
sendData(STATE_OFF, awID);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
sendData(STATE_UNKNOWN, awID);
}
});
queueStd.add(strRequest);
}
}

View File

@ -1,93 +0,0 @@
package com.blogspot.developersu.nowol.nowol.com.blogspot.developersu.nowol.nowol.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.widget.RemoteViews;
import com.blogspot.developersu.nowol.nowol.R;
import com.blogspot.developersu.nowol.nowol.SendRequestService;
public class NoWolWidget extends AppWidgetProvider {
private void setRequests(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIDs){
SharedPreferences sharedSettings = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE);
String hostIP = sharedSettings.getString("Host", context.getResources().getString(R.string.hostNameDefault));
int bgColor = sharedSettings.getInt("WidgetBgColor", Color.BLACK);
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.no_wol_widget);
rv.setInt(R.id.widgetBasicLayout, "setBackgroundColor", bgColor);
for (int appWidgetId : appWidgetIDs) {
//refresh
Intent refreshIntent = new Intent(context, SendRequestService.class);
refreshIntent.putExtra("url", hostIP);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent refreshPendingIntent = PendingIntent.getService(context, appWidgetId+1, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBntRefresh, refreshPendingIntent);
//reset
Intent resetIntent = new Intent(context, SendRequestService.class);
resetIntent.putExtra("url", hostIP + "/?RESET=on");
resetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent resetPendingIntent = PendingIntent.getService(context, appWidgetId+2, resetIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnReset, resetPendingIntent);
//power
Intent powerIntent = new Intent(context, SendRequestService.class);
powerIntent.putExtra("url", hostIP + "/?POWER0=on");
powerIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent powerPendingIntent = PendingIntent.getService(context, appWidgetId+3, powerIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnPwr, powerPendingIntent);
//power5
Intent power5Intent = new Intent(context, SendRequestService.class);
power5Intent.putExtra("url", hostIP + "/?POWER1=on");
power5Intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent power5PendingIntent = PendingIntent.getService(context, appWidgetId+4, power5Intent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnPwr5, power5PendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, rv);
context.startService(refreshIntent);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
setRequests(context, appWidgetManager, appWidgetIds);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, NoWolWidget.class));
setRequests(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
onEnabled(context);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
}

View File

@ -1,131 +0,0 @@
package com.blogspot.developersu.nowol.nowol.com.blogspot.developersu.nowol.nowol.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.blogspot.developersu.nowol.nowol.R;
import com.blogspot.developersu.nowol.nowol.SendRequestService;
import com.google.android.material.switchmaterial.SwitchMaterial;
public class WidgetConfigurator extends AppCompatActivity {
private SeekBar opacityBar;
private SwitchMaterial bkgoundSwitch;
private void generateWidgetAndDie(int awID, Context context){
SharedPreferences.Editor settingsEditor;
RemoteViews rv = new RemoteViews(this.getPackageName(), R.layout.no_wol_widget);
AppWidgetManager awm = AppWidgetManager.getInstance(this);
// get shared preferences
SharedPreferences sharedSettings = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE);
String hostIP = sharedSettings.getString("Host", context.getResources().getString(R.string.hostNameDefault));
// set setting editor to store background color set for all our widgets
settingsEditor = sharedSettings.edit();
// @TODO set pending intents linkage to buttons
Intent refreshIntent = new Intent(context, SendRequestService.class);
refreshIntent.putExtra("url", hostIP);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
PendingIntent refreshPendingIntent = PendingIntent.getService(context, awID+1, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBntRefresh, refreshPendingIntent);
//reset
Intent resetIntent = new Intent(context, SendRequestService.class);
resetIntent.putExtra("url", hostIP + "/?RESET=on");
resetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
PendingIntent resetPendingIntent = PendingIntent.getService(context, awID+2, resetIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnReset, resetPendingIntent);
//power
Intent powerIntent = new Intent(context, SendRequestService.class);
powerIntent.putExtra("url", hostIP + "/?POWER0=on");
powerIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
PendingIntent powerPendingIntent = PendingIntent.getService(context, awID+3, powerIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnPwr, powerPendingIntent);
//power5
Intent power5Intent = new Intent(context, SendRequestService.class);
power5Intent.putExtra("url", hostIP + "/?POWER1=on");
power5Intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
PendingIntent power5PendingIntent = PendingIntent.getService(context, awID+4, power5Intent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetBtnPwr5, power5PendingIntent);
if (bkgoundSwitch.isChecked()){
rv.setInt(R.id.widgetBasicLayout, "setBackgroundColor", Color.argb(255-opacityBar.getProgress()*255/100, 0xff,0xff,0xff));
settingsEditor.putInt("WidgetBgColor", Color.argb(255-opacityBar.getProgress()*255/100, 0xff,0xff,0xff));
Log.d("qwerty1212", Integer.toString(Color.argb(255-opacityBar.getProgress()*255/100, 0xff,0xff,0xff)));
}
else{
rv.setInt(R.id.widgetBasicLayout, "setBackgroundColor", Color.argb(255-opacityBar.getProgress()*255/100, 0x00,0x00,0x00));
settingsEditor.putInt("WidgetBgColor", Color.argb(255-opacityBar.getProgress()*255/100, 0x00,0x00,0x00));
Log.d("qwerty1212", Integer.toString(Color.argb(255-opacityBar.getProgress()*255/100, 0x00,0x00,0x00)));
}
settingsEditor.apply();
awm.updateAppWidget(awID,rv);
// Send intent to widget
Intent resultIntent = new Intent();
resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
setResult(RESULT_OK, resultIntent);
//send intent to service to request widget status
startService(refreshIntent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_widget_configurator);
Button submitBtn = findViewById(R.id.configBtnSubmit);
opacityBar = findViewById(R.id.configSeekBar);
bkgoundSwitch = findViewById(R.id.configSwitch);
final TextView opacityLbl = findViewById(R.id.configOpacityLbl);
// Prepare seekBar element
opacityLbl.setText(getString(R.string.confOpacity) + " " + opacityBar.getProgress()+"%");
opacityBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
opacityLbl.setText(getString(R.string.confOpacity) + " " + i + "%");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
bkgoundSwitch.setText(getString(R.string.confWhite));
// Cover widget intent
Intent initialConfIntent = getIntent();
Bundle initialConfIntentBundle = initialConfIntent.getExtras();
// Set logic
if (initialConfIntentBundle != null){
final int awID = initialConfIntentBundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d("qwerty1212", Integer.toString(opacityBar.getProgress()*255/100));
generateWidgetAndDie(awID, getApplicationContext());
}
});
} else
finish();
}
}

View File

@ -1,58 +0,0 @@
package com.blogspot.developersu.nowol.nowol;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import androidx.fragment.app.DialogFragment;
public class popUp extends DialogFragment {
private EditText hostName;
private Button submit;
public interface pupUpRetuningValueListener{
void onFinishEdit(String hostNameReSet);
}
public static popUp newInstance(CharSequence ipRecieved){
popUp f = new popUp();
Bundle myBundle = new Bundle();
myBundle.putCharSequence("ipRec", ipRecieved);
f.setArguments(myBundle);
return f;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//getDialog().setTitle(R.string.hostChBntMain);
View v = inflater.inflate(R.layout.popup, container, false);
submit = (Button) v.findViewById(R.id.popupHostBtn);
hostName = (EditText) v.findViewById(R.id.popUpHostText);
hostName.setText(getArguments().getCharSequence("ipRec"));
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pupUpRetuningValueListener retLs = (pupUpRetuningValueListener)getActivity();
retLs.onFinishEdit(hostName.getText().toString());
dismiss();
}
});
return v;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
}

View File

@ -0,0 +1,101 @@
/*
Copyright 2017-2020 Dmitry Isaenko
This file is part of NoWOL.
NoWOL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NoWOL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NoWOL. If not, see <https://www.gnu.org/licenses/>.
*/
package com.blogspot.developersu.nowol.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.RemoteViews;
import com.blogspot.developersu.nowol.R;
import com.blogspot.developersu.nowol.SendRequestService;
public class NoWolWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)){
int[] widgetIDs = intent.getExtras().getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
for (int widgetID : widgetIDs){
updateAppWidget(context, AppWidgetManager.getInstance(context), widgetID);
}
}
else
super.onReceive(context, intent);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
WidgetConfigurator.deleteBgColorPref(context, appWidgetId);
}
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
int widgetBgColor = WidgetConfigurator.loadBgColorPref(context, appWidgetId);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.no_wol_widget);
remoteViews.setInt(R.id.widgetBodyLayout, "setBackgroundColor", widgetBgColor);
//
SharedPreferences sharedSettings = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE);
String hostIP = sharedSettings.getString("Host", context.getResources().getString(R.string.hostNameDefault));
remoteViews.setOnClickPendingIntent(R.id.widgetBntRefresh,
createPendingIntent(context, appWidgetId, hostIP, appWidgetId+1)); // Refresh
remoteViews.setOnClickPendingIntent(R.id.widgetBtnReset,
createPendingIntent(context, appWidgetId, hostIP + "/?RESET=on", appWidgetId+2));
remoteViews.setOnClickPendingIntent(R.id.widgetBtnPwr,
createPendingIntent(context, appWidgetId, hostIP + "/?POWER0=on", appWidgetId+3));
remoteViews.setOnClickPendingIntent(R.id.widgetBtnPwr5,
createPendingIntent(context, appWidgetId, hostIP + "/?POWER1=on", appWidgetId+4));
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
// Ping serv TODO: FIX
Intent refreshIntent = new Intent(context, SendRequestService.class);
refreshIntent.putExtra("url", hostIP);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
context.startService(refreshIntent);
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
private static PendingIntent createPendingIntent(Context context, int widgetId, String linkAddress, int code){
Intent intent = new Intent(context, SendRequestService.class);
intent.putExtra("url", linkAddress);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
return PendingIntent.getService(context, code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
}

View File

@ -0,0 +1,140 @@
/*
Copyright 2017-2020 Dmitry Isaenko
This file is part of NoWOL.
NoWOL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NoWOL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NoWOL. If not, see <https://www.gnu.org/licenses/>.
*/
package com.blogspot.developersu.nowol.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.blogspot.developersu.nowol.R;
import com.blogspot.developersu.nowol.SendRequestService;
import com.google.android.material.switchmaterial.SwitchMaterial;
public class WidgetConfigurator extends AppCompatActivity {
private SeekBar opacityBar;
private SwitchMaterial bgColorSwitch;
private Context context;
private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(RESULT_CANCELED);
setContentView(R.layout.activity_widget_configurator);
Button submitBtn = findViewById(R.id.configBtnSubmit);
opacityBar = findViewById(R.id.configSeekBar);
bgColorSwitch = findViewById(R.id.configSwitch);
final TextView opacityLbl = findViewById(R.id.configOpacityLbl);
opacityLbl.setText(getString(R.string.confOpacity, 0));
opacityBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
opacityLbl.setText(getString(R.string.confOpacity, i));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
this.context = getApplicationContext();
// Cover widget intent
Intent initialConfIntent = getIntent();
Bundle initialConfBundle = initialConfIntent.getExtras();
if (initialConfBundle != null) {
appWidgetId = initialConfBundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
return;
}
submitBtn.setOnClickListener(view -> createWidget());
}
private void createWidget(){
RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.no_wol_widget);
SharedPreferences sharedSettings = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE);
String hostIP = sharedSettings.getString("Host", context.getResources().getString(R.string.hostNameDefault));
SharedPreferences.Editor settingsEditor = sharedSettings.edit();
remoteViews.setOnClickPendingIntent(R.id.widgetBntRefresh,
createPendingIntent(hostIP, appWidgetId+1)); // Refresh
remoteViews.setOnClickPendingIntent(R.id.widgetBtnReset,
createPendingIntent(hostIP + "/?RESET=on", appWidgetId+2));
remoteViews.setOnClickPendingIntent(R.id.widgetBtnPwr,
createPendingIntent(hostIP + "/?POWER0=on", appWidgetId+3));
remoteViews.setOnClickPendingIntent(R.id.widgetBtnPwr5,
createPendingIntent(hostIP + "/?POWER1=on", appWidgetId+4));
int bgColor = getBackgoundColor();
remoteViews.setInt(R.id.widgetBodyLayout, "setBackgroundColor", bgColor);
settingsEditor.putInt("WidgetBgColor" + appWidgetId, bgColor).apply();
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
// Send intent to widget
Intent resultIntent = new Intent();
resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, resultIntent);
finish();
}
private PendingIntent createPendingIntent(String linkAddress, int code){
Intent intent = new Intent(context, SendRequestService.class);
intent.putExtra("url", linkAddress);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
return PendingIntent.getService(context, code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
private int getBackgoundColor(){
if (bgColorSwitch.isChecked())
return Color.argb(255-opacityBar.getProgress()*255/100, 0xff,0xff,0xff);
else
return Color.argb(255-opacityBar.getProgress()*255/100, 0x00,0x00,0x00);
}
static int loadBgColorPref(Context context, int appWidgetId) {
SharedPreferences prefs = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE);
return prefs.getInt("WidgetBgColor" + appWidgetId, Color.argb(255, 0x00,0x00,0x00));
}
static void deleteBgColorPref(Context context, int appWidgetId) {
SharedPreferences.Editor prefs = context.getSharedPreferences("NoWolPreferences", Context.MODE_PRIVATE).edit();
prefs.remove("WidgetBgColor" + appWidgetId);
prefs.apply();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,5 @@
<vector android:height="48dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M13,3h-2v10h2L13,3zM17.83,5.17l-1.42,1.42C17.99,7.86 19,9.81 19,12c0,3.87 -3.13,7 -7,7s-7,-3.13 -7,-7c0,-2.19 1.01,-4.14 2.58,-5.42L6.17,5.17C4.23,6.82 3,9.26 3,12c0,4.97 4.03,9 9,9s9,-4.03 9,-9c0,-2.74 -1.23,-5.18 -3.17,-6.83z"/>
</vector>

View File

@ -0,0 +1,4 @@
<vector android:height="48dp" android:viewportHeight="24"
android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="m11,3v3.5898h2L13,3ZM6.1699,5.1699c-3.79,3.22 -4.2493,8.8995 -1.0293,12.6895 3.22,3.78 8.8995,4.2415 12.6895,1.0215C19.8501,17.1709 21,14.65 21,12 21,9.37 19.8401,6.8699 17.8301,5.1699L16.4102,6.5898C18.0502,7.9098 19,9.9 19,12a7,7 0,0 1,-7 7C8.14,19 5,15.88 5,12 5,9.91 5.9501,7.9101 7.5801,6.5801ZM9.7039,7.4786h4.6758v1.0514h-3.5378v2.2699q0.266,-0.099 0.5319,-0.1423 0.2721,-0.0495 0.5443,-0.0495 1.4349,0 2.276,0.8473 0.8411,0.8473 0.8411,2.2946 0,1.4596 -0.8844,2.3008 -0.8783,0.8411 -2.4059,0.8411 -0.736,0 -1.3483,-0.099 -0.6061,-0.099 -1.0885,-0.2969L9.3081,15.2283q0.569,0.3092 1.1442,0.4639 0.5752,0.1484 1.1751,0.1484 1.0329,0 1.5895,-0.5443 0.5628,-0.5443 0.5628,-1.5462 0,-0.9896 -0.5814,-1.54 -0.5752,-0.5505 -1.6081,-0.5505 -0.501,0 -0.9772,0.1175 -0.4762,0.1113 -0.9092,0.3402z"/>
</vector>

View File

@ -0,0 +1,4 @@
<vector android:height="48dp" android:viewportHeight="24"
android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/holo_green_dark" android:pathData="m11,3v3.5898h2L13,3ZM6.1699,5.1699c-3.79,3.22 -4.2493,8.8995 -1.0293,12.6895 3.22,3.78 8.8995,4.2415 12.6895,1.0215C19.8501,17.1709 21,14.65 21,12 21,9.37 19.8401,6.8699 17.8301,5.1699L16.4102,6.5898C18.0502,7.9098 19,9.9 19,12a7,7 0,0 1,-7 7C8.14,19 5,15.88 5,12 5,9.91 5.9501,7.9101 7.5801,6.5801ZM9.7039,7.4786h4.6758v1.0514h-3.5378v2.2699q0.266,-0.099 0.5319,-0.1423 0.2721,-0.0495 0.5443,-0.0495 1.4349,0 2.276,0.8473 0.8411,0.8473 0.8411,2.2946 0,1.4596 -0.8844,2.3008 -0.8783,0.8411 -2.4059,0.8411 -0.736,0 -1.3483,-0.099 -0.6061,-0.099 -1.0885,-0.2969L9.3081,15.2283q0.569,0.3092 1.1442,0.4639 0.5752,0.1484 1.1751,0.1484 1.0329,0 1.5895,-0.5443 0.5628,-0.5443 0.5628,-1.5462 0,-0.9896 -0.5814,-1.54 -0.5752,-0.5505 -1.6081,-0.5505 -0.501,0 -0.9772,0.1175 -0.4762,0.1113 -0.9092,0.3402z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="48dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/holo_green_dark" android:pathData="M13,3h-2v10h2L13,3zM17.83,5.17l-1.42,1.42C17.99,7.86 19,9.81 19,12c0,3.87 -3.13,7 -7,7s-7,-3.13 -7,-7c0,-2.19 1.01,-4.14 2.58,-5.42L6.17,5.17C4.23,6.82 3,9.26 3,12c0,4.97 4.03,9 9,9s9,-4.03 9,-9c0,-2.74 -1.23,-5.18 -3.17,-6.83z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="14dp" android:viewportHeight="1000"
android:viewportWidth="1000" android:width="14dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M174,535.4c-23.5,-147 57.2,-295.5 201.4,-351.7c106.8,-41.7 222,-21.7 303.6,37.8L609.6,334l311.3,-1.2L809.6,10l-57,92.3C632.4,24.5 468.6,-1 325.1,54.9C126.4,132.4 12,332.8 34.5,535.4H174L174,535.4z"/>
<path android:fillColor="@android:color/white" android:pathData="M826.1,455c23.5,147 -57.2,295.5 -201.4,351.7c-98.3,38.3 -206.6,23.9 -289.9,-27.8c15.9,-25.7 62.7,-101.6 62.7,-101.6L62.8,657.6L204.5,990l59.4,-96.2c120.2,77.8 267.6,97.6 411,41.7C873.6,858 988,657.6 965.5,455L826.1,455L826.1,455z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="14dp" android:viewportHeight="1000"
android:viewportWidth="1000" android:width="14dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/black" android:pathData="M174,535.4c-23.5,-147 57.2,-295.5 201.4,-351.7c106.8,-41.7 222,-21.7 303.6,37.8L609.6,334l311.3,-1.2L809.6,10l-57,92.3C632.4,24.5 468.6,-1 325.1,54.9C126.4,132.4 12,332.8 34.5,535.4H174L174,535.4z"/>
<path android:fillColor="@android:color/black" android:pathData="M826.1,455c23.5,147 -57.2,295.5 -201.4,351.7c-98.3,38.3 -206.6,23.9 -289.9,-27.8c15.9,-25.7 62.7,-101.6 62.7,-101.6L62.8,657.6L204.5,990l59.4,-96.2c120.2,77.8 267.6,97.6 411,41.7C873.6,858 988,657.6 965.5,455L826.1,455L826.1,455z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="48dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="48dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/holo_green_dark" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
</vector>

View File

@ -1,4 +0,0 @@
[Dolphin]
PreviewsShown=true
Timestamp=2017,8,6,16,39,33
Version=3

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 965 B

After

Width:  |  Height:  |  Size: 965 B

View File

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 821 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,4 +0,0 @@
[Dolphin]
PreviewsShown=true
Timestamp=2017,8,6,16,39,9
Version=3

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 657 B

View File

Before

Width:  |  Height:  |  Size: 583 B

After

Width:  |  Height:  |  Size: 583 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,4 +0,0 @@
[Dolphin]
PreviewsShown=true
Timestamp=2017,8,6,16,37,31
Version=3

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -1,4 +0,0 @@
[Dolphin]
PreviewsShown=true
Timestamp=2017,8,6,16,36,41
Version=3

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -1,4 +0,0 @@
[Dolphin]
PreviewsShown=true
Timestamp=2017,8,6,15,33,9
Version=3

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/pwr5_widget_pressed"/> <!-- pressed -->
<item android:drawable="@drawable/pwr5_widget_normal" /> <!-- default -->
android:drawable="@drawable/w_power5_press"/> <!-- pressed -->
<item android:drawable="@drawable/w_power5" /> <!-- default -->
</selector>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/pwr_widget_pressed"/> <!-- pressed -->
<item android:drawable="@drawable/pwr_widget_normal" /> <!-- default -->
android:drawable="@drawable/w_power_press"/> <!-- pressed -->
<item android:drawable="@drawable/w_power" /> <!-- default -->
</selector>

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<!-- default -->
<item android:state_pressed="true" android:drawable="@drawable/refresh_widget_pressed" />
<item android:drawable="@drawable/refresh_widget" />
<item android:state_pressed="true"
android:drawable="@drawable/w_refresh_press" />
<item android:drawable="@drawable/w_refresh" />
</selector>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/rst_widget_pressed"/> <!-- pressed -->
<item android:drawable="@drawable/rst_widget_normal" /> <!-- default -->
android:drawable="@drawable/w_reset_press"/> <!-- pressed -->
<item android:drawable="@drawable/w_reset" /> <!-- default -->
</selector>

View File

@ -10,6 +10,7 @@
>
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -18,18 +19,18 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:elevation="4dp"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
app:elevation="4dp"
app:titleTextColor="@android:color/background_light" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/hostLblMain"
android:layout_alignStart="@+id/hostLblMain"
android:layout_below="@+id/hostLblMain"
android:layout_alignStart="@+id/hostLblMain"
android:layout_alignLeft="@+id/hostLblMain"
android:layout_marginTop="13dp"
android:text="@string/statusLabelMain"
android:textColor="@android:color/black"
@ -45,44 +46,44 @@
android:layout_alignBottom="@+id/pwr5BntMainAct"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:layout_toEndOf="@+id/pwr5BntMainAct"
android:layout_toRightOf="@+id/pwr5BntMainAct"
android:height="110dp"
android:text="@string/powerBntMain"
android:drawableTop="@drawable/pwr_widget_button"
app:drawableTopCompat="@drawable/w_power"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="98dp"
android:layout_toRightOf="@+id/pwr5BntMainAct"
android:layout_toEndOf="@+id/pwr5BntMainAct"
android:layout_marginEnd="10dp" />
tools:layout_editor_absoluteY="98dp" />
<Button
android:id="@+id/resBntMainAct"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView"
android:layout_marginTop="19dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_toLeftOf="@+id/pwr5BntMainAct"
android:layout_marginTop="19dp"
android:layout_toStartOf="@+id/pwr5BntMainAct"
android:layout_toLeftOf="@+id/pwr5BntMainAct"
android:height="110dp"
android:text="@string/resetBtnMain"
android:drawableTop="@drawable/reset_widget_button"
app:drawableTopCompat="@drawable/w_reset"
tools:layout_editor_absoluteX="148dp"
tools:layout_editor_absoluteY="98dp"
android:layout_marginStart="10dp" />
tools:layout_editor_absoluteY="98dp" />
<Button
android:id="@+id/pwr5BntMainAct"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/resBntMainAct"
android:layout_alignTop="@+id/resBntMainAct"
android:layout_alignBottom="@+id/resBntMainAct"
android:layout_centerHorizontal="true"
android:height="110dp"
android:text="@string/pwr5BntMain"
android:drawableTop="@drawable/pwr5_widget_button"
app:drawableTopCompat="@drawable/w_power5"
tools:layout_editor_absoluteX="259dp"
tools:layout_editor_absoluteY="98dp" />
@ -104,17 +105,17 @@
android:id="@+id/hostLblMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_below="@+id/toolbar"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="12dp"
android:text="@string/hostLblMain"
android:textColor="@android:color/black"
android:textSize="18sp"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="16dp"
android:layout_below="@+id/toolbar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="12dp" />
tools:layout_editor_absoluteY="16dp" />
<TextView
android:id="@+id/hostNameStaticMain"
@ -126,6 +127,7 @@
android:layout_toRightOf="@+id/hostLblMain"
android:textColor="@android:color/black"
android:textSize="18sp" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical"
android:padding="@dimen/widget_margin"
tools:context="com.blogspot.developersu.nowol.nowol.com.blogspot.developersu.nowol.nowol.widget.WidgetConfigurator">
tools:context="com.blogspot.developersu.nowol.widget.WidgetConfigurator">
<Space
android:layout_width="match_parent"

View File

@ -1,16 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widgetBasicLayout"
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:orientation="vertical">
android:padding="@dimen/widget_margin">
<LinearLayout
android:id="@+id/widgetHeaderLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:background="@color/colorOrange"
android:orientation="horizontal"
android:paddingLeft="@dimen/widget_margin"
android:paddingRight="@dimen/widget_margin"
@ -20,45 +18,74 @@
android:id="@+id/widgetStatusText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_weight="1"
android:shadowColor="@android:color/black"
android:shadowDx="2"
android:shadowDy="2"
android:shadowRadius="2"
android:text="@string/statusTxtMain"
android:textColor="@android:color/background_light" />
android:textColor="@android:color/background_light"
android:layout_marginStart="2dp" />
<ImageButton
android:id="@+id/widgetBntRefresh"
style="@android:style/Widget.Holo.ImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="1dp"
android:layout_marginTop="1dp"
android:layout_marginRight="2dp"
android:layout_marginBottom="1dp"
android:layout_weight="1"
android:background="@android:color/transparent"
android:contentDescription="@string/refreshBnt"
android:padding="0dp"
android:scaleType="fitEnd"
android:src="@drawable/refresh_widget_button" />
android:src="@drawable/refresh_widget_button"
android:layout_marginStart="1dp"
android:layout_marginEnd="2dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/widgetBodyLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="@dimen/widget_margin">
android:layout_height="wrap_content"
android:layout_below="@+id/widgetHeaderLayout"
android:layout_alignParentBottom="true"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/widgetBtnReset"
style="@android:style/Widget.Holo.ImageButton"
android:src="@drawable/reset_widget_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@android:color/transparent"
android:contentDescription="@string/resetBtnMain"
android:padding="0dp"
android:src="@drawable/reset_widget_button" />
android:background="@android:color/transparent"
android:padding="0dp" />
<ImageButton
android:id="@+id/widgetBtnPwr5"
style="@android:style/Widget.Holo.ImageButton"
android:src="@drawable/pwr5_widget_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:contentDescription="@string/pwr5BntMain"
android:padding="0dp"
android:background="@android:color/transparent"
/>
<ImageButton
android:id="@+id/widgetBtnPwr"
style="@android:style/Widget.Holo.ImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -66,20 +93,8 @@
android:background="@android:color/transparent"
android:contentDescription="@string/pwr5BntMain"
android:padding="0dp"
android:src="@drawable/pwr5_widget_button" />
<ImageButton
android:id="@+id/widgetBtnPwr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@android:color/transparent"
android:contentDescription="@string/powerBntMain"
android:padding="0dp"
android:src="@drawable/pwr_widget_button" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="300dp"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/popUpHostText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal"
>
<Button
android:id="@+id/popupHostBtn"
style="@style/Widget.AppCompat.ButtonBar.AlertDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/pupUpHostBtn" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="300dp"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="http://192.168.X.X"
android:inputType="textPersonName" />
<Button
android:id="@+id/confirm"
style="@style/Widget.AppCompat.ButtonBar.AlertDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@android:string/ok" />
</LinearLayout>

View File

@ -17,13 +17,13 @@
<string name="updateBtnMain">Обновить статус системы</string>
<string name="hostNameDefault">http://192.168.1.3</string>
<string name="hostChBntMain">Изменить адрес хоста</string>
<string name="pupUpHostBtn">Применить</string>
<string name="statusOnline">Онлайн</string>
<string name="statusOffline">Офлайн</string>
<string name="noResponse">"Нет ответа "</string>
<string name="confCreateWidget">"Создать виджет"</string>
<string name="confOpacity">"Прозрачность"</string>
<string name="confOpacity" formatted="true">Прозрачность %d</string>
<string name="confWhite">"Белый фон"</string>
<string name="popupTitle">Новый адрес хоста</string>
</resources>

View File

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Refer to App Widget Documentation for margin information
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
<dimen name="widget_margin">3dp</dimen>
<dimen name="widget_margin">0dp</dimen>
</resources>

View File

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Refer to App Widget Documentation for margin information
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
<dimen name="widget_margin">3dp</dimen>
<dimen name="widget_margin">8dp</dimen>
</resources>

View File

@ -17,13 +17,13 @@
<string name="updateBtnMain">Update system status</string>
<string name="hostNameDefault">http://192.168.1.3</string>
<string name="hostChBntMain">Change host address</string>
<string name="pupUpHostBtn">Submit</string>
<string name="statusOnline">Online</string>
<string name="statusOffline">Offline</string>
<string name="noResponse">"No response "</string>
<string name="confCreateWidget">"Create widget"</string>
<string name="confOpacity">"Opacity"</string>
<string name="confOpacity" formatted="true">Opacity %d</string>
<string name="confWhite">"White background"</string>
<string name="popupTitle">New host address</string>
</resources>

View File

@ -2,9 +2,12 @@
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:previewImage="@drawable/widget_preview"
android:minWidth="110dp"
android:minHeight="40dp"
android:minWidth="80dp"
android:updatePeriodMillis="6400000"
android:resizeMode="none"
android:configure="com.blogspot.developersu.nowol.nowol.com.blogspot.developersu.nowol.nowol.widget.WidgetConfigurator"
/>
android:configure="com.blogspot.developersu.nowol.widget.WidgetConfigurator"
android:initialLayout="@layout/no_wol_widget"
android:initialKeyguardLayout="@layout/no_wol_widget"
android:widgetCategory="home_screen"
/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB