Commit f905cc4105f59921e7840dbd80421509955603fe
1 parent
083363adac
Exists in
master
SDK has update to 5.1.0
Showing 17 changed files with 768 additions and 63 deletions Side-by-side Diff
- README.md
- app/build.gradle
- app/src/main/AndroidManifest.xml
- app/src/main/java/com/gump/passport/demo/AppCompatPreferenceActivity.java
- app/src/main/java/com/gump/passport/demo/GameApplication.java
- app/src/main/java/com/gump/passport/demo/MainActivity.java
- app/src/main/java/com/gump/passport/demo/SettingsActivity.java
- app/src/main/res/drawable/ic_attach_money_black_24dp.xml
- app/src/main/res/drawable/ic_build_black_24dp.xml
- app/src/main/res/drawable/ic_text_fields_black_24dp.xml
- app/src/main/res/layout/activity_main.xml
- app/src/main/res/menu/main.xml
- app/src/main/res/values/strings.xml
- app/src/main/res/xml/pref_general.xml
- app/src/main/res/xml/pref_headers.xml
- app/src/main/res/xml/pref_param.xml
- app/src/main/res/xml/pref_payment.xml
README.md
| 1 | 1 | # Gump SDK 5 for Android接入文档 | 
| 2 | 2 | |
| 3 | -V5.0.0 | |
| 4 | -2018年11月02日 | |
| 3 | +V5.1.0 | |
| 4 | +2019年03月18日 | |
| 5 | 5 | |
| 6 | 6 | ## 版本概述 | 
| 7 | 7 | |
| ... | ... | @@ -22,11 +22,11 @@ V5.0.0 | 
| 22 | 22 | } | 
| 23 | 23 | dependencies { | 
| 24 | 24 | //基础功能依赖,必须 | 
| 25 | - implementation 'com.gump:base:5.0.0' | |
| 25 | + implementation 'com.gump:base:5.1.0' | |
| 26 | 26 | //登录功能依赖 | 
| 27 | - implementation 'com.gump:Passport:5.0.0' | |
| 27 | + implementation 'com.gump:Passport:5.1.0' | |
| 28 | 28 | //支付功能依赖 | 
| 29 | - implementation 'com.gump:Payment:5.0.0' | |
| 29 | + implementation 'com.gump:Payment:5.1.0' | |
| 30 | 30 | } | 
| 31 | 31 | |
| 32 | 32 | ### 2.修改AndroidManifest.xml文件 | 
| ... | ... | @@ -52,9 +52,6 @@ V5.0.0 | 
| 52 | 52 | android:value="@integer/google_play_services_version"/> | 
| 53 | 53 | |
| 54 | 54 | ### 3.1 初始化与配置 | 
| 55 | -*横竖屏控制,默认为横屏,参数为false即为竖屏 | |
| 56 | - | |
| 57 | - SDKAgent.getSettings().setScreenLandscape(true); | |
| 58 | 55 | |
| 59 | 56 | *若要使用V4版支付请设置 | 
| 60 | 57 | |
| ... | ... | @@ -65,6 +62,14 @@ V5.0.0 | 
| 65 | 62 | SDKAgent.init(Context,Appid,ChannelId); | 
| 66 | 63 | |
| 67 | 64 | ### 3.2 登录接入 | 
| 65 | +AndroidManifest.xml配置: | |
| 66 | + | |
| 67 | + <activity | |
| 68 | + android:name="com.gump.gpassport.GumpLoginActivity" | |
| 69 | + android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" | |
| 70 | + android:launchMode="singleTask" | |
| 71 | + android:screenOrientation="behind" | |
| 72 | + android:theme="@style/Theme.AppCompat.Light.NoActionBar"/> | |
| 68 | 73 | 构建Passport实例 | 
| 69 | 74 | |
| 70 | 75 | passport = new Passport.Builder().context(Context).setListener(StateListener).build(); | 
| ... | ... | @@ -92,13 +97,25 @@ V5.0.0 | 
| 92 | 97 | super.onActivityResult(requestCode, resultCode, data); | 
| 93 | 98 | } | 
| 94 | 99 | |
| 95 | -### 3.3 支付接入 | |
| 100 | +### 3.3 账号绑定 | |
| 101 | + | |
| 102 | + passport.link(Activity); | |
| 103 | + | |
| 104 | +### 3.4 账号切换 | |
| 105 | +切换到系统账号 | |
| 106 | + | |
| 107 | + passport.switchAccount(PlayerType.GamePlayer); | |
| 108 | +切换gump账号 | |
| 109 | + | |
| 110 | + passport.switchAccount(PlayerType.GumpPlayer); | |
| 111 | +### 3.5 支付接入 | |
| 96 | 112 | 注册相应的Activity,具体如下: | 
| 97 | 113 | |
| 98 | 114 | <activity | 
| 99 | 115 | android:name="com.gumptech.sdk.PaymentActivity" | 
| 100 | 116 | android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" | 
| 101 | 117 | android:launchMode="singleTask" | 
| 118 | + android:screenOrientation="behind" | |
| 102 | 119 | android:theme="@android:style/Theme.Translucent.NoTitleBar" > | 
| 103 | 120 | <intent-filter> | 
| 104 | 121 | <category android:name="android.intent.category.DEFAULT" /> | 
app/build.gradle
| ... | ... | @@ -5,11 +5,12 @@ android { | 
| 5 | 5 | compileSdkVersion 27 | 
| 6 | 6 | defaultConfig { | 
| 7 | 7 | applicationId "com.gump.passport.demo" | 
| 8 | - minSdkVersion 14 | |
| 8 | + minSdkVersion 15 | |
| 9 | 9 | targetSdkVersion 27 | 
| 10 | - versionCode 2 | |
| 11 | - versionName "1.0.1" | |
| 10 | + versionCode 9 | |
| 11 | + versionName "1.0.9" | |
| 12 | 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | 
| 13 | + vectorDrawables.useSupportLibrary = true | |
| 13 | 14 | } | 
| 14 | 15 | buildTypes { | 
| 15 | 16 | release { | 
| ... | ... | @@ -33,15 +34,17 @@ android { | 
| 33 | 34 | dependencies { | 
| 34 | 35 | implementation fileTree(dir: 'libs', include: ['*.jar']) | 
| 35 | 36 | implementation 'com.android.support:appcompat-v7:27.1.1' | 
| 37 | + implementation 'com.android.support:support-v4:27.1.1' | |
| 38 | + implementation 'com.android.support:support-vector-drawable:27.1.1' | |
| 36 | 39 | testImplementation 'junit:junit:4.12' | 
| 37 | 40 | |
| 38 | 41 | //基础功能依赖,必须 | 
| 39 | - implementation 'com.gump:base:5.0.0' | |
| 42 | + implementation 'com.gump:base:5.1.0' | |
| 40 | 43 | // implementation project(':base') | 
| 41 | - //登录功能依赖 | |
| 42 | - implementation 'com.gump:Passport:5.0.0' | |
| 44 | +// 登录功能依赖 | |
| 45 | + implementation 'com.gump:Passport:5.1.0' | |
| 43 | 46 | // implementation project(':passport') | 
| 44 | 47 | //支付功能依赖 | 
| 45 | - implementation 'com.gump:Payment:5.0.0' | |
| 48 | + implementation 'com.gump:Payment:5.1.0' | |
| 46 | 49 | // implementation project(':payment') | 
| 47 | 50 | } | 
app/src/main/AndroidManifest.xml
| ... | ... | @@ -8,7 +8,9 @@ | 
| 8 | 8 | |
| 9 | 9 | <!-- VERY IMPORTANT! Don't forget this permission, or in-app billing won't work. --> | 
| 10 | 10 | <uses-permission android:name="com.android.vending.BILLING"/> | 
| 11 | + | |
| 11 | 12 | <application | 
| 13 | + android:name=".GameApplication" | |
| 12 | 14 | android:allowBackup="true" | 
| 13 | 15 | android:icon="@mipmap/ic_launcher" | 
| 14 | 16 | android:label="@string/app_name" | 
| ... | ... | @@ -29,17 +31,17 @@ | 
| 29 | 31 | <category android:name="android.intent.category.LAUNCHER"/> | 
| 30 | 32 | </intent-filter> | 
| 31 | 33 | </activity> | 
| 32 | - | |
| 33 | 34 | <activity | 
| 34 | 35 | android:name="com.gump.payment.PaymentActivity" | 
| 35 | 36 | android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" | 
| 37 | + android:screenOrientation="behind" | |
| 36 | 38 | android:launchMode="singleTask" | 
| 37 | - android:theme="@android:style/Theme.Light.NoTitleBar"> | |
| 39 | + android:theme="@style/Theme.Translucent"> | |
| 38 | 40 | <intent-filter> | 
| 39 | - <category android:name="android.intent.category.DEFAULT"/> | |
| 40 | - | |
| 41 | 41 | <action android:name="android.intent.action.VIEW"/> | 
| 42 | 42 | |
| 43 | + <category android:name="android.intent.category.DEFAULT"/> | |
| 44 | + | |
| 43 | 45 | <category android:name="android.intent.category.BROWSABLE"/> | 
| 44 | 46 | |
| 45 | 47 | <data | 
| ... | ... | @@ -47,6 +49,20 @@ | 
| 47 | 49 | android:scheme="gump100"/> | 
| 48 | 50 | </intent-filter> | 
| 49 | 51 | </activity> | 
| 52 | + <activity | |
| 53 | + android:name="com.gump.gpassport.GumpLoginActivity" | |
| 54 | + android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" | |
| 55 | + android:launchMode="singleTask" | |
| 56 | + android:screenOrientation="behind" | |
| 57 | + android:theme="@style/Theme.AppCompat.Light.NoActionBar"/> | |
| 58 | + <activity | |
| 59 | + android:name=".SettingsActivity" | |
| 60 | + android:label="@string/title_activity_settings" | |
| 61 | + android:parentActivityName=".MainActivity"> | |
| 62 | + <meta-data | |
| 63 | + android:name="android.support.PARENT_ACTIVITY" | |
| 64 | + android:value="com.gump.passport.demo.MainActivity"/> | |
| 65 | + </activity> | |
| 50 | 66 | </application> | 
| 51 | 67 | |
| 52 | 68 | </manifest> | 
| 53 | 69 | \ No newline at end of file | 
app/src/main/java/com/gump/passport/demo/AppCompatPreferenceActivity.java
| ... | ... | @@ -0,0 +1,109 @@ | 
| 1 | +package com.gump.passport.demo; | |
| 2 | + | |
| 3 | +import android.content.res.Configuration; | |
| 4 | +import android.os.Bundle; | |
| 5 | +import android.preference.PreferenceActivity; | |
| 6 | +import android.support.annotation.LayoutRes; | |
| 7 | +import android.support.annotation.Nullable; | |
| 8 | +import android.support.v7.app.ActionBar; | |
| 9 | +import android.support.v7.app.AppCompatDelegate; | |
| 10 | +import android.support.v7.widget.Toolbar; | |
| 11 | +import android.view.MenuInflater; | |
| 12 | +import android.view.View; | |
| 13 | +import android.view.ViewGroup; | |
| 14 | + | |
| 15 | +/** | |
| 16 | + * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls | |
| 17 | + * to be used with AppCompat. | |
| 18 | + */ | |
| 19 | +public abstract class AppCompatPreferenceActivity extends PreferenceActivity { | |
| 20 | + | |
| 21 | + private AppCompatDelegate mDelegate; | |
| 22 | + | |
| 23 | + @Override | |
| 24 | + protected void onCreate(Bundle savedInstanceState) { | |
| 25 | + getDelegate().installViewFactory(); | |
| 26 | + getDelegate().onCreate(savedInstanceState); | |
| 27 | + super.onCreate(savedInstanceState); | |
| 28 | + } | |
| 29 | + | |
| 30 | + @Override | |
| 31 | + protected void onPostCreate(Bundle savedInstanceState) { | |
| 32 | + super.onPostCreate(savedInstanceState); | |
| 33 | + getDelegate().onPostCreate(savedInstanceState); | |
| 34 | + } | |
| 35 | + | |
| 36 | + public ActionBar getSupportActionBar() { | |
| 37 | + return getDelegate().getSupportActionBar(); | |
| 38 | + } | |
| 39 | + | |
| 40 | + public void setSupportActionBar(@Nullable Toolbar toolbar) { | |
| 41 | + getDelegate().setSupportActionBar(toolbar); | |
| 42 | + } | |
| 43 | + | |
| 44 | + @Override | |
| 45 | + public MenuInflater getMenuInflater() { | |
| 46 | + return getDelegate().getMenuInflater(); | |
| 47 | + } | |
| 48 | + | |
| 49 | + @Override | |
| 50 | + public void setContentView(@LayoutRes int layoutResID) { | |
| 51 | + getDelegate().setContentView(layoutResID); | |
| 52 | + } | |
| 53 | + | |
| 54 | + @Override | |
| 55 | + public void setContentView(View view) { | |
| 56 | + getDelegate().setContentView(view); | |
| 57 | + } | |
| 58 | + | |
| 59 | + @Override | |
| 60 | + public void setContentView(View view, ViewGroup.LayoutParams params) { | |
| 61 | + getDelegate().setContentView(view, params); | |
| 62 | + } | |
| 63 | + | |
| 64 | + @Override | |
| 65 | + public void addContentView(View view, ViewGroup.LayoutParams params) { | |
| 66 | + getDelegate().addContentView(view, params); | |
| 67 | + } | |
| 68 | + | |
| 69 | + @Override | |
| 70 | + protected void onPostResume() { | |
| 71 | + super.onPostResume(); | |
| 72 | + getDelegate().onPostResume(); | |
| 73 | + } | |
| 74 | + | |
| 75 | + @Override | |
| 76 | + protected void onTitleChanged(CharSequence title, int color) { | |
| 77 | + super.onTitleChanged(title, color); | |
| 78 | + getDelegate().setTitle(title); | |
| 79 | + } | |
| 80 | + | |
| 81 | + @Override | |
| 82 | + public void onConfigurationChanged(Configuration newConfig) { | |
| 83 | + super.onConfigurationChanged(newConfig); | |
| 84 | + getDelegate().onConfigurationChanged(newConfig); | |
| 85 | + } | |
| 86 | + | |
| 87 | + @Override | |
| 88 | + protected void onStop() { | |
| 89 | + super.onStop(); | |
| 90 | + getDelegate().onStop(); | |
| 91 | + } | |
| 92 | + | |
| 93 | + @Override | |
| 94 | + protected void onDestroy() { | |
| 95 | + super.onDestroy(); | |
| 96 | + getDelegate().onDestroy(); | |
| 97 | + } | |
| 98 | + | |
| 99 | + public void invalidateOptionsMenu() { | |
| 100 | + getDelegate().invalidateOptionsMenu(); | |
| 101 | + } | |
| 102 | + | |
| 103 | + private AppCompatDelegate getDelegate() { | |
| 104 | + if (mDelegate == null) { | |
| 105 | + mDelegate = AppCompatDelegate.create(this, null); | |
| 106 | + } | |
| 107 | + return mDelegate; | |
| 108 | + } | |
| 109 | +} | 
app/src/main/java/com/gump/passport/demo/GameApplication.java
app/src/main/java/com/gump/passport/demo/MainActivity.java
| 1 | 1 | package com.gump.passport.demo; | 
| 2 | 2 | |
| 3 | 3 | import android.content.Intent; | 
| 4 | +import android.content.SharedPreferences; | |
| 4 | 5 | import android.os.Bundle; | 
| 6 | +import android.preference.PreferenceManager; | |
| 5 | 7 | import android.support.v7.app.AppCompatActivity; | 
| 6 | 8 | import android.util.Log; | 
| 9 | +import android.view.Menu; | |
| 10 | +import android.view.MenuItem; | |
| 7 | 11 | import android.view.View; | 
| 12 | +import android.widget.Button; | |
| 8 | 13 | import android.widget.TextView; | 
| 14 | +import android.widget.Toast; | |
| 9 | 15 | |
| 10 | 16 | import com.gump.PaymentVersion; | 
| 11 | 17 | import com.gump.SDKAgent; | 
| 12 | 18 | import com.gump.gpassport.Actions; | 
| 13 | 19 | import com.gump.gpassport.GamePlayer; | 
| 14 | 20 | import com.gump.gpassport.Passport; | 
| 21 | +import com.gump.gpassport.PlayerType; | |
| 15 | 22 | import com.gump.gpassport.StateListener; | 
| 16 | 23 | import com.gump.payment.Payment; | 
| 17 | -import com.gump.payment.PurchaseCallback; | |
| 24 | +import com.gump.payment.callback.PurchaseCallback; | |
| 25 | +import com.gump.payment.callback.ResultCallback; | |
| 18 | 26 | |
| 19 | 27 | public class MainActivity extends AppCompatActivity implements StateListener, PurchaseCallback { | 
| 20 | 28 | |
| 21 | - private static final String TAG = "Gump Demo"; | |
| 22 | - | |
| 29 | + private static final String TAG = "MainActivity"; | |
| 23 | 30 | private Passport passport; | 
| 24 | - | |
| 25 | 31 | private TextView tvInfo; | 
| 32 | + private View mainLayout; | |
| 33 | + private Button btnLogin; | |
| 34 | + | |
| 35 | + private GamePlayer currentPlayer; | |
| 26 | 36 | |
| 37 | + private Button btnIab; | |
| 38 | + private Button btnPay; | |
| 39 | + private Button btnCheck; | |
| 27 | 40 | |
| 28 | 41 | @Override | 
| 29 | 42 | protected void onCreate(Bundle savedInstanceState) { | 
| 30 | 43 | super.onCreate(savedInstanceState); | 
| 31 | 44 | setContentView(R.layout.activity_main); | 
| 32 | - SDKAgent.init(getApplicationContext(), "100", "1000"); | |
| 33 | - | |
| 34 | - SDKAgent.getSettings().setDebug(true); | |
| 35 | - SDKAgent.getSettings().setScreenLandscape(true); | |
| 36 | - SDKAgent.getSettings().setPaymentVersion(PaymentVersion.V4); | |
| 37 | 45 | |
| 38 | 46 | tvInfo = findViewById(R.id.info); | 
| 39 | - passport = new Passport.Builder().context(this).setListener(this).build(); | |
| 40 | - findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { | |
| 47 | + mainLayout = findViewById(R.id.main_layout); | |
| 48 | + btnLogin = findViewById(R.id.login); | |
| 49 | + btnLogin.setOnClickListener(new View.OnClickListener() { | |
| 41 | 50 | @Override | 
| 42 | 51 | public void onClick(View v) { | 
| 43 | 52 | passport.signIn(MainActivity.this); | 
| 44 | 53 | } | 
| 45 | 54 | }); | 
| 46 | 55 | |
| 47 | - | |
| 48 | - findViewById(R.id.iab).setOnClickListener(new View.OnClickListener() { | |
| 56 | + btnCheck = mainLayout.findViewById(R.id.check); | |
| 57 | + btnCheck.setOnClickListener(new View.OnClickListener() { | |
| 49 | 58 | @Override | 
| 50 | 59 | public void onClick(View v) { | 
| 51 | - Bundle payInfo = new Bundle(); | |
| 52 | - payInfo.putString("product", "180010"); | |
| 53 | - payInfo.putFloat("amount", 0.1f); | |
| 54 | - payInfo.putString("extraInfo", "This is demo!"); | |
| 55 | - payInfo.putString("serverId", "100"); | |
| 56 | - payInfo.putString("roleId", "41080"); | |
| 60 | + initPay(); | |
| 61 | + } | |
| 62 | + }); | |
| 63 | + btnIab = mainLayout.findViewById(R.id.iab); | |
| 64 | + btnIab.setOnClickListener(new View.OnClickListener() { | |
| 65 | + @Override | |
| 66 | + public void onClick(View v) { | |
| 67 | + Bundle payInfo = assemblePayBundle(); | |
| 57 | 68 | Payment.launchIAP(MainActivity.this, payInfo, MainActivity.this); | 
| 58 | 69 | } | 
| 59 | 70 | }); | 
| 60 | 71 | |
| 61 | - findViewById(R.id.pay).setOnClickListener(new View.OnClickListener() { | |
| 72 | + btnPay = mainLayout.findViewById(R.id.pay); | |
| 73 | + btnPay.setOnClickListener(new View.OnClickListener() { | |
| 62 | 74 | @Override | 
| 63 | 75 | public void onClick(View v) { | 
| 64 | - Bundle payInfo = new Bundle(); | |
| 65 | - payInfo.putString("product", "wa2"); | |
| 66 | - payInfo.putFloat("amount", 0.1f); | |
| 67 | - payInfo.putString("extraInfo", "This is demo!"); | |
| 68 | - payInfo.putString("serverId", "100"); | |
| 69 | - payInfo.putString("roleId", "41080"); | |
| 76 | + Bundle payInfo = assemblePayBundle(); | |
| 70 | 77 | Payment.pay(MainActivity.this, payInfo, MainActivity.this); | 
| 71 | 78 | } | 
| 72 | 79 | }); | 
| 80 | + | |
| 81 | + mainLayout.findViewById(R.id.bind).setOnClickListener(new View.OnClickListener() { | |
| 82 | + @Override | |
| 83 | + public void onClick(View v) { | |
| 84 | + passport.link(MainActivity.this); | |
| 85 | + } | |
| 86 | + }); | |
| 87 | + | |
| 88 | + mainLayout.findViewById(R.id.switch_acc).setOnClickListener(new View.OnClickListener() { | |
| 89 | + @Override | |
| 90 | + public void onClick(View v) { | |
| 91 | + passport.switchAccount(PlayerType.GamePlayer); | |
| 92 | + } | |
| 93 | + }); | |
| 94 | + | |
| 95 | + mainLayout.findViewById(R.id.switch_gump).setOnClickListener(new View.OnClickListener() { | |
| 96 | + @Override | |
| 97 | + public void onClick(View v) { | |
| 98 | + passport.switchAccount(PlayerType.GumpPlayer); | |
| 99 | + } | |
| 100 | + }); | |
| 101 | + | |
| 102 | + | |
| 103 | + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); | |
| 104 | + boolean mode = sp.getBoolean("key_mode", true); | |
| 105 | + String appId = sp.getString("key_appid", "100"); | |
| 106 | + String channel = sp.getString("key_channel", "1000"); | |
| 107 | + String payVersion = sp.getString("key_pay_version", "V3"); | |
| 108 | + | |
| 109 | + SDKAgent.init(getApplicationContext(), appId, channel); | |
| 110 | + SDKAgent.getSettings().setDebug(mode); | |
| 111 | + SDKAgent.getSettings().setPaymentVersion(PaymentVersion.valueOf(payVersion)); | |
| 112 | + | |
| 113 | + passport = new Passport.Builder().context(MainActivity.this).setListener(MainActivity.this).build(); | |
| 114 | + | |
| 115 | + } | |
| 116 | + | |
| 117 | + private Bundle assemblePayBundle() { | |
| 118 | + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); | |
| 119 | + Bundle payInfo = new Bundle(); | |
| 120 | + payInfo.putString("product", sp.getString("key_product", "10080")); | |
| 121 | + payInfo.putFloat("amount", sp.getFloat("key_amount", 0.1f)); | |
| 122 | + payInfo.putString("extraInfo", sp.getString("key_extra", "test")); | |
| 123 | + payInfo.putString("serverId", sp.getString("key_server_id", "100")); | |
| 124 | + payInfo.putString("roleId", sp.getString("key_role_id", "41080")); | |
| 125 | + payInfo.putString("currency", sp.getString("key_currency", "THB")); | |
| 126 | + return payInfo; | |
| 127 | + } | |
| 128 | + | |
| 129 | + | |
| 130 | + private void initPay() { | |
| 131 | + btnCheck.setEnabled(false); | |
| 132 | + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); | |
| 133 | + String serverId = sp.getString("key_server_id", "100"); | |
| 134 | + String roleId = sp.getString("key_role_id", "41080"); | |
| 135 | + Payment.shouldUseCoPay(this, serverId, roleId, new ResultCallback() { | |
| 136 | + @Override | |
| 137 | + public void onResult(boolean isRisk) { | |
| 138 | + btnCheck.setEnabled(true); | |
| 139 | + btnIab.setEnabled(isRisk); | |
| 140 | + btnPay.setEnabled(!isRisk); | |
| 141 | + } | |
| 142 | + }); | |
| 143 | + } | |
| 144 | + | |
| 145 | + @Override | |
| 146 | + public boolean onCreateOptionsMenu(Menu menu) { | |
| 147 | + getMenuInflater().inflate(R.menu.main, menu); | |
| 148 | + return super.onCreateOptionsMenu(menu); | |
| 149 | + } | |
| 150 | + | |
| 151 | + @Override | |
| 152 | + public boolean onOptionsItemSelected(MenuItem item) { | |
| 153 | + if (item.getItemId() == R.id.setting) { | |
| 154 | + Intent intent = new Intent(this, SettingsActivity.class); | |
| 155 | + startActivity(intent); | |
| 156 | + return true; | |
| 157 | + } | |
| 158 | + return super.onOptionsItemSelected(item); | |
| 73 | 159 | } | 
| 74 | 160 | |
| 75 | 161 | @Override | 
| 76 | - protected void onResume() { | |
| 162 | + public void onResume() { | |
| 77 | 163 | super.onResume(); | 
| 78 | 164 | passport.onResume(); | 
| 79 | 165 | } | 
| 80 | 166 | |
| 81 | 167 | @Override | 
| 82 | - protected void onActivityResult(int requestCode, int resultCode, Intent data) { | |
| 168 | + public void onActivityResult(int requestCode, int resultCode, Intent data) { | |
| 83 | 169 | if (!passport.onActivityResult(requestCode, resultCode, data)) | 
| 84 | 170 | super.onActivityResult(requestCode, resultCode, data); | 
| 85 | 171 | } | 
| 86 | 172 | |
| 87 | 173 | @Override | 
| 88 | 174 | public void onActionSucced(Actions action, GamePlayer player) { | 
| 89 | - tvInfo.setText("login succed! gump id=" + player.getId() + ",playerType=" + player.getPlayerType()); | |
| 175 | + switch (action) { | |
| 176 | + case SIGN: | |
| 177 | + currentPlayer = player; | |
| 178 | + tvInfo.setText("Login succed! gump id=" + player.getId() + ",playerType=" + player.getPlayerType()); | |
| 179 | + btnLogin.setVisibility(View.GONE); | |
| 180 | + mainLayout.setVisibility(View.VISIBLE); | |
| 181 | + break; | |
| 182 | + case SWITCH: | |
| 183 | + tvInfo.setText("Switch account succed! Pls reboot the game!"); | |
| 184 | + Toast.makeText(this, "The account has switched,pls reboot the Game!", Toast.LENGTH_LONG).show(); | |
| 185 | + break; | |
| 186 | + } | |
| 90 | 187 | } | 
| 91 | 188 | |
| 92 | 189 | @Override | 
| 93 | - public void onActionFailured() { | |
| 94 | - tvInfo.setText("login has error"); | |
| 190 | + public void onActionFailured(Throwable e) { | |
| 191 | + tvInfo.setText("login has error:" + e.getMessage()); | |
| 95 | 192 | } | 
| 96 | 193 | |
| 97 | 194 | @Override | 
app/src/main/java/com/gump/passport/demo/SettingsActivity.java
| ... | ... | @@ -0,0 +1,235 @@ | 
| 1 | +package com.gump.passport.demo; | |
| 2 | + | |
| 3 | +import android.annotation.TargetApi; | |
| 4 | +import android.content.Context; | |
| 5 | +import android.content.Intent; | |
| 6 | +import android.content.res.Configuration; | |
| 7 | +import android.os.Build; | |
| 8 | +import android.os.Bundle; | |
| 9 | +import android.preference.ListPreference; | |
| 10 | +import android.preference.Preference; | |
| 11 | +import android.preference.PreferenceActivity; | |
| 12 | +import android.preference.PreferenceFragment; | |
| 13 | +import android.preference.PreferenceManager; | |
| 14 | +import android.support.annotation.Nullable; | |
| 15 | +import android.support.v4.app.NavUtils; | |
| 16 | +import android.support.v7.app.ActionBar; | |
| 17 | +import android.view.MenuItem; | |
| 18 | + | |
| 19 | +import java.util.List; | |
| 20 | + | |
| 21 | +/** | |
| 22 | + * A {@link PreferenceActivity} that presents a set of application settings. On | |
| 23 | + * handset devices, settings are presented as a single list. On tablets, | |
| 24 | + * settings are split by category, with category headers shown to the left of | |
| 25 | + * the list of settings. | |
| 26 | + * <p> | |
| 27 | + * See <a href="http://developer.android.com/design/patterns/settings.html"> | |
| 28 | + * Android Design: Settings</a> for design guidelines and the <a | |
| 29 | + * href="http://developer.android.com/guide/topics/ui/settings.html">Settings | |
| 30 | + * API Guide</a> for more information on developing a Settings UI. | |
| 31 | + */ | |
| 32 | +public class SettingsActivity extends AppCompatPreferenceActivity { | |
| 33 | + | |
| 34 | + /** | |
| 35 | + * A preference value change listener that updates the preference's summary | |
| 36 | + * to reflect its new value. | |
| 37 | + */ | |
| 38 | + private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { | |
| 39 | + @Override | |
| 40 | + public boolean onPreferenceChange(Preference preference, Object value) { | |
| 41 | + String stringValue = value.toString(); | |
| 42 | + | |
| 43 | + if (preference instanceof ListPreference) { | |
| 44 | + // For list preferences, look up the correct display value in | |
| 45 | + // the preference's 'entries' list. | |
| 46 | + ListPreference listPreference = (ListPreference) preference; | |
| 47 | + int index = listPreference.findIndexOfValue(stringValue); | |
| 48 | + | |
| 49 | + // Set the summary to reflect the new value. | |
| 50 | + preference.setSummary( | |
| 51 | + index >= 0 | |
| 52 | + ? listPreference.getEntries()[index] | |
| 53 | + : null); | |
| 54 | + | |
| 55 | + } else { | |
| 56 | + // For all other preferences, set the summary to the value's | |
| 57 | + // simple string representation. | |
| 58 | + preference.setSummary(stringValue); | |
| 59 | + } | |
| 60 | + return true; | |
| 61 | + } | |
| 62 | + }; | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * Helper method to determine if the device has an extra-large screen. For | |
| 66 | + * example, 10" tablets are extra-large. | |
| 67 | + */ | |
| 68 | + private static boolean isXLargeTablet(Context context) { | |
| 69 | + return (context.getResources().getConfiguration().screenLayout | |
| 70 | + & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; | |
| 71 | + } | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * Binds a preference's summary to its value. More specifically, when the | |
| 75 | + * preference's value is changed, its summary (line of text below the | |
| 76 | + * preference title) is updated to reflect the value. The summary is also | |
| 77 | + * immediately updated upon calling this method. The exact display format is | |
| 78 | + * dependent on the type of preference. | |
| 79 | + * | |
| 80 | + * @see #sBindPreferenceSummaryToValueListener | |
| 81 | + */ | |
| 82 | + private static void bindPreferenceSummaryToValue(Preference preference) { | |
| 83 | + // Set the listener to watch for value changes. | |
| 84 | + preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); | |
| 85 | + | |
| 86 | + // Trigger the listener immediately with the preference's | |
| 87 | + // current value. | |
| 88 | + sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, | |
| 89 | + PreferenceManager.getDefaultSharedPreferences(preference.getContext()) | |
| 90 | + .getString(preference.getKey(), "")); | |
| 91 | + } | |
| 92 | + | |
| 93 | + @Override | |
| 94 | + protected void onCreate(Bundle savedInstanceState) { | |
| 95 | + super.onCreate(savedInstanceState); | |
| 96 | + setupActionBar(); | |
| 97 | + } | |
| 98 | + | |
| 99 | + /** | |
| 100 | + * Set up the {@link android.app.ActionBar}, if the API is available. | |
| 101 | + */ | |
| 102 | + private void setupActionBar() { | |
| 103 | + ActionBar actionBar = getSupportActionBar(); | |
| 104 | + if (actionBar != null) { | |
| 105 | + // Show the Up button in the action bar. | |
| 106 | + actionBar.setDisplayHomeAsUpEnabled(true); | |
| 107 | + } | |
| 108 | + } | |
| 109 | + | |
| 110 | + @Override | |
| 111 | + public boolean onMenuItemSelected(int featureId, MenuItem item) { | |
| 112 | + int id = item.getItemId(); | |
| 113 | + if (id == android.R.id.home) { | |
| 114 | + if (!super.onMenuItemSelected(featureId, item)) { | |
| 115 | + NavUtils.navigateUpFromSameTask(this); | |
| 116 | + } | |
| 117 | + return true; | |
| 118 | + } | |
| 119 | + return super.onMenuItemSelected(featureId, item); | |
| 120 | + } | |
| 121 | + | |
| 122 | + /** | |
| 123 | + * {@inheritDoc} | |
| 124 | + */ | |
| 125 | + @Override | |
| 126 | + public boolean onIsMultiPane() { | |
| 127 | + return isXLargeTablet(this); | |
| 128 | + } | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * {@inheritDoc} | |
| 132 | + */ | |
| 133 | + @Override | |
| 134 | + @TargetApi(Build.VERSION_CODES.HONEYCOMB) | |
| 135 | + public void onBuildHeaders(List<Header> target) { | |
| 136 | + loadHeadersFromResource(R.xml.pref_headers, target); | |
| 137 | + } | |
| 138 | + | |
| 139 | + /** | |
| 140 | + * This method stops fragment injection in malicious applications. | |
| 141 | + * Make sure to deny any unknown fragments here. | |
| 142 | + */ | |
| 143 | + protected boolean isValidFragment(String fragmentName) { | |
| 144 | + return PreferenceFragment.class.getName().equals(fragmentName) | |
| 145 | + || GeneralPreferenceFragment.class.getName().equals(fragmentName) | |
| 146 | + || ParamPreferenceFragment.class.getName().equals(fragmentName); | |
| 147 | + } | |
| 148 | + | |
| 149 | + /** | |
| 150 | + * sdk配置 | |
| 151 | + */ | |
| 152 | + @TargetApi(Build.VERSION_CODES.HONEYCOMB) | |
| 153 | + public static class GeneralPreferenceFragment extends PreferenceFragment { | |
| 154 | + @Override | |
| 155 | + public void onCreate(Bundle savedInstanceState) { | |
| 156 | + super.onCreate(savedInstanceState); | |
| 157 | + addPreferencesFromResource(R.xml.pref_general); | |
| 158 | + setHasOptionsMenu(true); | |
| 159 | + | |
| 160 | + // Bind the summaries of EditText/List/Dialog/Ringtone preferences | |
| 161 | + // to their values. When their values change, their summaries are | |
| 162 | + // updated to reflect the new value, per the Android Design | |
| 163 | + // guidelines. | |
| 164 | +// bindPreferenceSummaryToValue(findPreference("key_mode")); | |
| 165 | + bindPreferenceSummaryToValue(findPreference("key_pay_version")); | |
| 166 | + } | |
| 167 | + | |
| 168 | + @Override | |
| 169 | + public boolean onOptionsItemSelected(MenuItem item) { | |
| 170 | + int id = item.getItemId(); | |
| 171 | + if (id == android.R.id.home) { | |
| 172 | + startActivity(new Intent(getActivity(), SettingsActivity.class)); | |
| 173 | + return true; | |
| 174 | + } | |
| 175 | + return super.onOptionsItemSelected(item); | |
| 176 | + } | |
| 177 | + } | |
| 178 | + | |
| 179 | + /** | |
| 180 | + * 基础参数配置 | |
| 181 | + */ | |
| 182 | + @TargetApi(Build.VERSION_CODES.HONEYCOMB) | |
| 183 | + public static class ParamPreferenceFragment extends PreferenceFragment { | |
| 184 | + @Override | |
| 185 | + public void onCreate(Bundle savedInstanceState) { | |
| 186 | + super.onCreate(savedInstanceState); | |
| 187 | + addPreferencesFromResource(R.xml.pref_param); | |
| 188 | + setHasOptionsMenu(true); | |
| 189 | + | |
| 190 | + // Bind the summaries of EditText/List/Dialog/Ringtone preferences | |
| 191 | + // to their values. When their values change, their summaries are | |
| 192 | + // updated to reflect the new value, per the Android Design | |
| 193 | + // guidelines. | |
| 194 | + bindPreferenceSummaryToValue(findPreference("key_appid")); | |
| 195 | + bindPreferenceSummaryToValue(findPreference("key_channel")); | |
| 196 | + } | |
| 197 | + | |
| 198 | + @Override | |
| 199 | + public boolean onOptionsItemSelected(MenuItem item) { | |
| 200 | + int id = item.getItemId(); | |
| 201 | + if (id == android.R.id.home) { | |
| 202 | + startActivity(new Intent(getActivity(), SettingsActivity.class)); | |
| 203 | + return true; | |
| 204 | + } | |
| 205 | + return super.onOptionsItemSelected(item); | |
| 206 | + } | |
| 207 | + } | |
| 208 | + | |
| 209 | + @TargetApi(Build.VERSION_CODES.HONEYCOMB) | |
| 210 | + public static class PaymentPreerenceFragment extends PreferenceFragment { | |
| 211 | + @Override | |
| 212 | + public void onCreate(@Nullable Bundle savedInstanceState) { | |
| 213 | + super.onCreate(savedInstanceState); | |
| 214 | + addPreferencesFromResource(R.xml.pref_payment); | |
| 215 | + setHasOptionsMenu(true); | |
| 216 | + | |
| 217 | + bindPreferenceSummaryToValue(findPreference("key_server_id")); | |
| 218 | + bindPreferenceSummaryToValue(findPreference("key_role_id")); | |
| 219 | + bindPreferenceSummaryToValue(findPreference("key_product")); | |
| 220 | + bindPreferenceSummaryToValue(findPreference("key_amount")); | |
| 221 | + bindPreferenceSummaryToValue(findPreference("key_currency")); | |
| 222 | + bindPreferenceSummaryToValue(findPreference("key_extra")); | |
| 223 | + } | |
| 224 | + | |
| 225 | + @Override | |
| 226 | + public boolean onOptionsItemSelected(MenuItem item) { | |
| 227 | + int id = item.getItemId(); | |
| 228 | + if (id == android.R.id.home) { | |
| 229 | + startActivity(new Intent(getActivity(), SettingsActivity.class)); | |
| 230 | + return true; | |
| 231 | + } | |
| 232 | + return super.onOptionsItemSelected(item); | |
| 233 | + } | |
| 234 | + } | |
| 235 | +} | 
app/src/main/res/drawable/ic_attach_money_black_24dp.xml
| ... | ... | @@ -0,0 +1,9 @@ | 
| 1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
| 2 | + android:width="24dp" | |
| 3 | + android:height="24dp" | |
| 4 | + android:viewportWidth="24.0" | |
| 5 | + android:viewportHeight="24.0"> | |
| 6 | + <path | |
| 7 | + android:fillColor="#FF000000" | |
| 8 | + android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/> | |
| 9 | +</vector> | 
app/src/main/res/drawable/ic_build_black_24dp.xml
| ... | ... | @@ -0,0 +1,9 @@ | 
| 1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
| 2 | + android:width="24dp" | |
| 3 | + android:height="24dp" | |
| 4 | + android:viewportWidth="24.0" | |
| 5 | + android:viewportHeight="24.0"> | |
| 6 | + <path | |
| 7 | + android:fillColor="#FF000000" | |
| 8 | + android:pathData="M22.7,19l-9.1,-9.1c0.9,-2.3 0.4,-5 -1.5,-6.9 -2,-2 -5,-2.4 -7.4,-1.3L9,6 6,9 1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1c1.9,1.9 4.6,2.4 6.9,1.5l9.1,9.1c0.4,0.4 1,0.4 1.4,0l2.3,-2.3c0.5,-0.4 0.5,-1.1 0.1,-1.4z"/> | |
| 9 | +</vector> | 
app/src/main/res/drawable/ic_text_fields_black_24dp.xml
| ... | ... | @@ -0,0 +1,9 @@ | 
| 1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
| 2 | + android:width="24dp" | |
| 3 | + android:height="24dp" | |
| 4 | + android:viewportWidth="24.0" | |
| 5 | + android:viewportHeight="24.0"> | |
| 6 | + <path | |
| 7 | + android:fillColor="#FF000000" | |
| 8 | + android:pathData="M2.5,4v3h5v12h3L10.5,7h5L15.5,4h-13zM21.5,9h-9v3h3v7h3v-7h3L21.5,9z"/> | |
| 9 | +</vector> | 
app/src/main/res/layout/activity_main.xml
| 1 | 1 | <?xml version="1.0" encoding="utf-8"?> | 
| 2 | 2 | <LinearLayout | 
| 3 | 3 | xmlns:android="http://schemas.android.com/apk/res/android" | 
| 4 | - xmlns:app="http://schemas.android.com/apk/res-auto" | |
| 5 | 4 | xmlns:tools="http://schemas.android.com/tools" | 
| 6 | 5 | android:layout_width="match_parent" | 
| 7 | 6 | android:layout_height="match_parent" | 
| ... | ... | @@ -10,8 +9,9 @@ | 
| 10 | 9 | |
| 11 | 10 | <TextView | 
| 12 | 11 | android:id="@+id/info" | 
| 13 | - android:layout_width="wrap_content" | |
| 14 | - android:layout_height="wrap_content"/> | |
| 12 | + android:layout_width="match_parent" | |
| 13 | + android:layout_height="wrap_content" | |
| 14 | + android:lines="2"/> | |
| 15 | 15 | |
| 16 | 16 | <Button | 
| 17 | 17 | android:id="@+id/login" | 
| ... | ... | @@ -19,16 +19,50 @@ | 
| 19 | 19 | android:layout_height="wrap_content" | 
| 20 | 20 | android:text="login"/> | 
| 21 | 21 | |
| 22 | - <Button | |
| 23 | - android:id="@+id/iab" | |
| 24 | - android:layout_width="match_parent" | |
| 25 | - android:layout_height="wrap_content" | |
| 26 | - android:text="iab"/> | |
| 27 | 22 | |
| 28 | - <Button | |
| 29 | - android:id="@+id/pay" | |
| 23 | + <LinearLayout | |
| 24 | + android:id="@+id/main_layout" | |
| 30 | 25 | android:layout_width="match_parent" | 
| 31 | - android:layout_height="wrap_content" | |
| 32 | - android:text="payment"/> | |
| 26 | + android:layout_height="match_parent" | |
| 27 | + android:orientation="vertical" | |
| 28 | + android:visibility="gone"> | |
| 29 | + | |
| 30 | + <Button | |
| 31 | + android:id="@+id/check" | |
| 32 | + android:layout_width="match_parent" | |
| 33 | + android:layout_height="wrap_content" | |
| 34 | + android:text="check payemnt state"/> | |
| 35 | + | |
| 36 | + <Button | |
| 37 | + android:id="@+id/bind" | |
| 38 | + android:layout_width="match_parent" | |
| 39 | + android:layout_height="wrap_content" | |
| 40 | + android:text="Bind Gump account"/> | |
| 41 | + | |
| 42 | + <Button | |
| 43 | + android:id="@+id/switch_acc" | |
| 44 | + android:layout_width="match_parent" | |
| 45 | + android:layout_height="wrap_content" | |
| 46 | + android:text="Switch to games player"/> | |
| 47 | + | |
| 48 | + <Button | |
| 49 | + android:id="@+id/switch_gump" | |
| 50 | + android:layout_width="match_parent" | |
| 51 | + android:layout_height="wrap_content" | |
| 52 | + android:text="Switch to gump player"/> | |
| 53 | + | |
| 54 | + <Button | |
| 55 | + android:id="@+id/iab" | |
| 56 | + android:layout_width="match_parent" | |
| 57 | + android:layout_height="wrap_content" | |
| 58 | + android:enabled="false" | |
| 59 | + android:text="Iab"/> | |
| 33 | 60 | |
| 61 | + <Button | |
| 62 | + android:id="@+id/pay" | |
| 63 | + android:layout_width="match_parent" | |
| 64 | + android:layout_height="wrap_content" | |
| 65 | + android:enabled="false" | |
| 66 | + android:text="Payment"/> | |
| 67 | + </LinearLayout> | |
| 34 | 68 | </LinearLayout> | 
| 35 | 69 | \ No newline at end of file | 
app/src/main/res/menu/main.xml
| ... | ... | @@ -0,0 +1,9 @@ | 
| 1 | +<?xml version="1.0" encoding="utf-8"?> | |
| 2 | +<menu xmlns:android="http://schemas.android.com/apk/res/android" | |
| 3 | + xmlns:app="http://schemas.android.com/apk/res-auto"> | |
| 4 | + | |
| 5 | + <item | |
| 6 | + android:id="@+id/setting" | |
| 7 | + android:title="设置" | |
| 8 | + app:showAsAction="always"/> | |
| 9 | +</menu> | |
| 0 | 10 | \ No newline at end of file | 
app/src/main/res/values/strings.xml
| 1 | 1 | <resources> | 
| 2 | 2 | <string name="app_name">PassportDemo</string> | 
| 3 | + | |
| 4 | + <!-- TODO: Remove or change this placeholder text --> | |
| 5 | + <string name="title_activity_settings">设置</string> | |
| 6 | + | |
| 7 | + <!-- Strings related to Settings --> | |
| 8 | + | |
| 9 | + <!-- SDK settings --> | |
| 10 | + <string name="pref_header_general">SDK设置</string> | |
| 11 | + | |
| 12 | + <string name="pref_title_mode">线上环境</string> | |
| 13 | + <string name="pref_description_mode">SDK是否使用线上正式服务器环境?</string> | |
| 14 | + | |
| 15 | + <string name="pref_title_orientation">支付界面方向</string> | |
| 16 | + <string name="pref_description_orientation">是否使用横屏?</string> | |
| 17 | + | |
| 18 | + <string name="pref_title_payment_version">支付版本</string> | |
| 19 | + | |
| 20 | + <string-array name="pref_payment_version_titles"> | |
| 21 | + <item>V3版本</item> | |
| 22 | + <item>V4版本</item> | |
| 23 | + </string-array> | |
| 24 | + <string-array name="pref_payment_version_values"> | |
| 25 | + <item>V3</item> | |
| 26 | + <item>V4</item> | |
| 27 | + </string-array> | |
| 28 | + | |
| 29 | + | |
| 30 | + <!--基础参数设置--> | |
| 31 | + <string name="pref_header_param">基础参数设置</string> | |
| 32 | + <string name="pref_title_appid">appId</string> | |
| 33 | + <string name="pref_description_appid">应用使用的appId</string> | |
| 34 | + <string name="pref_title_channel">ChannelId</string> | |
| 35 | + <string name="pref_description_channel">应用使用的channelId</string> | |
| 36 | + <!--支付参数--> | |
| 37 | + <string name="payment">支付参数</string> | |
| 38 | + <string name="pref_description_server_id">区服id</string> | |
| 39 | + <string name="pref_title_server_id">serverId</string> | |
| 40 | + <string name="pref_description_role_id">角色id</string> | |
| 41 | + <string name="pref_title_role_id">roleId</string> | |
| 42 | + <string name="pref_description_product">商品名/商品id</string> | |
| 43 | + <string name="pref_title_product">product</string> | |
| 44 | + <string name="pref_description_amount">金额</string> | |
| 45 | + <string name="pref_title_amount">支付金额</string> | |
| 46 | + <string name="pref_description_extra">游戏透传参数</string> | |
| 47 | + <string name="pref_title_extra">extra_info</string> | |
| 48 | + <string name="pref_description_currency">支付显示货币</string> | |
| 49 | + <string name="pref_title_currency">currency</string> | |
| 50 | + | |
| 51 | + | |
| 3 | 52 | </resources> | 
app/src/main/res/xml/pref_general.xml
| ... | ... | @@ -0,0 +1,22 @@ | 
| 1 | +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> | |
| 2 | + | |
| 3 | + <SwitchPreference | |
| 4 | + android:defaultValue="true" | |
| 5 | + android:key="key_mode" | |
| 6 | + android:summary="@string/pref_description_mode" | |
| 7 | + android:title="@string/pref_title_mode"/> | |
| 8 | + | |
| 9 | + | |
| 10 | + <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to | |
| 11 | + dismiss it. --> | |
| 12 | + <!--NOTE: ListPreference's summary should be set to its value by the activity code. --> | |
| 13 | + <ListPreference | |
| 14 | + android:defaultValue="V3" | |
| 15 | + android:entries="@array/pref_payment_version_titles" | |
| 16 | + android:entryValues="@array/pref_payment_version_values" | |
| 17 | + android:key="key_pay_version" | |
| 18 | + android:negativeButtonText="@null" | |
| 19 | + android:positiveButtonText="@null" | |
| 20 | + android:title="@string/pref_title_payment_version"/> | |
| 21 | + | |
| 22 | +</PreferenceScreen> | 
app/src/main/res/xml/pref_headers.xml
| ... | ... | @@ -0,0 +1,18 @@ | 
| 1 | +<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> | |
| 2 | + | |
| 3 | + <!-- These settings headers are only used on tablets. --> | |
| 4 | + | |
| 5 | + <header | |
| 6 | + android:fragment="com.gump.passport.demo.SettingsActivity$ParamPreferenceFragment" | |
| 7 | + android:icon="@drawable/ic_text_fields_black_24dp" | |
| 8 | + android:title="@string/pref_header_param"/> | |
| 9 | + <header | |
| 10 | + android:fragment="com.gump.passport.demo.SettingsActivity$GeneralPreferenceFragment" | |
| 11 | + android:icon="@drawable/ic_build_black_24dp" | |
| 12 | + android:title="@string/pref_header_general"/> | |
| 13 | + <header | |
| 14 | + android:fragment="com.gump.passport.demo.SettingsActivity$PaymentPreferenceFragment" | |
| 15 | + android:icon="@drawable/ic_attach_money_black_24dp" | |
| 16 | + android:title="@string/payment"/> | |
| 17 | + | |
| 18 | +</preference-headers> | 
app/src/main/res/xml/pref_param.xml
| ... | ... | @@ -0,0 +1,29 @@ | 
| 1 | +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> | |
| 2 | + | |
| 3 | + <EditTextPreference | |
| 4 | + android:defaultValue="100" | |
| 5 | + android:key="key_appid" | |
| 6 | + android:summary="@string/pref_description_appid" | |
| 7 | + android:title="@string/pref_title_appid"/> | |
| 8 | + | |
| 9 | + <!-- NOTE: EditTextPreference accepts EditText attributes. --> | |
| 10 | + <!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. --> | |
| 11 | + <EditTextPreference | |
| 12 | + android:defaultValue="1000" | |
| 13 | + android:key="key_channel" | |
| 14 | + android:summary="@string/pref_description_channel" | |
| 15 | + android:title="@string/pref_title_channel"/> | |
| 16 | + | |
| 17 | + <!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to | |
| 18 | + dismiss it. --> | |
| 19 | + <!-- NOTE: ListPreference's summary should be set to its value by the activity code. --> | |
| 20 | + <!--<ListPreference--> | |
| 21 | + <!--android:defaultValue="-1"--> | |
| 22 | + <!--android:entries="@array/pref_example_list_titles"--> | |
| 23 | + <!--android:entryValues="@array/pref_example_list_values"--> | |
| 24 | + <!--android:key="example_list"--> | |
| 25 | + <!--android:negativeButtonText="@null"--> | |
| 26 | + <!--android:positiveButtonText="@null"--> | |
| 27 | + <!--android:title="@string/pref_title_add_friends_to_messages"/>--> | |
| 28 | + | |
| 29 | +</PreferenceScreen> | 
app/src/main/res/xml/pref_payment.xml
| ... | ... | @@ -0,0 +1,34 @@ | 
| 1 | +<?xml version="1.0" encoding="utf-8"?> | |
| 2 | +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> | |
| 3 | + | |
| 4 | + <EditTextPreference | |
| 5 | + android:defaultValue="100" | |
| 6 | + android:key="key_server_id" | |
| 7 | + android:summary="@string/pref_description_server_id" | |
| 8 | + android:title="@string/pref_title_server_id"/> | |
| 9 | + <EditTextPreference | |
| 10 | + android:defaultValue="41080" | |
| 11 | + android:key="key_role_id" | |
| 12 | + android:summary="@string/pref_description_role_id" | |
| 13 | + android:title="@string/pref_title_role_id"/> | |
| 14 | + <EditTextPreference | |
| 15 | + android:defaultValue="180010" | |
| 16 | + android:key="key_product" | |
| 17 | + android:summary="@string/pref_description_product" | |
| 18 | + android:title="@string/pref_title_product"/> | |
| 19 | + <EditTextPreference | |
| 20 | + android:defaultValue="0.1" | |
| 21 | + android:key="key_amount" | |
| 22 | + android:summary="@string/pref_description_amount" | |
| 23 | + android:title="@string/pref_title_amount"/> | |
| 24 | + <EditTextPreference | |
| 25 | + android:defaultValue="THB" | |
| 26 | + android:key="key_currency" | |
| 27 | + android:summary="@string/pref_description_currency" | |
| 28 | + android:title="@string/pref_title_currency"/> | |
| 29 | + <EditTextPreference | |
| 30 | + android:defaultValue="test" | |
| 31 | + android:key="key_extra_info" | |
| 32 | + android:summary="@string/pref_description_extra" | |
| 33 | + android:title="@string/pref_title_extra"/> | |
| 34 | +</PreferenceScreen> | |
| 0 | 35 | \ No newline at end of file | 
