+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="gen"/>
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
- <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
- <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
- <classpathentry kind="output" path="bin/classes"/>
-</classpath>
--- /dev/null
+*.iml
+.gradle
+/local.properties
+/.idea/caches/build_file_checksums.ser
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
--- /dev/null
+<component name="ProjectCodeStyleConfiguration">
+ <code_scheme name="Project" version="173">
+ <Objective-C-extensions>
+ <file>
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
+ </file>
+ <class>
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
+ <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
+ </class>
+ <extensions>
+ <pair source="cpp" header="h" fileNamingConvention="NONE" />
+ <pair source="c" header="h" fileNamingConvention="NONE" />
+ </extensions>
+ </Objective-C-extensions>
+ </code_scheme>
+</component>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="GradleSettings">
+ <option name="linkedExternalProjectsSettings">
+ <GradleProjectSettings>
+ <option name="distributionType" value="DEFAULT_WRAPPED" />
+ <option name="externalProjectPath" value="$PROJECT_DIR$" />
+ <option name="modules">
+ <set>
+ <option value="$PROJECT_DIR$" />
+ <option value="$PROJECT_DIR$/app" />
+ </set>
+ </option>
+ <option name="resolveModulePerSourceSet" value="false" />
+ </GradleProjectSettings>
+ </option>
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="NullableNotNullManager">
+ <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
+ <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
+ <option name="myNullables">
+ <value>
+ <list size="7">
+ <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+ <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+ <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
+ <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+ <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+ <item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
+ <item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
+ </list>
+ </value>
+ </option>
+ <option name="myNotNulls">
+ <value>
+ <list size="6">
+ <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+ <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+ <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+ <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+ <item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
+ <item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
+ </list>
+ </value>
+ </option>
+ </component>
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+ <output url="file://$PROJECT_DIR$/build/classes" />
+ </component>
+ <component name="ProjectType">
+ <option name="id" value="Android" />
+ </component>
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="RunConfigurationProducerService">
+ <option name="ignoredProducers">
+ <set>
+ <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
+ <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
+ <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
+ </set>
+ </option>
+ </component>
+</project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>cinermt</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.android.ide.eclipse.adt.ApkBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.source=1.6
+++ /dev/null
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-\f
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program 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 2 of the License, or
- (at your option) any later version.
-
- This program 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 this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
--- /dev/null
+apply plugin: 'com.android.application'
+
+android {
+ signingConfigs {
+ cinermt {
+ keyAlias 'good_guy'
+ keyPassword 'good_guy'
+ storeFile file('/root/android-keystore')
+ storePassword 'debug-cooter'
+ }
+ }
+ compileSdkVersion 27
+ defaultConfig {
+ applicationId "com.local.cinermt"
+ minSdkVersion 14
+ targetSdkVersion 27
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.cinermt
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+}
--- /dev/null
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
--- /dev/null
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
--- /dev/null
+package com.local.cinermt;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.local.cinermt", appContext.getPackageName());
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.local.cinermt">
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@mipmap/launch"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name=".MainActivity"
+ android:label="CineRmt"
+ android:theme="@style/AppTheme">
+
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="com.local.cinermt.ConfigActivity"
+ android:label="CineCfg"
+ android:theme="@style/AppTheme">
+ </activity>
+ </application>
+
+</manifest>
--- /dev/null
+package com.local.cinermt;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.EditText;
+
+public class ConfigActivity extends Activity implements OnClickListener {
+ String ip_addr;
+ String pin;
+ int port;
+ EditText etxt_ip_addr;
+ EditText etxt_pin;
+ EditText etxt_port;
+
+ @Override
+ protected void onCreate(Bundle b) {
+ super.onCreate(b);
+
+ Intent it = getIntent();
+ ip_addr = it.getStringExtra("IP_ADDR");
+ pin = it.getStringExtra("PIN");
+ port = it.getIntExtra("PORT",0);
+
+ setContentView(R.layout.activity_config);
+ etxt_ip_addr = (EditText)findViewById(R.id.ip_addr);
+ etxt_pin = (EditText)findViewById(R.id.pin);
+ etxt_port = (EditText)findViewById(R.id.port);
+
+ etxt_ip_addr.setText(ip_addr);
+ etxt_pin.setText(pin);
+ etxt_port.setText(String.format("%d", port));
+
+ Button btn = (Button)findViewById(R.id.back);
+ btn.setOnClickListener(this);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_main, menu);
+ return true;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v instanceof Button) {
+ int id = ((Button)v).getId();
+ if (id == R.id.back) {
+ ip_addr = etxt_ip_addr.getText().toString();
+ pin = etxt_pin.getText().toString();
+ try {
+ port = Integer.valueOf(etxt_port.getText().toString());
+ } catch(Exception e) { port = 0; }
+
+ Intent it = new Intent(this,MainActivity.class);
+ it.putExtra("IP_ADDR", ip_addr);
+ it.putExtra("PIN", pin);
+ it.putExtra("PORT", port);
+ startActivity(it);
+ finish();
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ super.onOptionsItemSelected(item);
+ int id = item.getItemId();
+ if (id == R.id.menu_exit) {
+ finish();
+ return true;
+ }
+ return false;
+ }
+}
--- /dev/null
+package com.local.cinermt;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.SystemClock;
+//import android.support.v7.app.AppCompatActivity;
+import android.app.Activity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageButton;
+import android.widget.Toast;
+
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+
+//public class MainActivity extends Activity
+public class MainActivity extends Activity
+ implements OnClickListener {
+ String ip_addr;
+ int sport, dport;
+ String pin;
+
+ private final String IP_ADDR = "127.0.0.1";
+ private final int DPORT = 23432;
+ private final String MAGIC = "CAR";
+ private final String PIN = "cinelerra";
+ private final char VER = '\001', ZERO = '\000';
+
+ private SharedPreferences prefs;
+
+ InetAddress in_adr;
+ DatagramSocket socket;
+ Handler hndr = new Handler();
+
+
+ class sender extends Thread implements Runnable {
+ public String data;
+ sender(String d) { data = d; }
+
+ @Override
+ public void run() {
+ if( socket == null ) return;
+ String buf = MAGIC + VER + pin + ZERO + data;
+ try {
+ DatagramPacket packet =
+ new DatagramPacket(buf.getBytes(), buf.length(), in_adr, dport);
+ socket.send(packet);
+ } catch(Exception e) {
+ return;
+ }
+ }
+ }
+
+ public void send(String data) {
+ final Thread net = new sender(data);
+ net.start();
+ }
+
+ boolean has_network() {
+ ConnectivityManager cmgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo netinf =
+ cmgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+ netinf = cmgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+ if( netinf == null ) return false;
+ if(!netinf.isAvailable()) return false;
+ if(!netinf.isConnected()) return false;
+ return true;
+ }
+
+ boolean create_socket() {
+ if(socket != null) socket.close();
+ socket = null;
+ int retry = 10;
+ while( --retry >= 0 ) {
+ sport = (int)(Math.random() * (65536-1024)) + 1024;
+ try {
+ in_adr = InetAddress.getAllByName(ip_addr)[0];
+ socket = new DatagramSocket(sport);
+ socket.setBroadcast(true);
+ } catch(Exception e) { SystemClock.sleep(100); continue; }
+ break;
+ }
+ return retry >= 0;
+ }
+
+ void save_defaults() {
+ SharedPreferences.Editor ed = prefs.edit();
+ ed.putString("IP_ADDR", ip_addr);
+ ed.putString("PIN", pin);
+ ed.putInt("PORT", dport);
+ ed.commit();
+ }
+
+ void load_defaults() {
+ ip_addr = prefs.getString("IP_ADDR", IP_ADDR);
+ pin = prefs.getString("PIN", PIN);
+ dport = prefs.getInt("PORT", DPORT);
+ }
+
+ @Override
+ protected void onCreate(Bundle b) {
+ super.onCreate(b);
+ setContentView(R.layout.activity_main);
+ if( !has_network() ) {
+ Toast.makeText(this, "Can't access wifi", Toast.LENGTH_LONG).show();
+ SystemClock.sleep(5000);
+ finish();
+ }
+ prefs = this.getSharedPreferences("CineRmt", 0);
+ load_defaults();
+ Intent it = getIntent();
+ String s = it.getStringExtra("IP_ADDR");
+ if( s != null ) ip_addr = s;
+ s = it.getStringExtra("PIN");
+ if( s != null ) pin = s;
+ dport = it.getIntExtra("PORT", dport);
+ if( dport < 1024 ) dport = DPORT;
+ if( !create_socket() ) {
+ Toast.makeText(this, "Can't access network", Toast.LENGTH_LONG).show();
+ SystemClock.sleep(5000);
+ }
+ ImageButton img = (ImageButton)findViewById(R.id.button0);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button1);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button2);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button3);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button4);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button5);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button6);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button7);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button8);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button9);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonA);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonB);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonC);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonD);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonE);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.buttonF);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.button_dot);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.fast_lt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.media_up);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.fast_rt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.menu);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.media_lt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.pause);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.media_rt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.slow_lt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.media_dn);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.slow_rt);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.full_scr);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.stop);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.play);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.rplay);
+ img.setOnClickListener(this);
+
+ img = (ImageButton)findViewById(R.id.suspend);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.config);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.exit);
+ img.setOnClickListener(this);
+ img = (ImageButton)findViewById(R.id.power);
+ img.setOnClickListener(this);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_main, menu);
+ return true;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v instanceof ImageButton) {
+ int id = ((ImageButton)v).getId();
+ if (id == R.id.stop) { send("stop"); }
+ else if (id == R.id.play) { send("play"); }
+ else if (id == R.id.rplay) { send("rplay"); }
+ else if (id == R.id.button0) { send("key 0"); }
+ else if (id == R.id.button1) { send("key 1"); }
+ else if (id == R.id.button2) { send("key 2"); }
+ else if (id == R.id.button3) { send("key 3"); }
+ else if (id == R.id.button4) { send("key 4"); }
+ else if (id == R.id.button5) { send("key 5"); }
+ else if (id == R.id.button6) { send("key 6"); }
+ else if (id == R.id.button7) { send("key 7"); }
+ else if (id == R.id.button8) { send("key 8"); }
+ else if (id == R.id.button9) { send("key 9"); }
+ else if (id == R.id.buttonA) { send("key A"); }
+ else if (id == R.id.buttonB) { send("key B"); }
+ else if (id == R.id.buttonC) { send("key C"); }
+ else if (id == R.id.buttonD) { send("key D"); }
+ else if (id == R.id.buttonE) { send("key E"); }
+ else if (id == R.id.buttonF) { send("key F"); }
+ else if (id == R.id.fast_lt) { send("fast_lt"); }
+ else if (id == R.id.media_up) { send("media_up"); }
+ else if (id == R.id.fast_rt) { send("fast_rt"); }
+ else if (id == R.id.menu) { send("menu"); }
+ else if (id == R.id.media_lt) { send("media_lt"); }
+ else if (id == R.id.pause) { send("pause"); }
+ else if (id == R.id.media_rt) { send("media_rt"); }
+ else if (id == R.id.slow_lt) { send("slow_lt"); }
+ else if (id == R.id.media_dn) { send("media_dn"); }
+ else if (id == R.id.slow_rt) { send("slow_rt"); }
+ else if (id == R.id.full_scr) { send("key F"); }
+ else {
+ save_defaults();
+ if (id == R.id.config) {
+ Intent it = new Intent(this, ConfigActivity.class);
+ it.putExtra("IP_ADDR", ip_addr);
+ it.putExtra("PIN", pin);
+ it.putExtra("PORT", dport);
+ startActivity(it);
+ }
+ else if (id == R.id.suspend)
+ send("suspend");
+ else if (id == R.id.power)
+ send("power");
+ else if (id != R.id.exit)
+ return;
+ finish();
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ super.onOptionsItemSelected(item);
+ int id = item.getItemId();
+ if (id == R.id.menu_exit) {
+ save_defaults();
+ finish();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ save_defaults();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ save_defaults();
+ }
+}
--- /dev/null
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillType="evenOdd"
+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="78.5885"
+ android:endY="90.9159"
+ android:startX="48.7653"
+ android:startY="61.0927"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillColor="#008577"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+</vector>
--- /dev/null
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/config_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="com.local.cinermt.ConfigActivity"
+ android:background="#fdb308">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/ip_addr_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="IP Address:"
+ android:textColor="#000000" />
+
+ <EditText
+ android:id="@+id/ip_addr"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:id="@+id/pin_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="PIN:"
+ android:textColor="#000000" />
+
+ <EditText
+ android:id="@+id/pin"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:id="@+id/dport"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Port:"
+ android:textColor="#000000" />
+
+ <EditText
+ android:id="@+id/port"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <Button
+ android:id="@+id/back"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Back" />
+ </LinearLayout>
+
+</FrameLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout 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="match_parent"
+ android:fitsSystemWindows="true"
+ tools:context="com.local.cinermt.MainActivity"
+ android:background="#fdb308">
+
+ <include layout="@layout/content_main" />
+
+</android.support.design.widget.CoordinatorLayout>
--- /dev/null
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ tools:context=".MainActivity"
+ tools:ignore="MergeRootFrame"
+ android:clickable="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ImageButton
+ android:id="@+id/button0"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig0" />
+
+ <ImageButton
+ android:id="@+id/button1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig1" />
+
+ <ImageButton
+ android:id="@+id/button2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig2" />
+
+ <ImageButton
+ android:id="@+id/button3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig3" />
+
+ <ImageButton
+ android:id="@+id/button4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig4" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ImageButton
+ android:id="@+id/button5"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig5" />
+
+ <ImageButton
+ android:id="@+id/button6"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig6" />
+
+ <ImageButton
+ android:id="@+id/button7"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig7" />
+
+ <ImageButton
+ android:id="@+id/button8"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig8" />
+
+ <ImageButton
+ android:id="@+id/button9"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfig9" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ImageButton
+ android:id="@+id/buttonA"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfiga" />
+
+ <ImageButton
+ android:id="@+id/buttonB"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfigb" />
+
+ <ImageButton
+ android:id="@+id/buttonC"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfigc" />
+
+ <ImageButton
+ android:id="@+id/buttonD"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfigd" />
+
+ <ImageButton
+ android:id="@+id/buttonE"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfige" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <ImageButton
+ android:id="@+id/buttonF"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfigf" />
+
+ <ImageButton
+ android:id="@+id/button_dot"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/zfigdot" />
+
+ <ImageButton
+ android:id="@+id/full_scr"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/full_scr" />
+
+ <ImageButton
+ android:id="@+id/power"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/power" />
+
+ <ImageButton
+ android:id="@+id/exit"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/exit" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal">
+
+ <ImageButton
+ android:id="@+id/fast_lt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/fast_lt" />
+
+ <ImageButton
+ android:id="@+id/media_up"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/media_up" />
+
+ <ImageButton
+ android:id="@+id/fast_rt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/fast_rt" />
+
+ <ImageButton
+ android:id="@+id/menu"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/menu" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal">
+
+ <ImageButton
+ android:id="@+id/media_lt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/media_lt" />
+
+ <ImageButton
+ android:id="@+id/pause"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/pause" />
+
+ <ImageButton
+ android:id="@+id/media_rt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/media_rt" />
+
+ <ImageButton
+ android:id="@+id/suspend"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/suspend" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal">
+
+ <ImageButton
+ android:id="@+id/slow_lt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/slow_lt" />
+
+ <ImageButton
+ android:id="@+id/media_dn"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/media_dn" />
+
+ <ImageButton
+ android:id="@+id/slow_rt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/slow_rt" />
+
+ <ImageButton
+ android:id="@+id/config"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/config" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal">
+
+ <ImageButton
+ android:id="@+id/rplay"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/rev" />
+
+ <ImageButton
+ android:id="@+id/stop"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/stop" />
+
+ <ImageButton
+ android:id="@+id/play"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:cropToPadding="false"
+ android:scaleType="fitXY"
+ android:src="@mipmap/play" />
+ </LinearLayout>
+ </LinearLayout>
+
+</FrameLayout>
--- /dev/null
+<menu 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"
+ tools:context="com.local.cinermt.MainActivity">
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:title="@string/action_settings"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/menu_exit"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/menu_exit"/>
+
+</menu>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="colorPrimary">#3F51B5</color>
+ <color name="colorPrimaryDark">#303F9F</color>
+ <color name="colorAccent">#FF4081</color>
+</resources>
--- /dev/null
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+ <dimen name="fab_margin">16dp</dimen>
+</resources>
--- /dev/null
+<resources>
+ <string name="app_name">CineRmt</string>
+ <string name="action_settings">Settings</string>
+ <string name="menu_exit">Exit</string>
+</resources>
--- /dev/null
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
+ <!-- Customize your theme here. -->
+ <item name="colorPrimary">@color/colorPrimary</item>
+ <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+ <item name="colorAccent">@color/colorAccent</item>
+ </style>
+
+</resources>
--- /dev/null
+package com.local.cinermt;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
--- /dev/null
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.2.1'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
--- /dev/null
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# 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
+
+
--- /dev/null
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
--- /dev/null
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
--- /dev/null
+@if "%DEBUG%" == "" @echo off\r
+@rem ##########################################################################\r
+@rem\r
+@rem Gradle startup script for Windows\r
+@rem\r
+@rem ##########################################################################\r
+\r
+@rem Set local scope for the variables with windows NT shell\r
+if "%OS%"=="Windows_NT" setlocal\r
+\r
+set DIRNAME=%~dp0\r
+if "%DIRNAME%" == "" set DIRNAME=.\r
+set APP_BASE_NAME=%~n0\r
+set APP_HOME=%DIRNAME%\r
+\r
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r
+set DEFAULT_JVM_OPTS=\r
+\r
+@rem Find java.exe\r
+if defined JAVA_HOME goto findJavaFromJavaHome\r
+\r
+set JAVA_EXE=java.exe\r
+%JAVA_EXE% -version >NUL 2>&1\r
+if "%ERRORLEVEL%" == "0" goto init\r
+\r
+echo.\r
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r
+echo.\r
+echo Please set the JAVA_HOME variable in your environment to match the\r
+echo location of your Java installation.\r
+\r
+goto fail\r
+\r
+:findJavaFromJavaHome\r
+set JAVA_HOME=%JAVA_HOME:"=%\r
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe\r
+\r
+if exist "%JAVA_EXE%" goto init\r
+\r
+echo.\r
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r
+echo.\r
+echo Please set the JAVA_HOME variable in your environment to match the\r
+echo location of your Java installation.\r
+\r
+goto fail\r
+\r
+:init\r
+@rem Get command-line arguments, handling Windows variants\r
+\r
+if not "%OS%" == "Windows_NT" goto win9xME_args\r
+\r
+:win9xME_args\r
+@rem Slurp the command line arguments.\r
+set CMD_LINE_ARGS=\r
+set _SKIP=2\r
+\r
+:win9xME_args_slurp\r
+if "x%~1" == "x" goto execute\r
+\r
+set CMD_LINE_ARGS=%*\r
+\r
+:execute\r
+@rem Setup the command line\r
+\r
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar\r
+\r
+@rem Execute Gradle\r
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r
+\r
+:end\r
+@rem End local scope for the variables with windows NT shell\r
+if "%ERRORLEVEL%"=="0" goto mainEnd\r
+\r
+:fail\r
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r
+rem the _cmd.exe /c_ return code!\r
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1\r
+exit /b 1\r
+\r
+:mainEnd\r
+if "%OS%"=="Windows_NT" endlocal\r
+\r
+:omega\r
--- /dev/null
+include ':app'
+++ /dev/null
-package com.local.cinermt;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
- */
-public class ApplicationTest extends ApplicationTestCase<Application> {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.local.cinermt">
-
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
- <application
- android:allowBackup="true"
- android:icon="@mipmap/launch"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name=".MainActivity"
- android:label="CineRmt"
- android:theme="@style/AppTheme.NoActionBar">
-
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity
- android:name="com.local.cinermt.ConfigActivity"
- android:label="CineCfg"
- android:theme="@style/AppTheme.NoActionBar">
- </activity>
- </application>
-
-</manifest>
+++ /dev/null
-package com.local.cinermt;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.EditText;
-
-public class ConfigActivity extends Activity implements OnClickListener {
- String ip_addr;
- String pin;
- int port;
- EditText etxt_ip_addr;
- EditText etxt_pin;
- EditText etxt_port;
-
- @Override
- protected void onCreate(Bundle b) {
- super.onCreate(b);
-
- Intent it = getIntent();
- ip_addr = it.getStringExtra("IP_ADDR");
- pin = it.getStringExtra("PIN");
- port = it.getIntExtra("PORT",0);
-
- setContentView(R.layout.activity_config);
- etxt_ip_addr = (EditText)findViewById(R.id.ip_addr);
- etxt_pin = (EditText)findViewById(R.id.pin);
- etxt_port = (EditText)findViewById(R.id.port);
-
- etxt_ip_addr.setText(ip_addr);
- etxt_pin.setText(pin);
- etxt_port.setText(String.format("%d", port));
-
- Button btn = (Button)findViewById(R.id.back);
- btn.setOnClickListener(this);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_main, menu);
- return true;
- }
-
- @Override
- public void onClick(View v) {
- if (v instanceof Button) {
- int id = ((Button)v).getId();
- if (id == R.id.back) {
- ip_addr = etxt_ip_addr.getText().toString();
- pin = etxt_pin.getText().toString();
- try {
- port = Integer.valueOf(etxt_port.getText().toString());
- } catch(Exception e) { port = 0; }
-
- Intent it = new Intent(this,MainActivity.class);
- it.putExtra("IP_ADDR", ip_addr);
- it.putExtra("PIN", pin);
- it.putExtra("PORT", port);
- startActivity(it);
- finish();
- }
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
- int id = item.getItemId();
- if (id == R.id.menu_exit) {
- finish();
- return true;
- }
- return false;
- }
-}
+++ /dev/null
-package com.local.cinermt;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.support.v7.app.AppCompatActivity;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageButton;
-import android.widget.Toast;
-
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-
-//public class MainActivity extends Activity
-public class MainActivity extends AppCompatActivity
- implements OnClickListener {
- String ip_addr;
- int sport, dport;
- String pin;
-
- private final String IP_ADDR = "127.0.0.1";
- private final int DPORT = 23432;
- private final String MAGIC = "CAR";
- private final String PIN = "cinelerra";
- private final char VER = '\001', ZERO = '\000';
-
- private SharedPreferences prefs;
-
- InetAddress in_adr;
- DatagramSocket socket;
- Handler hndr = new Handler();
-
-
- class sender extends Thread implements Runnable {
- public String data;
- sender(String d) { data = d; }
-
- @Override
- public void run() {
- if( socket == null ) return;
- String buf = MAGIC + VER + pin + ZERO + data;
- try {
- DatagramPacket packet =
- new DatagramPacket(buf.getBytes(), buf.length(), in_adr, dport);
- socket.send(packet);
- } catch(Exception e) {
- return;
- }
- }
- }
-
- public void send(String data) {
- final Thread net = new sender(data);
- net.start();
- }
-
- boolean has_network() {
- ConnectivityManager cmgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo netinf =
- cmgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
- netinf = cmgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- if( netinf == null ) return false;
- if(!netinf.isAvailable()) return false;
- if(!netinf.isConnected()) return false;
- return true;
- }
-
- boolean create_socket() {
- if(socket != null) socket.close();
- socket = null;
- int retry = 10;
- while( --retry >= 0 ) {
- sport = (int)(Math.random() * (65536-1024)) + 1024;
- try {
- in_adr = InetAddress.getAllByName(ip_addr)[0];
- socket = new DatagramSocket(sport);
- socket.setBroadcast(true);
- } catch(Exception e) { SystemClock.sleep(100); continue; }
- break;
- }
- return retry >= 0;
- }
-
- void save_defaults() {
- SharedPreferences.Editor ed = prefs.edit();
- ed.putString("IP_ADDR", ip_addr);
- ed.putString("PIN", pin);
- ed.putInt("PORT", dport);
- ed.commit();
- }
-
- void load_defaults() {
- ip_addr = prefs.getString("IP_ADDR", IP_ADDR);
- pin = prefs.getString("PIN", PIN);
- dport = prefs.getInt("PORT", DPORT);
- }
-
- @Override
- protected void onCreate(Bundle b) {
- super.onCreate(b);
- setContentView(R.layout.activity_main);
- if( !has_network() ) {
- Toast.makeText(this, "Can't access wifi", Toast.LENGTH_LONG).show();
- SystemClock.sleep(5000);
- finish();
- }
- prefs = this.getSharedPreferences("CineRmt", 0);
- load_defaults();
- Intent it = getIntent();
- String s = it.getStringExtra("IP_ADDR");
- if( s != null ) ip_addr = s;
- s = it.getStringExtra("PIN");
- if( s != null ) pin = s;
- dport = it.getIntExtra("PORT", dport);
- if( dport < 1024 ) dport = DPORT;
- if( !create_socket() ) {
- Toast.makeText(this, "Can't access network", Toast.LENGTH_LONG).show();
- SystemClock.sleep(5000);
- }
- ImageButton img = (ImageButton)findViewById(R.id.button0);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button1);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button2);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button3);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button4);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button5);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button6);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button7);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button8);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button9);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonA);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonB);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonC);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonD);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonE);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.buttonF);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.button_dot);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.fast_lt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.media_up);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.fast_rt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.menu);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.media_lt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.pause);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.media_rt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.slow_lt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.media_dn);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.slow_rt);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.full_scr);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.stop);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.play);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.rplay);
- img.setOnClickListener(this);
-
- img = (ImageButton)findViewById(R.id.suspend);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.config);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.exit);
- img.setOnClickListener(this);
- img = (ImageButton)findViewById(R.id.power);
- img.setOnClickListener(this);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_main, menu);
- return true;
- }
-
- @Override
- public void onClick(View v) {
- if (v instanceof ImageButton) {
- int id = ((ImageButton)v).getId();
- if (id == R.id.stop) { send("stop"); }
- else if (id == R.id.play) { send("play"); }
- else if (id == R.id.rplay) { send("rplay"); }
- else if (id == R.id.button0) { send("key 0"); }
- else if (id == R.id.button1) { send("key 1"); }
- else if (id == R.id.button2) { send("key 2"); }
- else if (id == R.id.button3) { send("key 3"); }
- else if (id == R.id.button4) { send("key 4"); }
- else if (id == R.id.button5) { send("key 5"); }
- else if (id == R.id.button6) { send("key 6"); }
- else if (id == R.id.button7) { send("key 7"); }
- else if (id == R.id.button8) { send("key 8"); }
- else if (id == R.id.button9) { send("key 9"); }
- else if (id == R.id.buttonA) { send("key A"); }
- else if (id == R.id.buttonB) { send("key B"); }
- else if (id == R.id.buttonC) { send("key C"); }
- else if (id == R.id.buttonD) { send("key D"); }
- else if (id == R.id.buttonE) { send("key E"); }
- else if (id == R.id.buttonF) { send("key F"); }
- else if (id == R.id.fast_lt) { send("fast_lt"); }
- else if (id == R.id.media_up) { send("media_up"); }
- else if (id == R.id.fast_rt) { send("fast_rt"); }
- else if (id == R.id.menu) { send("menu"); }
- else if (id == R.id.media_lt) { send("media_lt"); }
- else if (id == R.id.pause) { send("pause"); }
- else if (id == R.id.media_rt) { send("media_rt"); }
- else if (id == R.id.slow_lt) { send("slow_lt"); }
- else if (id == R.id.media_dn) { send("media_dn"); }
- else if (id == R.id.slow_rt) { send("slow_rt"); }
- else if (id == R.id.full_scr) { send("key F"); }
- else {
- save_defaults();
- if (id == R.id.config) {
- Intent it = new Intent(this, ConfigActivity.class);
- it.putExtra("IP_ADDR", ip_addr);
- it.putExtra("PIN", pin);
- it.putExtra("PORT", dport);
- startActivity(it);
- }
- else if (id == R.id.suspend)
- send("suspend");
- else if (id == R.id.power)
- send("power");
- else if (id != R.id.exit)
- return;
- finish();
- }
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
- int id = item.getItemId();
- if (id == R.id.menu_exit) {
- save_defaults();
- finish();
- return true;
- }
- return false;
- }
-
- @Override
- public void onPause() {
- super.onPause();
- save_defaults();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- save_defaults();
- }
-}
+++ /dev/null
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/config_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.local.cinermt.ConfigActivity"
- android:background="#fdb308">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/ip_addr_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="IP Address:"
- android:textColor="#000000" />
-
- <EditText
- android:id="@+id/ip_addr"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- <TextView
- android:id="@+id/pin_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="PIN:"
- android:textColor="#000000" />
-
- <EditText
- android:id="@+id/pin"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- <TextView
- android:id="@+id/dport"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Port:"
- android:textColor="#000000" />
-
- <EditText
- android:id="@+id/port"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- <Button
- android:id="@+id/back"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Back" />
- </LinearLayout>
-
-</FrameLayout>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<android.support.design.widget.CoordinatorLayout 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="match_parent"
- android:fitsSystemWindows="true"
- tools:context="com.local.cinermt.MainActivity"
- android:background="#fdb308">
-
- <include layout="@layout/content_main" />
-
-</android.support.design.widget.CoordinatorLayout>
+++ /dev/null
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- tools:context=".MainActivity"
- tools:ignore="MergeRootFrame"
- android:clickable="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <ImageButton
- android:id="@+id/button0"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig0" />
-
- <ImageButton
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig1" />
-
- <ImageButton
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig2" />
-
- <ImageButton
- android:id="@+id/button3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig3" />
-
- <ImageButton
- android:id="@+id/button4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig4" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <ImageButton
- android:id="@+id/button5"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig5" />
-
- <ImageButton
- android:id="@+id/button6"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig6" />
-
- <ImageButton
- android:id="@+id/button7"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig7" />
-
- <ImageButton
- android:id="@+id/button8"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig8" />
-
- <ImageButton
- android:id="@+id/button9"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfig9" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <ImageButton
- android:id="@+id/buttonA"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfiga" />
-
- <ImageButton
- android:id="@+id/buttonB"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfigb" />
-
- <ImageButton
- android:id="@+id/buttonC"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfigc" />
-
- <ImageButton
- android:id="@+id/buttonD"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfigd" />
-
- <ImageButton
- android:id="@+id/buttonE"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfige" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <ImageButton
- android:id="@+id/buttonF"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfigf" />
-
- <ImageButton
- android:id="@+id/button_dot"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/zfigdot" />
-
- <ImageButton
- android:id="@+id/full_scr"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/full_scr" />
-
- <ImageButton
- android:id="@+id/power"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/power" />
-
- <ImageButton
- android:id="@+id/exit"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/exit" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
-
- <ImageButton
- android:id="@+id/fast_lt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/fast_lt" />
-
- <ImageButton
- android:id="@+id/media_up"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/media_up" />
-
- <ImageButton
- android:id="@+id/fast_rt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/fast_rt" />
-
- <ImageButton
- android:id="@+id/menu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/menu" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
-
- <ImageButton
- android:id="@+id/media_lt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/media_lt" />
-
- <ImageButton
- android:id="@+id/pause"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/pause" />
-
- <ImageButton
- android:id="@+id/media_rt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/media_rt" />
-
- <ImageButton
- android:id="@+id/suspend"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/suspend" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
-
- <ImageButton
- android:id="@+id/slow_lt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/slow_lt" />
-
- <ImageButton
- android:id="@+id/media_dn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/media_dn" />
-
- <ImageButton
- android:id="@+id/slow_rt"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/slow_rt" />
-
- <ImageButton
- android:id="@+id/config"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/config" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
-
- <ImageButton
- android:id="@+id/rplay"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/rev" />
-
- <ImageButton
- android:id="@+id/stop"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/stop" />
-
- <ImageButton
- android:id="@+id/play"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:cropToPadding="false"
- android:scaleType="fitXY"
- android:src="@mipmap/play" />
- </LinearLayout>
- </LinearLayout>
-
-</FrameLayout>
+++ /dev/null
-<menu 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"
- tools:context="com.local.cinermt.MainActivity">
- <item
- android:id="@+id/action_settings"
- android:orderInCategory="100"
- android:title="@string/action_settings"
- app:showAsAction="never" />
-
- <item
- android:id="@+id/menu_exit"
- android:orderInCategory="100"
- android:showAsAction="never"
- android:title="@string/menu_exit"/>
-
-</menu>
+++ /dev/null
-<resources>>
-
- <style name="AppTheme.NoActionBar">
- <item name="windowActionBar">false</item>
- <item name="windowNoTitle">true</item>
- <item name="android:windowDrawsSystemBarBackgrounds">true</item>
- <item name="android:statusBarColor">@android:color/transparent</item>
- </style>
-</resources>
+++ /dev/null
-<resources>
- <!-- Example customization of dimensions originally defined in res/values/dimens.xml
- (such as screen margins) for screens with more than 820dp of available width. This
- would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
- <dimen name="activity_horizontal_margin">64dp</dimen>
-</resources>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <color name="colorPrimary">#3F51B5</color>
- <color name="colorPrimaryDark">#303F9F</color>
- <color name="colorAccent">#FF4081</color>
-</resources>
+++ /dev/null
-<resources>
- <!-- Default screen margins, per the Android Design guidelines. -->
- <dimen name="activity_horizontal_margin">16dp</dimen>
- <dimen name="activity_vertical_margin">16dp</dimen>
- <dimen name="fab_margin">16dp</dimen>
-</resources>
+++ /dev/null
-<resources>
- <string name="app_name">CineRmt</string>
- <string name="action_settings">Settings</string>
- <string name="menu_exit">Exit</string>
-</resources>
+++ /dev/null
-<resources>
-
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
-
- <style name="AppTheme.NoActionBar">
- <item name="windowActionBar">false</item>
- <item name="windowNoTitle">true</item>
- </style>
-
- <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
-
- <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
-
-</resources>
+++ /dev/null
-package com.local.cinermt;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * To work on unit tests, switch the Test Artifact in the Build Variants view.
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file