From f2e60e3b14025eec0d7eb821130d6a441c3d695e Mon Sep 17 00:00:00 2001 From: mingzhixian123 Date: Thu, 15 Feb 2024 23:23:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0V1.3.73?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复无WIFI连接时,使用gateway标识符造成连接自身的问题 - 增加扫描局域网无线设备地址功能 - 增加取消激活功能 - 修复部分bug,提高体验 --- easycontrol/app/build.gradle | 4 +- easycontrol/app/src/main/AndroidManifest.xml | 3 +- .../easycontrol/app/ActiveActivity.java | 26 ++++- .../saymzx/easycontrol/app/IpActivity.java | 9 +- .../saymzx/easycontrol/app/MainActivity.java | 102 +++++++++++++----- .../easycontrol/app/SetDetailActivity.java | 3 +- .../easycontrol/app/entity/Setting.java | 9 ++ .../app/helper/DeviceListAdapter.java | 2 +- .../easycontrol/app/helper/PublicTools.java | 48 +++++++-- .../easycontrol/app/helper/ViewTools.java | 6 +- .../app/src/main/res/drawable/scansion.xml | 9 ++ .../app/src/main/res/layout/activity_main.xml | 22 ++-- ..._add_device.xml => item_device_detail.xml} | 12 +-- .../src/main/res/layout/item_devices_item.xml | 2 +- .../app/src/main/res/layout/item_loading.xml | 2 + .../res/layout/item_request_permission.xml | 40 +++++++ .../res/layout/item_scan_address_list.xml | 23 ++++ .../src/main/res/layout/module_mini_view.xml | 97 ++++++++--------- .../src/main/res/layout/module_small_view.xml | 6 +- .../app/src/main/res/values-en/strings.xml | 26 +++-- .../app/src/main/res/values/strings.xml | 27 +++-- 21 files changed, 334 insertions(+), 144 deletions(-) create mode 100644 easycontrol/app/src/main/res/drawable/scansion.xml rename easycontrol/app/src/main/res/layout/{item_add_device.xml => item_device_detail.xml} (88%) create mode 100644 easycontrol/app/src/main/res/layout/item_request_permission.xml create mode 100644 easycontrol/app/src/main/res/layout/item_scan_address_list.xml diff --git a/easycontrol/app/build.gradle b/easycontrol/app/build.gradle index 6e6a6621..9cc0c21c 100644 --- a/easycontrol/app/build.gradle +++ b/easycontrol/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "top.saymzx.easycontrol.app" minSdk 21 targetSdk 34 - versionCode 10372 - versionName "1.3.72" + versionCode 10373 + versionName "1.3.73" ndk { abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64" } diff --git a/easycontrol/app/src/main/AndroidManifest.xml b/easycontrol/app/src/main/AndroidManifest.xml index 0392c9eb..f82cc3a1 100644 --- a/easycontrol/app/src/main/AndroidManifest.xml +++ b/easycontrol/app/src/main/AndroidManifest.xml @@ -17,8 +17,7 @@ android:roundIcon="${app_icon_round}" android:supportsRtl="true" android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar" - android:usesCleartextTraffic="true" - tools:targetApi="31"> + android:usesCleartextTraffic="true"> diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/ActiveActivity.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/ActiveActivity.java index 40cee42b..924e0f76 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/ActiveActivity.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/ActiveActivity.java @@ -5,7 +5,6 @@ import android.util.Pair; import android.view.View; import android.view.WindowManager; -import android.widget.Toast; import top.saymzx.easycontrol.app.databinding.ActivityActiveBinding; import top.saymzx.easycontrol.app.entity.AppData; @@ -23,7 +22,8 @@ protected void onCreate(Bundle savedInstanceState) { ViewTools.setLocale(this); activeActivity = ActivityActiveBinding.inflate(this.getLayoutInflater()); setContentView(activeActivity.getRoot()); - AppData.setting.setIsActive(false); + // 取消激活 + if (AppData.setting.getIsActive()) deactivate(); setButtonListener(); // 绘制UI drawUi(); @@ -42,20 +42,36 @@ private void setButtonListener() { Pair loading = ViewTools.createLoading(this); AppData.windowManager.addView(loading.first, loading.second); new Thread(() -> { - boolean isOk = ActiveHelper.checkOk(activeKey); + boolean isOk = ActiveHelper.active(activeKey); AppData.windowManager.removeView(loading.first); AppData.uiHandler.post(() -> { if (isOk) { finish(); AppData.setting.setIsActive(true); - Toast.makeText(this, getString(R.string.active_button_success), Toast.LENGTH_SHORT).show(); PublicTools.startUrl(this, "https://gitee.com/mingzhixianweb/easycontrol/blob/master/HOW_TO_USE.md"); - } else Toast.makeText(this, getString(R.string.active_button_error), Toast.LENGTH_SHORT).show(); + PublicTools.logToast("active", getString(R.string.active_button_success), true); + } else PublicTools.logToast("active", getString(R.string.active_button_error), true); }); }).start(); }); } + // 取消激活 + private void deactivate() { + Pair loading = ViewTools.createLoading(this); + AppData.windowManager.addView(loading.first, loading.second); + new Thread(() -> { + boolean isOk = ActiveHelper.deactivate(AppData.setting.getActiveKey()); + AppData.windowManager.removeView(loading.first); + AppData.uiHandler.post(() -> { + if (isOk) { + AppData.setting.setIsActive(false); + PublicTools.logToast("deactivate", getString(R.string.active_deactivate_success), true); + } else PublicTools.logToast("deactivate", getString(R.string.active_deactivate_error), true); + }); + }).start(); + } + @Override public void onBackPressed() { } diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/IpActivity.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/IpActivity.java index 13441316..c29f672d 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/IpActivity.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/IpActivity.java @@ -34,18 +34,17 @@ public void onCreate(Bundle savedInstanceState) { private void drawUi() { // 添加IP Pair, ArrayList> listPair = PublicTools.getIp(); - Context context = this; for (String i : listPair.first) { - ItemTextBinding text = ViewTools.createTextCard(context, i, () -> { + ItemTextBinding text = ViewTools.createTextCard(this, i, () -> { AppData.clipBoard.setPrimaryClip(ClipData.newPlainText(ClipDescription.MIMETYPE_TEXT_PLAIN, i)); - Toast.makeText(context, getString(R.string.ip_copy), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.ip_copy), Toast.LENGTH_SHORT).show(); }); ipActivity.ipv4.addView(text.getRoot()); } for (String i : listPair.second) { - ItemTextBinding text = ViewTools.createTextCard(context, i, () -> { + ItemTextBinding text = ViewTools.createTextCard(this, i, () -> { AppData.clipBoard.setPrimaryClip(ClipData.newPlainText(ClipDescription.MIMETYPE_TEXT_PLAIN, i)); - Toast.makeText(context, getString(R.string.ip_copy), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.ip_copy), Toast.LENGTH_SHORT).show(); }); ipActivity.ipv6.addView(text.getRoot()); } diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/MainActivity.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/MainActivity.java index 7f3822df..37bf06ea 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/MainActivity.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/MainActivity.java @@ -2,24 +2,32 @@ import android.annotation.SuppressLint; import android.app.Activity; +import android.app.Dialog; +import android.content.ClipData; +import android.content.ClipDescription; import android.content.Intent; -import android.media.MediaCodec; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; -import android.util.Log; +import android.util.Pair; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; import android.widget.Toast; -import java.io.IOException; +import java.util.ArrayList; import java.util.UUID; -import top.saymzx.easycontrol.app.client.decode.DecodecTools; import top.saymzx.easycontrol.app.databinding.ActivityMainBinding; +import top.saymzx.easycontrol.app.databinding.ItemRequestPermissionBinding; +import top.saymzx.easycontrol.app.databinding.ItemScanAddressListBinding; +import top.saymzx.easycontrol.app.databinding.ItemTextBinding; import top.saymzx.easycontrol.app.entity.AppData; import top.saymzx.easycontrol.app.entity.Device; import top.saymzx.easycontrol.app.helper.DeviceListAdapter; import top.saymzx.easycontrol.app.helper.MyBroadcastReceiver; +import top.saymzx.easycontrol.app.helper.PublicTools; import top.saymzx.easycontrol.app.helper.ViewTools; public class MainActivity extends Activity { @@ -40,6 +48,20 @@ public void onCreate(Bundle savedInstanceState) { ViewTools.setLocale(this); mainActivity = ActivityMainBinding.inflate(this.getLayoutInflater()); setContentView(mainActivity.getRoot()); + // 检测权限 + if (!checkPermission()) createAlert(); + else startApp(); + super.onCreate(savedInstanceState); + } + + @Override + protected void onDestroy() { + myBroadcastReceiver.unRegister(this); + super.onDestroy(); + } + + // 启动步骤 + private void startApp() { // 检测激活 checkActive(); // 设置设备列表适配器 @@ -54,20 +76,8 @@ public void onCreate(Bundle savedInstanceState) { myBroadcastReceiver.checkConnectedUsb(this); // 启动默认设备 AppData.uiHandler.postDelayed(() -> myBroadcastReceiver.startDefault(this), 1000); - super.onCreate(savedInstanceState); - } - - @Override - protected void onResume() { - // 检查权限 - checkPermission(); - super.onResume(); - } - - @Override - protected void onDestroy() { - myBroadcastReceiver.unRegister(this); - super.onDestroy(); + // 开始扫描 + if (AppData.setting.getAutoScanAddressOnStart()) scanAddress(); } // 检测激活 @@ -76,23 +86,67 @@ private void checkActive() { } // 检查权限 - private void checkPermission() { + private boolean checkPermission() { // 检查悬浮窗权限,防止某些设备如鸿蒙不兼容 try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { + return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.canDrawOverlays(this); + } catch (Exception ignored) { + return true; + } + } + + // 创建Client加载框 + private void createAlert() { + ItemRequestPermissionBinding requestPermissionView = ItemRequestPermissionBinding.inflate(LayoutInflater.from(this)); + requestPermissionView.buttonGoToSet.setOnClickListener(v -> { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intent.setData(Uri.parse("package:$packageName")); startActivity(intent); - Toast.makeText(this, getString(R.string.main_float_permission), Toast.LENGTH_SHORT).show(); } - } catch (Exception ignored) { - } + }); + Dialog dialog = ViewTools.createDialog(this, false, requestPermissionView.getRoot()); + dialog.show(); + checkPermissionDelay(dialog); + } + + // 定时检查 + private void checkPermissionDelay(Dialog dialog) { + AppData.uiHandler.postDelayed(() -> { + if (checkPermission()) { + dialog.cancel(); + startApp(); + } else checkPermissionDelay(dialog); + }, 1000); } // 设置按钮监听 private void setButtonListener() { - mainActivity.buttonAdd.setOnClickListener(v -> ViewTools.createAddDeviceView(this, Device.getDefaultDevice(UUID.randomUUID().toString(), Device.TYPE_NORMAL), deviceListAdapter).show()); + mainActivity.buttonScan.setOnClickListener(v -> scanAddress()); + mainActivity.buttonAdd.setOnClickListener(v -> ViewTools.createDeviceDetailView(this, Device.getDefaultDevice(UUID.randomUUID().toString(), Device.TYPE_NORMAL), deviceListAdapter).show()); mainActivity.buttonSet.setOnClickListener(v -> startActivity(new Intent(this, SetActivity.class))); } + // 扫描局域网地址 + private void scanAddress() { + Pair loading = ViewTools.createLoading(this); + AppData.windowManager.addView(loading.first, loading.second); + new Thread(() -> { + ArrayList scannedAddresses = PublicTools.scanAddress(); + AppData.windowManager.removeView(loading.first); + AppData.uiHandler.post(() -> { + ItemScanAddressListBinding scanAddressListView = ItemScanAddressListBinding.inflate(LayoutInflater.from(this)); + Dialog dialog = ViewTools.createDialog(this, true, scanAddressListView.getRoot()); + for (String i : scannedAddresses) { + ItemTextBinding text = ViewTools.createTextCard(this, i, () -> { + AppData.clipBoard.setPrimaryClip(ClipData.newPlainText(ClipDescription.MIMETYPE_TEXT_PLAIN, i)); + Toast.makeText(this, getString(R.string.ip_copy), Toast.LENGTH_SHORT).show(); + }); + scanAddressListView.list.addView(text.getRoot()); + } + dialog.show(); + }); + }).start(); + } + } \ No newline at end of file diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/SetDetailActivity.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/SetDetailActivity.java index 3ab4620a..c7946c69 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/SetDetailActivity.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/SetDetailActivity.java @@ -46,11 +46,12 @@ private void drawDefault() { // 绘制启动时操作 private void drawOnStart() { - setDetailActivity.setDetail.addView(ViewTools.createSwitchCard(this, getString(R.string.set_auto_back_on_start_default), getString(R.string.set_auto_back_on_start_default_detail), AppData.setting.getAutoBackOnStart(), isChecked -> AppData.setting.setAutoBackOnStart(isChecked)).getRoot()); + setDetailActivity.setDetail.addView(ViewTools.createSwitchCard(this, getString(R.string.set_auto_back_after_start_default_on_start), getString(R.string.set_auto_back_after_start_default_on_start_detail), AppData.setting.getAutoBackOnStart(), isChecked -> AppData.setting.setAutoBackOnStart(isChecked)).getRoot()); setDetailActivity.setDetail.addView(ViewTools.createTextCard(this, getString(R.string.set_auto_clear_default), () -> { AppData.setting.setDefaultDevice(""); Toast.makeText(this, getString(R.string.set_auto_clear_default_code), Toast.LENGTH_SHORT).show(); }).getRoot()); + setDetailActivity.setDetail.addView(ViewTools.createSwitchCard(this, getString(R.string.set_auto_scan_address_on_start), getString(R.string.set_auto_scan_address_on_start_detail), AppData.setting.getAutoScanAddressOnStart(), isChecked -> AppData.setting.setAutoScanAddressOnStart(isChecked)).getRoot()); } // 绘制连接时操作 diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/entity/Setting.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/entity/Setting.java index 0da64df2..783c5fc5 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/entity/Setting.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/entity/Setting.java @@ -153,6 +153,15 @@ public void setAutoBackOnStart(boolean value) { editor.apply(); } + public boolean getAutoScanAddressOnStart() { + return sharedPreferences.getBoolean("autoScanAddressStart", false); + } + + public void setAutoScanAddressOnStart(boolean value) { + editor.putBoolean("autoScanAddressStart", value); + editor.apply(); + } + public boolean getKeepAwake() { return sharedPreferences.getBoolean("keepAwake", true); } diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/DeviceListAdapter.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/DeviceListAdapter.java index c9ad9635..239fa6a6 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/DeviceListAdapter.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/DeviceListAdapter.java @@ -114,7 +114,7 @@ private void onLongClickCard(Device device) { }); itemSetDeviceBinding.buttonChange.setOnClickListener(v -> { dialog.cancel(); - ViewTools.createAddDeviceView(context, device, this).show(); + ViewTools.createDeviceDetailView(context, device, this).show(); }); itemSetDeviceBinding.buttonDelete.setOnClickListener(v -> { AppData.dbHelper.delete(device); diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/PublicTools.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/PublicTools.java index e4f34056..e1fd5ca5 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/PublicTools.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/PublicTools.java @@ -2,7 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.net.DhcpInfo; import android.net.Uri; import android.util.Base64; import android.util.DisplayMetrics; @@ -16,9 +15,14 @@ import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.NetworkInterface; +import java.net.Socket; import java.util.ArrayList; import java.util.Enumeration; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -99,20 +103,16 @@ public static Pair, ArrayList> getIp() { // 获取网关地址 public static String getGateway() { - return decodeIntToIp(AppData.wifiManager.getDhcpInfo().gateway, 4); + int ip = AppData.wifiManager.getDhcpInfo().gateway; + // 没有wifi时,设置为1.1.1.1 + if (ip == 0) ip = 16843009; + return decodeIntToIp(ip, 4); } // 获取子网地址 public static String getNetAddress() { - DhcpInfo dhcpInfo = AppData.wifiManager.getDhcpInfo(); - int gateway = dhcpInfo.gateway; - int ipAddress = dhcpInfo.ipAddress; - // 因为dhcpInfo.netmask兼容性不好,部分设备获取值为0,所以此处使用对比方法 - int len; - if (((gateway >> 8) & 0xff) == ((ipAddress >> 8) & 0xff)) len = 3; - else if (((gateway >> 16) & 0xff) == ((ipAddress >> 16) & 0xff)) len = 2; - else len = 1; - return decodeIntToIp(gateway, len); + // 因为此标识符使用场景有限,为了节省资源,默认地址为24位掩码地址 + return decodeIntToIp(AppData.wifiManager.getDhcpInfo().gateway, 3); } // 解析地址 @@ -200,4 +200,30 @@ public static DisplayMetrics getScreenSize() { return screenSize; } + // 扫描局域网设备 + public static ArrayList scanAddress() { + ArrayList scannedAddresses = new ArrayList<>(); + String subnet = getNetAddress(); + ExecutorService executor = Executors.newFixedThreadPool(128); + for (int i = 1; i <= 255; i++) { + String host = subnet + "." + i; + executor.execute(() -> { + try { + Socket socket = new Socket(); + socket.connect(new InetSocketAddress(host, 5555), 1000); + socket.close(); + scannedAddresses.add(host + ":5555"); + } catch (Exception ignored) { + } + }); + } + executor.shutdown(); + try { + while (!executor.awaitTermination(1, TimeUnit.SECONDS)) { + } + } catch (InterruptedException ignored) { + } + return scannedAddresses; + } + } \ No newline at end of file diff --git a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/ViewTools.java b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/ViewTools.java index 8dc0322d..537a5133 100644 --- a/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/ViewTools.java +++ b/easycontrol/app/src/main/java/top/saymzx/easycontrol/app/helper/ViewTools.java @@ -24,7 +24,7 @@ import java.util.Locale; import top.saymzx.easycontrol.app.R; -import top.saymzx.easycontrol.app.databinding.ItemAddDeviceBinding; +import top.saymzx.easycontrol.app.databinding.ItemDeviceDetailBinding; import top.saymzx.easycontrol.app.databinding.ItemLoadingBinding; import top.saymzx.easycontrol.app.databinding.ItemSpinnerBinding; import top.saymzx.easycontrol.app.databinding.ItemSwitchBinding; @@ -91,12 +91,12 @@ public static Dialog createDialog(Context context, boolean canCancel, View view) } // 创建新建设备弹窗 - public static Dialog createAddDeviceView( + public static Dialog createDeviceDetailView( Context context, Device device, DeviceListAdapter deviceListAdapter ) { - ItemAddDeviceBinding itemAddDeviceBinding = ItemAddDeviceBinding.inflate(LayoutInflater.from(context)); + ItemDeviceDetailBinding itemAddDeviceBinding = ItemDeviceDetailBinding.inflate(LayoutInflater.from(context)); Dialog dialog = createDialog(context, true, itemAddDeviceBinding.getRoot()); // 设置值 itemAddDeviceBinding.name.setText(device.name); diff --git a/easycontrol/app/src/main/res/drawable/scansion.xml b/easycontrol/app/src/main/res/drawable/scansion.xml new file mode 100644 index 00000000..c6f658f4 --- /dev/null +++ b/easycontrol/app/src/main/res/drawable/scansion.xml @@ -0,0 +1,9 @@ + + + diff --git a/easycontrol/app/src/main/res/layout/activity_main.xml b/easycontrol/app/src/main/res/layout/activity_main.xml index 20e22337..fa267a33 100644 --- a/easycontrol/app/src/main/res/layout/activity_main.xml +++ b/easycontrol/app/src/main/res/layout/activity_main.xml @@ -30,8 +30,8 @@ @@ -57,11 +57,20 @@ android:textSize="@dimen/smallSmallFont" /> + + @@ -71,12 +80,11 @@ android:id="@+id/devices_list" android:layout_width="match_parent" android:layout_height="match_parent" - android:clipToPadding="false" android:divider="#00000000" android:dividerHeight="15dp" android:paddingStart="15dp" android:paddingEnd="15dp" - android:paddingBottom="60dp" + android:paddingBottom="50dp" tools:listitem="@layout/item_devices_item" /> diff --git a/easycontrol/app/src/main/res/layout/item_add_device.xml b/easycontrol/app/src/main/res/layout/item_device_detail.xml similarity index 88% rename from easycontrol/app/src/main/res/layout/item_add_device.xml rename to easycontrol/app/src/main/res/layout/item_device_detail.xml index 59c59e83..2ef34579 100644 --- a/easycontrol/app/src/main/res/layout/item_add_device.xml +++ b/easycontrol/app/src/main/res/layout/item_device_detail.xml @@ -9,7 +9,7 @@ @@ -17,7 +17,7 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/add_device_name_hint" + android:hint="@string/device_detail_name_hint" android:textColor="@color/onCardBackground" android:textColorHint="@color/onCardBackgroundSecond" android:textSize="@dimen/smallFont" /> @@ -26,7 +26,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:text="@string/add_device_address" + android:text="@string/device_detail_address" android:textColor="@color/onCardBackground" android:textSize="@dimen/smallFont" /> @@ -35,7 +35,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]-.:*" - android:hint="@string/add_device_address_hint" + android:hint="@string/device_detail_address_hint" android:textColor="@color/onCardBackground" android:textColorHint="@color/onCardBackgroundSecond" android:textSize="@dimen/smallFont" /> @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:layout_marginTop="4dp" android:buttonTint="@color/onCardBackground" - android:text="@string/add_device_option" + android:text="@string/device_detail_option" android:textColor="@color/onCardBackgroundSecond" android:textSize="@dimen/smallFont" /> @@ -66,7 +66,7 @@ android:background="@drawable/background_cron" android:backgroundTint="@color/button" android:gravity="center" - android:text="@string/add_device_button" + android:text="@string/device_detail_button" android:textColor="@color/onButton" android:textSize="@dimen/smallFont" /> diff --git a/easycontrol/app/src/main/res/layout/item_devices_item.xml b/easycontrol/app/src/main/res/layout/item_devices_item.xml index a54d3a3f..cdddb220 100644 --- a/easycontrol/app/src/main/res/layout/item_devices_item.xml +++ b/easycontrol/app/src/main/res/layout/item_devices_item.xml @@ -83,4 +83,4 @@ android:tint="@color/onCardBackground" /> - + \ No newline at end of file diff --git a/easycontrol/app/src/main/res/layout/item_loading.xml b/easycontrol/app/src/main/res/layout/item_loading.xml index ac91d9b2..a0477733 100644 --- a/easycontrol/app/src/main/res/layout/item_loading.xml +++ b/easycontrol/app/src/main/res/layout/item_loading.xml @@ -7,7 +7,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" + android:layout_margin="15dp" android:background="@drawable/background_cron" + android:elevation="8dp" android:paddingStart="40dp" android:paddingTop="10dp" android:paddingEnd="40dp" diff --git a/easycontrol/app/src/main/res/layout/item_request_permission.xml b/easycontrol/app/src/main/res/layout/item_request_permission.xml new file mode 100644 index 00000000..14c126df --- /dev/null +++ b/easycontrol/app/src/main/res/layout/item_request_permission.xml @@ -0,0 +1,40 @@ + + + + + + + +