From af4132e178f6343044fb60b08da69802ab75ba6d Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Thu, 18 Dec 2025 20:04:23 +0800 Subject: [PATCH] updated arduino and android example --- android-example/app/build.gradle | 9 +- .../ui/activity/ControlActivity.java | 6 +- .../ircontrol/ui/activity/CreateActivity.java | 30 +++-- .../ircontrol/ui/activity/MainActivity.java | 13 +- .../ui/fragment/BaseCreateFragment.java | 4 +- .../ircontrol/ui/fragment/BrandFragment.java | 5 +- .../ui/fragment/CategoryFragment.java | 4 +- .../ircontrol/ui/fragment/CityFragment.java | 4 +- .../ui/fragment/ControlFragment.java | 125 +++++++++++++++--- .../ircontrol/ui/fragment/IndexFragment.java | 5 +- .../ircontrol/ui/fragment/MainFragment.java | 2 +- .../net/irext/ircontrol/utils/ToastUtils.java | 8 +- .../src/main/res/layout/activity_control.xml | 1 + .../src/main/res/layout/activity_create.xml | 1 + .../app/src/main/res/layout/activity_main.xml | 23 ++-- .../src/main/res/layout/fragment_control.xml | 77 ++++++++++- .../res/mipmap-xxhdpi/connect_emitter.png | Bin 0 -> 15850 bytes .../src/main/res/values-zh-rCN/strings.xml | 10 +- .../app/src/main/res/values/strings.xml | 11 +- android-example/build.gradle | 2 +- android-example/gradle.properties | 4 +- 21 files changed, 262 insertions(+), 82 deletions(-) create mode 100644 android-example/app/src/main/res/mipmap-xxhdpi/connect_emitter.png diff --git a/android-example/app/build.gradle b/android-example/app/build.gradle index 3e17ca9..623642e 100644 --- a/android-example/app/build.gradle +++ b/android-example/app/build.gradle @@ -8,6 +8,7 @@ android { minSdkVersion 26 versionCode 7 versionName '1.5.0' + } buildTypes { release { @@ -39,11 +40,11 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.aar']) - implementation 'net.irext.webapi:irext-androidapi:1.5.1' + implementation 'net.irext.webapi:irext-androidapi:1.5.2' - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support:support-v4:28.0.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.core:core:1.13.1' + implementation 'com.google.android.material:material:1.13.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java index 70546b2..634c52d 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java @@ -1,10 +1,10 @@ package net.irext.ircontrol.ui.activity; import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import net.irext.ircontrol.R; import net.irext.ircontrol.ui.fragment.ControlFragment; diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java index 9ca4b71..ac55a52 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java @@ -3,11 +3,12 @@ package net.irext.ircontrol.ui.activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MenuItem; +import androidx.activity.OnBackPressedCallback; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import net.irext.ircontrol.R; import net.irext.ircontrol.ui.fragment.*; import net.irext.ircontrol.utils.MessageUtil; @@ -53,6 +54,18 @@ public class CreateActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_create); + OnBackPressedCallback callback = new OnBackPressedCallback(true) { + @Override + public void handleOnBackPressed() { + if (null == mFragment) { + finish(); + return; + } + mFragment.onBackPressed(); + } + }; + getOnBackPressedDispatcher().addCallback(this, callback); + mMsgHandler = new MsgHandler(this); mFragments = new ArrayList<>(); @@ -75,17 +88,6 @@ public class CreateActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } - @Override - public void onBackPressed() { - if (null == mFragment) { - this.finish(); - super.onBackPressed(); - return; - } - mFragment.onBackPressed(); - super.onBackPressed(); - } - private void switchPage(int next, Integer from) { BaseCreateFragment fragment = mFragments.get(next); Bundle bundle = new Bundle(); diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java index c12439b..566ae87 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java @@ -3,20 +3,19 @@ package net.irext.ircontrol.ui.activity; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.FragmentManager; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.FragmentManager; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import net.irext.ircontrol.R; import net.irext.ircontrol.bean.RemoteControl; import net.irext.ircontrol.ui.fragment.MainFragment; diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java index 1d31ef9..b74de62 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java @@ -1,13 +1,13 @@ package net.irext.ircontrol.ui.fragment; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import net.irext.ircontrol.ui.activity.CreateActivity; import net.irext.ircontrol.utils.MessageUtil; diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java index 4c3fad5..1e653ce 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java @@ -3,13 +3,13 @@ package net.irext.ircontrol.ui.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import androidx.annotation.NonNull; import net.irext.ircontrol.IRApplication; import net.irext.ircontrol.R; import net.irext.ircontrol.ui.activity.CreateActivity; @@ -22,7 +22,6 @@ import net.irext.webapi.model.Brand; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; -import java.util.Objects; /** * Filename: BrandFragment.java @@ -97,7 +96,7 @@ public class BrandFragment extends BaseCreateFragment { super.onCreateView(inflater, container, savedInstanceState); getFrom(); View view = inflater.inflate(R.layout.fragment_brand, container, false); - mApp = (IRApplication) Objects.requireNonNull(getActivity()).getApplication(); + mApp = (IRApplication) requireActivity().getApplication(); mMsgHandler = new MsgHandler(this); diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java index 4d95ae3..350dc9c 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java @@ -3,13 +3,13 @@ package net.irext.ircontrol.ui.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import androidx.annotation.NonNull; import net.irext.decode.sdk.utils.Constants; import net.irext.ircontrol.IRApplication; import net.irext.ircontrol.R; @@ -95,7 +95,7 @@ public class CategoryFragment extends BaseCreateFragment { super.onCreateView(inflater, container, savedInstanceState); mFrom = -1; View view = inflater.inflate(R.layout.fragment_category, container, false); - mApp = (IRApplication) Objects.requireNonNull(getActivity()).getApplication(); + mApp = (IRApplication) requireActivity().getApplication(); mMsgHandler = new MsgHandler(this); diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java index 88ac93f..7b73aea 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java @@ -3,7 +3,6 @@ package net.irext.ircontrol.ui.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +10,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import androidx.annotation.NonNull; import net.irext.ircontrol.IRApplication; import net.irext.ircontrol.R; import net.irext.ircontrol.ui.activity.CreateActivity; @@ -209,7 +209,7 @@ public class CityFragment extends BaseCreateFragment { super.onCreateView(inflater, container, savedInstanceState); getFrom(); View view = inflater.inflate(R.layout.fragment_city, container, false); - mApp = (IRApplication) Objects.requireNonNull(getActivity()).getApplication(); + mApp = (IRApplication) requireActivity().getApplication(); mMsgHandler = new MsgHandler(this); diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java index 66222bd..3c05038 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java @@ -6,14 +6,13 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Vibrator; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; +import androidx.fragment.app.Fragment; import net.irext.decode.sdk.IRDecode; import net.irext.decode.sdk.bean.ACStatus; import net.irext.decode.sdk.utils.Constants; @@ -22,8 +21,15 @@ import net.irext.ircontrol.bean.RemoteControl; import net.irext.ircontrol.ui.activity.ControlActivity; import net.irext.ircontrol.utils.FileUtils; import net.irext.ircontrol.utils.MessageUtil; +import net.irext.ircontrol.utils.ToastUtils; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; import java.lang.ref.WeakReference; +import java.net.Socket; +import java.net.UnknownHostException; /** * Filename: ControlFragment.java @@ -56,6 +62,11 @@ public class ControlFragment extends Fragment implements View.OnClickListener { private static final int KEY_HOME = 9; private static final int KEY_MENU = 10; + private static final int EMITTER_PORT = 8000; + + private Socket emitterConn = null; + private int emitterConnected = 0; + private MsgHandler mHandler; private ControlActivity mParent; @@ -78,17 +89,17 @@ public class ControlFragment extends Fragment implements View.OnClickListener { mParent = (ControlActivity)getActivity(); View view = inflater.inflate(R.layout.fragment_control, container, false); - ImageButton mBtnPower = (ImageButton) view.findViewById(R.id.iv_power); - ImageButton mBtnBack = (ImageButton) view.findViewById(R.id.iv_back); - ImageButton mBtnHome = (ImageButton) view.findViewById(R.id.iv_home); - ImageButton mBtnMenu = (ImageButton) view.findViewById(R.id.iv_menu); - ImageButton mBtnUp = (ImageButton) view.findViewById(R.id.iv_up); - ImageButton mBtnDown = (ImageButton) view.findViewById(R.id.iv_down); - ImageButton mBtnLeft = (ImageButton) view.findViewById(R.id.iv_left); - ImageButton mBtnRight = (ImageButton) view.findViewById(R.id.iv_right); - ImageButton mBtnOK = (ImageButton) view.findViewById(R.id.iv_ok); - ImageButton mBtnPlus = (ImageButton) view.findViewById(R.id.iv_plus); - ImageButton mBtnMinus = (ImageButton) view.findViewById(R.id.iv_minus); + ImageButton mBtnPower = view.findViewById(R.id.iv_power); + ImageButton mBtnBack = view.findViewById(R.id.iv_back); + ImageButton mBtnHome = view.findViewById(R.id.iv_home); + ImageButton mBtnMenu = view.findViewById(R.id.iv_menu); + ImageButton mBtnUp = view.findViewById(R.id.iv_up); + ImageButton mBtnDown = view.findViewById(R.id.iv_down); + ImageButton mBtnLeft = view.findViewById(R.id.iv_left); + ImageButton mBtnRight = view.findViewById(R.id.iv_right); + ImageButton mBtnOK = view.findViewById(R.id.iv_ok); + ImageButton mBtnPlus = view.findViewById(R.id.iv_plus); + ImageButton mBtnMinus = view.findViewById(R.id.iv_minus); mBtnPower.setOnClickListener(this); mBtnBack.setOnClickListener(this); @@ -102,6 +113,23 @@ public class ControlFragment extends Fragment implements View.OnClickListener { mBtnPlus.setOnClickListener(this); mBtnMinus.setOnClickListener(this); + CheckBox mCbUseEmitter = view.findViewById(R.id.cb_use_emitter); + EditText mEtEmitterIp = view.findViewById(R.id.emitter_ip); + ImageButton mBtnConnect = view.findViewById(R.id.btn_connection_status); + + mBtnConnect.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + String emitterIp = mEtEmitterIp.getText().toString(); + if (android.net.InetAddresses.isNumericAddress(emitterIp)) { + connectToEmitter(emitterIp, String.valueOf(EMITTER_PORT)); + } else { + ToastUtils.showToast(mParent, mParent.getString(R.string.input_emitter_ip_address), null); + } + } + }); + return view; } @@ -145,7 +173,6 @@ public class ControlFragment extends Fragment implements View.OnClickListener { mIRDecode.closeBinary(); } - @Nullable private int[] irControl(int keyCode) { int inputKeyCode; ACStatus acStatus = new ACStatus(); @@ -205,6 +232,69 @@ public class ControlFragment extends Fragment implements View.OnClickListener { return mIRDecode.decodeBinary(inputKeyCode, acStatus, 0); } + private void onEmitterDisconnected() { + if (1 == emitterConnected) { + Log.d(TAG, "emitter disconnected"); + } else { + Log.d(TAG, "emitter disconnected"); + } + + mParent.runOnUiThread(() -> { + if (1 == emitterConnected) { + ToastUtils.showToast(mParent, mParent.getString(R.string.connect_failed), Toast.LENGTH_SHORT); + } else { + ToastUtils.showToast(mParent, mParent.getString(R.string.connect_disconnected), Toast.LENGTH_SHORT); + } + }); + + emitterConnected = 0; + } + + private void onEmitterResponse(String line) { + Log.d(TAG, "emitter: " + line); + } + + private void sendDecodedToEmitter(String value) { + new Thread(() -> { + try { + PrintWriter out = new PrintWriter(emitterConn.getOutputStream(), true); + out.println(value); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + + private void connectToEmitter(String ipAddress, String port) { + if (0 == emitterConnected) { + if (null == ipAddress || null == port) { + return; + } + new Thread(() -> { + try { + emitterConn = new Socket(ipAddress, Integer.parseInt(port)); + emitterConn.setKeepAlive(true); + emitterConnected = 1; + BufferedReader in = new BufferedReader(new InputStreamReader(emitterConn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + onEmitterResponse(line); + } + onEmitterDisconnected(); + } catch (IOException ioException) { + onEmitterDisconnected(); + } + }).start(); + } else { + try { + emitterConnected = 0; + emitterConn.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + // control @Override public void onClick(View v) { @@ -242,13 +332,16 @@ public class ControlFragment extends Fragment implements View.OnClickListener { decodedValue += ","; } Log.d(TAG, "decodedValue : " + decodedValue); + sendDecodedToEmitter(decodedValue); // send decoded integer array to IR emitter ConsumerIrManager irEmitter = (ConsumerIrManager) mParent.getSystemService(Context.CONSUMER_IR_SERVICE); - if (irEmitter.hasIrEmitter()) { - if (null != decoded && decoded.length > 0) { + if (null != irEmitter && irEmitter.hasIrEmitter()) { + if (decoded.length > 0) { irEmitter.transmit(38000, decoded); } + } else { + ToastUtils.showToast(mParent, this.getString(R.string.ir_not_supported), null); } } diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java index a035cdd..49022e0 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java @@ -3,7 +3,6 @@ package net.irext.ircontrol.ui.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +10,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import androidx.annotation.NonNull; import net.irext.ircontrol.IRApplication; import net.irext.ircontrol.bean.RemoteControl; import net.irext.ircontrol.ui.widget.PullToRefreshListView; @@ -212,7 +212,7 @@ public class IndexFragment extends BaseCreateFragment { View view = inflater.inflate(R.layout.fragment_index, container, false); mMsgHandler = new MsgHandler(this); - mApp = (IRApplication) Objects.requireNonNull(this.getActivity()).getApplication(); + mApp = (IRApplication) this.requireActivity().getApplication(); Category category = mParent.getCurrentCategory(); Brand brand = mParent.getCurrentBrand(); @@ -240,7 +240,6 @@ public class IndexFragment extends BaseCreateFragment { listIndexes(); } }); - mIndexList.setOnItemClickListener(new ListView.OnItemClickListener() { @Override diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java index e9470c1..2bbb129 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java @@ -2,7 +2,6 @@ package net.irext.ircontrol.ui.fragment; import android.os.Handler; import android.os.Message; -import android.support.v4.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -11,6 +10,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; +import androidx.fragment.app.Fragment; import net.irext.ircontrol.R; import net.irext.ircontrol.bean.RemoteControl; import net.irext.ircontrol.ui.activity.MainActivity; diff --git a/android-example/app/src/main/java/net/irext/ircontrol/utils/ToastUtils.java b/android-example/app/src/main/java/net/irext/ircontrol/utils/ToastUtils.java index 587c151..d238acf 100644 --- a/android-example/app/src/main/java/net/irext/ircontrol/utils/ToastUtils.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/utils/ToastUtils.java @@ -15,8 +15,12 @@ import android.widget.Toast; */ public class ToastUtils { - public static void showToast(Context context, String text) { - int duration = Toast.LENGTH_SHORT; + public static void showToast(Context context, String text, Integer specificDuration) { + int duration = Toast.LENGTH_LONG; + + if (null != specificDuration) { + duration = specificDuration; + } Toast toast = Toast.makeText(context, text, duration); toast.show(); diff --git a/android-example/app/src/main/res/layout/activity_control.xml b/android-example/app/src/main/res/layout/activity_control.xml index 5dbd9d4..19e1ea1 100644 --- a/android-example/app/src/main/res/layout/activity_control.xml +++ b/android-example/app/src/main/res/layout/activity_control.xml @@ -11,6 +11,7 @@ android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:fitsSystemWindows="true" tools:context="net.irext.ircontrol.ui.activity.ControlActivity"> diff --git a/android-example/app/src/main/res/layout/activity_create.xml b/android-example/app/src/main/res/layout/activity_create.xml index 9c43703..5411a06 100644 --- a/android-example/app/src/main/res/layout/activity_create.xml +++ b/android-example/app/src/main/res/layout/activity_create.xml @@ -10,6 +10,7 @@ android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" + android:fitsSystemWindows="true" tools:context="net.irext.ircontrol.ui.activity.CreateActivity"> - - + - - + diff --git a/android-example/app/src/main/res/layout/fragment_control.xml b/android-example/app/src/main/res/layout/fragment_control.xml index 4a279bd..9af7034 100644 --- a/android-example/app/src/main/res/layout/fragment_control.xml +++ b/android-example/app/src/main/res/layout/fragment_control.xml @@ -1,8 +1,11 @@ - + + - + + + - \ No newline at end of file + + + + + + + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/connect_emitter.png b/android-example/app/src/main/res/mipmap-xxhdpi/connect_emitter.png new file mode 100644 index 0000000000000000000000000000000000000000..dc41d062745036d17c4615fb2838c2e7789c3a7c GIT binary patch literal 15850 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 literal 0 HcmV?d00001 diff --git a/android-example/app/src/main/res/values-zh-rCN/strings.xml b/android-example/app/src/main/res/values-zh-rCN/strings.xml index c530e02..f48abb8 100644 --- a/android-example/app/src/main/res/values-zh-rCN/strings.xml +++ b/android-example/app/src/main/res/values-zh-rCN/strings.xml @@ -6,7 +6,7 @@ 下拉刷新 放开以刷新\r\n(本例程只读取前20个数据) - 刷新... + 刷新… 已刷新: %1$s @@ -30,5 +30,13 @@ 确定 + - + 该设备不支持红外发射, 请连接外部模块进行发射 + 发射端 IP + 192.168.1.100 + 连接 + 使用发射器 + 请输入接收器的 IP 地址 + 连接失败 + 断开连接 diff --git a/android-example/app/src/main/res/values/strings.xml b/android-example/app/src/main/res/values/strings.xml index f484359..af712f4 100644 --- a/android-example/app/src/main/res/values/strings.xml +++ b/android-example/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ Pull to refresh Release to refresh - Refreshing... + Refreshing… Updated: %1$s @@ -30,5 +30,14 @@ OK + - + IR emitter is not supported in this device, please try with external emitters + + Emitter IP + 192.168.1.100 + connect + Use Emitter + Please input IP address of emitter + Connect failed + Disconnected diff --git a/android-example/build.gradle b/android-example/build.gradle index 7991078..08a9302 100644 --- a/android-example/build.gradle +++ b/android-example/build.gradle @@ -10,7 +10,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:8.1.0' + classpath 'com.android.tools.build:gradle:8.12.0' } } diff --git a/android-example/gradle.properties b/android-example/gradle.properties index 209cb8d..25245b2 100644 --- a/android-example/gradle.properties +++ b/android-example/gradle.properties @@ -16,9 +16,9 @@ org.gradle.jvmargs=-Xmx4096M \ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.useDeprecatedNdk=true android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false -android.useAndroidX=true \ No newline at end of file +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file