Commit 4faa559f authored by wangfugui's avatar wangfugui

初步实现功能(界面未优化)

parent 673071f4
......@@ -23,6 +23,10 @@
android:theme="@style/TranslucentTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" /-->
......@@ -161,10 +165,10 @@
android:name="cn.garymb.ygomobile.deck_square.DeckSquareActivity"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Mycard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
</activity>
<service
......
package cn.garymb.ygomobile.deck_square;
import android.widget.Toast;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import cn.garymb.ygomobile.deck_square.api_response.MyDeckResponse;
import cn.garymb.ygomobile.utils.OkhttpUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import okhttp3.Response;
public class DeckSquareApiUtil {
public static MyDeckResponse getUserDecks(Integer serverUserId, String serverToken) {
if (serverToken == null) {
YGOUtil.showTextToast("Login first", Toast.LENGTH_LONG);
return null;
}
MyDeckResponse result = null;
try {
String url = "http://rarnu.xyz:38383/api/mdpro3/sync/" + serverUserId + "/nodel";
Map<String, String> headers = new HashMap<>();
headers.put("ReqSource", "MDPro3");
headers.put("token", serverToken);
Response response = OkhttpUtil.synchronousGet(url, null, headers);
String responseBodyString = response.body().string();
// Type listType = new TypeToken<List<DeckInfo>>() {
// }.getType();
Gson gson = new Gson();
// Convert JSON to Java object using Gson
result = gson.fromJson(responseBodyString, MyDeckResponse.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
if(result.code == 20){//用户身份验证失败
YGOUtil.showTextToast("Login first", Toast.LENGTH_LONG);
}
return result;
}
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import cn.garymb.ygomobile.deck_square.api_response.ApiDeckRecord;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.lite.databinding.FragmentUserOnlineDeckBinding;
......@@ -37,6 +38,28 @@ public class DeckSquareMyDeckFragment extends Fragment {
}
});
binding.uploadDeck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//todo 打开一个dialog
}
});
deckListAdapter.setOnItemClickListener(
(adapter, view, position) -> {
// Handle item click
ApiDeckRecord item = (ApiDeckRecord) adapter.getItem(position);
// Show the dialog
//todo 询问是否删除?
// SquareDeckDetailDialog dialog = new SquareDeckDetailDialog(getContext(), item);
// dialog.show();
}
);
return binding.getRoot();
}
......
......@@ -38,6 +38,7 @@ public class MCOnlineManageFragment extends Fragment {
if (success) {
LogUtil.i(TAG, "login success" + SharedPreferenceUtil.getServerToken());
refreshBtn();
//response.token;
}
......@@ -52,10 +53,13 @@ public class MCOnlineManageFragment extends Fragment {
@Override
public void onClick(View v) {
SharedPreferenceUtil.deleteServerToken();
refreshBtn();
}
});
refreshBtn();
return binding.getRoot();
}
......@@ -71,4 +75,12 @@ public class MCOnlineManageFragment extends Fragment {
binding = null;
}
public void refreshBtn() {
if (SharedPreferenceUtil.getServerToken() != null) {
binding.mcLoginBtn.setText("已登录");
} else {
binding.mcLoginBtn.setText("登录");
}
}
}
\ No newline at end of file
......@@ -7,25 +7,20 @@ import android.widget.Toast;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.garymb.ygomobile.deck_square.api_response.DeckDetail;
import cn.garymb.ygomobile.deck_square.api_response.MyDeckResponse;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.OkhttpUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import okhttp3.Response;
//提供“我的”卡组数据,打开后先从sharePreference查询,没有则从服务器查询,然后缓存到sharePreference
public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckResponse.MyDeckData, BaseViewHolder> {
public class MyDeckListAdapter extends BaseQuickAdapter<DeckDetail, BaseViewHolder> {
private static final String TAG = DeckSquareListAdapter.class.getSimpleName();
private ImageLoader imageLoader;
......@@ -39,37 +34,12 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckResponse.MyDeckDat
// final DialogPlus dialog_read_ex = DialogPlus.show(getContext(), null, getContext().getString(R.string.fetch_ex_card));
String serverToken = SharedPreferenceUtil.getServerToken();
Integer serverUserId = SharedPreferenceUtil.getServerUserId();
if (serverToken == null) {
YGOUtil.showTextToast("Login first", Toast.LENGTH_LONG);
return;
}
VUiKit.defer().when(() -> {
LogUtil.d(TAG, "start fetch" + serverToken + " " + serverUserId);
MyDeckResponse result = null;
try {
String url = "http://rarnu.xyz:38383/api/mdpro3/sync/" + serverUserId + "/nodel";
Map<String, String> headers = new HashMap<>();
headers.put("ReqSource", "MDPro3");
headers.put("token", serverToken);
Response response = OkhttpUtil.synchronousGet(url, null, headers);
String responseBodyString = response.body().string();
// Type listType = new TypeToken<List<DeckInfo>>() {
// }.getType();
Gson gson = new Gson();
// Convert JSON to Java object using Gson
result = gson.fromJson(responseBodyString, MyDeckResponse.class);
LogUtil.i(TAG, responseBodyString);
int a = 0;
} catch (IOException e) {
Log.e(TAG, "Error occured when fetching data from pre-card server");
return null;
}
MyDeckResponse result = DeckSquareApiUtil.getUserDecks(serverUserId, serverToken);
if (result == null) {
return null;
......@@ -86,11 +56,11 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckResponse.MyDeckDat
//
// }
// }
LogUtil.i(TAG, "webCrawler fail");
LogUtil.i(TAG, "load mycard from server fail");
}).done((exCardDataList) -> {
if (exCardDataList != null) {
LogUtil.i(TAG, "webCrawler done");
LogUtil.i(TAG, "load mycard from server done");
getData().clear();
addData(exCardDataList);
notifyDataSetChanged();
......@@ -115,7 +85,7 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckResponse.MyDeckDat
}
@Override
protected void convert(BaseViewHolder helper, MyDeckResponse.MyDeckData item) {
protected void convert(BaseViewHolder helper, DeckDetail item) {
helper.setText(R.id.deck_info_name, item.getDeckName());
helper.setText(R.id.deck_contributor, item.getDeckContributor());
ImageView cardImage = helper.getView(R.id.deck_info_image);
......@@ -124,6 +94,8 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyDeckResponse.MyDeckDat
if (code != 0) {
imageLoader.bindImage(cardImage, code, null, ImageLoader.Type.small);
}
// ImageView imageview = helper.getView(R.id.ex_card_image);
//the function cn.garymb.ygomobile.loader.ImageLoader.bindT(...)
//cn.garymb.ygomobile.loader.ImageLoader.setDefaults(...)
......
......@@ -3,18 +3,40 @@ package cn.garymb.ygomobile.deck_square;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
import com.google.gson.Gson;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.deck_square.api_response.ApiDeckRecord;
import cn.garymb.ygomobile.deck_square.api_response.DownloadDeckResponse;
import cn.garymb.ygomobile.deck_square.api_response.MyDeckResponse;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.OkhttpUtil;
import cn.garymb.ygomobile.utils.SharedPreferenceUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import okhttp3.Response;
public class SquareDeckDetailDialog extends Dialog {
private static final String TAG = DeckSquareListAdapter.class.getSimpleName();
private String deckId;
private String deckName;
private Integer userId;
public interface ActionListener {
void onDownloadClicked();
void onLikeClicked();
}
......@@ -22,6 +44,9 @@ public class SquareDeckDetailDialog extends Dialog {
public SquareDeckDetailDialog(Context context, ApiDeckRecord item) {
super(context);
deckId = item.getDeckId();
deckName = item.getDeckName();
userId = item.getUserId();
}
@Override
......@@ -34,7 +59,60 @@ public class SquareDeckDetailDialog extends Dialog {
Button btnLike = findViewById(R.id.btnLike);
btnDownload.setOnClickListener(v -> {
VUiKit.defer().when(() -> {
DownloadDeckResponse result = null;
String url = "http://rarnu.xyz:38383/api/mdpro3/deck/" + deckId;
Map<String, String> headers = new HashMap<>();
headers.put("ReqSource", "MDPro3");
Response response = null;
try {
response = OkhttpUtil.synchronousGet(url, null, headers);
String responseBodyString = response.body().string();
Gson gson = new Gson();
// Convert JSON to Java object using Gson
result = gson.fromJson(responseBodyString, DownloadDeckResponse.class);
LogUtil.i(TAG, responseBodyString);
} catch (IOException e) {
throw new RuntimeException(e);
}
if (result == null) {
return null;
} else {
return result.getData();
}
}).fail((e) -> {
Log.e(TAG, e + "");
// if (dialog_read_ex.isShowing()) {//关闭异常
// try {
// dialog_read_ex.dismiss();
// } catch (Exception ex) {
//
// }
// }
LogUtil.i(TAG, "square deck detail fail");
}).done((deckData) -> {
if (deckData != null) {
String path = AppsSettings.get().getDeckDir();
saveFileToPath(path, deckName + ".ydk", deckData.deckYdk);
LogUtil.i(TAG, "square deck detail done");
YGOUtil.showTextToast(R.string.down_complete);
}
// if (dialog_read_ex.isShowing()) {
// try {
// dialog_read_ex.dismiss();
// } catch (Exception ex) {
// }
// }
});
dismiss();
});
......@@ -42,5 +120,23 @@ public class SquareDeckDetailDialog extends Dialog {
dismiss();
});
}
public void saveFileToPath(String path, String fileName, String content) {
try {
// Create file object
File file = new File(path, fileName);
// Create file output stream
FileOutputStream fos = new FileOutputStream(file);
// Write content
fos.write(content.getBytes());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
......@@ -145,8 +145,8 @@ public class ApiDeckRecord implements Parcelable {
this.lastDate = lastDate;
}
public String getUserId() {
return Integer.toString(userId);
public Integer getUserId() {
return userId;
}
public void setUserId(int userId) {
......
......@@ -3,11 +3,11 @@ package cn.garymb.ygomobile.deck_square.api_response;
import java.util.List;
public class ApiResponse {
private int code;
private Integer code;
private String message;
private ApiData data;
public static class ApiData{
public static class ApiData {
private int current;
private int size;
private int total;
......
package cn.garymb.ygomobile.deck_square.api_response;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
public class DeckDetail implements Parcelable {
public String deckId;
public String deckContributor;
public String deckName;
public String deckRank;
public String deckLike;
public String deckUploadDate;
public String deckUpdateDate;
public int deckCoverCard1;
public int deckCoverCard2;
public int deckCoverCard3;
public String deckCase;
public String deckProtector;
public String deckMainSerial;
public String deckYdk;
public String userId;
public String isPublic;
public String isDelete;
protected DeckDetail(Parcel in) {
deckId = in.readString();
deckContributor = in.readString();
deckName = in.readString();
deckRank = in.readString();
deckLike = in.readString();
deckUploadDate = in.readString();
deckUpdateDate = in.readString();
deckCoverCard1 = in.readInt();
deckCoverCard2 = in.readInt();
deckCoverCard3 = in.readInt();
deckCase = in.readString();
deckProtector = in.readString();
deckMainSerial = in.readString();
deckYdk = in.readString();
userId = in.readString();
isPublic = in.readString();
isDelete = in.readString();
}
public static final Creator<DeckDetail> CREATOR = new Creator<DeckDetail>() {
@Override
public DeckDetail createFromParcel(Parcel in) {
return new DeckDetail(in);
}
@Override
public DeckDetail[] newArray(int size) {
return new DeckDetail[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(deckId);
dest.writeString(deckContributor);
dest.writeString(deckName);
dest.writeString(deckRank);
dest.writeString(deckLike);
dest.writeString(deckUploadDate);
dest.writeString(deckUpdateDate);
dest.writeInt(deckCoverCard1);
dest.writeInt(deckCoverCard2);
dest.writeInt(deckCoverCard3);
dest.writeString(deckCase);
dest.writeString(deckProtector);
dest.writeString(deckMainSerial);
dest.writeString(deckYdk);
dest.writeString(userId);
dest.writeString(isPublic);
dest.writeString(isDelete);
}
public String getDeckId() {
return deckId;
}
public void setDeckId(String deckId) {
this.deckId = deckId;
}
public String getDeckContributor() {
return deckContributor;
}
public void setDeckContributor(String deckContributor) {
this.deckContributor = deckContributor;
}
public String getDeckName() {
return deckName;
}
public void setDeckName(String deckName) {
this.deckName = deckName;
}
public String getDeckRank() {
return deckRank;
}
public void setDeckRank(String deckRank) {
this.deckRank = deckRank;
}
public String getDeckLike() {
return deckLike;
}
public void setDeckLike(String deckLike) {
this.deckLike = deckLike;
}
public String getDeckUploadDate() {
return deckUploadDate;
}
public void setDeckUploadDate(String deckUploadDate) {
this.deckUploadDate = deckUploadDate;
}
public String getDeckUpdateDate() {
return deckUpdateDate;
}
public void setDeckUpdateDate(String deckUpdateDate) {
this.deckUpdateDate = deckUpdateDate;
}
public int getDeckCoverCard1() {
return deckCoverCard1;
}
public void setDeckCoverCard1(int deckCoverCard1) {
this.deckCoverCard1 = deckCoverCard1;
}
public int getDeckCoverCard2() {
return deckCoverCard2;
}
public void setDeckCoverCard2(int deckCoverCard2) {
this.deckCoverCard2 = deckCoverCard2;
}
public int getDeckCoverCard3() {
return deckCoverCard3;
}
public void setDeckCoverCard3(int deckCoverCard3) {
this.deckCoverCard3 = deckCoverCard3;
}
public String getDeckCase() {
return deckCase;
}
public void setDeckCase(String deckCase) {
this.deckCase = deckCase;
}
public String getDeckProtector() {
return deckProtector;
}
public void setDeckProtector(String deckProtector) {
this.deckProtector = deckProtector;
}
public String getDeckMainSerial() {
return deckMainSerial;
}
public void setDeckMainSerial(String deckMainSerial) {
this.deckMainSerial = deckMainSerial;
}
public String getDeckYdk() {
return deckYdk;
}
public void setDeckYdk(String deckYdk) {
this.deckYdk = deckYdk;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getIsPublic() {
return isPublic;
}
public void setIsPublic(String isPublic) {
this.isPublic = isPublic;
}
public String getIsDelete() {
return isDelete;
}
public void setIsDelete(String isDelete) {
this.isDelete = isDelete;
}
}
\ No newline at end of file
package cn.garymb.ygomobile.deck_square.api_response;
public class DownloadDeckResponse {
public Integer code;
public String message;
public DeckDetail data;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public DeckDetail getData() {
return data;
}
public void setData(DeckDetail data) {
this.data = data;
}
}
package cn.garymb.ygomobile.deck_square.api_response;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import java.util.List;
public class MyDeckResponse {
public String code;
public Integer code;
public String message;
public List<MyDeckData> data;
public List<DeckDetail> data;
public String getCode() {
public Integer getCode() {
return code;
}
public void setCode(String code) {
public void setCode(Integer code) {
this.code = code;
}
......@@ -28,227 +23,13 @@ public class MyDeckResponse {
this.message = message;
}
public List<MyDeckData> getData() {
public List<DeckDetail> getData() {
return data;
}
public void setData(List<MyDeckData> data) {
public void setData(List<DeckDetail> data) {
this.data = data;
}
public static class MyDeckData implements Parcelable {
public String deckId;
public String deckContributor;
public String deckName;
public String deckRank;
public String deckLike;
public String deckUploadDate;
public String deckUpdateDate;
public int deckCoverCard1;
public int deckCoverCard2;
public int deckCoverCard3;
public String deckCase;
public String deckProtector;
public String deckMainSerial;
public String deckYdk;
public String userId;
public String isPublic;
public String isDelete;
protected MyDeckData(Parcel in) {
deckId = in.readString();
deckContributor = in.readString();
deckName = in.readString();
deckRank = in.readString();
deckLike = in.readString();
deckUploadDate = in.readString();
deckUpdateDate = in.readString();
deckCoverCard1 = in.readInt();
deckCoverCard2 = in.readInt();
deckCoverCard3 = in.readInt();
deckCase = in.readString();
deckProtector = in.readString();
deckMainSerial = in.readString();
deckYdk = in.readString();
userId = in.readString();
isPublic = in.readString();
isDelete = in.readString();
}
public static final Creator<MyDeckData> CREATOR = new Creator<MyDeckData>() {
@Override
public MyDeckData createFromParcel(Parcel in) {
return new MyDeckData(in);
}
@Override
public MyDeckData[] newArray(int size) {
return new MyDeckData[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(deckId);
dest.writeString(deckContributor);
dest.writeString(deckName);
dest.writeString(deckRank);
dest.writeString(deckLike);
dest.writeString(deckUploadDate);
dest.writeString(deckUpdateDate);
dest.writeInt(deckCoverCard1);
dest.writeInt(deckCoverCard2);
dest.writeInt(deckCoverCard3);
dest.writeString(deckCase);
dest.writeString(deckProtector);
dest.writeString(deckMainSerial);
dest.writeString(deckYdk);
dest.writeString(userId);
dest.writeString(isPublic);
dest.writeString(isDelete);
}
public String getDeckId() {
return deckId;
}
public void setDeckId(String deckId) {
this.deckId = deckId;
}
public String getDeckContributor() {
return deckContributor;
}
public void setDeckContributor(String deckContributor) {
this.deckContributor = deckContributor;
}
public String getDeckName() {
return deckName;
}
public void setDeckName(String deckName) {
this.deckName = deckName;
}
public String getDeckRank() {
return deckRank;
}
public void setDeckRank(String deckRank) {
this.deckRank = deckRank;
}
public String getDeckLike() {
return deckLike;
}
public void setDeckLike(String deckLike) {
this.deckLike = deckLike;
}
public String getDeckUploadDate() {
return deckUploadDate;
}
public void setDeckUploadDate(String deckUploadDate) {
this.deckUploadDate = deckUploadDate;
}
public String getDeckUpdateDate() {
return deckUpdateDate;
}
public void setDeckUpdateDate(String deckUpdateDate) {
this.deckUpdateDate = deckUpdateDate;
}
public int getDeckCoverCard1() {
return deckCoverCard1;
}
public void setDeckCoverCard1(int deckCoverCard1) {
this.deckCoverCard1 = deckCoverCard1;
}
public int getDeckCoverCard2() {
return deckCoverCard2;
}
public void setDeckCoverCard2(int deckCoverCard2) {
this.deckCoverCard2 = deckCoverCard2;
}
public int getDeckCoverCard3() {
return deckCoverCard3;
}
public void setDeckCoverCard3(int deckCoverCard3) {
this.deckCoverCard3 = deckCoverCard3;
}
public String getDeckCase() {
return deckCase;
}
public void setDeckCase(String deckCase) {
this.deckCase = deckCase;
}
public String getDeckProtector() {
return deckProtector;
}
public void setDeckProtector(String deckProtector) {
this.deckProtector = deckProtector;
}
public String getDeckMainSerial() {
return deckMainSerial;
}
public void setDeckMainSerial(String deckMainSerial) {
this.deckMainSerial = deckMainSerial;
}
public String getDeckYdk() {
return deckYdk;
}
public void setDeckYdk(String deckYdk) {
this.deckYdk = deckYdk;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getIsPublic() {
return isPublic;
}
public void setIsPublic(String isPublic) {
this.isPublic = isPublic;
}
public String getIsDelete() {
return isDelete;
}
public void setIsDelete(String isDelete) {
this.isDelete = isDelete;
}
}
}
......@@ -185,7 +185,9 @@ public class ExCardListFragment extends Fragment {
enum DownloadState {
DOWNLOAD_ING,
NO_DOWNLOAD
} @SuppressLint("HandlerLeak")
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
@Override
......@@ -209,7 +211,8 @@ public class ExCardListFragment extends Fragment {
// break;
case DownloadUtil.TYPE_DOWNLOAD_OK:
downloadState = DownloadState.NO_DOWNLOAD;
AddServer(getActivity(), context.getString(R.string.Pre_Server_Name), context.getString(R.string.tip_superpre_desc), Constants.URL_Mycard_Super_Pre_Server, Constants.PORT_Mycard_Super_Pre_Server, "Knight of Hanoi");
AddServer(getActivity(), context.getString(R.string.Pre_Server_Name), context.getString(R.string.tip_superpre_desc),
Constants.URL_Mycard_Super_Pre_Server, Constants.PORT_Mycard_Super_Pre_Server, "Knight of Hanoi");
//changeDownloadButton();在下载完成后,通过EventBus通知下载完成(加入用户点击下载后临时切出本fragment,又在下载完成后切回,通过eventbus能保证按钮样式正确更新
/* 注意,要先更新版本号 */
SharedPreferenceUtil.setExpansionDataVer(ServerUtil.serverExCardVersion);
......@@ -237,6 +240,4 @@ public class ExCardListFragment extends Fragment {
};
}
\ No newline at end of file
......@@ -34,4 +34,5 @@
android:drawablePadding="8dp"
android:text="Like" />
</LinearLayout>
\ No newline at end of file
......@@ -21,13 +21,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/open_deck_square"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="bottom|right"
android:layout_marginBottom="100dp"
android:text="deck store" />
android:background="@drawable/ic_deck_square"
android:text="卡组广场"
android:textAlignment="center" />
<LinearLayout
android:layout_width="match_parent"
......@@ -181,6 +184,8 @@
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
<LinearLayout
......
......@@ -365,4 +365,7 @@
<string name="about_user_privacy_policy">关于本应用使用的权限进行说明</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
<string name="down_complete">下载完成</string>
</resources>
......@@ -425,4 +425,6 @@
libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus
vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
</string>
<string name="down_complete">download complete</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment