diff --git a/android-example/.gitignore b/android-example/.gitignore old mode 100644 new mode 100755 index 3f4fefd..4dfc95c --- a/android-example/.gitignore +++ b/android-example/.gitignore @@ -1,8 +1,8 @@ -*.iml -.gradle -/local.properties -.idea/ -.DS_Store -/build -/captures -.externalNativeBuild +*.iml +.gradle +/local.properties +.idea/ +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/android-example/README.md b/android-example/README.md old mode 100644 new mode 100755 index dd64ec3..a1c8097 --- a/android-example/README.md +++ b/android-example/README.md @@ -1,5 +1,5 @@ -# irext-example-android -IR decode example for Android application - -Please refer to the usage documents in /decodesdk - +# irext-example-android +IR decode example for Android application + +Please refer to the usage documents in /decodesdk + diff --git a/android-example/app/.gitignore b/android-example/app/.gitignore old mode 100644 new mode 100755 index 796b96d..3543521 --- a/android-example/app/.gitignore +++ b/android-example/app/.gitignore @@ -1 +1 @@ -/build +/build diff --git a/android-example/app/build.gradle b/android-example/app/build.gradle old mode 100644 new mode 100755 index 52cb83a..5493a87 --- a/android-example/app/build.gradle +++ b/android-example/app/build.gradle @@ -1,40 +1,40 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' - defaultConfig { - applicationId "net.irext.ircontrol" - minSdkVersion 19 - targetSdkVersion 27 - versionCode 4 - versionName '0.1.5' - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - sourceSets.main { - jniLibs.srcDirs = ['src/main/jniLibs'] - } - repositories { - mavenCentral() - maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } - } - compileOptions { - } - productFlavors { - } -} - -dependencies { - compile 'com.android.support:appcompat-v7:27.1.1' - compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' - compile 'com.android.support:design:27.1.1' - compile 'com.android.support:support-v4:27.1.1' - compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' - compile project(':decodesdk') - compile project(':web-api') -} +apply plugin: 'com.android.application' + +android { + compileSdkVersion 27 + buildToolsVersion '28.0.3' + defaultConfig { + applicationId "net.irext.ircontrol" + minSdkVersion 19 + targetSdkVersion 27 + versionCode 4 + versionName '0.1.5' + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + sourceSets.main { + jniLibs.srcDirs = ['src/main/jniLibs'] + } + repositories { + mavenCentral() + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + } + compileOptions { + } + productFlavors { + } +} + +dependencies { + compile 'com.android.support:appcompat-v7:27.1.1' + compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' + compile 'com.android.support:design:27.1.1' + compile 'com.android.support:support-v4:27.1.1' + compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' + compile project(':decodesdk') + compile project(':web-api') +} diff --git a/android-example/app/libs/web-api.aar b/android-example/app/libs/web-api.aar old mode 100644 new mode 100755 diff --git a/android-example/app/proguard-rules.pro b/android-example/app/proguard-rules.pro old mode 100644 new mode 100755 index e4fe55e..4d77a71 --- a/android-example/app/proguard-rules.pro +++ b/android-example/app/proguard-rules.pro @@ -1,25 +1,25 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:\Android\android-sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# 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 +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Android\android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 diff --git a/android-example/app/release/app-release.apk b/android-example/app/release/app-release.apk new file mode 100644 index 0000000..eac00ea Binary files /dev/null and b/android-example/app/release/app-release.apk differ diff --git a/android-example/app/release/output.json b/android-example/app/release/output.json new file mode 100644 index 0000000..d15b5a7 --- /dev/null +++ b/android-example/app/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":4,"versionName":"0.1.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/android-example/app/src/main/AndroidManifest.xml b/android-example/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 index 78b77d9..1fe1ea9 --- a/android-example/app/src/main/AndroidManifest.xml +++ b/android-example/app/src/main/AndroidManifest.xml @@ -1,69 +1,69 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/java/net/irext/ircontrol/IRApplication.java b/android-example/app/src/main/java/net/irext/ircontrol/IRApplication.java old mode 100644 new mode 100755 index 01f7d91..3b94fb8 --- a/android-example/app/src/main/java/net/irext/ircontrol/IRApplication.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/IRApplication.java @@ -1,73 +1,73 @@ -package net.irext.ircontrol; - -import android.util.Log; - -import com.activeandroid.ActiveAndroid; - -import net.irext.webapi.WebAPIs; -import net.irext.webapi.model.UserApp; -import net.irext.webapi.WebAPICallbacks.SignInCallback; - -/** - * Filename: IRApplication.java - * Revised: Date: 2017-03-28 - * Revision: Revision: 1.0 - *

- * Description: Main Application class for irext decode example - *

- * Revision log: - * 2017-03-28: created by strawmanbobi - */ -public class IRApplication extends com.activeandroid.app.Application { - - private static final String TAG = IRApplication.class.getSimpleName(); - - private static final String ADDRESS = "https://irext.net"; - private static final String APP_NAME = "/irext-server"; - - public WebAPIs mWeAPIs = WebAPIs.getInstance(ADDRESS, APP_NAME); - - private UserApp mUserApp; - - private SignInCallback mSignInCallback = new SignInCallback() { - @Override - public void onSignInSuccess(UserApp userApp) { - mUserApp = userApp; - } - - @Override - public void onSignInFailed() { - Log.w(TAG, "sign in failed"); - } - - @Override - public void onSignInError() { - Log.e(TAG, "sign in error"); - } - }; - - public UserApp getUserApp() { - return mUserApp; - } - - @Override - public void onCreate() { - super.onCreate(); - - // initialize ActiveAndroid - ActiveAndroid.initialize(this); - - // login with guest-admin account - new Thread() { - @Override - public void run() { - mWeAPIs.signIn(IRApplication.this, mSignInCallback); - if (null != mUserApp) { - Log.d(TAG, "signIn response : " + mUserApp.getId() + ", " + mUserApp.getToken()); - } else { - Log.w(TAG, "signIn failed"); - } - } - }.start(); - } -} +package net.irext.ircontrol; + +import android.util.Log; + +import com.activeandroid.ActiveAndroid; + +import net.irext.webapi.WebAPIs; +import net.irext.webapi.model.UserApp; +import net.irext.webapi.WebAPICallbacks.SignInCallback; + +/** + * Filename: IRApplication.java + * Revised: Date: 2017-03-28 + * Revision: Revision: 1.0 + *

+ * Description: Main Application class for irext decode example + *

+ * Revision log: + * 2017-03-28: created by strawmanbobi + */ +public class IRApplication extends com.activeandroid.app.Application { + + private static final String TAG = IRApplication.class.getSimpleName(); + + private static final String ADDRESS = "https://irext.net"; + private static final String APP_NAME = "/irext-server"; + + public WebAPIs mWeAPIs = WebAPIs.getInstance(ADDRESS, APP_NAME); + + private UserApp mUserApp; + + private SignInCallback mSignInCallback = new SignInCallback() { + @Override + public void onSignInSuccess(UserApp userApp) { + mUserApp = userApp; + } + + @Override + public void onSignInFailed() { + Log.w(TAG, "sign in failed"); + } + + @Override + public void onSignInError() { + Log.e(TAG, "sign in error"); + } + }; + + public UserApp getUserApp() { + return mUserApp; + } + + @Override + public void onCreate() { + super.onCreate(); + + // initialize ActiveAndroid + ActiveAndroid.initialize(this); + + // login with guest-admin account + new Thread() { + @Override + public void run() { + mWeAPIs.signIn(IRApplication.this, mSignInCallback); + if (null != mUserApp) { + Log.d(TAG, "signIn response : " + mUserApp.getId() + ", " + mUserApp.getToken()); + } else { + Log.w(TAG, "signIn failed"); + } + } + }.start(); + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/bean/RemoteControl.java b/android-example/app/src/main/java/net/irext/ircontrol/bean/RemoteControl.java old mode 100644 new mode 100755 index 95ebba6..76544a6 --- a/android-example/app/src/main/java/net/irext/ircontrol/bean/RemoteControl.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/bean/RemoteControl.java @@ -1,204 +1,204 @@ -package net.irext.ircontrol.bean; - -import com.activeandroid.Model; -import com.activeandroid.annotation.Column; -import com.activeandroid.annotation.Table; -import com.activeandroid.query.Select; - -import java.util.List; - -/** - * Filename: RemoteControl.java - * Revised: Date: 2017-04-06 - * Revision: Revision: 1.0 - *

- * Description: RemoteControl java bean - *

- * Revision log: - * 2017-04-06: created by strawmanbobi - */ - -@Table(name = "RemoteControl") -public class RemoteControl extends Model { - - @Column(name = "CategoryID") - private int categoryId; - - @Column(name = "CategoryName") - private String categoryName; - - @Column(name = "BrandID") - private int brandId; - - @Column(name = "BrandName") - private String brandName; - - @Column(name = "CityCode") - private String cityCode; - - @Column(name = "CityName") - private String cityName; - - @Column(name = "OperatorID") - private String operatorId; - - @Column(name = "OperatorName") - private String operatorName; - - @Column(name = "Remote") - private String remote; - - @Column(name = "Protocol") - private String protocol; - - @Column(name = "RemoteMap") - private String remoteMap; - - @Column(name = "SubCategory") - private int subCategory; - - public int getCategoryId() { - return categoryId; - } - - public void setCategoryId(int categoryId) { - this.categoryId = categoryId; - } - - public String getCategoryName() { - return categoryName; - } - - public void setCategoryName(String categoryName) { - this.categoryName = categoryName; - } - - public int getBrandId() { - return brandId; - } - - public void setBrandId(int brandId) { - this.brandId = brandId; - } - - public String getBrandName() { - return brandName; - } - - public void setBrandName(String brandName) { - this.brandName = brandName; - } - - public String getCityCode() { - return cityCode; - } - - public void setCityCode(String cityCode) { - this.cityCode = cityCode; - } - - public String getCityName() { - return cityName; - } - - public void setCityName(String cityName) { - this.cityName = cityName; - } - - public String getOperatorId() { - return operatorId; - } - - public void setOperatorId(String operatorId) { - this.operatorId = operatorId; - } - - public String getOperatorName() { - return operatorName; - } - - public void setOperatorName(String operatorName) { - this.operatorName = operatorName; - } - - public String getRemote() { - return remote; - } - - public void setRemote(String remote) { - this.remote = remote; - } - - public String getProtocol() { - return protocol; - } - - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - public String getRemoteMap() { - return remoteMap; - } - - public void setRemoteMap(String remoteMap) { - this.remoteMap = remoteMap; - } - - public int getSubCategory() { - return subCategory; - } - - public void setSubCategory(int subCategory) { - this.subCategory = subCategory; - } - - public long getID() { - return super.getId(); - } - - public RemoteControl(int categoryId, String categoryName, int brandId, String brandName, - String cityCode, String cityName, String operatorId, String operatorName, - String remote, String protocol, String remoteMap, int subCategory) { - this.categoryId = categoryId; - this.categoryName = categoryName; - this.brandId = brandId; - this.brandName = brandName; - this.cityCode = cityCode; - this.cityName = cityName; - this.operatorId = operatorId; - this.operatorName = operatorName; - this.remote = remote; - this.protocol = protocol; - this.remoteMap = remoteMap; - this.subCategory = subCategory; - } - - public RemoteControl() { - - } - - public static List listRemoteControls(int from, int count) { - return new Select() - .from(RemoteControl.class) - .orderBy("id DESC") - .offset(from).limit(count) - .execute(); - } - - public static long createRemoteControl(RemoteControl remoteControl) { - return remoteControl.save(); - } - - public static RemoteControl getRemoteControl(long remoteID) { - List remoteControls = new Select() - .from(RemoteControl.class) - .where("id = ?", remoteID) - .execute(); - - if (null != remoteControls && remoteControls.size() > 0) { - return remoteControls.get(0); - } - return null; - } -} +package net.irext.ircontrol.bean; + +import com.activeandroid.Model; +import com.activeandroid.annotation.Column; +import com.activeandroid.annotation.Table; +import com.activeandroid.query.Select; + +import java.util.List; + +/** + * Filename: RemoteControl.java + * Revised: Date: 2017-04-06 + * Revision: Revision: 1.0 + *

+ * Description: RemoteControl java bean + *

+ * Revision log: + * 2017-04-06: created by strawmanbobi + */ + +@Table(name = "RemoteControl") +public class RemoteControl extends Model { + + @Column(name = "CategoryID") + private int categoryId; + + @Column(name = "CategoryName") + private String categoryName; + + @Column(name = "BrandID") + private int brandId; + + @Column(name = "BrandName") + private String brandName; + + @Column(name = "CityCode") + private String cityCode; + + @Column(name = "CityName") + private String cityName; + + @Column(name = "OperatorID") + private String operatorId; + + @Column(name = "OperatorName") + private String operatorName; + + @Column(name = "Remote") + private String remote; + + @Column(name = "Protocol") + private String protocol; + + @Column(name = "RemoteMap") + private String remoteMap; + + @Column(name = "SubCategory") + private int subCategory; + + public int getCategoryId() { + return categoryId; + } + + public void setCategoryId(int categoryId) { + this.categoryId = categoryId; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public int getBrandId() { + return brandId; + } + + public void setBrandId(int brandId) { + this.brandId = brandId; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCityCode() { + return cityCode; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getOperatorId() { + return operatorId; + } + + public void setOperatorId(String operatorId) { + this.operatorId = operatorId; + } + + public String getOperatorName() { + return operatorName; + } + + public void setOperatorName(String operatorName) { + this.operatorName = operatorName; + } + + public String getRemote() { + return remote; + } + + public void setRemote(String remote) { + this.remote = remote; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public String getRemoteMap() { + return remoteMap; + } + + public void setRemoteMap(String remoteMap) { + this.remoteMap = remoteMap; + } + + public int getSubCategory() { + return subCategory; + } + + public void setSubCategory(int subCategory) { + this.subCategory = subCategory; + } + + public long getID() { + return super.getId(); + } + + public RemoteControl(int categoryId, String categoryName, int brandId, String brandName, + String cityCode, String cityName, String operatorId, String operatorName, + String remote, String protocol, String remoteMap, int subCategory) { + this.categoryId = categoryId; + this.categoryName = categoryName; + this.brandId = brandId; + this.brandName = brandName; + this.cityCode = cityCode; + this.cityName = cityName; + this.operatorId = operatorId; + this.operatorName = operatorName; + this.remote = remote; + this.protocol = protocol; + this.remoteMap = remoteMap; + this.subCategory = subCategory; + } + + public RemoteControl() { + + } + + public static List listRemoteControls(int from, int count) { + return new Select() + .from(RemoteControl.class) + .orderBy("id DESC") + .offset(from).limit(count) + .execute(); + } + + public static long createRemoteControl(RemoteControl remoteControl) { + return remoteControl.save(); + } + + public static RemoteControl getRemoteControl(long remoteID) { + List remoteControls = new Select() + .from(RemoteControl.class) + .where("id = ?", remoteID) + .execute(); + + if (null != remoteControls && remoteControls.size() > 0) { + return remoteControls.get(0); + } + return null; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java old mode 100644 new mode 100755 index 47e1db3..3ad6736 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/ControlActivity.java @@ -1,62 +1,62 @@ -package net.irext.ircontrol.ui.activity; - -import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; -import android.view.MenuItem; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.fragment.ControlFragment; - -/** - * Filename: ControlActivity.java - * Revised: Date: 2017-04-22 - * Revision: Revision: 1.0 - *

- * Description: Control activity containing control fragment - *

- * Revision log: - * 2017-04-22: created by strawmanbobi - */ -public class ControlActivity extends AppCompatActivity { - - @SuppressWarnings("unused") - private static final String TAG = ControlActivity.class.getSimpleName(); - - public static final String KEY_REMOTE_ID = "KEY_REMOTE_ID"; - - private ControlFragment mFragment; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_control); - - FragmentManager fragmentManager = getSupportFragmentManager(); - - mFragment = new ControlFragment(); - Bundle bundle = getIntent().getExtras(); - mFragment.setArguments(bundle); - FragmentTransaction transaction = fragmentManager.beginTransaction(); - transaction.replace(R.id.rl_main_layout, mFragment); - transaction.commit(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onStop() { - if (null != mFragment) { - mFragment.closeIRBinary(); - } - super.onStop(); - } -} +package net.irext.ircontrol.ui.activity; + +import android.os.Bundle; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.fragment.ControlFragment; + +/** + * Filename: ControlActivity.java + * Revised: Date: 2017-04-22 + * Revision: Revision: 1.0 + *

+ * Description: Control activity containing control fragment + *

+ * Revision log: + * 2017-04-22: created by strawmanbobi + */ +public class ControlActivity extends AppCompatActivity { + + @SuppressWarnings("unused") + private static final String TAG = ControlActivity.class.getSimpleName(); + + public static final String KEY_REMOTE_ID = "KEY_REMOTE_ID"; + + private ControlFragment mFragment; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_control); + + FragmentManager fragmentManager = getSupportFragmentManager(); + + mFragment = new ControlFragment(); + Bundle bundle = getIntent().getExtras(); + mFragment.setArguments(bundle); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + transaction.replace(R.id.rl_main_layout, mFragment); + transaction.commit(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onStop() { + if (null != mFragment) { + mFragment.closeIRBinary(); + } + super.onStop(); + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java old mode 100644 new mode 100755 index d39cb6f..ec0af43 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/CreateActivity.java @@ -1,172 +1,172 @@ -package net.irext.ircontrol.ui.activity; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.view.MenuItem; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.fragment.*; -import net.irext.ircontrol.utils.MessageUtil; -import net.irext.webapi.model.Brand; -import net.irext.webapi.model.Category; -import net.irext.webapi.model.City; -import net.irext.webapi.model.RemoteIndex; -import net.irext.webapi.model.StbOperator; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -public class CreateActivity extends AppCompatActivity { - - private static final String TAG = CreateActivity.class.getSimpleName(); - - public static final String KEY_FROM = "FROM"; - - public static final int PAGE_CATEGORY = 0; - public static final int PAGE_BRAND = 1; - public static final int PAGE_CITY = 2; - public static final int PAGE_INDEX = 3; - - public static final int FROM_BRAND = 0; - public static final int FROM_CITY = 1; - - private BaseCreateFragment mFragment; - private List mFragments; - private FragmentManager mFragmentManager; - - public MsgHandler mMsgHandler; - - private Category mCurrentCategory; - private Brand mCurrentBrand; - private City mCurrentCity; - private StbOperator mCurrentOperator; - private RemoteIndex mCurrentRemoteIndex; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_create); - - mMsgHandler = new MsgHandler(this); - - mFragments = new ArrayList<>(); - mFragments.add(new CategoryFragment()); - mFragments.add(new BrandFragment()); - mFragments.add(new CityFragment()); - mFragments.add(new IndexFragment()); - - mFragmentManager = getSupportFragmentManager(); - - switchPage(PAGE_CATEGORY, -1); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onBackPressed() { - if (null == mFragment) { - this.finish(); - super.onBackPressed(); - return; - } - if(!mFragment.onBackPressed()) { - super.onBackPressed(); - } - } - - private void switchPage(int next, Integer from) { - BaseCreateFragment fragment = mFragments.get(next); - Bundle bundle = new Bundle(); - if (null == from) { - from = -1; - } - bundle.putInt(KEY_FROM, from); - fragment.setArguments(bundle); - FragmentTransaction transaction = mFragmentManager.beginTransaction(); - transaction.replace(R.id.rl_fragment_window, fragment); - transaction.commit(); - mFragment = fragment; - } - - public Category getCurrentCategory() { - return mCurrentCategory; - } - - public void setCurrentCategory(Category currentCategory) { - this.mCurrentCategory = currentCategory; - } - - public Brand getCurrentBrand() { - return mCurrentBrand; - } - - public void setCurrentBrand(Brand currentBrand) { - this.mCurrentBrand = currentBrand; - } - - public City getCurrentCity() { - return mCurrentCity; - } - - public void setCurrentCity(City currentCity) { - this.mCurrentCity = currentCity; - } - - public StbOperator getCurrentOperator() { - return mCurrentOperator; - } - - public void setCurrentOperator(StbOperator currentOperator) { - this.mCurrentOperator = currentOperator; - } - - public RemoteIndex getCurrentRemoteIndex() { - return mCurrentRemoteIndex; - } - - public void setCurrentRemoteIndex(RemoteIndex currentRemoteIndex) { - this.mCurrentRemoteIndex = currentRemoteIndex; - } - - private static class MsgHandler extends Handler { - - WeakReference mCreateActivity; - - MsgHandler(CreateActivity activity) { - mCreateActivity = new WeakReference<>(activity); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - CreateActivity createActivity = mCreateActivity.get(); - switch (cmd) { - case PAGE_CATEGORY: - case PAGE_BRAND: - case PAGE_CITY: - case PAGE_INDEX: - Integer from = (Integer)msg.obj; - createActivity.switchPage(cmd, from); - break; - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.activity; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.MenuItem; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.fragment.*; +import net.irext.ircontrol.utils.MessageUtil; +import net.irext.webapi.model.Brand; +import net.irext.webapi.model.Category; +import net.irext.webapi.model.City; +import net.irext.webapi.model.RemoteIndex; +import net.irext.webapi.model.StbOperator; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +public class CreateActivity extends AppCompatActivity { + + private static final String TAG = CreateActivity.class.getSimpleName(); + + public static final String KEY_FROM = "FROM"; + + public static final int PAGE_CATEGORY = 0; + public static final int PAGE_BRAND = 1; + public static final int PAGE_CITY = 2; + public static final int PAGE_INDEX = 3; + + public static final int FROM_BRAND = 0; + public static final int FROM_CITY = 1; + + private BaseCreateFragment mFragment; + private List mFragments; + private FragmentManager mFragmentManager; + + public MsgHandler mMsgHandler; + + private Category mCurrentCategory; + private Brand mCurrentBrand; + private City mCurrentCity; + private StbOperator mCurrentOperator; + private RemoteIndex mCurrentRemoteIndex; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_create); + + mMsgHandler = new MsgHandler(this); + + mFragments = new ArrayList<>(); + mFragments.add(new CategoryFragment()); + mFragments.add(new BrandFragment()); + mFragments.add(new CityFragment()); + mFragments.add(new IndexFragment()); + + mFragmentManager = getSupportFragmentManager(); + + switchPage(PAGE_CATEGORY, -1); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + if (null == mFragment) { + this.finish(); + super.onBackPressed(); + return; + } + if(!mFragment.onBackPressed()) { + super.onBackPressed(); + } + } + + private void switchPage(int next, Integer from) { + BaseCreateFragment fragment = mFragments.get(next); + Bundle bundle = new Bundle(); + if (null == from) { + from = -1; + } + bundle.putInt(KEY_FROM, from); + fragment.setArguments(bundle); + FragmentTransaction transaction = mFragmentManager.beginTransaction(); + transaction.replace(R.id.rl_fragment_window, fragment); + transaction.commit(); + mFragment = fragment; + } + + public Category getCurrentCategory() { + return mCurrentCategory; + } + + public void setCurrentCategory(Category currentCategory) { + this.mCurrentCategory = currentCategory; + } + + public Brand getCurrentBrand() { + return mCurrentBrand; + } + + public void setCurrentBrand(Brand currentBrand) { + this.mCurrentBrand = currentBrand; + } + + public City getCurrentCity() { + return mCurrentCity; + } + + public void setCurrentCity(City currentCity) { + this.mCurrentCity = currentCity; + } + + public StbOperator getCurrentOperator() { + return mCurrentOperator; + } + + public void setCurrentOperator(StbOperator currentOperator) { + this.mCurrentOperator = currentOperator; + } + + public RemoteIndex getCurrentRemoteIndex() { + return mCurrentRemoteIndex; + } + + public void setCurrentRemoteIndex(RemoteIndex currentRemoteIndex) { + this.mCurrentRemoteIndex = currentRemoteIndex; + } + + private static class MsgHandler extends Handler { + + WeakReference mCreateActivity; + + MsgHandler(CreateActivity activity) { + mCreateActivity = new WeakReference<>(activity); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + CreateActivity createActivity = mCreateActivity.get(); + switch (cmd) { + case PAGE_CATEGORY: + case PAGE_BRAND: + case PAGE_CITY: + case PAGE_INDEX: + Integer from = (Integer)msg.obj; + createActivity.switchPage(cmd, from); + break; + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java old mode 100644 new mode 100755 index 4afce57..838f84d --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/activity/MainActivity.java @@ -1,130 +1,130 @@ -package net.irext.ircontrol.ui.activity; - -import android.content.Intent; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.view.MenuItem; -import android.view.View; -import net.irext.ircontrol.R; -import net.irext.ircontrol.bean.RemoteControl; -import net.irext.ircontrol.ui.fragment.MainFragment; -import net.irext.ircontrol.utils.MessageUtil; - -import java.lang.ref.WeakReference; - -/** - * Filename: MainActivity.java - * Revised: Date: 2017-04-04 - * Revision: Revision: 1.0 - *

- * Description: Main Activity class for irext decode example - *

- * Revision log: - * 2017-04-04: created by strawmanbobi - */ -public class MainActivity extends AppCompatActivity { - - private static final String TAG = MainActivity.class.getSimpleName(); - - public static final int CMD_GOTO_CONTROL = 0; - - private FragmentManager mFragmentManager; - private MainFragment mRemoteListFragment; - - private RemoteControl mCurrentRemoteControl; - - public MsgHandler mMsgHandler; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - initView(); - } - - @Override - protected void onResume() { - super.onResume(); - - mFragmentManager = this.getSupportFragmentManager(); - mRemoteListFragment = (MainFragment) mFragmentManager.findFragmentById(R.id.fragment_remote); - - if (null == mRemoteListFragment) { - Log.e(TAG, "MainFragment is null"); - } - mRemoteListFragment.onResume(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - Log.d(TAG, "BUTTON PRESSED"); - return true; - } - return super.onOptionsItemSelected(item); - } - - public RemoteControl getmCurrentRemoteControl() { - return mCurrentRemoteControl; - } - - public void setmCurrentRemoteControl(RemoteControl mCurrentRemoteControl) { - this.mCurrentRemoteControl = mCurrentRemoteControl; - } - - private void initView() { - setContentView(R.layout.activity_main); - - mMsgHandler = new MsgHandler(this); - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - gotoCreateNew(); - } - }); - } - - private void gotoCreateNew() { - Intent intent = new Intent(this, CreateActivity.class); - startActivity(intent); - } - - private void gotoControl() { - Intent intent = new Intent(this, ControlActivity.class); - Bundle bundle = new Bundle(); - bundle.putLong(ControlActivity.KEY_REMOTE_ID, mCurrentRemoteControl.getID()); - intent.putExtras(bundle); - startActivity(intent); - } - - private static class MsgHandler extends Handler { - - WeakReference mMainActivity; - - MsgHandler(MainActivity activity) { - mMainActivity = new WeakReference<>(activity); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - MainActivity mainActivity = mMainActivity.get(); - switch (cmd) { - case CMD_GOTO_CONTROL: - mainActivity.gotoControl(); - break; - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.FragmentManager; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import net.irext.ircontrol.R; +import net.irext.ircontrol.bean.RemoteControl; +import net.irext.ircontrol.ui.fragment.MainFragment; +import net.irext.ircontrol.utils.MessageUtil; + +import java.lang.ref.WeakReference; + +/** + * Filename: MainActivity.java + * Revised: Date: 2017-04-04 + * Revision: Revision: 1.0 + *

+ * Description: Main Activity class for irext decode example + *

+ * Revision log: + * 2017-04-04: created by strawmanbobi + */ +public class MainActivity extends AppCompatActivity { + + private static final String TAG = MainActivity.class.getSimpleName(); + + public static final int CMD_GOTO_CONTROL = 0; + + private FragmentManager mFragmentManager; + private MainFragment mRemoteListFragment; + + private RemoteControl mCurrentRemoteControl; + + public MsgHandler mMsgHandler; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + } + + @Override + protected void onResume() { + super.onResume(); + + mFragmentManager = this.getSupportFragmentManager(); + mRemoteListFragment = (MainFragment) mFragmentManager.findFragmentById(R.id.fragment_remote); + + if (null == mRemoteListFragment) { + Log.e(TAG, "MainFragment is null"); + } + mRemoteListFragment.onResume(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + Log.d(TAG, "BUTTON PRESSED"); + return true; + } + return super.onOptionsItemSelected(item); + } + + public RemoteControl getmCurrentRemoteControl() { + return mCurrentRemoteControl; + } + + public void setmCurrentRemoteControl(RemoteControl mCurrentRemoteControl) { + this.mCurrentRemoteControl = mCurrentRemoteControl; + } + + private void initView() { + setContentView(R.layout.activity_main); + + mMsgHandler = new MsgHandler(this); + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + gotoCreateNew(); + } + }); + } + + private void gotoCreateNew() { + Intent intent = new Intent(this, CreateActivity.class); + startActivity(intent); + } + + private void gotoControl() { + Intent intent = new Intent(this, ControlActivity.class); + Bundle bundle = new Bundle(); + bundle.putLong(ControlActivity.KEY_REMOTE_ID, mCurrentRemoteControl.getID()); + intent.putExtras(bundle); + startActivity(intent); + } + + private static class MsgHandler extends Handler { + + WeakReference mMainActivity; + + MsgHandler(MainActivity activity) { + mMainActivity = new WeakReference<>(activity); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + MainActivity mainActivity = mMainActivity.get(); + switch (cmd) { + case CMD_GOTO_CONTROL: + mainActivity.gotoControl(); + break; + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/BrandAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/BrandAdapter.java old mode 100644 new mode 100755 index 933d124..e5e9f83 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/BrandAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/BrandAdapter.java @@ -1,67 +1,67 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.webapi.model.Brand; - -import java.util.List; - -/** - * Filename: BrandAdapter.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of Brand - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class BrandAdapter extends BaseAdapter { - - private List mBrands; - private LayoutInflater mInflater; - - public BrandAdapter(Context ctx, List list) { - this.mBrands = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - @Override - public int getCount() { - return mBrands.size(); - } - - @Override - public Object getItem(int position) { - return mBrands.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_brand, parent, false); - holder.textView = (TextView)convertView.findViewById(R.id.tv_brand_name); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - holder.textView.setText(mBrands.get(position).getName()); - return convertView; - } - - private static class ViewHolder { - TextView textView; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.webapi.model.Brand; + +import java.util.List; + +/** + * Filename: BrandAdapter.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of Brand + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class BrandAdapter extends BaseAdapter { + + private List mBrands; + private LayoutInflater mInflater; + + public BrandAdapter(Context ctx, List list) { + this.mBrands = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public int getCount() { + return mBrands.size(); + } + + @Override + public Object getItem(int position) { + return mBrands.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_brand, parent, false); + holder.textView = (TextView)convertView.findViewById(R.id.tv_brand_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + holder.textView.setText(mBrands.get(position).getName()); + return convertView; + } + + private static class ViewHolder { + TextView textView; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CategoryAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CategoryAdapter.java old mode 100644 new mode 100755 index fdcf90d..3c74ad9 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CategoryAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CategoryAdapter.java @@ -1,68 +1,68 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.webapi.model.Category; - -import java.util.List; - - -/** - * Filename: CategoryAdapter.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of Category - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class CategoryAdapter extends BaseAdapter { - - private List mCategories; - private LayoutInflater mInflater; - - public CategoryAdapter(Context ctx, List list) { - this.mCategories = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - @Override - public int getCount() { - return mCategories.size(); - } - - @Override - public Object getItem(int position) { - return mCategories.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_category, parent, false); - holder.textView = (TextView)convertView.findViewById(R.id.tv_category_name); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - holder.textView.setText(mCategories.get(position).getName()); - return convertView; - } - - private static class ViewHolder { - TextView textView; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.webapi.model.Category; + +import java.util.List; + + +/** + * Filename: CategoryAdapter.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of Category + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class CategoryAdapter extends BaseAdapter { + + private List mCategories; + private LayoutInflater mInflater; + + public CategoryAdapter(Context ctx, List list) { + this.mCategories = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public int getCount() { + return mCategories.size(); + } + + @Override + public Object getItem(int position) { + return mCategories.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_category, parent, false); + holder.textView = (TextView)convertView.findViewById(R.id.tv_category_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + holder.textView.setText(mCategories.get(position).getName()); + return convertView; + } + + private static class ViewHolder { + TextView textView; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CityAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CityAdapter.java old mode 100644 new mode 100755 index 36f4e84..3b41c7c --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CityAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/CityAdapter.java @@ -1,75 +1,75 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.webapi.model.City; - -import java.util.List; - -/** - * Filename: CityAdapter.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of City - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class CityAdapter extends BaseAdapter { - - private List mCities; - private LayoutInflater mInflater; - - public CityAdapter(Context ctx, List list) { - this.mCities = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public CityAdapter(Context ctx) { - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public void setCities(List list) { - this.mCities = list; - } - - @Override - public int getCount() { - return mCities.size(); - } - - @Override - public Object getItem(int position) { - return mCities.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_city, parent, false); - holder.textView = (TextView)convertView.findViewById(R.id.tv_city_name); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - holder.textView.setText(mCities.get(position).getName()); - return convertView; - } - - private static class ViewHolder { - TextView textView; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.webapi.model.City; + +import java.util.List; + +/** + * Filename: CityAdapter.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of City + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class CityAdapter extends BaseAdapter { + + private List mCities; + private LayoutInflater mInflater; + + public CityAdapter(Context ctx, List list) { + this.mCities = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public CityAdapter(Context ctx) { + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void setCities(List list) { + this.mCities = list; + } + + @Override + public int getCount() { + return mCities.size(); + } + + @Override + public Object getItem(int position) { + return mCities.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_city, parent, false); + holder.textView = (TextView)convertView.findViewById(R.id.tv_city_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + holder.textView.setText(mCities.get(position).getName()); + return convertView; + } + + private static class ViewHolder { + TextView textView; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/IndexAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/IndexAdapter.java old mode 100644 new mode 100755 index 7c4ca5e..77ed2ea --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/IndexAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/IndexAdapter.java @@ -1,80 +1,80 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.decodesdk.utils.Constants; -import net.irext.webapi.model.RemoteIndex; - -import java.util.List; - -/** - * Filename: IndexAdapter.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of RemoteIndex - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class IndexAdapter extends BaseAdapter { - - private List mIndexes; - private LayoutInflater mInflater; - private String mBrandName; - private String mOperatorName; - - public IndexAdapter(Context ctx, List list, String brandName, String operatorName) { - this.mIndexes = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - this.mBrandName = brandName; - this.mOperatorName = operatorName; - } - - @Override - public int getCount() { - return mIndexes.size(); - } - - @Override - public Object getItem(int position) { - return mIndexes.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_index, parent, false); - holder.textName = (TextView)convertView.findViewById(R.id.tv_index_name); - holder.textMap = (TextView)convertView.findViewById(R.id.tv_index_map); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - RemoteIndex index = mIndexes.get(position); - if (index.getCategoryId() != Constants.CategoryID.STB.getValue()) { - holder.textName.setText(mBrandName + " " + (position + 1)); - } else { - holder.textName.setText(mOperatorName + " " + (position + 1)); - } - holder.textMap.setText(index.getRemoteMap()); - return convertView; - } - - private static class ViewHolder { - TextView textName; - TextView textMap; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.sdk.utils.Constants; +import net.irext.webapi.model.RemoteIndex; + +import java.util.List; + +/** + * Filename: IndexAdapter.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of RemoteIndex + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class IndexAdapter extends BaseAdapter { + + private List mIndexes; + private LayoutInflater mInflater; + private String mBrandName; + private String mOperatorName; + + public IndexAdapter(Context ctx, List list, String brandName, String operatorName) { + this.mIndexes = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.mBrandName = brandName; + this.mOperatorName = operatorName; + } + + @Override + public int getCount() { + return mIndexes.size(); + } + + @Override + public Object getItem(int position) { + return mIndexes.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_index, parent, false); + holder.textName = (TextView)convertView.findViewById(R.id.tv_index_name); + holder.textMap = (TextView)convertView.findViewById(R.id.tv_index_map); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + RemoteIndex index = mIndexes.get(position); + if (index.getCategoryId() != Constants.CategoryID.STB.getValue()) { + holder.textName.setText(mBrandName + " " + (position + 1)); + } else { + holder.textName.setText(mOperatorName + " " + (position + 1)); + } + holder.textMap.setText(index.getRemoteMap()); + return convertView; + } + + private static class ViewHolder { + TextView textName; + TextView textMap; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/OperatorAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/OperatorAdapter.java old mode 100644 new mode 100755 index e84c77b..98c873f --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/OperatorAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/OperatorAdapter.java @@ -1,75 +1,75 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.webapi.model.StbOperator; - -import java.util.List; - -/** - * Filename: OperatorAdapter.java - * Revised: Date: 2017-04-10 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of STB Operator - *

- * Revision log: - * 2017-04-10: created by strawmanbobi - */ -public class OperatorAdapter extends BaseAdapter { - - private List mOperators; - private LayoutInflater mInflater; - - public OperatorAdapter(Context ctx, List list) { - this.mOperators = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public OperatorAdapter(Context ctx) { - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public void setOperators(List list) { - this.mOperators = list; - } - - @Override - public int getCount() { - return mOperators.size(); - } - - @Override - public Object getItem(int position) { - return mOperators.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_operator, parent, false); - holder.textView = (TextView)convertView.findViewById(R.id.tv_operator_name); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - holder.textView.setText(mOperators.get(position).getOperatorName()); - return convertView; - } - - private static class ViewHolder { - TextView textView; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.webapi.model.StbOperator; + +import java.util.List; + +/** + * Filename: OperatorAdapter.java + * Revised: Date: 2017-04-10 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of STB Operator + *

+ * Revision log: + * 2017-04-10: created by strawmanbobi + */ +public class OperatorAdapter extends BaseAdapter { + + private List mOperators; + private LayoutInflater mInflater; + + public OperatorAdapter(Context ctx, List list) { + this.mOperators = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public OperatorAdapter(Context ctx) { + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void setOperators(List list) { + this.mOperators = list; + } + + @Override + public int getCount() { + return mOperators.size(); + } + + @Override + public Object getItem(int position) { + return mOperators.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_operator, parent, false); + holder.textView = (TextView)convertView.findViewById(R.id.tv_operator_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + holder.textView.setText(mOperators.get(position).getOperatorName()); + return convertView; + } + + private static class ViewHolder { + TextView textView; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/RemoteControlAdapter.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/RemoteControlAdapter.java old mode 100644 new mode 100755 index dd23b40..247c71e --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/RemoteControlAdapter.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/adapter/RemoteControlAdapter.java @@ -1,83 +1,83 @@ -package net.irext.ircontrol.ui.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.ircontrol.bean.RemoteControl; -import net.irext.decodesdk.utils.Constants; - -import java.util.List; - -/** - * Filename: RemoteControlAdapter.java - * Revised: Date: 2017-04-15 - * Revision: Revision: 1.0 - *

- * Description: Adapter class of Remote - *

- * Revision log: - * 2017-04-15: created by strawmanbobi - */ -public class RemoteControlAdapter extends BaseAdapter { - - private List mRemoteControls; - private LayoutInflater mInflater; - - public RemoteControlAdapter(Context ctx, List list) { - this.mRemoteControls = list; - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public RemoteControlAdapter(Context ctx) { - this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - public void setRemoteControls(List remoteControls) { - this.mRemoteControls = remoteControls; - } - - @Override - public int getCount() { - return mRemoteControls.size(); - } - - @Override - public Object getItem(int position) { - return mRemoteControls.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - holder = new ViewHolder(); - convertView = mInflater.inflate(R.layout.item_remote, parent, false); - holder.textView = (TextView)convertView.findViewById(R.id.tv_remote_name); - convertView.setTag(holder); - } else { - holder = (ViewHolder)convertView.getTag(); - } - RemoteControl remoteControl = mRemoteControls.get(position); - String remoteName; - if (Constants.CategoryID.STB.getValue() != remoteControl.getCategoryId()) { - remoteName = remoteControl.getCategoryName() + "-" + remoteControl.getBrandName(); - } else { - remoteName = remoteControl.getCityName() + "-" + remoteControl.getOperatorName(); - } - holder.textView.setText(remoteName); - return convertView; - } - - private static class ViewHolder { - TextView textView; - } -} +package net.irext.ircontrol.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.ircontrol.bean.RemoteControl; +import net.irext.sdk.utils.Constants; + +import java.util.List; + +/** + * Filename: RemoteControlAdapter.java + * Revised: Date: 2017-04-15 + * Revision: Revision: 1.0 + *

+ * Description: Adapter class of Remote + *

+ * Revision log: + * 2017-04-15: created by strawmanbobi + */ +public class RemoteControlAdapter extends BaseAdapter { + + private List mRemoteControls; + private LayoutInflater mInflater; + + public RemoteControlAdapter(Context ctx, List list) { + this.mRemoteControls = list; + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public RemoteControlAdapter(Context ctx) { + this.mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void setRemoteControls(List remoteControls) { + this.mRemoteControls = remoteControls; + } + + @Override + public int getCount() { + return mRemoteControls.size(); + } + + @Override + public Object getItem(int position) { + return mRemoteControls.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_remote, parent, false); + holder.textView = (TextView)convertView.findViewById(R.id.tv_remote_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder)convertView.getTag(); + } + RemoteControl remoteControl = mRemoteControls.get(position); + String remoteName; + if (Constants.CategoryID.STB.getValue() != remoteControl.getCategoryId()) { + remoteName = remoteControl.getCategoryName() + "-" + remoteControl.getBrandName(); + } else { + remoteName = remoteControl.getCityName() + "-" + remoteControl.getOperatorName(); + } + holder.textView.setText(remoteName); + return convertView; + } + + private static class ViewHolder { + TextView textView; + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java old mode 100644 new mode 100755 index 15040d7..2b8cac1 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BaseCreateFragment.java @@ -1,53 +1,53 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import net.irext.ircontrol.ui.activity.CreateActivity; -import net.irext.ircontrol.utils.MessageUtil; - -/** - * Filename: BaseCreateFragment.java - * Revised: Date: 2017-04-10 - * Revision: Revision: 1.0 - *

- * Description: Base Fragment class for create fragments - *

- * Revision log: - * 2017-04-10: created by strawmanbobi - */ -public abstract class BaseCreateFragment extends Fragment { - - protected static final String TAG = BaseCreateFragment.class.getSimpleName(); - - int mFrom; - CreateActivity mParent; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - mParent = (CreateActivity) getActivity(); - return null; - } - - public boolean onBackPressed() { - if (-1 != mFrom) { - MessageUtil.postMessage(mParent.mMsgHandler, mFrom); - } - return true; - } - - void getFrom() { - int from = getArguments().getInt(CreateActivity.KEY_FROM); - if (-1 == from) { - Log.d(TAG, "FROM IS NULL"); - } else { - mFrom = from; - } - } - -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import net.irext.ircontrol.ui.activity.CreateActivity; +import net.irext.ircontrol.utils.MessageUtil; + +/** + * Filename: BaseCreateFragment.java + * Revised: Date: 2017-04-10 + * Revision: Revision: 1.0 + *

+ * Description: Base Fragment class for create fragments + *

+ * Revision log: + * 2017-04-10: created by strawmanbobi + */ +public abstract class BaseCreateFragment extends Fragment { + + protected static final String TAG = BaseCreateFragment.class.getSimpleName(); + + int mFrom; + CreateActivity mParent; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mParent = (CreateActivity) getActivity(); + return null; + } + + public boolean onBackPressed() { + if (-1 != mFrom) { + MessageUtil.postMessage(mParent.mMsgHandler, mFrom); + } + return true; + } + + void getFrom() { + int from = getArguments().getInt(CreateActivity.KEY_FROM); + if (-1 == from) { + Log.d(TAG, "FROM IS NULL"); + } else { + mFrom = from; + } + } + +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java old mode 100644 new mode 100755 index d8295fa..4d5bbd6 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/BrandFragment.java @@ -1,157 +1,157 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; - -import net.irext.ircontrol.IRApplication; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.activity.CreateActivity; -import net.irext.ircontrol.ui.adapter.BrandAdapter; -import net.irext.ircontrol.ui.widget.PullToRefreshListView; -import net.irext.ircontrol.utils.MessageUtil; -import net.irext.webapi.WebAPICallbacks.ListBrandsCallback; -import net.irext.webapi.model.Brand; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -/** - * Filename: BrandFragment.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Brand Fragment - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class BrandFragment extends BaseCreateFragment { - - private static final String TAG = BrandFragment.class.getSimpleName(); - - private static final int CMD_REFRESH_BRAND_LIST = 0; - - private PullToRefreshListView mBrandList; - - private List mBrands; - - private BrandAdapter mBrandAdapter; - - private MsgHandler mMsgHandler; - private IRApplication mApp; - - private ListBrandsCallback mListBrandsCallback = new ListBrandsCallback() { - @Override - public void onListBrandsSuccess(List brands) { - mBrands = brands; - if (null == mBrands) { - mBrands = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_BRAND_LIST); - } - - @Override - public void onListBrandsFailed() { - Log.w(TAG, "list brands failed"); - } - - @Override - public void onListBrandsError() { - Log.e(TAG, "list brands error"); - } - }; - - public BrandFragment() { - } - - private void listBrands() { - new Thread() { - @Override - public void run() { - mApp.mWeAPIs - .listBrands(mParent.getCurrentCategory().getId(), 0, 20, - mListBrandsCallback); - } - }.start(); - } - - private void refreshBrands() { - mBrandAdapter = new BrandAdapter(mParent, mBrands); - mBrandList.setAdapter(mBrandAdapter); - mBrandList.onRefreshComplete(); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - super.onCreateView(inflater, container, savedInstanceState); - getFrom(); - View view = inflater.inflate(R.layout.fragment_brand, container, false); - mApp = (IRApplication) getActivity().getApplication(); - - mMsgHandler = new MsgHandler(this); - - mBrandList = (PullToRefreshListView) view.findViewById(R.id.lv_brand_list); - - mBrandList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { - @Override - public void onRefresh() { - listBrands(); - } - }); - - mBrandList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Brand brand = (Brand)mBrandAdapter.getItem(position); - mParent.setCurrentBrand(brand); - MessageUtil.postMessage(mParent.mMsgHandler, - CreateActivity.PAGE_INDEX, - CreateActivity.PAGE_BRAND); - } - }); - mBrandList.setRefreshing(); - - return view; - } - - @Override - public boolean onBackPressed() { - super.onBackPressed(); - return true; - } - - private static class MsgHandler extends Handler { - - WeakReference mBrandFragment; - - MsgHandler(BrandFragment fragment) { - mBrandFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - BrandFragment brandFragment = mBrandFragment.get(); - switch (cmd) { - - case CMD_REFRESH_BRAND_LIST: - brandFragment.refreshBrands(); - break; - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; + +import net.irext.ircontrol.IRApplication; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.activity.CreateActivity; +import net.irext.ircontrol.ui.adapter.BrandAdapter; +import net.irext.ircontrol.ui.widget.PullToRefreshListView; +import net.irext.ircontrol.utils.MessageUtil; +import net.irext.webapi.WebAPICallbacks.ListBrandsCallback; +import net.irext.webapi.model.Brand; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +/** + * Filename: BrandFragment.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Brand Fragment + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class BrandFragment extends BaseCreateFragment { + + private static final String TAG = BrandFragment.class.getSimpleName(); + + private static final int CMD_REFRESH_BRAND_LIST = 0; + + private PullToRefreshListView mBrandList; + + private List mBrands; + + private BrandAdapter mBrandAdapter; + + private MsgHandler mMsgHandler; + private IRApplication mApp; + + private ListBrandsCallback mListBrandsCallback = new ListBrandsCallback() { + @Override + public void onListBrandsSuccess(List brands) { + mBrands = brands; + if (null == mBrands) { + mBrands = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_BRAND_LIST); + } + + @Override + public void onListBrandsFailed() { + Log.w(TAG, "list brands failed"); + } + + @Override + public void onListBrandsError() { + Log.e(TAG, "list brands error"); + } + }; + + public BrandFragment() { + } + + private void listBrands() { + new Thread() { + @Override + public void run() { + mApp.mWeAPIs + .listBrands(mParent.getCurrentCategory().getId(), 0, 20, + mListBrandsCallback); + } + }.start(); + } + + private void refreshBrands() { + mBrandAdapter = new BrandAdapter(mParent, mBrands); + mBrandList.setAdapter(mBrandAdapter); + mBrandList.onRefreshComplete(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + getFrom(); + View view = inflater.inflate(R.layout.fragment_brand, container, false); + mApp = (IRApplication) getActivity().getApplication(); + + mMsgHandler = new MsgHandler(this); + + mBrandList = (PullToRefreshListView) view.findViewById(R.id.lv_brand_list); + + mBrandList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { + @Override + public void onRefresh() { + listBrands(); + } + }); + + mBrandList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Brand brand = (Brand)mBrandAdapter.getItem(position); + mParent.setCurrentBrand(brand); + MessageUtil.postMessage(mParent.mMsgHandler, + CreateActivity.PAGE_INDEX, + CreateActivity.PAGE_BRAND); + } + }); + mBrandList.setRefreshing(); + + return view; + } + + @Override + public boolean onBackPressed() { + super.onBackPressed(); + return true; + } + + private static class MsgHandler extends Handler { + + WeakReference mBrandFragment; + + MsgHandler(BrandFragment fragment) { + mBrandFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + BrandFragment brandFragment = mBrandFragment.get(); + switch (cmd) { + + case CMD_REFRESH_BRAND_LIST: + brandFragment.refreshBrands(); + break; + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java old mode 100644 new mode 100755 index a8d0ff7..840f11f --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CategoryFragment.java @@ -1,159 +1,159 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; - -import net.irext.ircontrol.IRApplication; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.activity.CreateActivity; -import net.irext.ircontrol.ui.adapter.CategoryAdapter; -import net.irext.ircontrol.ui.widget.PullToRefreshListView; -import net.irext.ircontrol.utils.MessageUtil; -import net.irext.decodesdk.utils.Constants; -import net.irext.webapi.model.Category; -import net.irext.webapi.WebAPICallbacks.ListCategoriesCallback; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -/** - * Filename: CategoryFragment.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: Category Fragment - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class CategoryFragment extends BaseCreateFragment { - - private static final String TAG = CategoryFragment.class.getSimpleName(); - - private static final int CMD_REFRESH_CATEGORY_LIST = 0; - - private PullToRefreshListView mCategoryList; - private CategoryAdapter mCategoryAdapter; - - private List mCategories; - - private MsgHandler mMsgHandler; - private IRApplication mApp; - - private ListCategoriesCallback mListCategoriesCallback = new ListCategoriesCallback() { - @Override - public void onListCategoriesSuccess(List categories) { - mCategories = categories; - if (null == mCategories) { - mCategories = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_CATEGORY_LIST); - } - - @Override - public void onListCategoriesFailed() { - Log.w(TAG, "list categories failed"); - } - - @Override - public void onListCategoriesError() { - Log.e(TAG, "list categories error"); - } - }; - - public CategoryFragment() { - } - - private void listCategories() { - new Thread() { - @Override - public void run() { - mApp.mWeAPIs.listCategories(0, 20, mListCategoriesCallback); - } - }.start(); - } - - private void refreshCategories() { - mCategoryAdapter = new CategoryAdapter(mParent, mCategories); - mCategoryList.setAdapter(mCategoryAdapter); - mCategoryList.onRefreshComplete(); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - super.onCreateView(inflater, container, savedInstanceState); - mFrom = -1; - View view = inflater.inflate(R.layout.fragment_category, container, false); - mApp = (IRApplication) getActivity().getApplication(); - - mMsgHandler = new MsgHandler(this); - - mCategoryList = (PullToRefreshListView) view.findViewById(R.id.lv_category_list); - - mCategoryList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { - @Override - public void onRefresh() { - listCategories(); - } - }); - - mCategoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Category category = (Category)mCategoryAdapter.getItem(position); - mParent.setCurrentCategory(category); - if (category.getId() != Constants.CategoryID.STB.getValue()) { - MessageUtil.postMessage(mParent.mMsgHandler, - CreateActivity.PAGE_BRAND, - CreateActivity.PAGE_CATEGORY); - } else { - MessageUtil.postMessage(mParent.mMsgHandler, - CreateActivity.PAGE_CITY, - CreateActivity.PAGE_CATEGORY); - } - } - }); - mCategoryList.setRefreshing(); - return view; - } - - @Override - public boolean onBackPressed() { - return false; - } - - private static class MsgHandler extends Handler { - - WeakReference mCategoryFragment; - - MsgHandler(CategoryFragment fragment) { - mCategoryFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - CategoryFragment categoryFragment = mCategoryFragment.get(); - switch (cmd) { - - case CMD_REFRESH_CATEGORY_LIST: - categoryFragment.refreshCategories(); - break; - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; + +import net.irext.ircontrol.IRApplication; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.activity.CreateActivity; +import net.irext.ircontrol.ui.adapter.CategoryAdapter; +import net.irext.ircontrol.ui.widget.PullToRefreshListView; +import net.irext.ircontrol.utils.MessageUtil; +import net.irext.sdk.utils.Constants; +import net.irext.webapi.model.Category; +import net.irext.webapi.WebAPICallbacks.ListCategoriesCallback; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +/** + * Filename: CategoryFragment.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: Category Fragment + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class CategoryFragment extends BaseCreateFragment { + + private static final String TAG = CategoryFragment.class.getSimpleName(); + + private static final int CMD_REFRESH_CATEGORY_LIST = 0; + + private PullToRefreshListView mCategoryList; + private CategoryAdapter mCategoryAdapter; + + private List mCategories; + + private MsgHandler mMsgHandler; + private IRApplication mApp; + + private ListCategoriesCallback mListCategoriesCallback = new ListCategoriesCallback() { + @Override + public void onListCategoriesSuccess(List categories) { + mCategories = categories; + if (null == mCategories) { + mCategories = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_CATEGORY_LIST); + } + + @Override + public void onListCategoriesFailed() { + Log.w(TAG, "list categories failed"); + } + + @Override + public void onListCategoriesError() { + Log.e(TAG, "list categories error"); + } + }; + + public CategoryFragment() { + } + + private void listCategories() { + new Thread() { + @Override + public void run() { + mApp.mWeAPIs.listCategories(0, 20, mListCategoriesCallback); + } + }.start(); + } + + private void refreshCategories() { + mCategoryAdapter = new CategoryAdapter(mParent, mCategories); + mCategoryList.setAdapter(mCategoryAdapter); + mCategoryList.onRefreshComplete(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + mFrom = -1; + View view = inflater.inflate(R.layout.fragment_category, container, false); + mApp = (IRApplication) getActivity().getApplication(); + + mMsgHandler = new MsgHandler(this); + + mCategoryList = (PullToRefreshListView) view.findViewById(R.id.lv_category_list); + + mCategoryList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { + @Override + public void onRefresh() { + listCategories(); + } + }); + + mCategoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Category category = (Category)mCategoryAdapter.getItem(position); + mParent.setCurrentCategory(category); + if (category.getId() != Constants.CategoryID.STB.getValue()) { + MessageUtil.postMessage(mParent.mMsgHandler, + CreateActivity.PAGE_BRAND, + CreateActivity.PAGE_CATEGORY); + } else { + MessageUtil.postMessage(mParent.mMsgHandler, + CreateActivity.PAGE_CITY, + CreateActivity.PAGE_CATEGORY); + } + } + }); + mCategoryList.setRefreshing(); + return view; + } + + @Override + public boolean onBackPressed() { + return false; + } + + private static class MsgHandler extends Handler { + + WeakReference mCategoryFragment; + + MsgHandler(CategoryFragment fragment) { + mCategoryFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + CategoryFragment categoryFragment = mCategoryFragment.get(); + switch (cmd) { + + case CMD_REFRESH_CATEGORY_LIST: + categoryFragment.refreshCategories(); + break; + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java old mode 100644 new mode 100755 index 0c8156a..72f409f --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/CityFragment.java @@ -1,297 +1,297 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ListView; - -import net.irext.ircontrol.IRApplication; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.activity.CreateActivity; -import net.irext.ircontrol.ui.adapter.CityAdapter; -import net.irext.ircontrol.ui.adapter.OperatorAdapter; -import net.irext.ircontrol.utils.MessageUtil; - -import net.irext.webapi.WebAPICallbacks.ListProvincesCallback; -import net.irext.webapi.WebAPICallbacks.ListCitiesCallback; -import net.irext.webapi.WebAPICallbacks.ListOperatersCallback; - -import net.irext.webapi.model.City; -import net.irext.webapi.model.StbOperator; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -/** - * Filename: CityFragment.java - * Revised: Date: 2017-04-07 - * Revision: Revision: 1.0 - *

- * Description: City Fragment - *

- * Revision log: - * 2017-04-07: created by strawmanbobi - */ -public class CityFragment extends BaseCreateFragment { - - private static final String TAG = CityFragment.class.getSimpleName(); - - private static final int CMD_REFRESH_PROVINCE_LIST = 0; - private static final int CMD_REFRESH_CITY_LIST = 1; - private static final int CMD_REFRESH_OPERATOR_LIST = 2; - - private static final int LEVEL_PROVINCE = 0; - private static final int LEVEL_CITY = 1; - private static final int LEVEL_OPERATOR = 2; - - private ListView mCityList; - - private List mProvinces; - private List mCities; - private List mOperators; - - private CityAdapter mCityAdapter; - private OperatorAdapter mOperatorAdapter; - - private MsgHandler mMsgHandler; - private IRApplication mApp; - - private ListProvincesCallback mListProvincesCallback = new ListProvincesCallback() { - @Override - public void onListProvincesSuccess(List provinces) { - mProvinces = provinces; - if (null == mProvinces) { - mProvinces = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_PROVINCE_LIST); - } - - @Override - public void onListProvincesFailed() { - Log.w(TAG, "list provinces failed"); - } - - @Override - public void onListProvincesError() { - Log.e(TAG, "list provinces error"); - } - }; - - private ListCitiesCallback mListCitiesCallback = new ListCitiesCallback() { - @Override - public void onListCitiesSuccess(List cities) { - mCities = cities; - if (null == mCities) { - mCities = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_CITY_LIST); - } - - @Override - public void onListCitiesFailed() { - Log.w(TAG, "list cities failed"); - } - - @Override - public void onListCitiesError() { - Log.w(TAG, "list cities error"); - } - }; - - private ListOperatersCallback mListOperatorCallback = new ListOperatersCallback() { - - @Override - public void onListOperatorsSuccess(List operators) { - mOperators = operators; - if (null == mOperators) { - mOperators = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_OPERATOR_LIST); - } - - @Override - public void onListOperatorsFailed() { - Log.w(TAG, "list operators failed"); - } - - @Override - public void onListOperatorsError() { - Log.e(TAG, "list operators error"); - } - }; - - private City mCurrentProvince; - - private int mListLevel = LEVEL_PROVINCE; - - public CityFragment() { - } - - private void listProvinces() { - mListLevel = LEVEL_PROVINCE; - if (null == mProvinces || 0 == mProvinces.size()) { - new Thread() { - @Override - public void run() { - mApp.mWeAPIs - .listProvinces(mListProvincesCallback); - } - }.start(); - } else { - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_PROVINCE_LIST); - } - } - - private void listCities(final String prefix) { - mListLevel = LEVEL_CITY; - new Thread() { - @Override - public void run() { - mApp.mWeAPIs - .listCities(prefix, mListCitiesCallback); - } - }.start(); - } - - private void listOperators(final String cityCode) { - mListLevel = LEVEL_OPERATOR; - new Thread() { - @Override - public void run() { - mApp.mWeAPIs - .listOperators(cityCode, mListOperatorCallback); - } - }.start(); - } - - private void refreshCities(int level) { - if (null == mCityAdapter) { - mCityAdapter = new CityAdapter(mParent); - } - switch(level) { - case LEVEL_PROVINCE: - mCityAdapter.setCities(mProvinces); - break; - - case LEVEL_CITY: - mCityAdapter.setCities(mCities); - break; - - default: - Log.e(TAG, "invalid level : " + level); - return; - } - mCityList.setAdapter(mCityAdapter); - mCityAdapter.notifyDataSetChanged(); - } - - private void refreshOperators() { - if (null == mOperatorAdapter) { - mOperatorAdapter = new OperatorAdapter(mParent); - } - mOperatorAdapter.setOperators(mOperators); - mCityList.setAdapter(mOperatorAdapter); - mOperatorAdapter.notifyDataSetChanged(); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - super.onCreateView(inflater, container, savedInstanceState); - getFrom(); - View view = inflater.inflate(R.layout.fragment_city, container, false); - mApp = (IRApplication) getActivity().getApplication(); - - mMsgHandler = new MsgHandler(this); - - mCityList = (ListView) view.findViewById(R.id.lv_city_list); - - mCityList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - switch(mListLevel) { - case LEVEL_PROVINCE: - mCurrentProvince = mProvinces.get(position); - String codePrefix = mCurrentProvince.getCode().substring(0, 2); - listCities(codePrefix); - break; - - case LEVEL_CITY: - City city = mCities.get(position); - mParent.setCurrentCity(city); - String cityCode = city.getCode(); - listOperators(cityCode); - break; - - case LEVEL_OPERATOR: - StbOperator operator = (StbOperator)mOperatorAdapter.getItem(position); - mParent.setCurrentOperator(operator); - MessageUtil.postMessage(mParent.mMsgHandler, - CreateActivity.PAGE_INDEX, - CreateActivity.PAGE_CITY); - break; - - default: - break; - } - } - }); - - listProvinces(); - - return view; - } - - @Override - public boolean onBackPressed() { - if (LEVEL_PROVINCE == mListLevel) { - return super.onBackPressed(); - } else if (LEVEL_CITY == mListLevel) { - listProvinces(); - } else if (LEVEL_OPERATOR == mListLevel) { - String prefix = mCurrentProvince.getCode().substring(0, 2); - listCities(prefix); - } - return true; - } - - private static class MsgHandler extends Handler { - - WeakReference mCityFragment; - - MsgHandler(CityFragment fragment) { - mCityFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - CityFragment cityFragment = mCityFragment.get(); - switch (cmd) { - case CMD_REFRESH_PROVINCE_LIST : - cityFragment.refreshCities(LEVEL_PROVINCE); - break; - - case CMD_REFRESH_CITY_LIST: - cityFragment.refreshCities(LEVEL_CITY); - break; - - case CMD_REFRESH_OPERATOR_LIST: - cityFragment.refreshOperators(); - break; - - default: - break; - } - } - } - -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import net.irext.ircontrol.IRApplication; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.activity.CreateActivity; +import net.irext.ircontrol.ui.adapter.CityAdapter; +import net.irext.ircontrol.ui.adapter.OperatorAdapter; +import net.irext.ircontrol.utils.MessageUtil; + +import net.irext.webapi.WebAPICallbacks.ListProvincesCallback; +import net.irext.webapi.WebAPICallbacks.ListCitiesCallback; +import net.irext.webapi.WebAPICallbacks.ListOperatersCallback; + +import net.irext.webapi.model.City; +import net.irext.webapi.model.StbOperator; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +/** + * Filename: CityFragment.java + * Revised: Date: 2017-04-07 + * Revision: Revision: 1.0 + *

+ * Description: City Fragment + *

+ * Revision log: + * 2017-04-07: created by strawmanbobi + */ +public class CityFragment extends BaseCreateFragment { + + private static final String TAG = CityFragment.class.getSimpleName(); + + private static final int CMD_REFRESH_PROVINCE_LIST = 0; + private static final int CMD_REFRESH_CITY_LIST = 1; + private static final int CMD_REFRESH_OPERATOR_LIST = 2; + + private static final int LEVEL_PROVINCE = 0; + private static final int LEVEL_CITY = 1; + private static final int LEVEL_OPERATOR = 2; + + private ListView mCityList; + + private List mProvinces; + private List mCities; + private List mOperators; + + private CityAdapter mCityAdapter; + private OperatorAdapter mOperatorAdapter; + + private MsgHandler mMsgHandler; + private IRApplication mApp; + + private ListProvincesCallback mListProvincesCallback = new ListProvincesCallback() { + @Override + public void onListProvincesSuccess(List provinces) { + mProvinces = provinces; + if (null == mProvinces) { + mProvinces = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_PROVINCE_LIST); + } + + @Override + public void onListProvincesFailed() { + Log.w(TAG, "list provinces failed"); + } + + @Override + public void onListProvincesError() { + Log.e(TAG, "list provinces error"); + } + }; + + private ListCitiesCallback mListCitiesCallback = new ListCitiesCallback() { + @Override + public void onListCitiesSuccess(List cities) { + mCities = cities; + if (null == mCities) { + mCities = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_CITY_LIST); + } + + @Override + public void onListCitiesFailed() { + Log.w(TAG, "list cities failed"); + } + + @Override + public void onListCitiesError() { + Log.w(TAG, "list cities error"); + } + }; + + private ListOperatersCallback mListOperatorCallback = new ListOperatersCallback() { + + @Override + public void onListOperatorsSuccess(List operators) { + mOperators = operators; + if (null == mOperators) { + mOperators = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_OPERATOR_LIST); + } + + @Override + public void onListOperatorsFailed() { + Log.w(TAG, "list operators failed"); + } + + @Override + public void onListOperatorsError() { + Log.e(TAG, "list operators error"); + } + }; + + private City mCurrentProvince; + + private int mListLevel = LEVEL_PROVINCE; + + public CityFragment() { + } + + private void listProvinces() { + mListLevel = LEVEL_PROVINCE; + if (null == mProvinces || 0 == mProvinces.size()) { + new Thread() { + @Override + public void run() { + mApp.mWeAPIs + .listProvinces(mListProvincesCallback); + } + }.start(); + } else { + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_PROVINCE_LIST); + } + } + + private void listCities(final String prefix) { + mListLevel = LEVEL_CITY; + new Thread() { + @Override + public void run() { + mApp.mWeAPIs + .listCities(prefix, mListCitiesCallback); + } + }.start(); + } + + private void listOperators(final String cityCode) { + mListLevel = LEVEL_OPERATOR; + new Thread() { + @Override + public void run() { + mApp.mWeAPIs + .listOperators(cityCode, mListOperatorCallback); + } + }.start(); + } + + private void refreshCities(int level) { + if (null == mCityAdapter) { + mCityAdapter = new CityAdapter(mParent); + } + switch(level) { + case LEVEL_PROVINCE: + mCityAdapter.setCities(mProvinces); + break; + + case LEVEL_CITY: + mCityAdapter.setCities(mCities); + break; + + default: + Log.e(TAG, "invalid level : " + level); + return; + } + mCityList.setAdapter(mCityAdapter); + mCityAdapter.notifyDataSetChanged(); + } + + private void refreshOperators() { + if (null == mOperatorAdapter) { + mOperatorAdapter = new OperatorAdapter(mParent); + } + mOperatorAdapter.setOperators(mOperators); + mCityList.setAdapter(mOperatorAdapter); + mOperatorAdapter.notifyDataSetChanged(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + getFrom(); + View view = inflater.inflate(R.layout.fragment_city, container, false); + mApp = (IRApplication) getActivity().getApplication(); + + mMsgHandler = new MsgHandler(this); + + mCityList = (ListView) view.findViewById(R.id.lv_city_list); + + mCityList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + switch(mListLevel) { + case LEVEL_PROVINCE: + mCurrentProvince = mProvinces.get(position); + String codePrefix = mCurrentProvince.getCode().substring(0, 2); + listCities(codePrefix); + break; + + case LEVEL_CITY: + City city = mCities.get(position); + mParent.setCurrentCity(city); + String cityCode = city.getCode(); + listOperators(cityCode); + break; + + case LEVEL_OPERATOR: + StbOperator operator = (StbOperator)mOperatorAdapter.getItem(position); + mParent.setCurrentOperator(operator); + MessageUtil.postMessage(mParent.mMsgHandler, + CreateActivity.PAGE_INDEX, + CreateActivity.PAGE_CITY); + break; + + default: + break; + } + } + }); + + listProvinces(); + + return view; + } + + @Override + public boolean onBackPressed() { + if (LEVEL_PROVINCE == mListLevel) { + return super.onBackPressed(); + } else if (LEVEL_CITY == mListLevel) { + listProvinces(); + } else if (LEVEL_OPERATOR == mListLevel) { + String prefix = mCurrentProvince.getCode().substring(0, 2); + listCities(prefix); + } + return true; + } + + private static class MsgHandler extends Handler { + + WeakReference mCityFragment; + + MsgHandler(CityFragment fragment) { + mCityFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + CityFragment cityFragment = mCityFragment.get(); + switch (cmd) { + case CMD_REFRESH_PROVINCE_LIST : + cityFragment.refreshCities(LEVEL_PROVINCE); + break; + + case CMD_REFRESH_CITY_LIST: + cityFragment.refreshCities(LEVEL_CITY); + break; + + case CMD_REFRESH_OPERATOR_LIST: + cityFragment.refreshOperators(); + break; + + default: + break; + } + } + } + +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java old mode 100644 new mode 100755 index 2bd54a8..cc39668 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/ControlFragment.java @@ -1,309 +1,308 @@ -package net.irext.ircontrol.ui.fragment; - -import android.content.Context; -import android.hardware.ConsumerIrManager; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.os.Vibrator; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.*; - -import net.irext.decodesdk.bean.ACStatus; -import net.irext.decodesdk.IRDecode; -import net.irext.decodesdk.utils.Constants; -import net.irext.ircontrol.R; -import net.irext.ircontrol.bean.RemoteControl; -import net.irext.ircontrol.ui.activity.ControlActivity; -import net.irext.ircontrol.utils.FileUtils; -import net.irext.ircontrol.utils.MessageUtil; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; -import java.lang.ref.WeakReference; - -/** - * Filename: ControlFragment.java - * Revised: Date: 2017-04-22 - * Revision: Revision: 1.0 - *

- * Description: Control fragment containing control panel - *

- * Revision log: - * 2017-04-22: created by strawmanbobi - */ -public class ControlFragment extends Fragment implements View.OnClickListener { - - private static final String TAG = ControlFragment.class.getSimpleName(); - - private static final int VIB_TIME = 60; - - private static final int CMD_GET_REMOTE_CONTROL = 0; - - private static final int KEY_POWER = 0; - private static final int KEY_UP = 1; - private static final int KEY_DOWN = 2; - private static final int KEY_LEFT = 3; - private static final int KEY_RIGHT = 4; - private static final int KEY_OK = 5; - private static final int KEY_PLUS = 6; - private static final int KEY_MINUS = 7; - private static final int KEY_BACK = 8; - private static final int KEY_HOME = 9; - private static final int KEY_MENU = 10; - - private MsgHandler mHandler; - - private ControlActivity mParent; - private Long mRemoteID; - private RemoteControl mCurrentRemoteControl; - - // define the single instance of IRDecode - private IRDecode mIRDecode; - - public ControlFragment() { - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - mIRDecode = IRDecode.getInstance(); - mHandler = new MsgHandler(this); - - mParent = (ControlActivity)getActivity(); - View view = inflater.inflate(R.layout.fragment_control, container, false); - - ImageButton mBtnPower = (ImageButton) view.findViewById(R.id.iv_power); - ImageButton mBtnBack = (ImageButton) view.findViewById(R.id.iv_back); - ImageButton mBtnHome = (ImageButton) view.findViewById(R.id.iv_home); - ImageButton mBtnMenu = (ImageButton) view.findViewById(R.id.iv_menu); - ImageButton mBtnUp = (ImageButton) view.findViewById(R.id.iv_up); - ImageButton mBtnDown = (ImageButton) view.findViewById(R.id.iv_down); - ImageButton mBtnLeft = (ImageButton) view.findViewById(R.id.iv_left); - ImageButton mBtnRight = (ImageButton) view.findViewById(R.id.iv_right); - ImageButton mBtnOK = (ImageButton) view.findViewById(R.id.iv_ok); - ImageButton mBtnPlus = (ImageButton) view.findViewById(R.id.iv_plus); - ImageButton mBtnMinus = (ImageButton) view.findViewById(R.id.iv_minus); - - mBtnPower.setOnClickListener(this); - mBtnBack.setOnClickListener(this); - mBtnHome.setOnClickListener(this); - mBtnMenu.setOnClickListener(this); - mBtnUp.setOnClickListener(this); - mBtnDown.setOnClickListener(this); - mBtnLeft.setOnClickListener(this); - mBtnRight.setOnClickListener(this); - mBtnOK.setOnClickListener(this); - mBtnPlus.setOnClickListener(this); - mBtnMinus.setOnClickListener(this); - - return view; - } - - @Override - public void onResume() { - super.onResume(); - - mRemoteID = getArguments().getLong(ControlActivity.KEY_REMOTE_ID, -1L); - if (-1 == mRemoteID) { - Log.d(TAG, "remote ID IS NULL"); - } else { - getRemote(); - } - - } - - private void getRemote() { - new Thread() { - @Override - public void run() { - MessageUtil.postMessage(mHandler, CMD_GET_REMOTE_CONTROL); - } - }.start(); - } - - private void showRemote() { - mCurrentRemoteControl = RemoteControl.getRemoteControl(mRemoteID); - if (null != mCurrentRemoteControl) { - int category = mCurrentRemoteControl.getCategoryId(); - String binFileName = FileUtils.BIN_PATH + FileUtils.FILE_NAME_PREFIX + - mCurrentRemoteControl.getRemoteMap() + FileUtils.FILE_NAME_EXT; - - /* decode SDK - load binary file */ - int ret = mIRDecode.openFile(category, mCurrentRemoteControl.getSubCategory(), binFileName); - File binFile = new File(binFileName); - byte []binaries = new byte[(int)binFile.length()]; - try { - if (null != binFile) { - FileInputStream fin = new FileInputStream(binFile); - fin.read(binaries); - } - } catch (Exception e) { - e.printStackTrace(); - } - Log.d(TAG, "binary opened : " + ret); - } - } - - public void closeIRBinary() { - mIRDecode.closeBinary(); - } - - @Nullable - private int[] irControl(int keyCode) { - int inputKeyCode; - ACStatus acStatus = new ACStatus(); - /* decode SDK - decode according to key code */ - if (Constants.CategoryID.AIR_CONDITIONER.getValue() == - mCurrentRemoteControl.getCategoryId()) { - acStatus.setACPower(Constants.ACPower.POWER_OFF.getValue()); - acStatus.setACMode(Constants.ACMode.MODE_COOL.getValue()); - acStatus.setACTemp(Constants.ACTemperature.TEMP_24.getValue()); - acStatus.setACWindSpeed(Constants.ACWindSpeed.SPEED_AUTO.getValue()); - acStatus.setACWindDir(Constants.ACSwing.SWING_ON.getValue()); - acStatus.setACDisplay(0); - acStatus.setACTimer(0); - acStatus.setACSleep(0); - - switch(keyCode) { - case KEY_POWER: - // power key --> change power - inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_POWER.getValue(); - break; - case KEY_UP: - // up key --> change wind speed - inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_WIND_SPEED.getValue(); - break; - case KEY_DOWN: - // down key --> change wind dir - inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_WIND_DIR.getValue(); - break; - case KEY_RIGHT: - // right key --> change mode - inputKeyCode = Constants.ACFunction.FUNCTION_CHANGE_MODE.getValue(); - break; - case KEY_OK: - // center key --> fix wind dir - inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_SWING.getValue(); - break; - case KEY_PLUS: - // plus key --> temp up - inputKeyCode = Constants.ACFunction.FUNCTION_TEMPERATURE_UP.getValue(); - break; - case KEY_MINUS: - // minus key --> temp down - inputKeyCode = Constants.ACFunction.FUNCTION_TEMPERATURE_DOWN.getValue(); - break; - - default: - return null; - } - } else { - inputKeyCode = keyCode; - } - - /* decode SDK - decode from binary */ - /* translate key code for AC according to the mapping above */ - /* ac status is useless for decoding devices other than AC, it's an optional parameter */ - /* change wind dir is an optional parameter, set to 0 as default */ - return mIRDecode.decodeBinary(inputKeyCode, acStatus, 0); - } - - // control - @Override - public void onClick(View v) { - vibrate(mParent); - int []decoded = null; - switch(v.getId()) { - case R.id.iv_power: - decoded = irControl(KEY_POWER); - break; - - case R.id.iv_up: - decoded = irControl(KEY_UP); - break; - - case R.id.iv_down: - decoded = irControl(KEY_DOWN); - break; - - case R.id.iv_left: - decoded = irControl(KEY_LEFT); - break; - - case R.id.iv_right: - decoded = irControl(KEY_RIGHT); - break; - - case R.id.iv_ok: - decoded = irControl(KEY_OK); - break; - - case R.id.iv_plus: - decoded = irControl(KEY_PLUS); - break; - - case R.id.iv_minus: - decoded = irControl(KEY_MINUS); - break; - - case R.id.iv_back: - decoded = irControl(KEY_BACK); - break; - - case R.id.iv_home: - decoded = irControl(KEY_HOME); - break; - - case R.id.iv_menu: - decoded = irControl(KEY_MENU); - break; - } - // send decoded integer array to IR emitter - ConsumerIrManager irEmitter = - (ConsumerIrManager) mParent.getSystemService(Context.CONSUMER_IR_SERVICE); - if (irEmitter.hasIrEmitter()) { - if (null != decoded && decoded.length > 0) { - irEmitter.transmit(38000, decoded); - } - } - } - - private static class MsgHandler extends Handler { - - WeakReference mMainFragment; - - MsgHandler(ControlFragment fragment) { - mMainFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - - ControlFragment controlFragment = mMainFragment.get(); - switch (cmd) { - - case CMD_GET_REMOTE_CONTROL: - controlFragment.showRemote(); - break; - - default: - break; - } - } - } - - // vibrate on button click in this fragment - private static void vibrate(Context context) { - Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); - vibrator.vibrate(VIB_TIME); - } -} +package net.irext.ircontrol.ui.fragment; + +import android.content.Context; +import android.hardware.ConsumerIrManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.*; + +import net.irext.decode.sdk.bean.ACStatus; +import net.irext.decode.sdk.IRDecode; +import net.irext.sdk.utils.Constants; +import net.irext.ircontrol.R; +import net.irext.ircontrol.bean.RemoteControl; +import net.irext.ircontrol.ui.activity.ControlActivity; +import net.irext.ircontrol.utils.FileUtils; +import net.irext.ircontrol.utils.MessageUtil; + +import java.io.File; +import java.io.FileInputStream; +import java.lang.ref.WeakReference; + +/** + * Filename: ControlFragment.java + * Revised: Date: 2017-04-22 + * Revision: Revision: 1.0 + *

+ * Description: Control fragment containing control panel + *

+ * Revision log: + * 2017-04-22: created by strawmanbobi + */ +public class ControlFragment extends Fragment implements View.OnClickListener { + + private static final String TAG = ControlFragment.class.getSimpleName(); + + private static final int VIB_TIME = 60; + + private static final int CMD_GET_REMOTE_CONTROL = 0; + + private static final int KEY_POWER = 0; + private static final int KEY_UP = 1; + private static final int KEY_DOWN = 2; + private static final int KEY_LEFT = 3; + private static final int KEY_RIGHT = 4; + private static final int KEY_OK = 5; + private static final int KEY_PLUS = 6; + private static final int KEY_MINUS = 7; + private static final int KEY_BACK = 8; + private static final int KEY_HOME = 9; + private static final int KEY_MENU = 10; + + private MsgHandler mHandler; + + private ControlActivity mParent; + private Long mRemoteID; + private RemoteControl mCurrentRemoteControl; + + // define the single instance of IRDecode + private IRDecode mIRDecode; + + public ControlFragment() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mIRDecode = IRDecode.getInstance(); + mHandler = new MsgHandler(this); + + mParent = (ControlActivity)getActivity(); + View view = inflater.inflate(R.layout.fragment_control, container, false); + + ImageButton mBtnPower = (ImageButton) view.findViewById(R.id.iv_power); + ImageButton mBtnBack = (ImageButton) view.findViewById(R.id.iv_back); + ImageButton mBtnHome = (ImageButton) view.findViewById(R.id.iv_home); + ImageButton mBtnMenu = (ImageButton) view.findViewById(R.id.iv_menu); + ImageButton mBtnUp = (ImageButton) view.findViewById(R.id.iv_up); + ImageButton mBtnDown = (ImageButton) view.findViewById(R.id.iv_down); + ImageButton mBtnLeft = (ImageButton) view.findViewById(R.id.iv_left); + ImageButton mBtnRight = (ImageButton) view.findViewById(R.id.iv_right); + ImageButton mBtnOK = (ImageButton) view.findViewById(R.id.iv_ok); + ImageButton mBtnPlus = (ImageButton) view.findViewById(R.id.iv_plus); + ImageButton mBtnMinus = (ImageButton) view.findViewById(R.id.iv_minus); + + mBtnPower.setOnClickListener(this); + mBtnBack.setOnClickListener(this); + mBtnHome.setOnClickListener(this); + mBtnMenu.setOnClickListener(this); + mBtnUp.setOnClickListener(this); + mBtnDown.setOnClickListener(this); + mBtnLeft.setOnClickListener(this); + mBtnRight.setOnClickListener(this); + mBtnOK.setOnClickListener(this); + mBtnPlus.setOnClickListener(this); + mBtnMinus.setOnClickListener(this); + + return view; + } + + @Override + public void onResume() { + super.onResume(); + + mRemoteID = getArguments().getLong(ControlActivity.KEY_REMOTE_ID, -1L); + if (-1 == mRemoteID) { + Log.d(TAG, "remote ID IS NULL"); + } else { + getRemote(); + } + + } + + private void getRemote() { + new Thread() { + @Override + public void run() { + MessageUtil.postMessage(mHandler, CMD_GET_REMOTE_CONTROL); + } + }.start(); + } + + private void showRemote() { + mCurrentRemoteControl = RemoteControl.getRemoteControl(mRemoteID); + if (null != mCurrentRemoteControl) { + int category = mCurrentRemoteControl.getCategoryId(); + String binFileName = FileUtils.BIN_PATH + FileUtils.FILE_NAME_PREFIX + + mCurrentRemoteControl.getRemoteMap() + FileUtils.FILE_NAME_EXT; + + /* decode SDK - load binary file */ + int ret = mIRDecode.openFile(category, mCurrentRemoteControl.getSubCategory(), binFileName); + File binFile = new File(binFileName); + byte []binaries = new byte[(int)binFile.length()]; + try { + if (null != binFile) { + FileInputStream fin = new FileInputStream(binFile); + fin.read(binaries); + } + } catch (Exception e) { + e.printStackTrace(); + } + Log.d(TAG, "binary opened : " + ret); + } + } + + public void closeIRBinary() { + mIRDecode.closeBinary(); + } + + @Nullable + private int[] irControl(int keyCode) { + int inputKeyCode; + ACStatus acStatus = new ACStatus(); + /* decode SDK - decode according to key code */ + if (Constants.CategoryID.AIR_CONDITIONER.getValue() == + mCurrentRemoteControl.getCategoryId()) { + acStatus.setACPower(Constants.ACPower.POWER_OFF.getValue()); + acStatus.setACMode(Constants.ACMode.MODE_COOL.getValue()); + acStatus.setACTemp(Constants.ACTemperature.TEMP_24.getValue()); + acStatus.setACWindSpeed(Constants.ACWindSpeed.SPEED_AUTO.getValue()); + acStatus.setACWindDir(Constants.ACSwing.SWING_ON.getValue()); + acStatus.setACDisplay(0); + acStatus.setACTimer(0); + acStatus.setACSleep(0); + + switch(keyCode) { + case KEY_POWER: + // power key --> change power + inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_POWER.getValue(); + break; + case KEY_UP: + // up key --> change wind speed + inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_WIND_SPEED.getValue(); + break; + case KEY_DOWN: + // down key --> change wind dir + inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_WIND_DIR.getValue(); + break; + case KEY_RIGHT: + // right key --> change mode + inputKeyCode = Constants.ACFunction.FUNCTION_CHANGE_MODE.getValue(); + break; + case KEY_OK: + // center key --> fix wind dir + inputKeyCode = Constants.ACFunction.FUNCTION_SWITCH_SWING.getValue(); + break; + case KEY_PLUS: + // plus key --> temp up + inputKeyCode = Constants.ACFunction.FUNCTION_TEMPERATURE_UP.getValue(); + break; + case KEY_MINUS: + // minus key --> temp down + inputKeyCode = Constants.ACFunction.FUNCTION_TEMPERATURE_DOWN.getValue(); + break; + + default: + return null; + } + } else { + inputKeyCode = keyCode; + } + + /* decode SDK - decode from binary */ + /* translate key code for AC according to the mapping above */ + /* ac status is useless for decoding devices other than AC, it's an optional parameter */ + /* change wind dir is an optional parameter, set to 0 as default */ + return mIRDecode.decodeBinary(inputKeyCode, acStatus, 0); + } + + // control + @Override + public void onClick(View v) { + vibrate(mParent); + int []decoded = null; + switch(v.getId()) { + case R.id.iv_power: + decoded = irControl(KEY_POWER); + break; + + case R.id.iv_up: + decoded = irControl(KEY_UP); + break; + + case R.id.iv_down: + decoded = irControl(KEY_DOWN); + break; + + case R.id.iv_left: + decoded = irControl(KEY_LEFT); + break; + + case R.id.iv_right: + decoded = irControl(KEY_RIGHT); + break; + + case R.id.iv_ok: + decoded = irControl(KEY_OK); + break; + + case R.id.iv_plus: + decoded = irControl(KEY_PLUS); + break; + + case R.id.iv_minus: + decoded = irControl(KEY_MINUS); + break; + + case R.id.iv_back: + decoded = irControl(KEY_BACK); + break; + + case R.id.iv_home: + decoded = irControl(KEY_HOME); + break; + + case R.id.iv_menu: + decoded = irControl(KEY_MENU); + break; + } + // send decoded integer array to IR emitter + ConsumerIrManager irEmitter = + (ConsumerIrManager) mParent.getSystemService(Context.CONSUMER_IR_SERVICE); + if (irEmitter.hasIrEmitter()) { + if (null != decoded && decoded.length > 0) { + irEmitter.transmit(38000, decoded); + } + } + } + + private static class MsgHandler extends Handler { + + WeakReference mMainFragment; + + MsgHandler(ControlFragment fragment) { + mMainFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + + ControlFragment controlFragment = mMainFragment.get(); + switch (cmd) { + + case CMD_GET_REMOTE_CONTROL: + controlFragment.showRemote(); + break; + + default: + break; + } + } + } + + // vibrate on button click in this fragment + private static void vibrate(Context context) { + Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); + vibrator.vibrate(VIB_TIME); + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java old mode 100644 new mode 100755 index 721b251..100aba7 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/IndexFragment.java @@ -1,294 +1,294 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ListView; - -import net.irext.ircontrol.IRApplication; -import net.irext.ircontrol.bean.RemoteControl; -import net.irext.ircontrol.ui.widget.PullToRefreshListView; -import net.irext.ircontrol.R; -import net.irext.ircontrol.ui.adapter.IndexAdapter; -import net.irext.ircontrol.utils.FileUtils; -import net.irext.ircontrol.utils.MessageUtil; -import net.irext.webapi.WebAPICallbacks.ListIndexesCallback; -import net.irext.webapi.WebAPICallbacks.DownloadBinCallback; -import net.irext.webapi.model.Brand; -import net.irext.webapi.model.Category; -import net.irext.webapi.model.City; -import net.irext.webapi.model.RemoteIndex; -import net.irext.webapi.model.StbOperator; - -import java.io.File; -import java.io.InputStream; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -/** - * Filename: IndexFragment.java - * Revised: Date: 2017-04-12 - * Revision: Revision: 1.0 - *

- * Description: RemoteIndex Fragment - *

- * Revision log: - * 2017-04-12: created by strawmanbobi - */ -public class IndexFragment extends BaseCreateFragment { - - private static final String TAG = IndexFragment.class.getSimpleName(); - - private static final int CMD_REFRESH_INDEX_LIST = 0; - private static final int CMD_DOWNLOAD_BIN_FILE = 1; - private static final int CMD_BIN_FILE_DOWNLOADED = 2; - private static final int CMD_SAVE_REMOTE_CONTROL = 3; - - private PullToRefreshListView mIndexList; - - private List mIndexes; - private RemoteIndex mCurrentIndex; - - private int mBrandId = 0; - private String mCityCode = ""; - private String mOperatorId = ""; - - private String mCategoryName = ""; - private String mCityName = ""; - private String mBrandName = ""; - private String mOperatorName = ""; - - private InputStream mBinStream; - - private IndexAdapter mIndexAdapter; - - private MsgHandler mMsgHandler; - private IRApplication mApp; - - private ListIndexesCallback mListIndexesCallback = new ListIndexesCallback() { - - @Override - public void onListIndexesSuccess(List indexes) { - mIndexes = indexes; - if (null == mIndexes) { - mIndexes = new ArrayList<>(); - } - MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_INDEX_LIST); - } - - @Override - public void onListIndexesFailed() { - Log.w(TAG, "list indexes failed"); - } - - @Override - public void onListIndexesError() { - Log.e(TAG, "list indexes error"); - } - }; - - private DownloadBinCallback mDownloadBinCallback = new DownloadBinCallback() { - @Override - public void onDownloadBinSuccess(InputStream inputStream) { - Log.d(TAG, "binary file download successfully"); - mBinStream = inputStream; - MessageUtil.postMessage(mMsgHandler, CMD_BIN_FILE_DOWNLOADED); - } - - @Override - public void onDownloadBinFailed() { - Log.w(TAG, "download bin file failed"); - } - - @Override - public void onDownloadBinError() { - Log.w(TAG, "download bin file error"); - } - }; - - public IndexFragment() { - - } - - private void listIndexes() { - new Thread() { - @Override - public void run() { - mApp.mWeAPIs.listRemoteIndexes(mParent.getCurrentCategory().getId(), - mBrandId, mCityCode, mOperatorId, mListIndexesCallback); - } - }.start(); - } - - private void downloadBinFile() { - new Thread() { - @Override - public void run() { - try { - String remoteMap = mCurrentIndex.getRemoteMap(); - int indexId = mCurrentIndex.getId(); - mApp.mWeAPIs.downloadBin(remoteMap, indexId, mDownloadBinCallback); - } catch (Exception e) { - e.printStackTrace(); - } - } - }.start(); - } - - private boolean createDirectory() { - File file = new File(FileUtils.BIN_PATH); - if (file.exists()) { - return true; - } - return file.mkdirs(); - } - - private void saveBinFile() { - new Thread() { - @Override - public void run() { - if (createDirectory()) { - File binFile = new File(FileUtils.BIN_PATH + - FileUtils.FILE_NAME_PREFIX + mCurrentIndex.getRemoteMap() + - FileUtils.FILE_NAME_EXT); - boolean ret = FileUtils.write(binFile, mBinStream); - Log.d(TAG, "write bin file succeeded : " + ret); - } else { - Log.w(TAG, "no directory to contain bin file"); - } - - if (null != mBinStream) { - MessageUtil.postMessage(mMsgHandler, CMD_SAVE_REMOTE_CONTROL); - } else { - Log.e(TAG, "bin file download failed"); - } - } - }.start(); - } - - private void saveRemoteControl() { - // TODO: update brand and operator name i18n - RemoteControl remoteControl = new RemoteControl(); - remoteControl.setCategoryId(mCurrentIndex.getCategoryId()); - remoteControl.setCategoryName(mCategoryName); - remoteControl.setBrandId(mCurrentIndex.getBrandId()); - remoteControl.setBrandName(mBrandName); - remoteControl.setCityCode(mCurrentIndex.getCityCode()); - remoteControl.setCityName(mCityName); - remoteControl.setOperatorId(mCurrentIndex.getOperatorId()); - remoteControl.setOperatorName(mOperatorName); - remoteControl.setProtocol(mCurrentIndex.getProtocol()); - remoteControl.setRemote(mCurrentIndex.getRemote()); - remoteControl.setRemoteMap(mCurrentIndex.getRemoteMap()); - remoteControl.setSubCategory(mCurrentIndex.getSubCate()); - - long id = RemoteControl.createRemoteControl(remoteControl); - - Log.d(TAG, "save remote control : " + id); - mParent.finish(); - } - - private void refreshIndexes() { - mIndexAdapter = new IndexAdapter(mParent, mIndexes, mBrandName, mOperatorName); - mIndexList.setAdapter(mIndexAdapter); - mIndexList.onRefreshComplete(); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - super.onCreateView(inflater, container, savedInstanceState); - getFrom(); - View view = inflater.inflate(R.layout.fragment_index, container, false); - - mMsgHandler = new MsgHandler(this); - mApp = (IRApplication) this.getActivity().getApplication(); - - Category category = mParent.getCurrentCategory(); - Brand brand = mParent.getCurrentBrand(); - City city = mParent.getCurrentCity(); - StbOperator operator = mParent.getCurrentOperator(); - - mCategoryName = category.getName(); - if (null != city) { - mCityName = city.getName(); - mCityCode = city.getCode(); - } - if (null != operator) { - mOperatorName = operator.getOperatorName(); - mOperatorId = operator.getOperatorId(); - } - if (null != brand) { - mBrandName = brand.getName(); - mBrandId = brand.getId(); - } - - mIndexList = (PullToRefreshListView) view.findViewById(R.id.lv_index_list); - mIndexList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { - @Override - public void onRefresh() { - listIndexes(); - } - }); - - mIndexList.setOnItemClickListener(new ListView.OnItemClickListener() { - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - mCurrentIndex = (RemoteIndex) mIndexAdapter.getItem(position); - MessageUtil.postMessage(mMsgHandler, CMD_DOWNLOAD_BIN_FILE); - } - }); - - mIndexList.setRefreshing(); - - return view; - } - - @Override - public boolean onBackPressed() { - return super.onBackPressed(); - } - - private static class MsgHandler extends Handler { - - WeakReference mIndexFragment; - - MsgHandler(IndexFragment fragment) { - mIndexFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - - IndexFragment indexFragment = mIndexFragment.get(); - switch (cmd) { - - case CMD_REFRESH_INDEX_LIST: - indexFragment.refreshIndexes(); - break; - - case CMD_DOWNLOAD_BIN_FILE: - indexFragment.downloadBinFile(); - break; - - case CMD_BIN_FILE_DOWNLOADED: - indexFragment.saveBinFile(); - break; - - case CMD_SAVE_REMOTE_CONTROL: - indexFragment.saveRemoteControl(); - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; + +import net.irext.ircontrol.IRApplication; +import net.irext.ircontrol.bean.RemoteControl; +import net.irext.ircontrol.ui.widget.PullToRefreshListView; +import net.irext.ircontrol.R; +import net.irext.ircontrol.ui.adapter.IndexAdapter; +import net.irext.ircontrol.utils.FileUtils; +import net.irext.ircontrol.utils.MessageUtil; +import net.irext.webapi.WebAPICallbacks.ListIndexesCallback; +import net.irext.webapi.WebAPICallbacks.DownloadBinCallback; +import net.irext.webapi.model.Brand; +import net.irext.webapi.model.Category; +import net.irext.webapi.model.City; +import net.irext.webapi.model.RemoteIndex; +import net.irext.webapi.model.StbOperator; + +import java.io.File; +import java.io.InputStream; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +/** + * Filename: IndexFragment.java + * Revised: Date: 2017-04-12 + * Revision: Revision: 1.0 + *

+ * Description: RemoteIndex Fragment + *

+ * Revision log: + * 2017-04-12: created by strawmanbobi + */ +public class IndexFragment extends BaseCreateFragment { + + private static final String TAG = IndexFragment.class.getSimpleName(); + + private static final int CMD_REFRESH_INDEX_LIST = 0; + private static final int CMD_DOWNLOAD_BIN_FILE = 1; + private static final int CMD_BIN_FILE_DOWNLOADED = 2; + private static final int CMD_SAVE_REMOTE_CONTROL = 3; + + private PullToRefreshListView mIndexList; + + private List mIndexes; + private RemoteIndex mCurrentIndex; + + private int mBrandId = 0; + private String mCityCode = ""; + private String mOperatorId = ""; + + private String mCategoryName = ""; + private String mCityName = ""; + private String mBrandName = ""; + private String mOperatorName = ""; + + private InputStream mBinStream; + + private IndexAdapter mIndexAdapter; + + private MsgHandler mMsgHandler; + private IRApplication mApp; + + private ListIndexesCallback mListIndexesCallback = new ListIndexesCallback() { + + @Override + public void onListIndexesSuccess(List indexes) { + mIndexes = indexes; + if (null == mIndexes) { + mIndexes = new ArrayList<>(); + } + MessageUtil.postMessage(mMsgHandler, CMD_REFRESH_INDEX_LIST); + } + + @Override + public void onListIndexesFailed() { + Log.w(TAG, "list indexes failed"); + } + + @Override + public void onListIndexesError() { + Log.e(TAG, "list indexes error"); + } + }; + + private DownloadBinCallback mDownloadBinCallback = new DownloadBinCallback() { + @Override + public void onDownloadBinSuccess(InputStream inputStream) { + Log.d(TAG, "binary file download successfully"); + mBinStream = inputStream; + MessageUtil.postMessage(mMsgHandler, CMD_BIN_FILE_DOWNLOADED); + } + + @Override + public void onDownloadBinFailed() { + Log.w(TAG, "download bin file failed"); + } + + @Override + public void onDownloadBinError() { + Log.w(TAG, "download bin file error"); + } + }; + + public IndexFragment() { + + } + + private void listIndexes() { + new Thread() { + @Override + public void run() { + mApp.mWeAPIs.listRemoteIndexes(mParent.getCurrentCategory().getId(), + mBrandId, mCityCode, mOperatorId, mListIndexesCallback); + } + }.start(); + } + + private void downloadBinFile() { + new Thread() { + @Override + public void run() { + try { + String remoteMap = mCurrentIndex.getRemoteMap(); + int indexId = mCurrentIndex.getId(); + mApp.mWeAPIs.downloadBin(remoteMap, indexId, mDownloadBinCallback); + } catch (Exception e) { + e.printStackTrace(); + } + } + }.start(); + } + + private boolean createDirectory() { + File file = new File(FileUtils.BIN_PATH); + if (file.exists()) { + return true; + } + return file.mkdirs(); + } + + private void saveBinFile() { + new Thread() { + @Override + public void run() { + if (createDirectory()) { + File binFile = new File(FileUtils.BIN_PATH + + FileUtils.FILE_NAME_PREFIX + mCurrentIndex.getRemoteMap() + + FileUtils.FILE_NAME_EXT); + boolean ret = FileUtils.write(binFile, mBinStream); + Log.d(TAG, "write bin file succeeded : " + ret); + } else { + Log.w(TAG, "no directory to contain bin file"); + } + + if (null != mBinStream) { + MessageUtil.postMessage(mMsgHandler, CMD_SAVE_REMOTE_CONTROL); + } else { + Log.e(TAG, "bin file download failed"); + } + } + }.start(); + } + + private void saveRemoteControl() { + // TODO: update brand and operator name i18n + RemoteControl remoteControl = new RemoteControl(); + remoteControl.setCategoryId(mCurrentIndex.getCategoryId()); + remoteControl.setCategoryName(mCategoryName); + remoteControl.setBrandId(mCurrentIndex.getBrandId()); + remoteControl.setBrandName(mBrandName); + remoteControl.setCityCode(mCurrentIndex.getCityCode()); + remoteControl.setCityName(mCityName); + remoteControl.setOperatorId(mCurrentIndex.getOperatorId()); + remoteControl.setOperatorName(mOperatorName); + remoteControl.setProtocol(mCurrentIndex.getProtocol()); + remoteControl.setRemote(mCurrentIndex.getRemote()); + remoteControl.setRemoteMap(mCurrentIndex.getRemoteMap()); + remoteControl.setSubCategory(mCurrentIndex.getSubCate()); + + long id = RemoteControl.createRemoteControl(remoteControl); + + Log.d(TAG, "save remote control : " + id); + mParent.finish(); + } + + private void refreshIndexes() { + mIndexAdapter = new IndexAdapter(mParent, mIndexes, mBrandName, mOperatorName); + mIndexList.setAdapter(mIndexAdapter); + mIndexList.onRefreshComplete(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + getFrom(); + View view = inflater.inflate(R.layout.fragment_index, container, false); + + mMsgHandler = new MsgHandler(this); + mApp = (IRApplication) this.getActivity().getApplication(); + + Category category = mParent.getCurrentCategory(); + Brand brand = mParent.getCurrentBrand(); + City city = mParent.getCurrentCity(); + StbOperator operator = mParent.getCurrentOperator(); + + mCategoryName = category.getName(); + if (null != city) { + mCityName = city.getName(); + mCityCode = city.getCode(); + } + if (null != operator) { + mOperatorName = operator.getOperatorName(); + mOperatorId = operator.getOperatorId(); + } + if (null != brand) { + mBrandName = brand.getName(); + mBrandId = brand.getId(); + } + + mIndexList = (PullToRefreshListView) view.findViewById(R.id.lv_index_list); + mIndexList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { + @Override + public void onRefresh() { + listIndexes(); + } + }); + + mIndexList.setOnItemClickListener(new ListView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + mCurrentIndex = (RemoteIndex) mIndexAdapter.getItem(position); + MessageUtil.postMessage(mMsgHandler, CMD_DOWNLOAD_BIN_FILE); + } + }); + + mIndexList.setRefreshing(); + + return view; + } + + @Override + public boolean onBackPressed() { + return super.onBackPressed(); + } + + private static class MsgHandler extends Handler { + + WeakReference mIndexFragment; + + MsgHandler(IndexFragment fragment) { + mIndexFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + + IndexFragment indexFragment = mIndexFragment.get(); + switch (cmd) { + + case CMD_REFRESH_INDEX_LIST: + indexFragment.refreshIndexes(); + break; + + case CMD_DOWNLOAD_BIN_FILE: + indexFragment.downloadBinFile(); + break; + + case CMD_BIN_FILE_DOWNLOADED: + indexFragment.saveBinFile(); + break; + + case CMD_SAVE_REMOTE_CONTROL: + indexFragment.saveRemoteControl(); + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java old mode 100644 new mode 100755 index 55795b8..8e2d045 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/fragment/MainFragment.java @@ -1,143 +1,143 @@ -package net.irext.ircontrol.ui.fragment; - -import android.os.Handler; -import android.os.Message; -import android.support.v4.app.Fragment; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ListView; -import android.widget.TextView; -import net.irext.ircontrol.R; -import net.irext.ircontrol.bean.RemoteControl; -import net.irext.ircontrol.ui.activity.MainActivity; -import net.irext.ircontrol.ui.adapter.RemoteControlAdapter; -import net.irext.ircontrol.ui.widget.PullToRefreshListView; -import net.irext.ircontrol.utils.MessageUtil; - -import java.lang.ref.WeakReference; -import java.util.List; - -/** - * Filename: MainFragment.java - * Revised: Date: 2017-04-04 - * Revision: Revision: 1.0 - *

- * Description: Main Fragment class for irext decode example - *

- * Revision log: - * 2017-04-04: created by strawmanbobi - */ -public class MainFragment extends Fragment { - - private static final String TAG = MainFragment.class.getSimpleName(); - - private static final int CMD_REFRESH_REMOTE_LIST = 0; - - private MsgHandler mHandler; - - private MainActivity mParent; - - private List mRemoteControls; - private RemoteControlAdapter mRemoteControlAdapter; - - private TextView mTVCreateNote; - private PullToRefreshListView mRemoteControlList; - - public MainFragment() { - } - - public MsgHandler getHandler() { - return mHandler; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - mHandler = new MsgHandler(this); - - mParent = (MainActivity)getActivity(); - View view = inflater.inflate(R.layout.fragment_main, container, false); - mTVCreateNote = (TextView) view.findViewById(R.id.tv_create_note); - mRemoteControlList = (PullToRefreshListView) view.findViewById(R.id.lv_remote_list); - - mRemoteControlList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { - @Override - public void onRefresh() { - listRemotes(); - } - }); - - mRemoteControlList.setOnItemClickListener(new ListView.OnItemClickListener() { - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - RemoteControl remoteControl = (RemoteControl)mRemoteControlAdapter.getItem(position); - mParent.setmCurrentRemoteControl(remoteControl); - MessageUtil.postMessage(mParent.mMsgHandler, MainActivity.CMD_GOTO_CONTROL); - } - }); - return view; - } - - @Override - public void onResume() { - super.onResume(); - mRemoteControlList.setRefreshing(); - } - - private void listRemotes() { - new Thread() { - @Override - public void run() { - mRemoteControls = RemoteControl.listRemoteControls(0, 20); - MessageUtil.postMessage(mHandler, CMD_REFRESH_REMOTE_LIST); - } - }.start(); - } - - private void refreshRemoteList() { - if (null != mRemoteControls && mRemoteControls.size() > 0) { - Log.d(TAG, "remote control fetched : " + mRemoteControls.size()); - mTVCreateNote.setVisibility(View.GONE); - mRemoteControlList.setVisibility(View.VISIBLE); - mRemoteControlAdapter = new RemoteControlAdapter(mParent, mRemoteControls); - mRemoteControlAdapter.setRemoteControls(mRemoteControls); - mRemoteControlList.setAdapter(mRemoteControlAdapter); - mRemoteControlList.onRefreshComplete(); - } else { - mTVCreateNote.setVisibility(View.VISIBLE); - mRemoteControlList.setVisibility(View.GONE); - } - } - - private static class MsgHandler extends Handler { - - WeakReference mMainFragment; - - MsgHandler(MainFragment fragment) { - mMainFragment = new WeakReference<>(fragment); - } - - @Override - public void handleMessage(Message msg) { - int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); - Log.d(TAG, "handle message " + Integer.toString(cmd)); - - MainFragment mainFragment = mMainFragment.get(); - switch (cmd) { - - case CMD_REFRESH_REMOTE_LIST: - mainFragment.refreshRemoteList(); - break; - - default: - break; - } - } - } -} +package net.irext.ircontrol.ui.fragment; + +import android.os.Handler; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; +import net.irext.ircontrol.R; +import net.irext.ircontrol.bean.RemoteControl; +import net.irext.ircontrol.ui.activity.MainActivity; +import net.irext.ircontrol.ui.adapter.RemoteControlAdapter; +import net.irext.ircontrol.ui.widget.PullToRefreshListView; +import net.irext.ircontrol.utils.MessageUtil; + +import java.lang.ref.WeakReference; +import java.util.List; + +/** + * Filename: MainFragment.java + * Revised: Date: 2017-04-04 + * Revision: Revision: 1.0 + *

+ * Description: Main Fragment class for irext decode example + *

+ * Revision log: + * 2017-04-04: created by strawmanbobi + */ +public class MainFragment extends Fragment { + + private static final String TAG = MainFragment.class.getSimpleName(); + + private static final int CMD_REFRESH_REMOTE_LIST = 0; + + private MsgHandler mHandler; + + private MainActivity mParent; + + private List mRemoteControls; + private RemoteControlAdapter mRemoteControlAdapter; + + private TextView mTVCreateNote; + private PullToRefreshListView mRemoteControlList; + + public MainFragment() { + } + + public MsgHandler getHandler() { + return mHandler; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mHandler = new MsgHandler(this); + + mParent = (MainActivity)getActivity(); + View view = inflater.inflate(R.layout.fragment_main, container, false); + mTVCreateNote = (TextView) view.findViewById(R.id.tv_create_note); + mRemoteControlList = (PullToRefreshListView) view.findViewById(R.id.lv_remote_list); + + mRemoteControlList.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { + @Override + public void onRefresh() { + listRemotes(); + } + }); + + mRemoteControlList.setOnItemClickListener(new ListView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + RemoteControl remoteControl = (RemoteControl)mRemoteControlAdapter.getItem(position); + mParent.setmCurrentRemoteControl(remoteControl); + MessageUtil.postMessage(mParent.mMsgHandler, MainActivity.CMD_GOTO_CONTROL); + } + }); + return view; + } + + @Override + public void onResume() { + super.onResume(); + mRemoteControlList.setRefreshing(); + } + + private void listRemotes() { + new Thread() { + @Override + public void run() { + mRemoteControls = RemoteControl.listRemoteControls(0, 20); + MessageUtil.postMessage(mHandler, CMD_REFRESH_REMOTE_LIST); + } + }.start(); + } + + private void refreshRemoteList() { + if (null != mRemoteControls && mRemoteControls.size() > 0) { + Log.d(TAG, "remote control fetched : " + mRemoteControls.size()); + mTVCreateNote.setVisibility(View.GONE); + mRemoteControlList.setVisibility(View.VISIBLE); + mRemoteControlAdapter = new RemoteControlAdapter(mParent, mRemoteControls); + mRemoteControlAdapter.setRemoteControls(mRemoteControls); + mRemoteControlList.setAdapter(mRemoteControlAdapter); + mRemoteControlList.onRefreshComplete(); + } else { + mTVCreateNote.setVisibility(View.VISIBLE); + mRemoteControlList.setVisibility(View.GONE); + } + } + + private static class MsgHandler extends Handler { + + WeakReference mMainFragment; + + MsgHandler(MainFragment fragment) { + mMainFragment = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + int cmd = msg.getData().getInt(MessageUtil.KEY_CMD); + Log.d(TAG, "handle message " + Integer.toString(cmd)); + + MainFragment mainFragment = mMainFragment.get(); + switch (cmd) { + + case CMD_REFRESH_REMOTE_LIST: + mainFragment.refreshRemoteList(); + break; + + default: + break; + } + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/ui/widget/PullToRefreshListView.java b/android-example/app/src/main/java/net/irext/ircontrol/ui/widget/PullToRefreshListView.java old mode 100644 new mode 100755 index bb80dce..5fcdd84 --- a/android-example/app/src/main/java/net/irext/ircontrol/ui/widget/PullToRefreshListView.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/ui/widget/PullToRefreshListView.java @@ -1,531 +1,531 @@ -package net.irext.ircontrol.ui.widget; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.*; -import android.view.ViewTreeObserver.OnGlobalLayoutListener; -import android.view.animation.*; -import android.view.animation.Animation.AnimationListener; -import android.widget.*; -import net.irext.ircontrol.R; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * A generic, customizable Android ListView implementation that has 'Pull to Refresh' functionality. - *

- * This ListView can be used in place of the normal Android android.widget.ListView class. - *

- * Users of this class should implement OnRefreshListener and call setOnRefreshListener(..) - * to get notified on refresh events. The using class should call onRefreshComplete() when - * refreshing is finished. - *

- * The using class can call setRefreshing() to set the state explicitly to refreshing. This - * is useful when you want to show the spinner and 'Refreshing' text when the - * refresh was not triggered by 'Pull to Refresh', for example on start. - *

- * For more information, visit the project page: - * https://github.com/erikwt/PullToRefresh-ListView - * - * @author Erik Wallentinsen - * @version 1.3.0 - */ -public class PullToRefreshListView extends ListView{ - - private static final float PULL_RESISTANCE = 1.7f; - private static final int BOUNCE_ANIMATION_DURATION = 700; - private static final int BOUNCE_ANIMATION_DELAY = 100; - private static final float BOUNCE_OVERSHOOT_TENSION = 1.4f; - private static final int ROTATE_ARROW_ANIMATION_DURATION = 250; - - private static enum State{ - PULL_TO_REFRESH, - RELEASE_TO_REFRESH, - REFRESHING - } - - /** - * Interface to implement when you want to get notified of 'pull to refresh' - * events. - * Call setOnRefreshListener(..) to activate an OnRefreshListener. - */ - public interface OnRefreshListener{ - - /** - * Method to be called when a refresh is requested - */ - public void onRefresh(); - } - - private static int measuredHeaderHeight; - - private boolean scrollbarEnabled; - private boolean bounceBackHeader; - private boolean lockScrollWhileRefreshing; - private boolean showLastUpdatedText; - private String pullToRefreshText; - private String releaseToRefreshText; - private String refreshingText; - private String lastUpdatedText; - private SimpleDateFormat lastUpdatedDateFormat = new SimpleDateFormat("dd/MM HH:mm"); - - private float previousY; - private int headerPadding; - private boolean hasResetHeader; - private long lastUpdated = -1; - private State state; - private LinearLayout headerContainer; - private RelativeLayout header; - private RotateAnimation flipAnimation; - private RotateAnimation reverseFlipAnimation; - private ImageView image; - private ProgressBar spinner; - private TextView text; - private TextView lastUpdatedTextView; - private OnItemClickListener onItemClickListener; - private OnItemLongClickListener onItemLongClickListener; - private OnRefreshListener onRefreshListener; - - private float mScrollStartY; - private final int IDLE_DISTANCE = 5; - - public PullToRefreshListView(Context context){ - super(context); - init(); - } - - public PullToRefreshListView(Context context, AttributeSet attrs){ - super(context, attrs); - init(); - } - - public PullToRefreshListView(Context context, AttributeSet attrs, int defStyle){ - super(context, attrs, defStyle); - init(); - } - - @Override - public void setOnItemClickListener(OnItemClickListener onItemClickListener){ - this.onItemClickListener = onItemClickListener; - } - - @Override - public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){ - this.onItemLongClickListener = onItemLongClickListener; - } - - /** - * Activate an OnRefreshListener to get notified on 'pull to refresh' - * events. - * - * @param onRefreshListener The OnRefreshListener to get notified - */ - public void setOnRefreshListener(OnRefreshListener onRefreshListener){ - this.onRefreshListener = onRefreshListener; - } - - /** - * @return If the list is in 'Refreshing' state - */ - public boolean isRefreshing(){ - return state == State.REFRESHING; - } - - /** - * Default is false. When lockScrollWhileRefreshing is set to true, the list - * cannot scroll when in 'refreshing' mode. It's 'locked' on refreshing. - * - * @param lockScrollWhileRefreshing - */ - public void setLockScrollWhileRefreshing(boolean lockScrollWhileRefreshing){ - this.lockScrollWhileRefreshing = lockScrollWhileRefreshing; - } - - /** - * Default is false. Show the last-updated date/time in the 'Pull ro Refresh' - * header. See 'setLastUpdatedDateFormat' to set the date/time formatting. - * - * @param showLastUpdatedText - */ - public void setShowLastUpdatedText(boolean showLastUpdatedText){ - this.showLastUpdatedText = showLastUpdatedText; - if(!showLastUpdatedText) lastUpdatedTextView.setVisibility(View.GONE); - } - - /** - * Default: "dd/MM HH:mm". Set the format in which the last-updated - * date/time is shown. Meaningless if 'showLastUpdatedText == false (default)'. - * See 'setShowLastUpdatedText'. - * - * @param lastUpdatedDateFormat - */ - public void setLastUpdatedDateFormat(SimpleDateFormat lastUpdatedDateFormat){ - this.lastUpdatedDateFormat = lastUpdatedDateFormat; - } - - /** - * Explicitly set the state to refreshing. This - * is useful when you want to show the spinner and 'Refreshing' text when - * the refresh was not triggered by 'pull to refresh', for example on start. - */ - public void setRefreshing(){ - state = State.REFRESHING; - scrollTo(0, 0); - setUiRefreshing(); - setHeaderPadding(0); - - // set real refresh - onRefreshListener.onRefresh(); - } - - /** - * Set the state back to 'pull to refresh'. Call this method when refreshing - * the data is finished. - */ - public void onRefreshComplete(){ - state = State.PULL_TO_REFRESH; - resetHeader(); - lastUpdated = System.currentTimeMillis(); - } - - /** - * Change the label text on state 'Pull to Refresh' - * - * @param pullToRefreshText Text - */ - public void setTextPullToRefresh(String pullToRefreshText){ - this.pullToRefreshText = pullToRefreshText; - if(state == State.PULL_TO_REFRESH){ - text.setText(pullToRefreshText); - } - } - - /** - * Change the label text on state 'Release to Refresh' - * - * @param releaseToRefreshText Text - */ - public void setTextReleaseToRefresh(String releaseToRefreshText){ - this.releaseToRefreshText = releaseToRefreshText; - if(state == State.RELEASE_TO_REFRESH){ - text.setText(releaseToRefreshText); - } - } - - /** - * Change the label text on state 'Refreshing' - * - * @param refreshingText Text - */ - public void setTextRefreshing(String refreshingText){ - this.refreshingText = refreshingText; - if(state == State.REFRESHING){ - text.setText(refreshingText); - } - } - - private void init(){ - setVerticalFadingEdgeEnabled(false); - - headerContainer = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.ptr_header, null); - header = (RelativeLayout) headerContainer.findViewById(R.id.ptr_id_header); - text = (TextView) header.findViewById(R.id.ptr_id_text); - lastUpdatedTextView = (TextView) header.findViewById(R.id.ptr_id_last_updated); - image = (ImageView) header.findViewById(R.id.ptr_id_image); - spinner = (ProgressBar) header.findViewById(R.id.ptr_id_spinner); - - pullToRefreshText = getContext().getString(R.string.ptr_pull_to_refresh); - releaseToRefreshText = getContext().getString(R.string.ptr_release_to_refresh); - refreshingText = getContext().getString(R.string.ptr_refreshing); - lastUpdatedText = getContext().getString(R.string.ptr_last_updated); - - flipAnimation = new RotateAnimation(0, -180, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); - flipAnimation.setInterpolator(new LinearInterpolator()); - flipAnimation.setDuration(ROTATE_ARROW_ANIMATION_DURATION); - flipAnimation.setFillAfter(true); - - reverseFlipAnimation = new RotateAnimation(-180, 0, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); - reverseFlipAnimation.setInterpolator(new LinearInterpolator()); - reverseFlipAnimation.setDuration(ROTATE_ARROW_ANIMATION_DURATION); - reverseFlipAnimation.setFillAfter(true); - - addHeaderView(headerContainer); - setState(State.PULL_TO_REFRESH); - scrollbarEnabled = isVerticalScrollBarEnabled(); - - ViewTreeObserver vto = header.getViewTreeObserver(); - vto.addOnGlobalLayoutListener(new PTROnGlobalLayoutListener()); - - super.setOnItemClickListener(new PTROnItemClickListener()); - super.setOnItemLongClickListener(new PTROnItemLongClickListener()); - } - - private void setHeaderPadding(int padding){ - headerPadding = padding; - - MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) header.getLayoutParams(); - mlp.setMargins(0, Math.round(padding), 0, 0); - header.setLayoutParams(mlp); - } - - @Override - public boolean onTouchEvent(MotionEvent event){ - if(lockScrollWhileRefreshing - && (state == State.REFRESHING || getAnimation() != null && !getAnimation().hasEnded())){ - return true; - } - - switch(event.getAction()){ - case MotionEvent.ACTION_DOWN: - if(getFirstVisiblePosition() == 0){ - previousY = event.getY(); - } - else { - previousY = -1; - } - - // Remember where have we started - mScrollStartY = event.getY(); - - break; - - case MotionEvent.ACTION_UP: - if(previousY != -1 && (state == State.RELEASE_TO_REFRESH || getFirstVisiblePosition() == 0)){ - switch(state){ - case RELEASE_TO_REFRESH: - setState(State.REFRESHING); - bounceBackHeader(); - break; - - case PULL_TO_REFRESH: - resetHeader(); - break; - } - } - break; - - case MotionEvent.ACTION_MOVE: - if(previousY != -1 && getFirstVisiblePosition() == 0 && Math.abs(mScrollStartY-event.getY()) > IDLE_DISTANCE){ - float y = event.getY(); - float diff = y - previousY; - if(diff > 0) diff /= PULL_RESISTANCE; - previousY = y; - - int newHeaderPadding = Math.max(Math.round(headerPadding + diff), -header.getHeight()); - - if(newHeaderPadding != headerPadding && state != State.REFRESHING){ - setHeaderPadding(newHeaderPadding); - - if(state == State.PULL_TO_REFRESH && headerPadding > 0){ - setState(State.RELEASE_TO_REFRESH); - - image.clearAnimation(); - image.startAnimation(flipAnimation); - }else if(state == State.RELEASE_TO_REFRESH && headerPadding < 0){ - setState(State.PULL_TO_REFRESH); - - image.clearAnimation(); - image.startAnimation(reverseFlipAnimation); - } - } - } - - break; - } - - return super.onTouchEvent(event); - } - - private void bounceBackHeader(){ - int yTranslate = state == State.REFRESHING ? - header.getHeight() - headerContainer.getHeight() : - -headerContainer.getHeight() - headerContainer.getTop() + getPaddingTop();; - - TranslateAnimation bounceAnimation = new TranslateAnimation( - TranslateAnimation.ABSOLUTE, 0, - TranslateAnimation.ABSOLUTE, 0, - TranslateAnimation.ABSOLUTE, 0, - TranslateAnimation.ABSOLUTE, yTranslate); - - bounceAnimation.setDuration(BOUNCE_ANIMATION_DURATION); - bounceAnimation.setFillEnabled(true); - bounceAnimation.setFillAfter(false); - bounceAnimation.setFillBefore(true); - bounceAnimation.setInterpolator(new OvershootInterpolator(BOUNCE_OVERSHOOT_TENSION)); - bounceAnimation.setAnimationListener(new HeaderAnimationListener(yTranslate)); - - startAnimation(bounceAnimation); - } - - private void resetHeader() { - if(getFirstVisiblePosition() > 0){ - setHeaderPadding(-header.getHeight()); - setState(State.PULL_TO_REFRESH); - return; - } - - if(getAnimation() != null && !getAnimation().hasEnded()){ - bounceBackHeader = true; - }else{ - bounceBackHeader(); - } - } - - private void setUiRefreshing() { - spinner.setVisibility(View.VISIBLE); - image.clearAnimation(); - image.setVisibility(View.INVISIBLE); - text.setText(refreshingText); - } - - private void setState(State state){ - this.state = state; - switch(state){ - case PULL_TO_REFRESH: - spinner.setVisibility(View.INVISIBLE); - image.setVisibility(View.VISIBLE); - text.setText(pullToRefreshText); - - if(showLastUpdatedText && lastUpdated != -1){ - lastUpdatedTextView.setVisibility(View.VISIBLE); - lastUpdatedTextView.setText(String.format(lastUpdatedText, lastUpdatedDateFormat.format(new Date(lastUpdated)))); - } - - break; - - case RELEASE_TO_REFRESH: - spinner.setVisibility(View.INVISIBLE); - image.setVisibility(View.VISIBLE); - text.setText(releaseToRefreshText); - break; - - case REFRESHING: - setUiRefreshing(); - - lastUpdated = System.currentTimeMillis(); - if(onRefreshListener == null){ - setState(State.PULL_TO_REFRESH); - }else{ - onRefreshListener.onRefresh(); - } - - break; - } - } - - @Override - protected void onScrollChanged(int l, int t, int oldl, int oldt){ - super.onScrollChanged(l, t, oldl, oldt); - - if(!hasResetHeader){ - if(measuredHeaderHeight > 0 && state != State.REFRESHING){ - setHeaderPadding(-measuredHeaderHeight); - } - - hasResetHeader = true; - } - } - - private class HeaderAnimationListener implements AnimationListener{ - - private int height, translation; - private State stateAtAnimationStart; - - public HeaderAnimationListener(int translation){ - this.translation = translation; - } - - @Override - public void onAnimationStart(Animation animation){ - stateAtAnimationStart = state; - - android.view.ViewGroup.LayoutParams lp = getLayoutParams(); - height = lp.height; - lp.height = getHeight() - translation; - setLayoutParams(lp); - - if(scrollbarEnabled){ - setVerticalScrollBarEnabled(false); - } - } - - @Override - public void onAnimationEnd(Animation animation){ - setHeaderPadding(stateAtAnimationStart == State.REFRESHING ? 0 : -measuredHeaderHeight - headerContainer.getTop()); - setSelection(0); - - android.view.ViewGroup.LayoutParams lp = getLayoutParams(); - lp.height = height; - setLayoutParams(lp); - - if(scrollbarEnabled){ - setVerticalScrollBarEnabled(true); - } - - if(bounceBackHeader){ - bounceBackHeader = false; - - postDelayed(new Runnable(){ - - @Override - public void run(){ - resetHeader(); - } - }, BOUNCE_ANIMATION_DELAY); - }else if(stateAtAnimationStart != State.REFRESHING){ - setState(State.PULL_TO_REFRESH); - } - } - - @Override - public void onAnimationRepeat(Animation animation){} - } - - private class PTROnGlobalLayoutListener implements OnGlobalLayoutListener{ - - @Override - public void onGlobalLayout(){ - int initialHeaderHeight = header.getHeight(); - - if(initialHeaderHeight > 0){ - measuredHeaderHeight = initialHeaderHeight; - - if(measuredHeaderHeight > 0 && state != State.REFRESHING){ - setHeaderPadding(-measuredHeaderHeight); - requestLayout(); - } - } - - getViewTreeObserver().removeGlobalOnLayoutListener(this); - } - } - - private class PTROnItemClickListener implements OnItemClickListener{ - - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long id){ - hasResetHeader = false; - - if(onItemClickListener != null && state == State.PULL_TO_REFRESH){ - // Passing up onItemClick. Correct position with the number of header views - onItemClickListener.onItemClick(adapterView, view, position - getHeaderViewsCount(), id); - } - } - } - - private class PTROnItemLongClickListener implements OnItemLongClickListener{ - - @Override - public boolean onItemLongClick(AdapterView adapterView, View view, int position, long id){ - hasResetHeader = false; - - if(onItemLongClickListener != null && state == State.PULL_TO_REFRESH){ - // Passing up onItemLongClick. Correct position with the number of header views - return onItemLongClickListener.onItemLongClick(adapterView, view, position - getHeaderViewsCount(), id); - } - - return false; - } - } -} +package net.irext.ircontrol.ui.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.*; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.view.animation.*; +import android.view.animation.Animation.AnimationListener; +import android.widget.*; +import net.irext.ircontrol.R; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * A generic, customizable Android ListView implementation that has 'Pull to Refresh' functionality. + *

+ * This ListView can be used in place of the normal Android android.widget.ListView class. + *

+ * Users of this class should implement OnRefreshListener and call setOnRefreshListener(..) + * to get notified on refresh events. The using class should call onRefreshComplete() when + * refreshing is finished. + *

+ * The using class can call setRefreshing() to set the state explicitly to refreshing. This + * is useful when you want to show the spinner and 'Refreshing' text when the + * refresh was not triggered by 'Pull to Refresh', for example on start. + *

+ * For more information, visit the project page: + * https://github.com/erikwt/PullToRefresh-ListView + * + * @author Erik Wallentinsen + * @version 1.3.0 + */ +public class PullToRefreshListView extends ListView{ + + private static final float PULL_RESISTANCE = 1.7f; + private static final int BOUNCE_ANIMATION_DURATION = 700; + private static final int BOUNCE_ANIMATION_DELAY = 100; + private static final float BOUNCE_OVERSHOOT_TENSION = 1.4f; + private static final int ROTATE_ARROW_ANIMATION_DURATION = 250; + + private static enum State{ + PULL_TO_REFRESH, + RELEASE_TO_REFRESH, + REFRESHING + } + + /** + * Interface to implement when you want to get notified of 'pull to refresh' + * events. + * Call setOnRefreshListener(..) to activate an OnRefreshListener. + */ + public interface OnRefreshListener{ + + /** + * Method to be called when a refresh is requested + */ + public void onRefresh(); + } + + private static int measuredHeaderHeight; + + private boolean scrollbarEnabled; + private boolean bounceBackHeader; + private boolean lockScrollWhileRefreshing; + private boolean showLastUpdatedText; + private String pullToRefreshText; + private String releaseToRefreshText; + private String refreshingText; + private String lastUpdatedText; + private SimpleDateFormat lastUpdatedDateFormat = new SimpleDateFormat("dd/MM HH:mm"); + + private float previousY; + private int headerPadding; + private boolean hasResetHeader; + private long lastUpdated = -1; + private State state; + private LinearLayout headerContainer; + private RelativeLayout header; + private RotateAnimation flipAnimation; + private RotateAnimation reverseFlipAnimation; + private ImageView image; + private ProgressBar spinner; + private TextView text; + private TextView lastUpdatedTextView; + private OnItemClickListener onItemClickListener; + private OnItemLongClickListener onItemLongClickListener; + private OnRefreshListener onRefreshListener; + + private float mScrollStartY; + private final int IDLE_DISTANCE = 5; + + public PullToRefreshListView(Context context){ + super(context); + init(); + } + + public PullToRefreshListView(Context context, AttributeSet attrs){ + super(context, attrs); + init(); + } + + public PullToRefreshListView(Context context, AttributeSet attrs, int defStyle){ + super(context, attrs, defStyle); + init(); + } + + @Override + public void setOnItemClickListener(OnItemClickListener onItemClickListener){ + this.onItemClickListener = onItemClickListener; + } + + @Override + public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){ + this.onItemLongClickListener = onItemLongClickListener; + } + + /** + * Activate an OnRefreshListener to get notified on 'pull to refresh' + * events. + * + * @param onRefreshListener The OnRefreshListener to get notified + */ + public void setOnRefreshListener(OnRefreshListener onRefreshListener){ + this.onRefreshListener = onRefreshListener; + } + + /** + * @return If the list is in 'Refreshing' state + */ + public boolean isRefreshing(){ + return state == State.REFRESHING; + } + + /** + * Default is false. When lockScrollWhileRefreshing is set to true, the list + * cannot scroll when in 'refreshing' mode. It's 'locked' on refreshing. + * + * @param lockScrollWhileRefreshing + */ + public void setLockScrollWhileRefreshing(boolean lockScrollWhileRefreshing){ + this.lockScrollWhileRefreshing = lockScrollWhileRefreshing; + } + + /** + * Default is false. Show the last-updated date/time in the 'Pull ro Refresh' + * header. See 'setLastUpdatedDateFormat' to set the date/time formatting. + * + * @param showLastUpdatedText + */ + public void setShowLastUpdatedText(boolean showLastUpdatedText){ + this.showLastUpdatedText = showLastUpdatedText; + if(!showLastUpdatedText) lastUpdatedTextView.setVisibility(View.GONE); + } + + /** + * Default: "dd/MM HH:mm". Set the format in which the last-updated + * date/time is shown. Meaningless if 'showLastUpdatedText == false (default)'. + * See 'setShowLastUpdatedText'. + * + * @param lastUpdatedDateFormat + */ + public void setLastUpdatedDateFormat(SimpleDateFormat lastUpdatedDateFormat){ + this.lastUpdatedDateFormat = lastUpdatedDateFormat; + } + + /** + * Explicitly set the state to refreshing. This + * is useful when you want to show the spinner and 'Refreshing' text when + * the refresh was not triggered by 'pull to refresh', for example on start. + */ + public void setRefreshing(){ + state = State.REFRESHING; + scrollTo(0, 0); + setUiRefreshing(); + setHeaderPadding(0); + + // set real refresh + onRefreshListener.onRefresh(); + } + + /** + * Set the state back to 'pull to refresh'. Call this method when refreshing + * the data is finished. + */ + public void onRefreshComplete(){ + state = State.PULL_TO_REFRESH; + resetHeader(); + lastUpdated = System.currentTimeMillis(); + } + + /** + * Change the label text on state 'Pull to Refresh' + * + * @param pullToRefreshText Text + */ + public void setTextPullToRefresh(String pullToRefreshText){ + this.pullToRefreshText = pullToRefreshText; + if(state == State.PULL_TO_REFRESH){ + text.setText(pullToRefreshText); + } + } + + /** + * Change the label text on state 'Release to Refresh' + * + * @param releaseToRefreshText Text + */ + public void setTextReleaseToRefresh(String releaseToRefreshText){ + this.releaseToRefreshText = releaseToRefreshText; + if(state == State.RELEASE_TO_REFRESH){ + text.setText(releaseToRefreshText); + } + } + + /** + * Change the label text on state 'Refreshing' + * + * @param refreshingText Text + */ + public void setTextRefreshing(String refreshingText){ + this.refreshingText = refreshingText; + if(state == State.REFRESHING){ + text.setText(refreshingText); + } + } + + private void init(){ + setVerticalFadingEdgeEnabled(false); + + headerContainer = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.ptr_header, null); + header = (RelativeLayout) headerContainer.findViewById(R.id.ptr_id_header); + text = (TextView) header.findViewById(R.id.ptr_id_text); + lastUpdatedTextView = (TextView) header.findViewById(R.id.ptr_id_last_updated); + image = (ImageView) header.findViewById(R.id.ptr_id_image); + spinner = (ProgressBar) header.findViewById(R.id.ptr_id_spinner); + + pullToRefreshText = getContext().getString(R.string.ptr_pull_to_refresh); + releaseToRefreshText = getContext().getString(R.string.ptr_release_to_refresh); + refreshingText = getContext().getString(R.string.ptr_refreshing); + lastUpdatedText = getContext().getString(R.string.ptr_last_updated); + + flipAnimation = new RotateAnimation(0, -180, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); + flipAnimation.setInterpolator(new LinearInterpolator()); + flipAnimation.setDuration(ROTATE_ARROW_ANIMATION_DURATION); + flipAnimation.setFillAfter(true); + + reverseFlipAnimation = new RotateAnimation(-180, 0, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); + reverseFlipAnimation.setInterpolator(new LinearInterpolator()); + reverseFlipAnimation.setDuration(ROTATE_ARROW_ANIMATION_DURATION); + reverseFlipAnimation.setFillAfter(true); + + addHeaderView(headerContainer); + setState(State.PULL_TO_REFRESH); + scrollbarEnabled = isVerticalScrollBarEnabled(); + + ViewTreeObserver vto = header.getViewTreeObserver(); + vto.addOnGlobalLayoutListener(new PTROnGlobalLayoutListener()); + + super.setOnItemClickListener(new PTROnItemClickListener()); + super.setOnItemLongClickListener(new PTROnItemLongClickListener()); + } + + private void setHeaderPadding(int padding){ + headerPadding = padding; + + MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) header.getLayoutParams(); + mlp.setMargins(0, Math.round(padding), 0, 0); + header.setLayoutParams(mlp); + } + + @Override + public boolean onTouchEvent(MotionEvent event){ + if(lockScrollWhileRefreshing + && (state == State.REFRESHING || getAnimation() != null && !getAnimation().hasEnded())){ + return true; + } + + switch(event.getAction()){ + case MotionEvent.ACTION_DOWN: + if(getFirstVisiblePosition() == 0){ + previousY = event.getY(); + } + else { + previousY = -1; + } + + // Remember where have we started + mScrollStartY = event.getY(); + + break; + + case MotionEvent.ACTION_UP: + if(previousY != -1 && (state == State.RELEASE_TO_REFRESH || getFirstVisiblePosition() == 0)){ + switch(state){ + case RELEASE_TO_REFRESH: + setState(State.REFRESHING); + bounceBackHeader(); + break; + + case PULL_TO_REFRESH: + resetHeader(); + break; + } + } + break; + + case MotionEvent.ACTION_MOVE: + if(previousY != -1 && getFirstVisiblePosition() == 0 && Math.abs(mScrollStartY-event.getY()) > IDLE_DISTANCE){ + float y = event.getY(); + float diff = y - previousY; + if(diff > 0) diff /= PULL_RESISTANCE; + previousY = y; + + int newHeaderPadding = Math.max(Math.round(headerPadding + diff), -header.getHeight()); + + if(newHeaderPadding != headerPadding && state != State.REFRESHING){ + setHeaderPadding(newHeaderPadding); + + if(state == State.PULL_TO_REFRESH && headerPadding > 0){ + setState(State.RELEASE_TO_REFRESH); + + image.clearAnimation(); + image.startAnimation(flipAnimation); + }else if(state == State.RELEASE_TO_REFRESH && headerPadding < 0){ + setState(State.PULL_TO_REFRESH); + + image.clearAnimation(); + image.startAnimation(reverseFlipAnimation); + } + } + } + + break; + } + + return super.onTouchEvent(event); + } + + private void bounceBackHeader(){ + int yTranslate = state == State.REFRESHING ? + header.getHeight() - headerContainer.getHeight() : + -headerContainer.getHeight() - headerContainer.getTop() + getPaddingTop();; + + TranslateAnimation bounceAnimation = new TranslateAnimation( + TranslateAnimation.ABSOLUTE, 0, + TranslateAnimation.ABSOLUTE, 0, + TranslateAnimation.ABSOLUTE, 0, + TranslateAnimation.ABSOLUTE, yTranslate); + + bounceAnimation.setDuration(BOUNCE_ANIMATION_DURATION); + bounceAnimation.setFillEnabled(true); + bounceAnimation.setFillAfter(false); + bounceAnimation.setFillBefore(true); + bounceAnimation.setInterpolator(new OvershootInterpolator(BOUNCE_OVERSHOOT_TENSION)); + bounceAnimation.setAnimationListener(new HeaderAnimationListener(yTranslate)); + + startAnimation(bounceAnimation); + } + + private void resetHeader() { + if(getFirstVisiblePosition() > 0){ + setHeaderPadding(-header.getHeight()); + setState(State.PULL_TO_REFRESH); + return; + } + + if(getAnimation() != null && !getAnimation().hasEnded()){ + bounceBackHeader = true; + }else{ + bounceBackHeader(); + } + } + + private void setUiRefreshing() { + spinner.setVisibility(View.VISIBLE); + image.clearAnimation(); + image.setVisibility(View.INVISIBLE); + text.setText(refreshingText); + } + + private void setState(State state){ + this.state = state; + switch(state){ + case PULL_TO_REFRESH: + spinner.setVisibility(View.INVISIBLE); + image.setVisibility(View.VISIBLE); + text.setText(pullToRefreshText); + + if(showLastUpdatedText && lastUpdated != -1){ + lastUpdatedTextView.setVisibility(View.VISIBLE); + lastUpdatedTextView.setText(String.format(lastUpdatedText, lastUpdatedDateFormat.format(new Date(lastUpdated)))); + } + + break; + + case RELEASE_TO_REFRESH: + spinner.setVisibility(View.INVISIBLE); + image.setVisibility(View.VISIBLE); + text.setText(releaseToRefreshText); + break; + + case REFRESHING: + setUiRefreshing(); + + lastUpdated = System.currentTimeMillis(); + if(onRefreshListener == null){ + setState(State.PULL_TO_REFRESH); + }else{ + onRefreshListener.onRefresh(); + } + + break; + } + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt){ + super.onScrollChanged(l, t, oldl, oldt); + + if(!hasResetHeader){ + if(measuredHeaderHeight > 0 && state != State.REFRESHING){ + setHeaderPadding(-measuredHeaderHeight); + } + + hasResetHeader = true; + } + } + + private class HeaderAnimationListener implements AnimationListener{ + + private int height, translation; + private State stateAtAnimationStart; + + public HeaderAnimationListener(int translation){ + this.translation = translation; + } + + @Override + public void onAnimationStart(Animation animation){ + stateAtAnimationStart = state; + + android.view.ViewGroup.LayoutParams lp = getLayoutParams(); + height = lp.height; + lp.height = getHeight() - translation; + setLayoutParams(lp); + + if(scrollbarEnabled){ + setVerticalScrollBarEnabled(false); + } + } + + @Override + public void onAnimationEnd(Animation animation){ + setHeaderPadding(stateAtAnimationStart == State.REFRESHING ? 0 : -measuredHeaderHeight - headerContainer.getTop()); + setSelection(0); + + android.view.ViewGroup.LayoutParams lp = getLayoutParams(); + lp.height = height; + setLayoutParams(lp); + + if(scrollbarEnabled){ + setVerticalScrollBarEnabled(true); + } + + if(bounceBackHeader){ + bounceBackHeader = false; + + postDelayed(new Runnable(){ + + @Override + public void run(){ + resetHeader(); + } + }, BOUNCE_ANIMATION_DELAY); + }else if(stateAtAnimationStart != State.REFRESHING){ + setState(State.PULL_TO_REFRESH); + } + } + + @Override + public void onAnimationRepeat(Animation animation){} + } + + private class PTROnGlobalLayoutListener implements OnGlobalLayoutListener{ + + @Override + public void onGlobalLayout(){ + int initialHeaderHeight = header.getHeight(); + + if(initialHeaderHeight > 0){ + measuredHeaderHeight = initialHeaderHeight; + + if(measuredHeaderHeight > 0 && state != State.REFRESHING){ + setHeaderPadding(-measuredHeaderHeight); + requestLayout(); + } + } + + getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + } + + private class PTROnItemClickListener implements OnItemClickListener{ + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long id){ + hasResetHeader = false; + + if(onItemClickListener != null && state == State.PULL_TO_REFRESH){ + // Passing up onItemClick. Correct position with the number of header views + onItemClickListener.onItemClick(adapterView, view, position - getHeaderViewsCount(), id); + } + } + } + + private class PTROnItemLongClickListener implements OnItemLongClickListener{ + + @Override + public boolean onItemLongClick(AdapterView adapterView, View view, int position, long id){ + hasResetHeader = false; + + if(onItemLongClickListener != null && state == State.PULL_TO_REFRESH){ + // Passing up onItemLongClick. Correct position with the number of header views + return onItemLongClickListener.onItemLongClick(adapterView, view, position - getHeaderViewsCount(), id); + } + + return false; + } + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/utils/Constants.java b/android-example/app/src/main/java/net/irext/ircontrol/utils/Constants.java old mode 100644 new mode 100755 index 1f14d0c..85bc164 --- a/android-example/app/src/main/java/net/irext/ircontrol/utils/Constants.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/utils/Constants.java @@ -1,18 +1,18 @@ -package net.irext.ircontrol.utils; - -/** - * Filename: Constants.java - * Revised: Date: 2017-04-03 - * Revision: Revision: 1.0 - *

- * Description: APP Constants - *

- * Revision log: - * 2017-04-03: created by strawmanbobi - */ -public class Constants { - - public static final String KEY_ADMIN_ID = "id"; - public static final String KEY_ADMIN_TOKEN = "token"; - -} +package net.irext.ircontrol.utils; + +/** + * Filename: Constants.java + * Revised: Date: 2017-04-03 + * Revision: Revision: 1.0 + *

+ * Description: APP Constants + *

+ * Revision log: + * 2017-04-03: created by strawmanbobi + */ +public class Constants { + + public static final String KEY_ADMIN_ID = "id"; + public static final String KEY_ADMIN_TOKEN = "token"; + +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/utils/FileUtils.java b/android-example/app/src/main/java/net/irext/ircontrol/utils/FileUtils.java old mode 100644 new mode 100755 index c028dde..a3ebde2 --- a/android-example/app/src/main/java/net/irext/ircontrol/utils/FileUtils.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/utils/FileUtils.java @@ -1,167 +1,167 @@ -package net.irext.ircontrol.utils; - -import android.os.Environment; -import android.util.Log; - -import java.io.*; - -/** - * Filename: FileUtils.java - * Revised: Date: 2017-04-14 - * Revision: Revision: 1.0 - *

- * Description: File operations - *

- * Revision log: - * 2017-04-14: created by strawmanbobi - */ -public class FileUtils { - - private static final String TAG = FileUtils.class.getSimpleName(); - - public static final String BASE_PATH = Environment.getExternalStorageDirectory() + File.separator + - "irext" + File.separator; - public static final String BIN_PATH = BASE_PATH + "bin" + File.separator; - - public static final String FILE_NAME_PREFIX = "irext_"; - public static final String FILE_NAME_EXT = ".ir"; - - public static boolean write(File file, InputStream inputStream) { - if (null == file) { - return false; - } - - if (null == inputStream) { - return false; - } - FileOutputStream outputStream = null; - byte[] buffer = new byte[1024]; - int read; - try { - outputStream = new FileOutputStream(file); - while ((read = inputStream.read(buffer, 0, 1024)) > 0) { - outputStream.write(buffer, 0, read); - } - outputStream.flush(); - return true; - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - inputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return false; - } - - public static File createBinaryFile(String fileName) { - if(createDirs(BASE_PATH) && createDirs(BIN_PATH)) { - String path = BIN_PATH + fileName; - File file = new File(path); - if (!file.exists()) { - try { - if (file.createNewFile()) { - return file; - } - } catch (IOException e) { - e.printStackTrace(); - } - } else { - Log.w(TAG, "binary file already exists ?"); - } - } else { - Log.e(TAG, "failed to create dirs"); - } - return null; - } - - private static boolean createDirs(String path) { - File file = new File(path); - return file.exists() || file.mkdir(); - } - - public static File getLocalFile(String fileName) { - File file = new File(BIN_PATH); - if (file.exists()) { - String path = BIN_PATH + fileName; - file = new File(path); - if (file.exists()) { - return file; - } - } - return null; - } - - public static byte[] getByteArrayFromFile(String fileName) { - File file; - try { - file = new File(fileName); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - - if (!file.exists() || !file.isFile() || !file.canRead()) { - return null; - } - - byte[] byteArray = null; - - try { - FileInputStream fis = new FileInputStream(file); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - int count; - byte buffer[] = new byte[512]; - while ((count = fis.read(buffer)) > 0) { - baos.write(buffer, 0, count); - } - byteArray = baos.toByteArray(); - fis.close(); - baos.flush(); - baos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - - return byteArray; - } - - private static void deleteAllFiles(File root) { - File files[] = root.listFiles(); - if (files != null) { - for (File f : files) { - if (f.isDirectory()) { - deleteAllFiles(f); - try { - if(!f.delete()) { - Log.w(TAG, "failed to delete file"); - } - } catch (Exception e) { - e.printStackTrace(); - } - } else { - if (f.exists()) { - deleteAllFiles(f); - try { - if(!f.delete()) { - Log.w(TAG, "failed to delete file"); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - } - } +package net.irext.ircontrol.utils; + +import android.os.Environment; +import android.util.Log; + +import java.io.*; + +/** + * Filename: FileUtils.java + * Revised: Date: 2017-04-14 + * Revision: Revision: 1.0 + *

+ * Description: File operations + *

+ * Revision log: + * 2017-04-14: created by strawmanbobi + */ +public class FileUtils { + + private static final String TAG = FileUtils.class.getSimpleName(); + + public static final String BASE_PATH = Environment.getExternalStorageDirectory() + File.separator + + "irext" + File.separator; + public static final String BIN_PATH = BASE_PATH + "bin" + File.separator; + + public static final String FILE_NAME_PREFIX = "irext_"; + public static final String FILE_NAME_EXT = ".ir"; + + public static boolean write(File file, InputStream inputStream) { + if (null == file) { + return false; + } + + if (null == inputStream) { + return false; + } + FileOutputStream outputStream = null; + byte[] buffer = new byte[1024]; + int read; + try { + outputStream = new FileOutputStream(file); + while ((read = inputStream.read(buffer, 0, 1024)) > 0) { + outputStream.write(buffer, 0, read); + } + outputStream.flush(); + return true; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return false; + } + + public static File createBinaryFile(String fileName) { + if(createDirs(BASE_PATH) && createDirs(BIN_PATH)) { + String path = BIN_PATH + fileName; + File file = new File(path); + if (!file.exists()) { + try { + if (file.createNewFile()) { + return file; + } + } catch (IOException e) { + e.printStackTrace(); + } + } else { + Log.w(TAG, "binary file already exists ?"); + } + } else { + Log.e(TAG, "failed to create dirs"); + } + return null; + } + + private static boolean createDirs(String path) { + File file = new File(path); + return file.exists() || file.mkdir(); + } + + public static File getLocalFile(String fileName) { + File file = new File(BIN_PATH); + if (file.exists()) { + String path = BIN_PATH + fileName; + file = new File(path); + if (file.exists()) { + return file; + } + } + return null; + } + + public static byte[] getByteArrayFromFile(String fileName) { + File file; + try { + file = new File(fileName); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + if (!file.exists() || !file.isFile() || !file.canRead()) { + return null; + } + + byte[] byteArray = null; + + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + int count; + byte buffer[] = new byte[512]; + while ((count = fis.read(buffer)) > 0) { + baos.write(buffer, 0, count); + } + byteArray = baos.toByteArray(); + fis.close(); + baos.flush(); + baos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + return byteArray; + } + + private static void deleteAllFiles(File root) { + File files[] = root.listFiles(); + if (files != null) { + for (File f : files) { + if (f.isDirectory()) { + deleteAllFiles(f); + try { + if(!f.delete()) { + Log.w(TAG, "failed to delete file"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + if (f.exists()) { + deleteAllFiles(f); + try { + if(!f.delete()) { + Log.w(TAG, "failed to delete file"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } } \ No newline at end of file diff --git a/android-example/app/src/main/java/net/irext/ircontrol/utils/MessageUtil.java b/android-example/app/src/main/java/net/irext/ircontrol/utils/MessageUtil.java old mode 100644 new mode 100755 index cbe1db6..8715693 --- a/android-example/app/src/main/java/net/irext/ircontrol/utils/MessageUtil.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/utils/MessageUtil.java @@ -1,38 +1,38 @@ -package net.irext.ircontrol.utils; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; - -/** - * Filename: MainFragment.java - * Revised: Date: 2017-04-08 - * Revision: Revision: 1.0 - *

- * Description: Post message util - *

- * Revision log: - * 2017-04-08: created by strawmanbobi - */ -public class MessageUtil { - - public static final String KEY_CMD = "CMD"; - - public static void postMessage(Handler handler, int message, Object parameter) { - Message msg = handler.obtainMessage(); - Bundle b = new Bundle(); - b.putInt(KEY_CMD, message); - msg.setData(b); - msg.obj = parameter; - handler.sendMessage(msg); - } - - public static void postMessage(Handler handler, int message) { - Message msg = handler.obtainMessage(); - Bundle b = new Bundle(); - b.putInt(KEY_CMD, message); - msg.setData(b); - msg.obj = null; - handler.sendMessage(msg); - } -} +package net.irext.ircontrol.utils; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; + +/** + * Filename: MainFragment.java + * Revised: Date: 2017-04-08 + * Revision: Revision: 1.0 + *

+ * Description: Post message util + *

+ * Revision log: + * 2017-04-08: created by strawmanbobi + */ +public class MessageUtil { + + public static final String KEY_CMD = "CMD"; + + public static void postMessage(Handler handler, int message, Object parameter) { + Message msg = handler.obtainMessage(); + Bundle b = new Bundle(); + b.putInt(KEY_CMD, message); + msg.setData(b); + msg.obj = parameter; + handler.sendMessage(msg); + } + + public static void postMessage(Handler handler, int message) { + Message msg = handler.obtainMessage(); + Bundle b = new Bundle(); + b.putInt(KEY_CMD, message); + msg.setData(b); + msg.obj = null; + handler.sendMessage(msg); + } +} diff --git a/android-example/app/src/main/java/net/irext/ircontrol/utils/SharedPreferenceUtil.java b/android-example/app/src/main/java/net/irext/ircontrol/utils/SharedPreferenceUtil.java old mode 100644 new mode 100755 index 5d6b8a7..e51fad7 --- a/android-example/app/src/main/java/net/irext/ircontrol/utils/SharedPreferenceUtil.java +++ b/android-example/app/src/main/java/net/irext/ircontrol/utils/SharedPreferenceUtil.java @@ -1,98 +1,98 @@ -package net.irext.ircontrol.utils; - - -import android.content.Context; -import android.content.SharedPreferences; - -import java.util.HashMap; - -/** - * Filename: SharedPreferenceUtil.java - * Revised: Date: 2017-04-05 - * Revision: Revision: 1.0 - *

- * Description: Wrapper of shared preference - *

- * Revision log: - * 2017-04-05: created by strawmanbobi - */ -public class SharedPreferenceUtil { - - private static final String TAG = SharedPreferenceUtil.class.getSimpleName(); - - private static final String _NAME = "irext"; - private static SharedPreferences mSharedPreferences; - private static SharedPreferences.Editor mEditor; - private static SharedPreferenceUtil mSharedPreferenceUtils = null; - private Context mContext; - - public SharedPreferenceUtil(Context context) { - this.mContext = context; - } - - public static SharedPreferenceUtil getInstance(Context context) { - if (null == mSharedPreferenceUtils) { - mSharedPreferenceUtils = new SharedPreferenceUtil(context); - mSharedPreferences = context.getSharedPreferences(_NAME, Context.MODE_PRIVATE); - mEditor = mSharedPreferences.edit(); - } - return mSharedPreferenceUtils; - } - - // shared preference operation - public boolean restore(String key, Object value) { - if (value instanceof Boolean) { - mEditor.putBoolean(key, (Boolean) value); - } else if (value instanceof Integer) { - mEditor.putInt(key, (Integer) value); - } else if (value instanceof Float) { - mEditor.putFloat(key, (Float) value); - } else if (value instanceof String) { - mEditor.putString(key, (String) value); - } else if (value instanceof Long) { - mEditor.putLong(key, (Long) value); - } - - return mEditor.commit(); - } - - public String getString(String key) { - return mSharedPreferences.getString(key, null); - } - - public String getString(String key, String defaultValue) { - return mSharedPreferences.getString(key, defaultValue); - } - - public boolean getBoolean(String key, boolean defaultFunc) { - if (null != mSharedPreferences) { - return mSharedPreferences.getBoolean(key, defaultFunc); - } else { - return false; - } - } - - public int getInt(String key, int defaultValue) { - return mSharedPreferences.getInt(key, defaultValue); - } - - public int getInt(String key) { - return mSharedPreferences.getInt(key, -1); - } - - public long getLong(String key) { - return mSharedPreferences.getLong(key, -1); - } - - public float getDouble(String key) { - return mSharedPreferences.getFloat(key, -1); - } - - public boolean saveKeyValueMap(HashMap kvMap) { - for (String s : kvMap.keySet()) { - mEditor.putString(s, kvMap.get(s)); - } - mEditor.commit(); - return true; - } -} +package net.irext.ircontrol.utils; + + +import android.content.Context; +import android.content.SharedPreferences; + +import java.util.HashMap; + +/** + * Filename: SharedPreferenceUtil.java + * Revised: Date: 2017-04-05 + * Revision: Revision: 1.0 + *

+ * Description: Wrapper of shared preference + *

+ * Revision log: + * 2017-04-05: created by strawmanbobi + */ +public class SharedPreferenceUtil { + + private static final String TAG = SharedPreferenceUtil.class.getSimpleName(); + + private static final String _NAME = "irext"; + private static SharedPreferences mSharedPreferences; + private static SharedPreferences.Editor mEditor; + private static SharedPreferenceUtil mSharedPreferenceUtils = null; + private Context mContext; + + public SharedPreferenceUtil(Context context) { + this.mContext = context; + } + + public static SharedPreferenceUtil getInstance(Context context) { + if (null == mSharedPreferenceUtils) { + mSharedPreferenceUtils = new SharedPreferenceUtil(context); + mSharedPreferences = context.getSharedPreferences(_NAME, Context.MODE_PRIVATE); + mEditor = mSharedPreferences.edit(); + } + return mSharedPreferenceUtils; + } + + // shared preference operation + public boolean restore(String key, Object value) { + if (value instanceof Boolean) { + mEditor.putBoolean(key, (Boolean) value); + } else if (value instanceof Integer) { + mEditor.putInt(key, (Integer) value); + } else if (value instanceof Float) { + mEditor.putFloat(key, (Float) value); + } else if (value instanceof String) { + mEditor.putString(key, (String) value); + } else if (value instanceof Long) { + mEditor.putLong(key, (Long) value); + } + + return mEditor.commit(); + } + + public String getString(String key) { + return mSharedPreferences.getString(key, null); + } + + public String getString(String key, String defaultValue) { + return mSharedPreferences.getString(key, defaultValue); + } + + public boolean getBoolean(String key, boolean defaultFunc) { + if (null != mSharedPreferences) { + return mSharedPreferences.getBoolean(key, defaultFunc); + } else { + return false; + } + } + + public int getInt(String key, int defaultValue) { + return mSharedPreferences.getInt(key, defaultValue); + } + + public int getInt(String key) { + return mSharedPreferences.getInt(key, -1); + } + + public long getLong(String key) { + return mSharedPreferences.getLong(key, -1); + } + + public float getDouble(String key) { + return mSharedPreferences.getFloat(key, -1); + } + + public boolean saveKeyValueMap(HashMap kvMap) { + for (String s : kvMap.keySet()) { + mEditor.putString(s, kvMap.get(s)); + } + mEditor.commit(); + return true; + } +} diff --git a/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so b/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so old mode 100644 new mode 100755 index 3acbc80..7b0fcf9 Binary files a/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so and b/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so b/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so old mode 100644 new mode 100755 index 8533e7e..029765f Binary files a/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so and b/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/armeabi/libirdecode.so b/android-example/app/src/main/jniLibs/armeabi/libirdecode.so old mode 100644 new mode 100755 index f2bdce6..e28eb77 Binary files a/android-example/app/src/main/jniLibs/armeabi/libirdecode.so and b/android-example/app/src/main/jniLibs/armeabi/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/mips/libirdecode.so b/android-example/app/src/main/jniLibs/mips/libirdecode.so old mode 100644 new mode 100755 index 7516169..976606a Binary files a/android-example/app/src/main/jniLibs/mips/libirdecode.so and b/android-example/app/src/main/jniLibs/mips/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/mips64/libirdecode.so b/android-example/app/src/main/jniLibs/mips64/libirdecode.so old mode 100644 new mode 100755 index dc180fc..9f67bdf Binary files a/android-example/app/src/main/jniLibs/mips64/libirdecode.so and b/android-example/app/src/main/jniLibs/mips64/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/x86/libirdecode.so b/android-example/app/src/main/jniLibs/x86/libirdecode.so old mode 100644 new mode 100755 index 7363b58..a483851 Binary files a/android-example/app/src/main/jniLibs/x86/libirdecode.so and b/android-example/app/src/main/jniLibs/x86/libirdecode.so differ diff --git a/android-example/app/src/main/jniLibs/x86_64/libirdecode.so b/android-example/app/src/main/jniLibs/x86_64/libirdecode.so old mode 100644 new mode 100755 index fd9ad42..fe61780 Binary files a/android-example/app/src/main/jniLibs/x86_64/libirdecode.so and b/android-example/app/src/main/jniLibs/x86_64/libirdecode.so differ diff --git a/android-example/app/src/main/res/layout/activity_control.xml b/android-example/app/src/main/res/layout/activity_control.xml old mode 100644 new mode 100755 index 5dbd9d4..45e7b2f --- a/android-example/app/src/main/res/layout/activity_control.xml +++ b/android-example/app/src/main/res/layout/activity_control.xml @@ -1,16 +1,16 @@ - - - - + + + + diff --git a/android-example/app/src/main/res/layout/activity_create.xml b/android-example/app/src/main/res/layout/activity_create.xml old mode 100644 new mode 100755 index 9c43703..7d21c1e --- a/android-example/app/src/main/res/layout/activity_create.xml +++ b/android-example/app/src/main/res/layout/activity_create.xml @@ -1,22 +1,22 @@ - - - - - - - + + + + + + + diff --git a/android-example/app/src/main/res/layout/activity_main.xml b/android-example/app/src/main/res/layout/activity_main.xml old mode 100644 new mode 100755 index bb2a779..b7afb55 --- a/android-example/app/src/main/res/layout/activity_main.xml +++ b/android-example/app/src/main/res/layout/activity_main.xml @@ -1,29 +1,29 @@ - - - - - - - - + + + + + + + + diff --git a/android-example/app/src/main/res/layout/fragment_brand.xml b/android-example/app/src/main/res/layout/fragment_brand.xml old mode 100644 new mode 100755 index 2e28211..067b3ff --- a/android-example/app/src/main/res/layout/fragment_brand.xml +++ b/android-example/app/src/main/res/layout/fragment_brand.xml @@ -1,12 +1,12 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/fragment_category.xml b/android-example/app/src/main/res/layout/fragment_category.xml old mode 100644 new mode 100755 index 8e05636..66542d0 --- a/android-example/app/src/main/res/layout/fragment_category.xml +++ b/android-example/app/src/main/res/layout/fragment_category.xml @@ -1,12 +1,12 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/fragment_city.xml b/android-example/app/src/main/res/layout/fragment_city.xml old mode 100644 new mode 100755 index 95a7bcb..85d053a --- a/android-example/app/src/main/res/layout/fragment_city.xml +++ b/android-example/app/src/main/res/layout/fragment_city.xml @@ -1,12 +1,12 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/fragment_control.xml b/android-example/app/src/main/res/layout/fragment_control.xml old mode 100644 new mode 100755 index 4a279bd..7b38a14 --- a/android-example/app/src/main/res/layout/fragment_control.xml +++ b/android-example/app/src/main/res/layout/fragment_control.xml @@ -1,212 +1,212 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/fragment_index.xml b/android-example/app/src/main/res/layout/fragment_index.xml old mode 100644 new mode 100755 index 4bd088b..efb3ee4 --- a/android-example/app/src/main/res/layout/fragment_index.xml +++ b/android-example/app/src/main/res/layout/fragment_index.xml @@ -1,12 +1,12 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/fragment_main.xml b/android-example/app/src/main/res/layout/fragment_main.xml old mode 100644 new mode 100755 index eae4b3d..7227578 --- a/android-example/app/src/main/res/layout/fragment_main.xml +++ b/android-example/app/src/main/res/layout/fragment_main.xml @@ -1,30 +1,30 @@ - - - - - - - - + + + + + + + + diff --git a/android-example/app/src/main/res/layout/fragment_operator.xml b/android-example/app/src/main/res/layout/fragment_operator.xml old mode 100644 new mode 100755 index ad305cf..a0b31c6 --- a/android-example/app/src/main/res/layout/fragment_operator.xml +++ b/android-example/app/src/main/res/layout/fragment_operator.xml @@ -1,12 +1,12 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_brand.xml b/android-example/app/src/main/res/layout/item_brand.xml old mode 100644 new mode 100755 index 39aa776..b14c96f --- a/android-example/app/src/main/res/layout/item_brand.xml +++ b/android-example/app/src/main/res/layout/item_brand.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_category.xml b/android-example/app/src/main/res/layout/item_category.xml old mode 100644 new mode 100755 index 1891f6e..e3c9589 --- a/android-example/app/src/main/res/layout/item_category.xml +++ b/android-example/app/src/main/res/layout/item_category.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_city.xml b/android-example/app/src/main/res/layout/item_city.xml old mode 100644 new mode 100755 index f4b5345..a4985a8 --- a/android-example/app/src/main/res/layout/item_city.xml +++ b/android-example/app/src/main/res/layout/item_city.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_index.xml b/android-example/app/src/main/res/layout/item_index.xml old mode 100644 new mode 100755 index fab5b9e..803fdf8 --- a/android-example/app/src/main/res/layout/item_index.xml +++ b/android-example/app/src/main/res/layout/item_index.xml @@ -1,29 +1,29 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_operator.xml b/android-example/app/src/main/res/layout/item_operator.xml old mode 100644 new mode 100755 index 4eb6a7a..9d23fdd --- a/android-example/app/src/main/res/layout/item_operator.xml +++ b/android-example/app/src/main/res/layout/item_operator.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/item_remote.xml b/android-example/app/src/main/res/layout/item_remote.xml old mode 100644 new mode 100755 index 960b3bd..782fec0 --- a/android-example/app/src/main/res/layout/item_remote.xml +++ b/android-example/app/src/main/res/layout/item_remote.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/layout/ptr_header.xml b/android-example/app/src/main/res/layout/ptr_header.xml old mode 100644 new mode 100755 index 4c855b1..9419057 --- a/android-example/app/src/main/res/layout/ptr_header.xml +++ b/android-example/app/src/main/res/layout/ptr_header.xml @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/android-example/app/src/main/res/menu/menu_main.xml b/android-example/app/src/main/res/menu/menu_main.xml old mode 100644 new mode 100755 index 28514e8..32b82d9 --- a/android-example/app/src/main/res/menu/menu_main.xml +++ b/android-example/app/src/main/res/menu/menu_main.xml @@ -1,9 +1,9 @@ -

- - + + + diff --git a/android-example/app/src/main/res/mipmap-mdpi/ptr_pulltorefresh_arrow.png b/android-example/app/src/main/res/mipmap-mdpi/ptr_pulltorefresh_arrow.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_back.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_back.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_custom.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_custom.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_down.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_down.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_home.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_home.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_left.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_left.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_menu.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_menu.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_minus.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_minus.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_ok.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_ok.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_plus.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_plus.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_power.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_power.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_right.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_right.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/button_up.png b/android-example/app/src/main/res/mipmap-xxhdpi/button_up.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/icon_add.png b/android-example/app/src/main/res/mipmap-xxhdpi/icon_add.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/ir_logo.png b/android-example/app/src/main/res/mipmap-xxhdpi/ir_logo.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/mipmap-xxhdpi/ptr_pulltorefresh_arrow.png b/android-example/app/src/main/res/mipmap-xxhdpi/ptr_pulltorefresh_arrow.png old mode 100644 new mode 100755 diff --git a/android-example/app/src/main/res/values-v21/styles.xml b/android-example/app/src/main/res/values-v21/styles.xml old mode 100644 new mode 100755 index 6b23c86..30c864c --- a/android-example/app/src/main/res/values-v21/styles.xml +++ b/android-example/app/src/main/res/values-v21/styles.xml @@ -1,8 +1,8 @@ - - - + + + diff --git a/android-example/app/src/main/res/values-w820dp/dimens.xml b/android-example/app/src/main/res/values-w820dp/dimens.xml old mode 100644 new mode 100755 index 63fc816..62df187 --- a/android-example/app/src/main/res/values-w820dp/dimens.xml +++ b/android-example/app/src/main/res/values-w820dp/dimens.xml @@ -1,6 +1,6 @@ - - - 64dp - + + + 64dp + diff --git a/android-example/app/src/main/res/values-zh-rCN/strings.xml b/android-example/app/src/main/res/values-zh-rCN/strings.xml old mode 100644 new mode 100755 index 8031d91..f1d55df --- a/android-example/app/src/main/res/values-zh-rCN/strings.xml +++ b/android-example/app/src/main/res/values-zh-rCN/strings.xml @@ -1,33 +1,33 @@ - - 红外遥控 - 红外遥控 - 设置 - - - 下拉刷新 - 放开以刷新\r\n(本例程只读取前20个数据) - 刷新... - 已刷新: %1$s - - - 点击 + 安装遥控 - - - 电视机 - 保存 - 取消 - - - 电源 - 返回 - 主页 - 菜单 - - - - - 确定 - + - - - - + + 红外遥控 + 红外遥控 + 设置 + + + 下拉刷新 + 放开以刷新\r\n(本例程只读取前20个数据) + 刷新... + 已刷新: %1$s + + + 点击 + 安装遥控 + + + 电视机 + 保存 + 取消 + + + 电源 + 返回 + 主页 + 菜单 + + + + + 确定 + + + - + + diff --git a/android-example/app/src/main/res/values/colors.xml b/android-example/app/src/main/res/values/colors.xml old mode 100644 new mode 100755 index 60626ba..01b2171 --- a/android-example/app/src/main/res/values/colors.xml +++ b/android-example/app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - - - #3F3F3F - #000000 - #3FAF2F - + + + #3F3F3F + #000000 + #3FAF2F + diff --git a/android-example/app/src/main/res/values/dimens.xml b/android-example/app/src/main/res/values/dimens.xml old mode 100644 new mode 100755 index 812cb7b..f31eb24 --- a/android-example/app/src/main/res/values/dimens.xml +++ b/android-example/app/src/main/res/values/dimens.xml @@ -1,6 +1,6 @@ - - - 16dp - 16dp - 16dp - + + + 16dp + 16dp + 16dp + diff --git a/android-example/app/src/main/res/values/ptr_default_style.xml b/android-example/app/src/main/res/values/ptr_default_style.xml old mode 100644 new mode 100755 index 00c2720..22eba9d --- a/android-example/app/src/main/res/values/ptr_default_style.xml +++ b/android-example/app/src/main/res/values/ptr_default_style.xml @@ -1,56 +1,56 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android-example/app/src/main/res/values/strings.xml b/android-example/app/src/main/res/values/strings.xml old mode 100644 new mode 100755 index 09732d6..e243b31 --- a/android-example/app/src/main/res/values/strings.xml +++ b/android-example/app/src/main/res/values/strings.xml @@ -1,33 +1,33 @@ - - IRControl - IRControl - Settings - - - Pull to refresh - Release to refresh - Refreshing... - Updated: %1$s - - - Tap + to create new remote control - - - TV - Save - Cancel - - - POWER - BACK - HOME - MENU - UP - DOWN - LEFT - RIGHT - OK - + - - - - + + IRControl + IRControl + Settings + + + Pull to refresh + Release to refresh + Refreshing... + Updated: %1$s + + + Tap + to create new remote control + + + TV + Save + Cancel + + + POWER + BACK + HOME + MENU + UP + DOWN + LEFT + RIGHT + OK + + + - + + diff --git a/android-example/app/src/main/res/values/styles.xml b/android-example/app/src/main/res/values/styles.xml old mode 100644 new mode 100755 index 16dbab3..3e06294 --- a/android-example/app/src/main/res/values/styles.xml +++ b/android-example/app/src/main/res/values/styles.xml @@ -1,17 +1,17 @@ - - - - - - + +