Revision 71cda061
Added by Leszek Koltunski about 3 years ago
| src/main/java/org/distorted/config/ConfigScreenPane.java | ||
|---|---|---|
| 105 | 105 | view = layout.findViewById(R.id.configDetailsAuthor2); | 
| 106 | 106 | view.setText(both); | 
| 107 | 107 |  | 
| 108 | if( difficulty<0 ) difficulty=0; | |
| 109 |       if( difficulty>NUM_IDS ) difficulty=NUM_IDS;
 | |
| 108 |       if( difficulty<0        ) difficulty=0;
 | |
| 109 |       if( difficulty>=NUM_IDS ) difficulty=NUM_IDS-1;
 | |
| 110 | 110 |  | 
| 111 | 111 | for(int i=0; i<NUM_IDS; i++) | 
| 112 | 112 |         {
 | 
| src/main/java/org/distorted/purchase/PurchaseActivity.java | ||
|---|---|---|
| 15 | 15 | import android.view.View; | 
| 16 | 16 | import android.view.ViewGroup; | 
| 17 | 17 | import android.view.WindowManager; | 
| 18 | import android.widget.LinearLayout; | |
| 19 | 18 |  | 
| 20 | 19 | import androidx.appcompat.app.AppCompatActivity; | 
| 21 | 20 |  | 
| ... | ... | |
| 34 | 33 | public class PurchaseActivity extends AppCompatActivity | 
| 35 | 34 | {
 | 
| 36 | 35 | private static final int ACTIVITY_NUMBER = 5; | 
| 37 | private static final float RATIO_BAR = 0.10f; | |
| 36 | private static final float RATIO_UBAR = 0.14f; | |
| 37 | private static final float RATIO_LBAR = 0.10f; | |
| 38 | private static final float RATIO_VIEW = 0.50f; | |
| 38 | 39 |  | 
| 39 | 40 | public static final float DIALOG_BUTTON_SIZE = 0.06f; | 
| 40 | 41 | public static final float MENU_BIG_TEXT_SIZE = 0.05f; | 
| ... | ... | |
| 49 | 50 | private int mCurrentApiVersion; | 
| 50 | 51 | private PurchaseScreen mScreen; | 
| 51 | 52 | private int mObjectOrdinal; | 
| 52 | private int mHeightBar; | |
| 53 | 53 |  | 
| 54 | 54 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 55 | 55 |  | 
| ... | ... | |
| 72 | 72 |  | 
| 73 | 73 | hideNavigationBar(); | 
| 74 | 74 | cutoutHack(); | 
| 75 |       computeBarHeights();
 | |
| 75 |       setHeights();
 | |
| 76 | 76 | } | 
| 77 | 77 |  | 
| 78 | 78 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 79 | // this does not include possible insets | |
| 80 | 79 |  | 
| 81 |     private void computeBarHeights()
 | |
| 80 |     private void setViewHeight(int id, int height)
 | |
| 82 | 81 |       {
 | 
| 83 | int barHeight = (int)(mScreenHeight*RATIO_BAR); | |
| 84 | mHeightBar = barHeight; | |
| 82 | View view = findViewById(id); | |
| 83 |  | |
| 84 | if( view!=null ) | |
| 85 |         {
 | |
| 86 | ViewGroup.LayoutParams params = view.getLayoutParams(); | |
| 87 | params.height = height; | |
| 88 | view.setLayoutParams(params); | |
| 89 | } | |
| 90 | } | |
| 91 |  | |
| 92 | /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| 93 | // this does not include possible insets | |
| 85 | 94 |  | 
| 86 | LinearLayout layout = findViewById(R.id.lowerBar); | |
| 87 | ViewGroup.LayoutParams params = layout.getLayoutParams(); | |
| 88 | params.height = barHeight; | |
| 89 | layout.setLayoutParams(params); | |
| 95 | private void setHeights() | |
| 96 |       {
 | |
| 97 | int ubarHeight= (int)(mScreenHeight*RATIO_UBAR); | |
| 98 | int lbarHeight= (int)(mScreenHeight*RATIO_LBAR); | |
| 99 | int viewHeight= (int)(mScreenHeight*RATIO_VIEW); | |
| 100 | int layHeight = (int)(mScreenHeight*(1-RATIO_UBAR-RATIO_LBAR-RATIO_VIEW)*0.5f); | |
| 101 |  | |
| 102 | setViewHeight(R.id.upperBar , ubarHeight); | |
| 103 | setViewHeight(R.id.lowerBar , lbarHeight); | |
| 104 | setViewHeight(R.id.purchaseSurfaceView, viewHeight); | |
| 105 | setViewHeight(R.id.purchaseLayoutOne , layHeight); | |
| 106 | setViewHeight(R.id.purchaseLayoutAll , layHeight); | |
| 90 | 107 | } | 
| 91 | 108 |  | 
| 92 | 109 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| ... | ... | |
| 216 | 233 | changeIfDifferent(object,ordinal,control); | 
| 217 | 234 | } | 
| 218 | 235 |  | 
| 219 | /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| 220 |  | |
| 221 | public void changeMeshState(RubikObject object, int ordinal) | |
| 222 |       {
 | |
| 223 | if( object!=null ) | |
| 224 |         {
 | |
| 225 | PurchaseSurfaceView view = findViewById(R.id.purchaseSurfaceView); | |
| 226 | ObjectControl control = view.getObjectControl(); | |
| 227 |  | |
| 228 | int meshState = object.getMeshState(); | |
| 229 | int iconMode = TwistyObject.MODE_NORM; | |
| 230 | InputStream jsonStream = object.getObjectStream(this); | |
| 231 | InputStream meshStream = object.getMeshStream(this); | |
| 232 |  | |
| 233 | control.changeObject(ordinal,meshState,iconMode,jsonStream,meshStream); | |
| 234 | } | |
| 235 | } | |
| 236 |  | |
| 237 | /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| 238 |  | |
| 239 | public int getHeightBar() | |
| 240 |       {
 | |
| 241 | return mHeightBar; | |
| 242 | } | |
| 243 |  | |
| 244 | 236 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 245 | 237 |  | 
| 246 | 238 | public int getScreenWidthInPixels() | 
| src/main/java/org/distorted/purchase/PurchaseScreen.java | ||
|---|---|---|
| 70 | 70 | layout.addView(layoutMid); | 
| 71 | 71 | layout.addView(layoutRight); | 
| 72 | 72 |  | 
| 73 |     PurchaseScreenPane pane = new PurchaseScreenPane(act,ordinal);
 | |
| 73 | PurchaseScreenPane pane = new PurchaseScreenPane(act); | |
| 74 | 74 | pane.updatePane(act,ordinal); | 
| 75 | 75 | } | 
| 76 | 76 | } | 
| src/main/java/org/distorted/purchase/PurchaseScreenPane.java | ||
|---|---|---|
| 9 | 9 |  | 
| 10 | 10 | package org.distorted.purchase; | 
| 11 | 11 |  | 
| 12 | import android.graphics.PorterDuff; | |
| 13 | 12 | import android.util.TypedValue; | 
| 14 | 13 | import android.widget.ImageView; | 
| 15 | 14 | import android.widget.LinearLayout; | 
| 16 | import android.widget.RadioButton; | |
| 17 | import android.widget.RadioGroup; | |
| 15 | import android.widget.RelativeLayout; | |
| 18 | 16 | import android.widget.TextView; | 
| 19 | 17 |  | 
| 20 | 18 | import org.distorted.main.R; | 
| ... | ... | |
| 24 | 22 |  | 
| 25 | 23 | import java.io.InputStream; | 
| 26 | 24 |  | 
| 27 | import static org.distorted.objectlib.main.TwistyObject.MESH_FAST; | |
| 28 | import static org.distorted.objectlib.main.TwistyObject.MESH_NICE; | |
| 29 |  | |
| 30 | 25 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 31 | 26 |  | 
| 32 | 27 | public class PurchaseScreenPane | 
| 33 | 28 | {
 | 
| 34 | private static final int[] IDS = | |
| 35 |     {
 | |
| 36 | R.id.purchaseDifficulty0, | |
| 37 | R.id.purchaseDifficulty1, | |
| 38 | R.id.purchaseDifficulty2, | |
| 39 | R.id.purchaseDifficulty3, | |
| 40 | R.id.purchaseDifficulty4 | |
| 41 | }; | |
| 42 |  | |
| 43 | 29 | private static final int[] IMAGES = | 
| 44 | 30 |     {
 | 
| 45 | 31 | R.drawable.difficulty1, | 
| ... | ... | |
| 49 | 35 | R.drawable.difficulty5, | 
| 50 | 36 | }; | 
| 51 | 37 |  | 
| 52 |   private static final int NUM_IDS         = IDS.length;
 | |
| 38 |   private static final int NUM_IMAGES      = IMAGES.length;
 | |
| 53 | 39 | public static final float PADDING_RATIO = 0.025f; | 
| 54 | 40 | private static final float TEXT_RATIO = 0.042f; | 
| 55 | private static final float RADIO_RATIO = 0.900f; | |
| 56 |  | |
| 57 | private int mObjectOrdinal; | |
| 58 | private boolean mProgramatic; | |
| 59 |  | |
| 60 | /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| 61 |  | |
| 62 | private void switchMeshState(PurchaseActivity act, int meshState) | |
| 63 |     {
 | |
| 64 | RubikObjectList.setMeshState(mObjectOrdinal,meshState); | |
| 65 | RubikObject object = RubikObjectList.getObject(mObjectOrdinal); | |
| 66 | act.changeMeshState(object,mObjectOrdinal); | |
| 67 | } | |
| 68 | 41 |  | 
| 69 | 42 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 70 | 43 |  | 
| ... | ... | |
| 75 | 48 | if( object!=null ) | 
| 76 | 49 |       {
 | 
| 77 | 50 | InputStream stream = object.getObjectStream(act); | 
| 78 |  | |
| 79 | mObjectOrdinal = objectOrdinal; | |
| 80 | 51 | JsonReader reader = JsonReader.getInstance(); | 
| 81 |       String name,author;
 | |
| 82 |       int year, difficulty;
 | |
| 52 | String name; | |
| 53 | int difficulty; | |
| 83 | 54 |  | 
| 84 | 55 | try | 
| 85 | 56 |         {
 | 
| 86 | 57 | reader.parseJsonFileMetadata(stream); | 
| 87 | 58 | name = reader.getObjectName(); | 
| 88 | author = reader.getInventor(); | |
| 89 | year = reader.getYearOfInvention(); | |
| 90 | 59 | difficulty = reader.getComplexity(); | 
| 91 | 60 | } | 
| 92 | 61 | catch(Exception ex) | 
| 93 | 62 |         {
 | 
| 94 | 63 | name = "?"; | 
| 95 | author = "?"; | |
| 96 | year = 0; | |
| 97 | 64 | difficulty = 0; | 
| 98 | 65 | } | 
| 99 | 66 |  | 
| 100 | String both = year>0 ? author+" "+year : author; | |
| 67 | if( difficulty<0 ) difficulty=0; | |
| 68 | if( difficulty>=NUM_IMAGES ) difficulty=NUM_IMAGES-1; | |
| 101 | 69 |  | 
| 102 | LinearLayout layout = act.findViewById(R.id.purchaseLayout); | |
| 103 | TextView view = layout.findViewById(R.id.purchaseDetailsName2); | |
| 70 | TextView view = act.findViewById(R.id.purchaseDetailsName); | |
| 104 | 71 | view.setText(name); | 
| 105 | view = layout.findViewById(R.id.purchaseDetailsAuthor2); | |
| 106 | view.setText(both); | |
| 107 |  | |
| 108 | if( difficulty<0 ) difficulty=0; | |
| 109 | if( difficulty>NUM_IDS ) difficulty=NUM_IDS; | |
| 110 |  | |
| 111 | for(int i=0; i<NUM_IDS; i++) | |
| 112 |         {
 | |
| 113 | ImageView image = layout.findViewById(IDS[i]); | |
| 114 | image.setImageResource(IMAGES[i]); | |
| 115 | image.setColorFilter( difficulty==i ? 0xffff0000 : 0xffffffff, PorterDuff.Mode.MULTIPLY ); | |
| 116 | } | |
| 117 |  | |
| 118 | int meshState = object.getMeshState(); | |
| 119 | int id = meshState==MESH_NICE ? R.id.meshNice : R.id.meshSimple; | |
| 120 | RadioButton button = act.findViewById(id); | |
| 121 |  | |
| 122 | mProgramatic = true; | |
| 123 | button.setChecked(true); | |
| 124 | mProgramatic = false; | |
| 72 | ImageView image = act.findViewById(R.id.purchaseDifficulty); | |
| 73 | image.setImageResource(IMAGES[difficulty]); | |
| 125 | 74 | } | 
| 126 | 75 | } | 
| 127 | 76 |  | 
| 128 | 77 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 129 | 78 |  | 
| 130 |   PurchaseScreenPane(final PurchaseActivity act, int objectOrdinal)
 | |
| 79 | PurchaseScreenPane(final PurchaseActivity act) | |
| 131 | 80 |     {
 | 
| 132 | 81 | int width = act.getScreenWidthInPixels(); | 
| 133 | 82 | float textSize = width*TEXT_RATIO; | 
| 134 | 83 | int padding = (int)(width*PADDING_RATIO); | 
| 135 | 84 |  | 
| 136 | LinearLayout configLayout = act.findViewById(R.id.purchaseLayout); | |
| 137 | LinearLayout nameLayout = configLayout.findViewById(R.id.purchaseLayoutName); | |
| 138 | LinearLayout authorLayout = configLayout.findViewById(R.id.purchaseLayoutAuthor); | |
| 139 | LinearLayout difficultyLayout= configLayout.findViewById(R.id.purchaseLayoutDifficulty); | |
| 140 | LinearLayout meshLayout = configLayout.findViewById(R.id.purchaseLayoutMesh); | |
| 85 | RelativeLayout upperBar = act.findViewById(R.id.upperBar); | |
| 86 | LinearLayout oneLayout = act.findViewById(R.id.purchaseLayoutOne); | |
| 87 | LinearLayout allLayout = act.findViewById(R.id.purchaseLayoutAll); | |
| 141 | 88 |  | 
| 142 | nameLayout.setPadding(padding,padding,padding,padding/2); | |
| 143 | authorLayout.setPadding(padding,padding/2,padding,padding/2); | |
| 144 | difficultyLayout.setPadding(padding,padding/2,padding,padding/2); | |
| 145 | meshLayout.setPadding(padding,padding/2,padding,padding); | |
| 89 | upperBar.setPadding(padding,padding,padding,padding/2); | |
| 90 | oneLayout.setPadding(padding,padding/2,padding,padding/2); | |
| 91 | allLayout.setPadding(padding,padding/2,padding,padding/2); | |
| 146 | 92 |  | 
| 147 | 93 | LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.00f); | 
| 148 | 94 | params.bottomMargin = 0; | 
| ... | ... | |
| 150 | 96 | params.leftMargin = padding; | 
| 151 | 97 | params.rightMargin = padding; | 
| 152 | 98 |  | 
| 153 | nameLayout.setLayoutParams(params); | |
| 154 | authorLayout.setLayoutParams(params); | |
| 155 | difficultyLayout.setLayoutParams(params); | |
| 156 | meshLayout.setLayoutParams(params); | |
| 99 | upperBar.setLayoutParams(params); | |
| 100 | oneLayout.setLayoutParams(params); | |
| 101 | allLayout.setLayoutParams(params); | |
| 157 | 102 |  | 
| 158 | 103 | TextView text; | 
| 159 | text = nameLayout.findViewById(R.id.purchaseDetailsName1); | |
| 160 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | |
| 161 | text = nameLayout.findViewById(R.id.purchaseDetailsName2); | |
| 104 | text = upperBar.findViewById(R.id.purchaseDetailsName); | |
| 162 | 105 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | 
| 163 |     text = authorLayout.findViewById(R.id.purchaseDetailsAuthor1);
 | |
| 106 |     text = oneLayout.findViewById(R.id.purchaseTextOne);
 | |
| 164 | 107 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | 
| 165 |     text = authorLayout.findViewById(R.id.purchaseDetailsAuthor2);
 | |
| 108 |     text = allLayout.findViewById(R.id.purchaseTextAll);
 | |
| 166 | 109 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | 
| 167 | text = difficultyLayout.findViewById(R.id.purchaseDifficultyTitle); | |
| 168 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | |
| 169 | text = meshLayout.findViewById(R.id.purchaseMeshTitle); | |
| 170 | text.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); | |
| 171 |  | |
| 172 | RadioButton butt1 = meshLayout.findViewById(R.id.meshNice); | |
| 173 | butt1.setTextSize(TypedValue.COMPLEX_UNIT_PX, RADIO_RATIO*textSize); | |
| 174 | RadioButton butt2 = meshLayout.findViewById(R.id.meshSimple); | |
| 175 | butt2.setTextSize(TypedValue.COMPLEX_UNIT_PX, RADIO_RATIO*textSize); | |
| 176 |  | |
| 177 | LinearLayout layoutDiff = difficultyLayout.findViewById(R.id.purchaseDifficultyLayout); | |
| 178 | layoutDiff.setPadding(padding,padding,padding,padding); | |
| 179 |  | |
| 180 | RadioGroup radioGroup = meshLayout.findViewById(R.id.meshRadioGroup); | |
| 181 |  | |
| 182 | radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() | |
| 183 |       {
 | |
| 184 | @Override | |
| 185 | public void onCheckedChanged(RadioGroup group, int checkedId) | |
| 186 |         {
 | |
| 187 | if( !mProgramatic ) | |
| 188 |           {
 | |
| 189 | int meshState = checkedId == R.id.meshNice ? MESH_NICE : MESH_FAST; | |
| 190 | switchMeshState( act, meshState ); | |
| 191 | } | |
| 192 | } | |
| 193 | }); | |
| 194 |  | |
| 195 | updatePane(act,objectOrdinal); | |
| 196 | 110 | } | 
| 197 | 111 | } | 
| src/main/java/org/distorted/screens/RubikScreenPlay.java | ||
|---|---|---|
| 338 | 338 | mMenuPopup.setFocusable(true); | 
| 339 | 339 | int padding = (int)(width*RubikActivity.MEDIUM_MARGIN); | 
| 340 | 340 |  | 
| 341 | mMenuLayoutWidth = (int)(width*0.6f); | |
| 341 |     mMenuLayoutWidth = (int)(width*0.65f);
 | |
| 342 | 342 | mMenuLayoutHeight= padding + NUM_BUTTONS*(mMenuButtonHeight+padding) + 4*mMenuButtonHeight+6*padding; | 
| 343 | 343 |  | 
| 344 | 344 | layout.setPadding(padding,0,padding,0); | 
| src/main/res/layout/purchase.xml | ||
|---|---|---|
| 3 | 3 | android:id="@+id/mainLayout" | 
| 4 | 4 | android:layout_width="match_parent" | 
| 5 | 5 | android:layout_height="match_parent" | 
| 6 | android:background="@color/light_grey" | |
| 6 | 7 | android:orientation="vertical"> | 
| 7 | 8 |  | 
| 9 | <RelativeLayout | |
| 10 | android:id="@+id/upperBar" | |
| 11 | android:layout_width="fill_parent" | |
| 12 | android:layout_height="100dp" | |
| 13 | android:paddingLeft="5dp" | |
| 14 | android:paddingRight="5dp" | |
| 15 | android:background="@color/grey" | |
| 16 | android:orientation="horizontal"> | |
| 17 |  | |
| 18 | <TextView | |
| 19 | android:id="@+id/purchaseDetailsName" | |
| 20 | android:layout_width="wrap_content" | |
| 21 | android:layout_height="match_parent" | |
| 22 | android:layout_alignParentStart="true" | |
| 23 | android:paddingStart="5dp" | |
| 24 | android:textSize="26sp" | |
| 25 | android:singleLine="true" | |
| 26 | android:maxLines="1"/> | |
| 27 |  | |
| 28 | <ImageView | |
| 29 | android:id="@+id/purchaseDifficulty" | |
| 30 | android:layout_width="wrap_content" | |
| 31 | android:layout_height="match_parent" | |
| 32 | android:layout_alignParentEnd="true"/> | |
| 33 | </RelativeLayout> | |
| 34 |  | |
| 8 | 35 | <org.distorted.purchase.PurchaseSurfaceView | 
| 9 | 36 | android:id="@+id/purchaseSurfaceView" | 
| 10 | 37 | android:layout_width="match_parent" | 
| 11 | android:layout_height="0dp" | |
| 12 | android:layout_weight="1.3"/> | |
| 13 |  | |
| 14 | <LinearLayout | |
| 15 | android:id="@+id/purchaseLayout" | |
| 16 | android:layout_width="match_parent" | |
| 17 | android:layout_height="0dp" | |
| 18 | android:layout_weight="1.0" | |
| 19 | android:background="@color/light_grey" | |
| 20 | android:orientation="vertical" > | |
| 38 | android:layout_height="wrap_content"/> | |
| 21 | 39 |  | 
| 22 | 40 | <LinearLayout | 
| 23 |             android:id="@+id/purchaseLayoutName"
 | |
| 41 |             android:id="@+id/purchaseLayoutOne"
 | |
| 24 | 42 | android:layout_width="fill_parent" | 
| 25 | android:layout_height="0dp" | |
| 26 | android:layout_weight="1" | |
| 43 | android:layout_height="10dp" | |
| 27 | 44 | android:paddingLeft="5dp" | 
| 28 | 45 | android:paddingRight="5dp" | 
| 29 | 46 | android:background="@color/grey" | 
| 30 | 47 | android:orientation="horizontal"> | 
| 31 | 48 |  | 
| 32 | 49 | <TextView | 
| 33 |                 android:id="@+id/purchaseDetailsName1"
 | |
| 50 |                 android:id="@+id/purchaseTextOne"
 | |
| 34 | 51 | android:layout_width="0dp" | 
| 35 | 52 | android:layout_height="match_parent" | 
| 36 |                 android:layout_weight="1.0"
 | |
| 53 |                 android:layout_weight="2.0"
 | |
| 37 | 54 | android:gravity="center_vertical|start" | 
| 38 | 55 | android:paddingStart="5dp" | 
| 39 | 56 | android:textSize="26sp" | 
| 40 | 57 | android:singleLine="true" | 
| 41 | 58 | android:maxLines="1" | 
| 42 |                 android:text="@string/config_name"/>
 | |
| 59 |                 android:text="@string/buy_one"/>
 | |
| 43 | 60 |  | 
| 44 | <TextView | |
| 45 | android:id="@+id/purchaseDetailsName2" | |
| 46 | android:layout_width="0dp" | |
| 47 | android:layout_height="match_parent" | |
| 48 | android:layout_weight="2.1" | |
| 49 | android:gravity="center_vertical|start" | |
| 50 | android:paddingStart="5dp" | |
| 51 | android:textSize="26sp" | |
| 52 | android:singleLine="true" | |
| 53 | android:maxLines="1"/> | |
| 54 |  | |
| 55 | </LinearLayout> | |
| 56 |  | |
| 57 | <LinearLayout | |
| 58 | android:id="@+id/purchaseLayoutAuthor" | |
| 59 | android:layout_width="fill_parent" | |
| 60 | android:layout_height="0dp" | |
| 61 | android:layout_weight="1" | |
| 62 | android:paddingLeft="5dp" | |
| 63 | android:paddingRight="5dp" | |
| 64 | android:background="@color/grey" | |
| 65 | android:orientation="horizontal"> | |
| 66 |  | |
| 67 | <TextView | |
| 68 | android:id="@+id/purchaseDetailsAuthor1" | |
| 61 | <Button | |
| 62 | android:id="@+id/purchaseButtonOne" | |
| 69 | 63 | android:layout_width="0dp" | 
| 70 | 64 | android:layout_height="match_parent" | 
| 71 | 65 | android:layout_weight="1.0" | 
| 72 | android:gravity="center_vertical|start" | |
| 73 | android:paddingStart="5dp" | |
| 74 | android:textSize="26sp" | |
| 75 | android:singleLine="true" | |
| 76 | android:maxLines="1" | |
| 77 | android:text="@string/config_author"/> | |
| 78 |  | |
| 79 | <TextView | |
| 80 | android:id="@+id/purchaseDetailsAuthor2" | |
| 81 | android:layout_width="0dp" | |
| 82 | android:layout_height="match_parent" | |
| 83 | android:layout_weight="2.1" | |
| 84 | android:gravity="center_vertical|start" | |
| 66 | android:gravity="center_vertical|end" | |
| 85 | 67 | android:paddingStart="5dp" | 
| 86 | 68 | android:textSize="26sp" | 
| 87 | 69 | android:singleLine="true" | 
| ... | ... | |
| 90 | 72 | </LinearLayout> | 
| 91 | 73 |  | 
| 92 | 74 | <LinearLayout | 
| 93 |             android:id="@+id/purchaseLayoutDifficulty"
 | |
| 75 |             android:id="@+id/purchaseLayoutAll"
 | |
| 94 | 76 | android:layout_width="fill_parent" | 
| 95 | android:layout_height="0dp" | |
| 96 | android:layout_weight="1" | |
| 77 | android:layout_height="10dp" | |
| 97 | 78 | android:paddingLeft="5dp" | 
| 98 | 79 | android:paddingRight="5dp" | 
| 99 | 80 | android:background="@color/grey" | 
| 100 | 81 | android:orientation="horizontal"> | 
| 101 | 82 |  | 
| 102 | 83 | <TextView | 
| 103 |                 android:id="@+id/purchaseDifficultyTitle"
 | |
| 84 |                 android:id="@+id/purchaseTextAll"
 | |
| 104 | 85 | android:layout_width="0dp" | 
| 105 | 86 | android:layout_height="match_parent" | 
| 106 |                 android:layout_weight="1.0"
 | |
| 87 |                 android:layout_weight="2.0"
 | |
| 107 | 88 | android:gravity="center_vertical|start" | 
| 108 | 89 | android:paddingStart="5dp" | 
| 109 | 90 | android:textSize="26sp" | 
| 110 | 91 | android:singleLine="true" | 
| 111 | 92 | android:maxLines="1" | 
| 112 | android:text="@string/config_difficulty"/> | |
| 113 |  | |
| 114 | <LinearLayout | |
| 115 | android:id="@+id/purchaseDifficultyLayout" | |
| 116 | android:layout_width="0dp" | |
| 117 | android:layout_height="match_parent" | |
| 118 | android:layout_weight="2.5" | |
| 119 | android:gravity="start" | |
| 120 | android:paddingTop="20dp" | |
| 121 | android:paddingBottom="20dp" | |
| 122 | android:orientation="horizontal"> | |
| 123 |  | |
| 124 | <ImageView | |
| 125 | android:id="@+id/purchaseDifficulty0" | |
| 126 | android:layout_width="0dp" | |
| 127 | android:layout_height="match_parent" | |
| 128 | android:layout_weight="1"/> | |
| 129 |  | |
| 130 | <ImageView | |
| 131 | android:id="@+id/purchaseDifficulty1" | |
| 132 | android:layout_width="0dp" | |
| 133 | android:layout_height="match_parent" | |
| 134 | android:layout_weight="1"/> | |
| 135 |  | |
| 136 | <ImageView | |
| 137 | android:id="@+id/purchaseDifficulty2" | |
| 138 | android:layout_width="0dp" | |
| 139 | android:layout_height="match_parent" | |
| 140 | android:layout_weight="1"/> | |
| 141 |  | |
| 142 | <ImageView | |
| 143 | android:id="@+id/purchaseDifficulty3" | |
| 144 | android:layout_width="0dp" | |
| 145 | android:layout_height="match_parent" | |
| 146 | android:layout_weight="1"/> | |
| 147 |  | |
| 148 | <ImageView | |
| 149 | android:id="@+id/purchaseDifficulty4" | |
| 150 | android:layout_width="0dp" | |
| 151 | android:layout_height="match_parent" | |
| 152 | android:layout_weight="1"/> | |
| 153 |  | |
| 154 | </LinearLayout> | |
| 155 |  | |
| 156 | </LinearLayout> | |
| 157 |  | |
| 158 | <LinearLayout | |
| 159 | android:id="@+id/purchaseLayoutMesh" | |
| 160 | android:layout_width="fill_parent" | |
| 161 | android:layout_height="0dp" | |
| 162 | android:layout_weight="1" | |
| 163 | android:paddingLeft="5dp" | |
| 164 | android:paddingRight="5dp" | |
| 165 | android:background="@color/grey" | |
| 166 | android:orientation="horizontal"> | |
| 93 | android:text="@string/buy_all"/> | |
| 167 | 94 |  | 
| 168 |             <TextView
 | |
| 169 |                 android:id="@+id/purchaseMeshTitle"
 | |
| 95 |             <Button
 | |
| 96 |                 android:id="@+id/purchaseButtonAll"
 | |
| 170 | 97 | android:layout_width="0dp" | 
| 171 | 98 | android:layout_height="match_parent" | 
| 172 | 99 | android:layout_weight="1.0" | 
| 173 |                 android:gravity="center_vertical|start"
 | |
| 100 |                 android:gravity="center_vertical|end"
 | |
| 174 | 101 | android:paddingStart="5dp" | 
| 175 | 102 | android:textSize="26sp" | 
| 176 | 103 | android:singleLine="true" | 
| 177 | android:maxLines="1" | |
| 178 | android:text="@string/config_mesh"/> | |
| 179 |  | |
| 180 | <RadioGroup | |
| 181 | android:id="@+id/meshRadioGroup" | |
| 182 | android:layout_width="0dp" | |
| 183 | android:layout_height="match_parent" | |
| 184 | android:layout_weight="2.1" | |
| 185 | android:orientation="horizontal" | |
| 186 | android:checkedButton="@+id/meshNice" | |
| 187 | android:background="@color/grey"> | |
| 188 |  | |
| 189 | <RadioButton | |
| 190 | android:id="@+id/meshSimple" | |
| 191 | android:layout_width="0dp" | |
| 192 | android:layout_height="match_parent" | |
| 193 | android:layout_weight="1" | |
| 194 | android:buttonTint="@color/white" | |
| 195 | android:text="@string/config_mesh_fast"/> | |
| 196 |  | |
| 197 | <RadioButton | |
| 198 | android:id="@+id/meshNice" | |
| 199 | android:layout_width="0dp" | |
| 200 | android:layout_height="match_parent" | |
| 201 | android:layout_weight="1" | |
| 202 | android:buttonTint="@color/white" | |
| 203 | android:text="@string/config_mesh_nice"/> | |
| 204 |  | |
| 205 | </RadioGroup> | |
| 206 |  | |
| 104 | android:maxLines="1"/> | |
| 207 | 105 | </LinearLayout> | 
| 208 | 106 |  | 
| 209 | </LinearLayout> | |
| 210 |  | |
| 211 | 107 | <LinearLayout | 
| 212 | 108 | android:id="@+id/lowerBar" | 
| 213 | 109 | android:layout_width="match_parent" | 
| src/main/res/values-de/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">Installieren</string> | 
| 57 | 57 | <string name="abandon_solve">Gib auf</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">Kaufen Sie dieses Cube</string> | |
| 60 | <string name="buy_all">Kaufen Sie alle Cubes</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">Einzelheiten</string> | 
| 60 | 63 | <string name="config_name">Name</string> | 
| 61 | 64 | <string name="config_author">Autor</string> | 
| src/main/res/values-es/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">Instalar</string> | 
| 57 | 57 | <string name="abandon_solve">Abandonar</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">Compra este cubo</string> | |
| 60 | <string name="buy_all">Compra todos cubos</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">Detalles</string> | 
| 60 | 63 | <string name="config_name">Nombre</string> | 
| 61 | 64 | <string name="config_author">Autor</string> | 
| src/main/res/values-fr/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">Installer</string> | 
| 57 | 57 | <string name="abandon_solve">Abandonner</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">Acheter ce cube</string> | |
| 60 | <string name="buy_all">Acheter tous cubes</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">Détails</string> | 
| 60 | 63 | <string name="config_name">Nom</string> | 
| 61 | 64 | <string name="config_author">Auteur</string> | 
| src/main/res/values-ja/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">インストール</string> | 
| 57 | 57 | <string name="abandon_solve">あきらめる</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">このパズル</string> | |
| 60 | <string name="buy_all">すべてのパズル</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">詳細</string> | 
| 60 | 63 | <string name="config_name">名前</string> | 
| 61 | 64 | <string name="config_author">著者</string> | 
| src/main/res/values-ko/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">설치</string> | 
| 57 | 57 | <string name="abandon_solve">포기</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">이 퍼즐을 구입</string> | |
| 60 | <string name="buy_all">모든 퍼즐 구매</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">세부</string> | 
| 60 | 63 | <string name="config_name">이름</string> | 
| 61 | 64 | <string name="config_author">작가</string> | 
| src/main/res/values-pl/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">Zainstaluj</string> | 
| 57 | 57 | <string name="abandon_solve">Zrezygnuj</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">Kup tą kostkę</string> | |
| 60 | <string name="buy_all">Kup wszystkie kostki</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">O kostce</string> | 
| 60 | 63 | <string name="config_name">Nazwa</string> | 
| 61 | 64 | <string name="config_author">Autor</string> | 
| src/main/res/values-ru/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">Установите</string> | 
| 57 | 57 | <string name="abandon_solve">Сдаться</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">Куп эту головоломку</string> | |
| 60 | <string name="buy_all">Куп все головоломки</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">Детали</string> | 
| 60 | 63 | <string name="config_name">Имя</string> | 
| 61 | 64 | <string name="config_author">Автор</string> | 
| src/main/res/values-zh-rCN/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">安装</string> | 
| 57 | 57 | <string name="abandon_solve">放弃</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">买这个拼图</string> | |
| 60 | <string name="buy_all">购买所有拼图</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">细节</string> | 
| 60 | 63 | <string name="config_name">姓名</string> | 
| 61 | 64 | <string name="config_author">作者</string> | 
| src/main/res/values-zh-rTW/strings.xml | ||
|---|---|---|
| 56 | 56 | <string name="install">安裝</string> | 
| 57 | 57 | <string name="abandon_solve">放棄</string> | 
| 58 | 58 |  | 
| 59 | <string name="buy_one">買這個拼圖</string> | |
| 60 | <string name="buy_all">購買所有拼圖</string> | |
| 61 |  | |
| 59 | 62 | <string name="config_details">細節</string> | 
| 60 | 63 | <string name="config_name">姓名</string> | 
| 61 | 64 | <string name="config_author">作者</string> | 
| src/main/res/values/strings.xml | ||
|---|---|---|
| 57 | 57 | <string name="no_updates">No update found</string> | 
| 58 | 58 | <string name="install">Install</string> | 
| 59 | 59 |  | 
| 60 | <string name="buy_one">Unlock this cube</string> | |
| 61 | <string name="buy_all">Unlock all cubes</string> | |
| 62 |  | |
| 60 | 63 | <string name="level1" translatable="false">1</string> | 
| 61 | 64 | <string name="level2" translatable="false">2</string> | 
| 62 | 65 | <string name="level3" translatable="false">3</string> | 
Also available in: Unified diff
IAP part 5: new 'Purchase' activity (cont'd)